Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
et:arduino:motors:project2 [2017/03/16 13:10] kaupo.raidet:arduino:motors:project2 [2020/07/20 09:00] (current) – external edit 127.0.0.1
Line 1: Line 1:
-~~PB~~ +<pagebreak> 
-====== Projekt 6 Servo mootor UH anduriga  ======+====== Projekt 6 Servomootor UH anduriga  ======
  
-Ühendada arduinoga vajalikud andurid: +Selles projektis tuleb ühendada Arduino plaadiga potentsiomeeter ja servomootor ning teises näites lisaks ultraheli kaugusandur. Kõigi seadmete ühendamiseks Arduino Uno plaadiga läheb vaja, kas makettplaati või sobivaid kaableid, mis jagavad toitepinget. Kui kasutada näiteks Iteaduino Uno plaati, siis eraldi kaableid pole vaja, kuna selle plaadi kõik viigud on dubleeritud ja omavad eraldi toitepistikuid. Ultrahelianduri paigutamisel servo hoovale võib kasutada spetsiaalset ultrahelianduri hoidikut või ajutise lahendusena ka kahepoolset teipi. 
-  * Servo mootor - D3+ 
 +  * Servomootor - D3
   * Potentsiomeeter - A1   * Potentsiomeeter - A1
-  * Ultraheli andur - trigger A3, echo A4+  * Ultraheli kaugusandur - trigger A3, echo A4 
 + 
 +{{:et:arduino:motors:projekt6.jpg?600|}} 
 + 
 + 
 +===== Näide #6.1 Servomootor ja PWM signaal ===== 
 +Antud näiteprogrammis kasutame mikro servomootorit, mille liikumisvabadus on 180 kraadi.\\ 
 +Programmi töö kujutab endast servomootori juhtimiseks vajalike seadistuste tegemist ja seejärel potentsiomeetri asendi järgi selle hoova liigutamist. Arduino analoogsisendi väärtused on vahemikus 0-1023 aga servo juhtimise funktsioon nõuab väärtusi vahemikus 0-180. Üks võimalus on analoogsisendi tulemus jagada läbi sobiva arvuga, et saada maksimaalne tulemus 180. Praktilisem lahendus on kasutada Arduino //map// funktsiooni:
  
-{{:et:arduino:motors:servouh_v2.jpg?600|}}+//map(muutuja, muutuja miinimum, muutuja maksimum, uus miinimum, uus maksimum).//
  
-===== Näide #6.1 Servo mootor ja PWM signaal ===== +Antud funktsioon võtab sisendiks esialgsed miinimum ja maksimum väärtused ning konverteerib selle muutumispiirkonna kasutaja poolt määratud muutumispiirkonnaks. Antud juhul 0-1023 teisendame vahemikuks 0-180. Arduino //map// funktsiooni kohta saab lisaks lugeda siit: [[https://www.arduino.cc/en/Reference/Map|]]
-Servo mootori juhtimine toimib ainult PWM signaaliga. Üldjuhul on servo mootori liikumisvabadus piiratud 180 kraadi peale, kuid esineb ka püsivalt pöörlevaid (360 kraadi) servosid. Tavapärase servo puhul juhtimisel PWM töötsükliga servo hoova positsiooni (nt. 0-180 kraadi). Püsivalt pöörleva servo puhul juhitakse pöörlemise kiirust. Antud näiteprogrammis kasutame mikro servo mootorit, mille liikumisvabadus on 180 kraad.\\ +
-Programmi töö kujutab endast servo mootori juhtimiseks vajalike seadistuste tegemist ja seejärel potentsiomeetri asendi järgi selle hoova liigutamist. Arduino analoog sisendi väärtused on vahemikus 0-1023 aga servo juhtimise funktsioon nõuab väärtusi vahemikus 0-180. Üks võimalus on analoog sisendi tulemus jagada läbi sobiva arvuga, et saada maksimaalne tulemus 180. Praktilisem lahendus on kasutada Arduino funktsiooni "map(muutuja, muutuja miinimum, muutuja maksimum, uus miinimum, uus maksimum)"Antud funktsioon võtab sisendiks esialgsed miinimum ja maksimum väärtused ning konverteerib selle muutumispiirkonna kasutaja poolt määratud muutumispiirkonnaks. Antud juhul 0-1023 teisendame vahemikuks 0-180.\\ +
-Arduino "mapfunktsiooni kohta saab lisaks lugeda siit: [[https://www.arduino.cc/en/Reference/Map|]]+
  
 <code c> <code c>
