Ebben az oktatóanyagban egy áramkört fogunk kifejleszteni FLEX érzékelő, Arduino Uno és egy szervomotor segítségével. Ez a projekt egy szervo vezérlőrendszer, ahol a szervo tengely helyzetét a FLEX érzékelő hajlása vagy hajlítása vagy eltérése határozza meg.
Először beszéljünk egy kicsit a szervomotorokról. A szervomotorokat ott alkalmazzák, ahol pontos tengelymozgásra vagy helyzetre van szükség. Ezeket nem javasoljuk nagy sebességű alkalmazásokhoz. Ezeket alacsony fordulatszámra, közepes nyomatékra és pontos helyzetmeghatározásra javasoljuk. Ezeket a motorokat robotkaros gépekben, repülésvezérlőkben és vezérlőrendszerekben használják. A szervomotorokat beágyazott rendszerekben használják, például automatákban stb.
A szervomotorok különböző formában és méretben kaphatók. A szervomotor főként vezetékekkel rendelkezik, az egyik a pozitív feszültségre vonatkozik, a másik a földre, az utolsó pedig a helyzet beállítására. A RED vezeték csatlakozik az áramhoz, a fekete vezeték a földhöz és a SÁRGA vezeték csatlakozik a jelhez.
A szervomotor az egyenáramú motor, a helyzetszabályozó rendszer és a fogaskerekek kombinációja. Az egyenáramú motor tengelyének helyzetét a szervóban lévő vezérlő elektronika állítja be, a SIGNAL tű PWM jelének teljesítményaránya alapján.
Egyszerűen szólva a vezérlő elektronika állítsa be a tengely helyzetét a DC motor vezérlésével. Ezeket az adatokat a tengely helyzetéről a SIGNAL csapon keresztül küldjük. A helyzetadatokat a vezérlőnek PWM jel formájában kell elküldeni a szervomotor Signal csapján keresztül.
A PWM (impulzusszélesség modulált) jel frekvenciája a szervomotor típusától függően változhat. A fontos itt a PWM jel DUTY RATIO. Ezen DUTY RATION alapján a vezérlő elektronika állítja be a tengelyt. Ahhoz, hogy a tengely 9o-ra álljon, a BEKAPCSOLÁSI ARÁNYNAK 1 / 18.ie-nek kell lennie. 1 millimásodperc 'bekapcsolási idő' és 17 millimásodperc 'kikapcsolási idő' 18 ms-os jelben.
Ahhoz, hogy a tengely 12o órára mozdulhasson, a jel bekapcsolási idejének 1,5 ms-nak, a kikapcsolási idejének 16,5 ms-nak kell lennie. Ezt az arányt a szervo vezérlő rendszere dekódolja, és ez alapján állítja be a helyzetet.
Ez az itt található PWM az ARDUINO UNO használatával jön létre. Tehát egyelőre tudjuk, hogy az Arduino Uno által generált PWM jel teljesítményarányának változtatásával vezérelhetjük a szervomotor tengelyét. Az UNO-nak van egy speciális funkciója, amely lehetővé teszi számunkra a SERVO helyzetének megadását a PWM jel zavarása nélkül. Fontos azonban ismerni a PWM terhelési arányát - a szervo helyzet viszonyát. A leírásban többet fogunk beszélni róla.
Most beszéljünk a FLEX SENSOR-ról. A FLEX érzékelő és az ARDUINO UNO összekapcsolásához a munka elvégzéséhez 8 bites ADC (analóg-digitális átalakítás) funkciót fogunk használni. A FLEX érzékelő egy átalakító, amely alakjának megváltoztatásakor megváltoztatja ellenállását. A FLEX érzékelő hosszúsága 2,2 hüvelyk vagy ujjhossza. Ábrán látható.
A Flex érzékelő egy olyan átalakító, amely megváltoztatja az ellenállását, amikor a lineáris felület hajlik. Innen a flex érzékelő elnevezés. Egyszerűen szólva az érzékelő kapcsa ellenállása megnő, ha meghajlik. Ezt az alábbi ábra mutatja.
Az ellenállásnak ez a változása csak akkor hozhat jót, ha ki tudjuk olvasni őket. A kézben lévő vezérlő csak a feszültség esélyeit tudja leolvasni, és nem kevesebbet, ehhez feszültségosztó áramkört fogunk használni, ezzel levezethetjük az ellenállás változását feszültségváltozásként.
A feszültségosztó egy rezisztív áramkör, és az ábrán látható. Ebben az rezisztív hálózatban van egy állandó ellenállásunk és egy másik változó ellenállásunk. Amint az ábrán látható, R1 itt állandó ellenállás, R2 pedig FLEX érzékelő, amely ellenállásként működik.
Az elágazás középpontját mérésre vesszük. Az R2 változással a Voutnál van változás. Tehát ezzel van egy feszültségünk, amely változik a súlytól.
Most fontos megjegyezni, hogy a vezérlő által az ADC átalakításhoz bevitt bemenet akár 50µAmp. Az ellenállás alapú feszültségosztónak ez a terhelő hatása fontos, mivel a feszültségosztó Vout-jából vett áram növeli a hiba százalékos arányát, egyelőre nem kell aggódnunk a terhelési hatás miatt.
A FLEX SENSOR hajlított ellenállása megváltozik. Ezzel az átalakítóval, amely egy feszültségosztó áramkörhöz van csatlakoztatva, változó feszültségünk lesz a FLEX-szel az átalakítón. Ez a változó feszültség az ADC csatornák egyikébe kerül, digitális értékünk lesz a FLEX vonatkozásában.
Ezt a digitális értéket a szervo pozícióhoz fogjuk igazítani, ezzel lesz a szervo vezérlés rugalmasan.
Alkatrészek
Hardver: Arduino Uno , tápegység (5v), 1000 uF kondenzátor, 100nF kondenzátor (3 db), 100KΩ ellenállás, SERVO MOTOR (SG 90), 220Ω ellenállás, FLEX érzékelő.
Szoftver: Atmel studio 6.2 vagy Aurdino nightly.
Áramkör diagram és magyarázat
A szervomotor FLEX érzékelővel történő vezérlésének kapcsolási rajza az alábbi ábrán látható.
Az érzékelőn átmenő feszültség nem teljesen lineáris; zajos lesz. A zaj kiszűrésére kondenzátorokat helyeznek el az elválasztó áramkör minden ellenállásán, az ábra szerint.
Itt fogjuk venni az osztó által biztosított feszültséget (a feszültséget, amely lineárisan képviseli a súlyt), és betápláljuk az Arduino UNO egyik ADC csatornájába. Ehhez az A0-at fogjuk használni. Az ADC inicializálása után digitális értékünk lesz, amely a hajlított érzékelőt képviseli. Ezt az értéket felvesszük és a szervo pozícióval egyeztetjük.
Ahhoz, hogy ez megtörténjen, néhány utasítást kell létrehoznunk a programban, és ezekről az alábbiakban részletesen beszélünk.
Az ARDUINO-nak hat ADC csatornája van, amint az az ábrán látható. Ezekben bármelyik vagy mindegyik használható analóg feszültség bemenetként. Az UNO ADC 10 bites felbontású (tehát a (0- (2 ^ 10) 1023 értékekből származó egész értékek). Ez azt jelenti, hogy a 0 és 5 volt közötti bemeneti feszültségeket 0 és 1023 közötti egész értékekre fogja feltérképezni. (5/1024 = 4,9 mV) egységenként.
Itt az UNO A0-ját fogjuk használni.
Tudnunk kell néhány dolgot.
|
Először is az UNO ADC csatornák alapértelmezett referenciaértéke 5 V. Ez azt jelenti, hogy bármilyen bemeneti csatornán maximális 5 V bemeneti feszültséget adhatunk az ADC konverzióhoz. Mivel egyes érzékelők 0-2,5 V feszültséget szolgáltatnak, 5 V referenciával kisebb pontosságot kapunk, ezért van egy utasításunk, amely lehetővé teszi számunkra a referenciaérték megváltoztatását. Tehát a referenciaérték megváltoztatásához („analogReference ();”) Mostantól így hagyjuk.
Alapértelmezés szerint a kártya maximális 10 bites felbontását kapjuk meg, ez a felbontás az utasítás használatával megváltoztatható („analogReadResolution (bit);”). Ez a felbontásváltozás bizonyos esetekben jól jöhet. Egyelőre így hagyjuk.
Ha a fenti feltételeket alapértelmezés szerint állítjuk be, akkor a „0” csatorna ADC-jéből leolvashatjuk az értéket az „analogRead (pin);” függvény közvetlen meghívásával, itt a „pin” azt a csapot jelenti, ahová analóg jelet csatlakoztattunk, ebben az esetben „A0” lenne.
Az ADC-ből származó érték egész számba vehető: „int SENSORVALUE = analogRead (A0); ”, Ezzel az utasítással az ADC utáni érték a„ SENSORVALUE ”egész számba kerül.
Most beszéljünk a SERVO-ról, az UNO-nak van egy olyan funkciója, amely lehetővé teszi számunkra, hogy a fok értékének megadásával ellenőrizzük a szervo helyzetét. Mondjuk, ha azt akarjuk, hogy a szervo 30 legyen, akkor közvetlenül képviselhetjük az értéket a programban. A SERVO fejlécfájl gondoskodik az összes vámarány-számításról belsőleg.
#include
Szervo szervo; szervo.attach (3); szervo.írás (fok); |
Az első utasítás a SERVO MOTOR vezérlésének fejlécfájlját jelenti.
A második állítás a szervo megnevezése; magát szervóként hagyjuk.
A harmadik utasítás megadja, hogy a szervo jel csapja hol van csatlakoztatva; ennek PWM tűnek kell lennie. Itt a PIN3-at használjuk.
A negyedik utasítás parancsokat ad a szervomotor pozícionálására, és fokokban van megadva. Ha 30-at kap, a szervomotor 30 fokkal forog.
Most az sg90 0-180 fokról mozoghat, ADC eredményünk 0-1024
Tehát az ADC körülbelül hatszorosa a SERVO POSITION-nak. Tehát elosztva az ADC eredményt 6-mal megkapjuk a hozzávetőleges SERVO kéz helyzetét.
Ezzel megkapjuk a szervo motor értékét a szervomotor számára, amely arányos a hajlítással vagy a hajlítással. Amikor ez a flex érzékelő kesztyűre van szerelve , kézmozgással vezérelhetjük a szervo helyzetét.