This is an old revision of the document!


 

Projekt 6 Servo mootor UH anduriga

Ühendada arduinoga vajalikud andurid:

  • Servo mootor - D3
  • Potentsiomeeter - A1
  • Ultraheli andur - trigger A3, echo A4

Näide #6.1 Servo mootor ja PWM signaal

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 “map” funktsiooni kohta saab lisaks lugeda siit: https://www.arduino.cc/en/Reference/Map

/*
Nimetus: Näide #6.1 Servomootor
Kirjeldus: Servomootori juhtimine PWM signaaliga 
*/
 
// Kaasame vajalikud teegid
#include <Servo.h> 
 
// tekitame servo objekti nimega mootor
Servo mootor; 
 
// määrame seadmete ühendusviigu
const int pote = A1; 
const int servo = 3;
 
void setup()
{
  //servo objekti sidumine kindla viiguga
  mootor.attach(servo);
}
void loop()
{
 /* tekitame muutuja ja kasutame map funktsiooni,
    et väärtused sobivasse vahemikku teisendada */
  int servoAsend = map(analogRead(pote),0,1023,0,180);
 
 /* servo mootorile positsiooni andmine vahemikus 0-180
    (üldiselt vastab väärtus mootori pöördenurga kraadidele) */
  mootor.write(servoAsend);
}

Näide #6.2 Servo mootor ja kaugusandur

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 tulemust. Servo 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.

/*
Nimetus: Näide #6.2 Servomootor
Kirjeldus: Servo mootor ja kaugusandur
*/
 
//Lisame kõik vajalikud teegid
#include <Servo.h>
#include <NewPing.h>
 
//Määrame ühendusviigud servole ja ultraheli andurile
#define MOOTOR 3 
#define TRIG A3
#define ECHO A4
 
//tekitame servo objekti nimega sensM
Servo sensM;
 
//tekitame anduri objekti nimega sonar 
NewPing sonar(TRIG, ECHO, 200); 
 
void setup() 
{
  //seome omavahel servo objekti ja ühendusviigu
  sensM.attach(MOOTOR); 
 
  //Käivitame jadaliidese tava kiirusel (baud 9600)
  Serial.begin(9600); 
}
 
void loop() 
{
 
  Serial.print("Kaugus: ");
   //tsükkel, mis teeb iga 10 kraadise servo liikumise järel kaugusmõõtmise 
  for (int i = 0; i <= 180; i += 10) 
  {
    //liigutame servo hoova positsiooni määratud muutujaga i
    sensM.write(i); 
 
   /* viide, et servo jõuaks saavutada ette antud
      positsiooni enne uue mõõtmise võtmist */
    delay(250); 
 
    // võtame uue mõõtmise ja kirjutame selle jadaporti
    Serial.print(sonar.ping_cm()); 
    Serial.print(", ");
  }
  //liiguta servo tagasi algpositsiooni
  sensM.write(0); 
 
  //viide, et servo jõuaks tagasi algpositsiooni
  delay(1000); 
 
  //tekitame reavahetuse jadapordis
  Serial.println(""); 
}

Harjutus 6.1

Modifitseerida näiteprogrammi nii, et servo külge ühendatud lähedusandur üritab olla alati objekti poole suunatud.

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.

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