Line 21: Line 26:
 */ */
  
-// Kaasame vajalikud teegid+// Vajalike teekide kaasamine
 #include <Servo.h>  #include <Servo.h> 
    
-// tekitame servo objekti nimega mootor+// Servo objekti tekitamine nimega mootor
 Servo mootor;  Servo mootor; 
    
-// määrame seadmete ühendusviigu+// Seadmete ühendusviikude määramine
 const int pote = A1;  const int pote = A1; 
 const int servo = 3; const int servo = 3;
Line 33: Line 38:
 void setup() void setup()
 { {
-  //servo objekti sidumine kindla viiguga+  // Servo objekti sidumine kindla Arduino viiguga
   mootor.attach(servo);   mootor.attach(servo);
 } }
 +
 void loop() void loop()
 { {
- /tekitame muutuja ja kasutame map funktsiooni,+ /Muutuja tekitamine ja map funktsiooni kasutamine,
     et väärtused sobivasse vahemikku teisendada */     et väärtused sobivasse vahemikku teisendada */
   int servoAsend = map(analogRead(pote),0,1023,0,180);   int servoAsend = map(analogRead(pote),0,1023,0,180);
      
- /servo mootorile positsiooni andmine vahemikus 0-180+ /Servomootorile positsiooni andmine vahemikus 0-180
     (üldiselt vastab väärtus mootori pöördenurga kraadidele) */     (üldiselt vastab väärtus mootori pöördenurga kraadidele) */
   mootor.write(servoAsend);   mootor.write(servoAsend);
Line 48: Line 54:
 </code> </code>
  
 +<pagebreak>
 +===== Näide #6.2 Servomootor ja kaugusandur =====
 +Järgnevas näites on pandud kokku kaugusanduri mõõtmise ja servo liigutamise funktsionaalsus. Tulemuseks on algeline radar, mis tuvastab iga 10 kraadise liikumise järel ees oleva objekti kauguse. Mõõtetulemused edastatakse jadapordi monitorile.\\
  
-===== Näide #6.2 Servo mootor ja kaugusandur ===== +Mõõtmiste sooritamisel tuleb jälgida, et mõõtmise hetkel mootor ei liiguks. Servomootor on üsna aeglane ja pärast liigutamise käsu andmist tuleb kasutada viidet, et mootor jõuaks enne uue mõõtmise alustamist saavutada ette antud positsiooni.
-Järgnevas näites paneme kokku kaugusanduri mõõtmise ja servo liigutamise. Tulemuseks on algeline radar, mis tuvastab iga 10 kraadise liikumise järel ees oleva objekti kauguse. Mõõtetulemused kirjutame välja jadapordi monitori.\\ +
-Mõõtmiste sooritamisel tuleb jälgida, et mootor ei liiguks samal ajal, kuna siis ei saa õiget tulemustServo mootor on üsna aeglane ja pärast liigutamise käsu andmist tuleb kasutada viidet, et mootor jõuaks ette antud positsiooni saavutada enne uue mõõtmise alustamist.+
  
 <code c> <code c>
 /* /*
-Nimetus: Näide #6.2 Servomootor +Nimetus: Näide #6.2 Radar 
-Kirjeldus: Servo mootor ja kaugusandur+Kirjeldus: Servomootor ja kaugusandur
 */ */
  
-//Lisame kõik vajalikud teegid+// Kõikide vajalike teekide lisamine
 #include <Servo.h> #include <Servo.h>
 #include <NewPing.h> #include <NewPing.h>
  
-//Määrame ühendusviigud servole ja ultraheli andurile +// Servo ja ultrahelianduri ühendusviikude määramine 
-#define MOOTOR 3 +#define MOOTOR 3
 #define TRIG A3 #define TRIG A3
 #define ECHO A4 #define ECHO A4
  
-//tekitame servo objekti nimega sensM+// Servo objekti tekitamine nimega sensM
 Servo sensM; Servo sensM;
  
-//tekitame anduri objekti nimega sonar  +// Anduri objekti tekitamine nimega sonar 
-NewPing sonar(TRIG, ECHO, 200); +NewPing sonar(TRIG, ECHO, 200);
  
-void setup() +void setup()
 { {
-  //seome omavahel servo objekti ja ühendusviigu+  // Servo objekti ja ühendusviigu sidumine
   sensM.attach(MOOTOR);    sensM.attach(MOOTOR); 
      
-  //Käivitame jadaliidese tava kiirusel (baud 9600)+  // Jadaliidese tavakiirusel käivitamine (9600 baudi)
   Serial.begin(9600);    Serial.begin(9600); 
 } }
Line 86: Line 93:
 { {
  
 +  // Jadaliidesesse selgitava teksti saatmine
   Serial.print("Kaugus: ");   Serial.print("Kaugus: ");
-   //tsükkel, mis teeb iga 10 kraadise servo liikumise järel kaugusmõõtmise +   
 +  // Tsükkel, mis iga 10 kraadise servo liikumise järel teostab kauguse mõõtmise 
   for (int i = 0; i <= 180; i += 10)    for (int i = 0; i <= 180; i += 10) 
   {   {
-    //liigutame servo hoova positsiooni määratud muutujaga i+    // Servo hoova liigutamine positsiooni i
     sensM.write(i);      sensM.write(i); 
          
-   /* viide, et servo jõuaks saavutada ette antud +    // Viide, et servo jõuaks saavutada ette antud positsiooni enne uut mõõtmist
-      positsiooni enne uue mõõtmise võtmist */+
     delay(250);      delay(250); 
          
-    // võtame uue mõõtmise ja kirjutame selle jadaporti+    // Uus kaugus mõõtmine ja  tulemuse jadapordi kirjutamine
     Serial.print(sonar.ping_cm());      Serial.print(sonar.ping_cm()); 
     Serial.print(", ");     Serial.print(", ");
   }   }
-  //liiguta servo tagasi algpositsiooni+ 
 +  // Servo algpositsiooni liigutamine
   sensM.write(0);    sensM.write(0); 
      
-  //viide, et servo jõuaks tagasi algpositsiooni+  // Viide, et servo jõuaks tagasi algpositsiooni
   delay(1000);    delay(1000); 
      
-  //tekitame reavahetuse jadapordis+  // Reavahetuse tekitamine jadapordis
   Serial.println("");    Serial.println(""); 
 } }
 </code> </code>
  
-===== Harjutus 6.1 =====+===== Harjutused ===== 
 +==== Harjutus 6.1 ====
 Modifitseerida näiteprogrammi nii, et servo külge ühendatud lähedusandur üritab olla alati objekti poole suunatud. Modifitseerida näiteprogrammi nii, et servo külge ühendatud lähedusandur üritab olla alati objekti poole suunatud.
  
-===== Harjutus 6.2 ===== +==== Harjutus 6.2 ==== 
-Modifitseerida näiteprogrammi nii, et pärast igat skanneerimistsüklit tagastab arduino lähima ja kaugeima objekti kauguse ning nurgad mille juures need saadi. Saadud tulemused kirjutada jadapordi monitori.+Modifitseerida näiteprogrammi nii, et pärast igat skaneerimistsüklit tagastab programm lähima ja kaugeima objekti kauguse ning nurgad mille juures need leiti. Saadud tulemused saata jadapordi monitorile.
    
et/arduino/motors/project2.1489669810.txt.gz · Last modified: 2020/07/20 09:00 (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0