Tässä opetusohjelmassa aiomme kehittää piirin, jossa käytetään FLEX-anturia, Arduino Unoa ja servomoottoria. Tämä projekti on servo-ohjausjärjestelmä, jossa servoakselin sijainti määräytyy FLEX-anturin taipumisen tai taipumisen tai poikkeaman perusteella.
Aluksi puhutaan vähän servomoottoreista. Servomoottoreita käytetään siellä, missä tarvitaan tarkkaa akselin liikettä tai asentoa. Näitä ei ehdoteta suurten nopeuksien sovelluksiin. Näitä ehdotetaan matalalle nopeudelle, keskivääntömomentille ja tarkalleen asennolle. Näitä moottoreita käytetään robottivarren koneissa, lennonohjaimissa ja ohjausjärjestelmissä. Servomoottoreita käytetään sulautetuissa järjestelmissä, kuten myyntiautomaateissa jne.
Servomoottoreita on saatavana eri muotoisina ja kokoisina. Servomoottorissa on pääasiassa johdot, toinen on positiivista jännitettä varten, toinen maadoitusta ja viimeinen asennon asettamista varten. PUNAINEN johto on kytketty virtaan, musta johto on kytketty maahan ja KELTAINEN johto on kytketty signaaliin.
Servomoottori on DC-moottorin, asennonohjausjärjestelmän, vaihteiden yhdistelmä. Servomoottorin ohjauselektroniikka säätää tasavirtamoottorin akselin sijainnin SIGNAL-nastan PWM-signaalin käyttösuhteen perusteella.
Yksinkertaisesti sanottuna ohjauselektroniikka säätää akselin asentoa ohjaamalla DC-moottoria. Nämä tiedot akselin sijainnista lähetetään SIGNAL-tapin kautta. Sijaintitiedot ohjaukseen tulisi lähettää PWM-signaalina servomoottorin signaalitapin kautta.
PWM (Pulse Width Modulated) -signaalin taajuus voi vaihdella servomoottorin tyypin mukaan. Tärkeää tässä on PWM-signaalin TYÖSUHDE. Tämän TULOSUOSITUKSEN perusteella ohjauselektroniikka säätää akselia. Jotta akseli voidaan siirtää 9o-kelloon, PÄÄLLE-SUUNNIN on oltava 1/18 e. 1 millisekunti 'ON-aikaa' ja 17 millisekuntia 'OFF-aikaa' 18 ms: n signaalissa.
Akselin siirtämiseksi 12o-kelloon signaalin ON-ajan on oltava 1,5 ms ja OFF-ajan 16,5 ms. Servo-ohjausjärjestelmä dekoodaa tämän suhteen ja säätää sijaintia sen perusteella.
Tämä täällä oleva PWM luodaan käyttämällä ARDUINO UNO: ta. Joten nyt tiedämme, että voimme ohjata servomoottorin akselia vaihtelemalla Arduino Unon tuottaman PWM-signaalin käyttöastetta. UNO: lla on erityinen toiminto, jonka avulla voimme tarjota SERVOn sijainnin häiritsemättä PWM-signaalia. On kuitenkin tärkeää tietää PWM: n käyttöannos - servoasennon suhde. Puhumme siitä lisää kuvauksessa.
Puhutaan nyt FLEX SENSORista. FLEX-anturin liittämiseksi ARDUINO UNO: een aiomme käyttää työn suorittamiseen 8-bittistä ADC (analoginen digitaalimuunnos) -ominaisuutta. FLEX-anturi on anturi, joka muuttaa resistanssiaan, kun sen muotoa muutetaan. FLEX-anturin pituus on 2,2 tuumaa tai sormen pituus. Se on esitetty kuvassa.
Flex-anturi on anturi, joka muuttaa vastustaan, kun lineaarinen pinta taipuu. Tästä johtuen nimi flex sensor. Yksinkertaisesti sanottuna anturin liittimen vastus kasvaa, kun se on taipunut. Tämä on esitetty alla olevassa kuvassa.
Tämä muutos vastustuksessa ei voi tehdä mitään hyvää, ellemme osaa lukea niitä. Käsillä oleva ohjain pystyy lukemaan vain jännitteen mahdollisuudet eikä vähempää, tähän aiomme käyttää jännitteenjakajapiiriä, jolloin voimme johtaa vastuksen muutoksen jännitteen muutoksena.
Jännitteenjakaja on resistiivinen piiri ja se näkyy kuvassa. Tässä resistiivisessä verkossa meillä on yksi vakio vastus ja muu vastus muuttuva. Kuten kuvassa on esitetty, R1 on tässä vakiovastus ja R2 on FLEX-anturi, joka toimii vastuksena.
Haaran keskipiste mitataan. R2-muutoksen myötä meillä on muutosta Voutissa. Joten tällä on jännite, joka muuttuu painon mukaan.
Nyt on tärkeää huomata, että ohjaimen ottama ADC-muunnos on vain 50µAmp. Tämä vastusperusteisen jännitteenjakajan kuormitusvaikutus on tärkeä, koska jännitteenjakajan Voutista otettu virta lisää virheprosentin kasvua, toistaiseksi meidän ei tarvitse huolehtia kuormitusvaikutuksesta.
JOUSTAVA ANTURI taivutettuna sen vastus muuttuu. Kun tämä kaikuanturi on kytketty jännitteenjakajapiiriin, meillä on vaihteleva jännite anturin FLEX: n kanssa. Tämä vaihteleva jännite on FED yhteen ADC-kanavista, meillä on digitaalinen arvo, joka liittyy FLEX: ään.
Me sovitamme tämän digitaalisen arvon servoasentoon, jolloin meillä on servo-ohjaus joustavalla tavalla.
Komponentit
Laitteisto: Arduino Uno , virtalähde (5v), 1000 uF kondensaattori, 100nF kondensaattori (3 kpl), 100KΩ vastus, SERVO MOTOR (SG 90), 220Ω vastus, FLEX-anturi.
Ohjelmisto: Atmel studio 6.2 tai Aurdino iltaisin.
Piirikaavio ja selitys
Piirikaavio servomoottori ohjaus FLEX anturi on esitetty alla kuviossa.
Anturin jännite ei ole täysin lineaarinen; se on meluisa. Kohinan suodattamiseksi kondensaattorit sijoitetaan jakajapiirin kunkin vastuksen yli kuvan osoittamalla tavalla.
Tässä aiotaan ottaa jakajan antama jännite (jännite, joka edustaa painoa lineaarisesti) ja syöttää sen yhteen Arduino UNO: n ADC-kanavista. Aiomme käyttää A0: ta tähän. ADC-alustuksen jälkeen meillä on digitaalinen arvo, joka edustaa taipunutta anturia. Otamme tämän arvon ja sovitamme sen servoasentoon.
Tätä varten meidän on määritettävä muutama ohje ohjelmasta ja puhumme niistä yksityiskohtaisesti jäljempänä.
ARDUINOlla on kuusi ADC-kanavaa, kuten kuvassa näkyy. Niissä yhtä tai kaikkia niistä voidaan käyttää analogisen jännitteen tuloina. UNO ADC: n resoluutio on 10 bittiä (joten kokonaislukuarvot ((0- (2 ^ 10) 1023)). Tämä tarkoittaa, että se kartoittaa 0 - 5 voltin syöttöjännitteet kokonaislukuiksi välillä 0 - 1023. Joten jokaiselle (5/1024 = 4,9 mV) yksikköä kohti.
Täällä aiomme käyttää UNO: n A0: ta.
Meidän on tiedettävä muutama asia.
|
Ensinnäkin UNO ADC -kanavien oletusarvo on 5 V. Tämä tarkoittaa, että voimme antaa enimmäisjännitteen 5 V ADC-muunnokselle missä tahansa tulokanavassa. Koska jotkut anturit tarjoavat jännitteitä 0-2,5 V, 5 V: n referenssillä saamme vähemmän tarkkuutta, joten meillä on ohje, jonka avulla voimme muuttaa tätä vertailuarvoa. Joten referenssiarvon muuttamiseksi meillä on ("analogReference ();") Tällä hetkellä jätämme sen arvoksi.
Oletuksena saamme levyn ADC-enimmäistarkkuuden, joka on 10 bittiä, tätä resoluutiota voidaan muuttaa käskyllä ("analogReadResolution (bits);"). Tämä resoluution muutos voi olla hyödyllinen joissakin tapauksissa. Toistaiseksi jätämme sen.
Jos edellä mainitut ehdot on asetettu oletusarvoiksi, voimme lukea arvon kanavan '0' ADC: stä kutsumalla suoraan toimintoon "analogRead (pin);", tässä "pin" edustaa nastaa, johon liitimme analogisen signaalin, tässä tapauksessa se olisi "A0".
ADC: n arvo voidaan ottaa kokonaislukuksi muodossa "int SENSORVALUE = analogRead (A0); ”, Tällä ohjeella arvo ADC: n jälkeen tallennetaan kokonaislukuun“ SENSORVALUE ”.
Puhutaan nyt SERVO: sta, UNO: lla on ominaisuus, jonka avulla voimme hallita servoasentoa vain antamalla tutkinnon arvon. Sano jos haluamme servon olevan 30: ssä, voimme edustaa arvoa suoraan ohjelmassa. SERVO-otsikkotiedosto huolehtii kaikista käyttöasteiden laskelmista sisäisesti.
#sisältää
Servo-servo; servo.attach (3); servo.write (astetta); |
Ensimmäinen käsky edustaa otsikkotiedostoa SERVO MOTORin ohjaamiseksi.
Toinen lausunto on servon nimeäminen; jätämme sen itse servoksi.
Kolmas lause kertoo, mihin servosignaalin tappi on kytketty; tämän on oltava PWM-tappi. Tässä käytämme PIN3-koodia.
Neljäs lause antaa komennot servomoottorin sijoittamiseksi ja on asteina. Jos sille annetaan 30, servomoottori pyörii 30 astetta.
Nyt sg90 voi liikkua 0-180 astetta, ADC-tulos on 0-1024
Joten ADC on noin kuusi kertaa SERVO POSITION. Joten jakamalla ADC-tulos 6: lla saamme arvioidun SERVO-käden sijainnin.
Tämän ansiosta servomoottorille syötetään servoaseman arvo, joka on suhteessa taipumiseen tai taipumiseen. Kun tämä joustava anturi asennetaan käsineeseen, voimme hallita servoasentoa käden liikkeellä.