====== Projekt 6 Servomootor UH anduriga ======
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.
* Servomootor - D3
* Potentsiomeeter - A1
* 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:
//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
*/
// Vajalike teekide kaasamine
#include
// Servo objekti tekitamine nimega mootor
Servo mootor;
// Seadmete ühendusviikude määramine
const int pote = A1;
const int servo = 3;
void setup()
{
// Servo objekti sidumine kindla Arduino viiguga
mootor.attach(servo);
}
void loop()
{
/* Muutuja tekitamine ja map funktsiooni kasutamine,
et väärtused sobivasse vahemikku teisendada */
int servoAsend = map(analogRead(pote),0,1023,0,180);
/* Servomootorile positsiooni andmine vahemikus 0-180
(üldiselt vastab väärtus mootori pöördenurga kraadidele) */
mootor.write(servoAsend);
}
===== 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.\\
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.
/*
Nimetus: Näide #6.2 Radar
Kirjeldus: Servomootor ja kaugusandur
*/
// Kõikide vajalike teekide lisamine
#include
#include
// Servo ja ultrahelianduri ühendusviikude määramine
#define MOOTOR 3
#define TRIG A3
#define ECHO A4
// Servo objekti tekitamine nimega sensM
Servo sensM;
// Anduri objekti tekitamine nimega sonar
NewPing sonar(TRIG, ECHO, 200);
void setup()
{
// Servo objekti ja ühendusviigu sidumine
sensM.attach(MOOTOR);
// Jadaliidese tavakiirusel käivitamine (9600 baudi)
Serial.begin(9600);
}
void loop()
{
// Jadaliidesesse selgitava teksti saatmine
Serial.print("Kaugus: ");
// Tsükkel, mis iga 10 kraadise servo liikumise järel teostab kauguse mõõtmise
for (int i = 0; i <= 180; i += 10)
{
// Servo hoova liigutamine positsiooni i
sensM.write(i);
// Viide, et servo jõuaks saavutada ette antud positsiooni enne uut mõõtmist
delay(250);
// Uus kaugus mõõtmine ja tulemuse jadapordi kirjutamine
Serial.print(sonar.ping_cm());
Serial.print(", ");
}
// Servo algpositsiooni liigutamine
sensM.write(0);
// Viide, et servo jõuaks tagasi algpositsiooni
delay(1000);
// Reavahetuse tekitamine jadapordis
Serial.println("");
}
===== Harjutused =====
==== 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 skaneerimistsüklit tagastab programm lähima ja kaugeima objekti kauguse ning nurgad mille juures need leiti. Saadud tulemused saata jadapordi monitorile.