- Modul snímače rychlosti LM393 (H206)
- Uspořádání pro montáž senzoru H206
- DIY Arduino LM393 Obvodové schéma robota snímače rychlosti
- Logika měření rychlosti s modulem snímače rychlosti LM393
- Logika za měřením vzdálenosti ujeté kolem kola
- Logika za měřením úhlu robota
- Arduino Robot Code
- Testování robota Arduino na měření vzdálenosti, rychlosti a úhlu
Roboti se pomalu začali plazit do naší společnosti, aby nám zjednodušili život. Na silnicích ve Velké Británii již můžeme najít šest kolových robotů na rozvoz jídla od hvězdné lodi, kteří chytře navigují mezi civilisty, aby dosáhli svého cíle. Každý mobilní robot, který naviguje do prostředí, by si měl vždy být vědom své polohy a orientace s ohledem na skutečný svět. Existuje mnoho způsobů, jak toho dosáhnout pomocí různých technologií, jako je GPS, RF trojúhelník, akcelerometry, gyroskopy atd. Každá technika má svou vlastní výhodu a je sama o sobě jedinečná. V tomto výukovém programu snímače rychlosti Arduino LM393 použijeme jednoduchý a snadno dostupný modul snímače rychlosti LM393měřit některé důležité parametry, jako je rychlost, ujetá vzdálenost a úhel robota pomocí Arduina. Díky těmto parametrům bude robot schopen poznat svůj skutečný stav ve světě a může jej použít k bezpečné navigaci.
Arduino je nejoblíbenější volbou mezi fandy stavebních robotů, od jednoduchého sledovače linek po složitější samovyvažovací robot nebo robot na čištění podlah. Všechny druhy robotů můžete zkontrolovat v sekci Robotika.
Postavíme malého robota, který je napájen lithiovou baterií a budeme jej řídit pomocí joysticku. Během běhu můžeme měřit rychlost, vzdálenost a úhel robota a zobrazovat jej v reálném čase na LCD displeji připojeném k Arduinu. Tento projekt vám pomůže s měřením těchto parametrů, jakmile to uděláte, můžete pomocí těchto parametrů podle potřeby autonomně ovládat svého robota. Zní to zajímavě, že? Pojďme tedy začít.
Modul snímače rychlosti LM393 (H206)
Než se dostaneme do schématu zapojení a kódu projektu, pochopme modul snímače rychlosti LM393, který hraje v projektu zásadní roli. Modul snímače rychlosti H206 se skládá ze snímače infračerveného světla integrovaného s integrovaným obvodem komparátoru napětí LM393, odtud název snímače rychlosti LM393. Modul také sestává z mřížkové desky, která musí být namontována na rotující hřídeli motoru. Všechny komponenty jsou označeny na obrázku níže.
Snímač infračerveného světla se skládá z IR LED a fototranzistor oddělena malým výřečnosti. Celé uspořádání senzorů je umístěno v černém pouzdru, jak je znázorněno výše. Deska mřížky se skládá ze štěrbin, deska je uspořádána mezi mezerou senzoru infračerveného světla takovým způsobem, že senzor dokáže detekovat mezery v desce mřížky. Každá mezera v mřížkové desce spouští IR senzor při průchodu mezerou; tyto spouštěče jsou poté převedeny na napěťové signály pomocí komparátoru. Komparátor není nic jiného než IC LM393 od ON polovodičů. Modul má tři piny, z nichž dva slouží k napájení modulu a jeden výstupní pin slouží k počítání počtu spouštěčů.
Uspořádání pro montáž senzoru H206
Montáž těchto typů senzorů je trochu složitá. Lze jej namontovat pouze na motory, které mají na obou stranách vyčnívající hřídel. Jedna strana hřídele je spojena s kolem, zatímco druhá strana se používá k montáži mřížkové desky, jak je znázorněno výše.
Jelikož je kolo a deska připojena ke stejné hřídeli, obě se otáčejí stejnou rychlostí, a tedy měřením rychlosti desky můžeme měřit rychlost kola. Ujistěte se, že mezery v mřížkové desce procházejí infračerveným senzorem, až poté bude senzor schopen spočítat počet mezer, které prošly. Můžete také přijít s vlastním mechanickým uspořádáním pro montáž senzoru, pokud splňuje specifikované podmínky. IR senzor se obecně používá v mnoha projektech robotiky k vedení robota kolem překážek.
Mřížková deska zobrazená výše má 20 slotů (mřížky). To znamená, že senzor najde 20 mezer pro jedno úplné otočení kola. Počítáním počtu mezer, které senzor detekoval, můžeme vypočítat vzdálenost ujetou kolem, podobně měřením toho, jak rychle senzor najde mezery, můžeme detekovat rychlost kola. V našem robotu budeme mít tento senzor namontovaný na obou kolech, a proto můžeme také najít úhel robota. Úhel otáčení lze však rozumněji vypočítat pomocí akcelerometru nebo gyroskopu, zde se naučte propojovat akcelerometr a gyroskop s Arduinem a zkuste pomocí nich změřit úhel rotace.
DIY Arduino LM393 Obvodové schéma robota snímače rychlosti
Kompletní schéma zapojení tohoto robota se snímáním rychlosti a vzdálenosti je uvedeno níže. Bot se skládá z Arduino Nano jako jeho mozku, dva stejnosměrné motory kol jsou poháněny modulem L298N H-Bridge Motor Driver. Joystick se používá k ovládání rychlosti a směru robota a dva snímače rychlosti H206 se používají k měření rychlosti, vzdálenosti a anděla robota. Naměřené hodnoty se poté zobrazí v 16x2 LCD modulu. Potenciometr připojený k LCD lze použít k nastavení kontrastu LCD a odpor se používá k omezení proudu proudícího do podsvícení LCD.
Kompletní obvod je napájen 7,4 lithiového článku. Toto 7,4 V je dodáváno na 12V kolík modulu ovladače motoru. Regulátor napětí na modulu ovladače motoru poté převede 7,4 V na regulovaných + 5 V, které se používají k napájení Arduina, LCD, senzorů a joysticku.
Motor je řízen digitálními piny 8,9,10 a 11 Arduina. Vzhledem k tomu, že musí být také regulovány otáčky motoru, měli bychom dodávat signály PWM na kladnou svorku motoru. Proto máme kolíky 9 a 10, což jsou oba kolíky schopné PWM. Hodnoty X a Y z joysticku jsou čteny pomocí analogových pinů A2 a A3.
Jak víme, snímač H206 generuje spoušť, když je detekována mezera v mřížkové desce. Vzhledem k tomu, že tyto spouštěče by neměly být vždy čteny přesně, aby bylo možné vypočítat správnou rychlost a vzdálenost, jsou oba spouštěcí (výstupní) piny připojeny k pinům externího přerušení 2 a 3 desky Arduino. Sestavte celý obvod na šasi a namontujte snímač rychlosti, jak bylo vysvětleno, můj robot vypadal po dokončení připojení jako níže. Můžete také sledovat video na konci této stránky a zjistit, jak byl senzor namontován.
Nyní, když je hardwarová část dokončena, pojďme se dostat k logice toho, jak budeme měřit rychlost, vzdálenost a jednotlivého robota, a poté pokračovat do programovací sekce.
Logika měření rychlosti s modulem snímače rychlosti LM393
Z montážního nastavení snímače byste měli vědět, že modul snímače rychlosti LM393 (H206) měří pouze mezery v mřížkové desce. Při montáži je třeba zajistit, aby se kolo (jehož rychlost by měla být měřena) a mřížka otáčely stejnou rychlostí. Stejně jako tady, protože jsme namontovali kolo i desku na stejný hřídel, budou se oba evidentně otáčet stejnou rychlostí.
V našem nastavení jsme namontovali dva senzory pro každé kolo k měření úhlu robota. Pokud je však vaším cílem měřit pouze rychlost a vzdálenost, můžeme snímač namontovat na jedno kolo. Výstup snímače (spouštěcí signály) bude nejčastěji připojen k externímu kolíku přerušení mikrokontroléru. Pokaždé, když je detekována mezera v mřížkové desce, spustí se přerušení a provede se kód v ISR (rutina služby přerušení). Pokud dokážeme vypočítat časový interval mezi dvěma takovými spouštěči, můžeme vypočítat rychlost kola.
V Arduinu můžeme tento časový interval snadno vypočítat pomocí funkce millis () . Tato funkce v milisekundách se od okamžiku zapnutí zařízení bude zvyšovat o 1 každou milisekundu. Takže, když se objeví první přerušení můžeme uložit hodnotu v milisekundách () v dummy proměnnou (jako pevtime v tomto kódu), a pak, když se druhý přerušení dojde můžeme vypočítat čas potřebný odečtením pevtime hodnota tvoří Millis ().
Získaný čas = aktuální čas - předchozí čas timetaken = millis () - pevtime ; // měřeno v milisekundách
Jakmile vypočítáme potřebný čas, můžeme jednoduše vypočítat hodnotu otáček za minutu pomocí níže uvedených vzorců, kde (1000 / timetaken) dává RPS (otáčky za sekundu) a vynásobí se 60 pro převod RPS na RPM (otáčky za minutu).
ot./min = (1 000 / časový rozvrh) * 60;
Po výpočtu otáček za minutu můžeme vypočítat rychlost vozidla pomocí níže uvedených vzorců za předpokladu, že známe poloměr kola.
Rychlost = 2π × RPS × poloměr kola. v = radius_of_wheel * rpm * 0,104
Všimněte si, že výše uvedený vzorec slouží k výpočtu rychlosti vm / s, pokud chcete vypočítat v km / h, nahraďte 0,0104 číslem 0,376. Pokud vás zajímá, jak byla získána hodnota 0,104, zkuste zjednodušit vzorec V = 2π × RPS × poloměr kola.
Stejná technika se používá, i když se k měření rychlosti rotujícího objektu používá halový senzor. Ale u senzoru H206 je to západka, mřížková deska má 20 slotů, a proto pro měření času mezi dvěma štěrbinami dojde k přetížení mikrokontroléru. Proto měříme rychlost pouze při plné rotaci kola. Vzhledem k tomu, že pro každou mezeru budou vygenerována dvě přerušení (jedno na začátku a druhé na konci mezery) , získáme celkem 40 přerušení, aby kolo provedlo jednu úplnou rotaci. Počkáme tedy na 40 přerušení, než skutečně vypočítáme rychlost kola. Kód stejné je uveden níže
if (rotace> = 40) { timetaken = millis () - pevtime; // timetaken v milisekundách rpm = (1000 / timetaken) * 60; // vzorce pro výpočet rpm pevtime = millis (); rotace = 0; }
Další nevýhodou této metody je, že hodnota rychlosti neklesne na nulu, protože přerušení bude vždy čekat, až kolo dokončí jednu rotaci pro výpočet hodnoty otáček. Tuto nevýhodu lze snadno překonat přidáním jednoduchého kódu, který monitoruje časový interval mezi dvěma přerušeními a pokud překročí normální hodnotu, můžeme vynutit nulovou hodnotu otáček a rychlosti. Odkaz v níže uvedeném kódu jsme použili proměnnou dtime ke kontrole rozdílu v čase a pokud překročí 500 milisekund, hodnota rychlosti a otáček je nucena být nulová.
/ * K poklesu na nulu, pokud se vozidlo zastavilo * / if (millis () - dtime> 500) // po dobu 500ms nebyl nalezen žádný zásah { rpm = v = 0; // uděláme rpm a rychlost jako nulu dtime = millis (); }
Logika za měřením vzdálenosti ujeté kolem kola
Už víme, že Arduino vycítí 40 přerušení, když kolo provede jednu úplnou rotaci. Takže pro každou jednu rotaci provedenou kolem je zřejmé, že vzdálenost ujetá kolem se rovná obvodu kola. Protože již známe poloměr kola, můžeme snadno vypočítat ujetou vzdálenost pomocí níže uvedeného vzorce
Vzdálenost = 2πr * počet otáček vzdálenost = (2 * 3,141 * poloměr_kolí) * (left_intr / 40)
Kde se obvod kola vypočítá podle vzorce 2πr a poté se vynásobí počtem otáček kola.
Logika za měřením úhlu robota
Existuje mnoho způsobů, jak určit anděla robota. K určení těchto hodnot se obvykle používají akcelerometry a gyroskopy. Dalším levným přístupem je však použití senzoru H206 na obou kolech. Tímto způsobem bychom věděli, kolik otáček má každé kolo. Níže uvedený obrázek ilustruje způsob výpočtu úhlu.
Když je robot inicializován, úhel, kterému čelí, se považuje za 0 °. Odtud se otáčí doleva, úhel se zvýší záporně a pokud se otáčí doprava, anděl se zvýší kladně. Pro pochopení zvažte rozsah od -90 do +90, jak je znázorněno na obrázku. V takovém uspořádání, protože obě kola mají stejný průměr, pokud kterékoli z kol provede úplné otočení, otočíme botu o úhel 90 °.
Například pokud levé kolo provede jedno úplné otočení (80 přerušení), pak se bot otočí o 90 ° doleva a podobně, pokud pravé kolo provede jedno úplné otočení (80 přerušení), pak se bot otočí o -90 ° doprava. Nyní víme, že pokud Arduino detekuje 80 přerušení na jednom kole, pak se robot otočil o 90 ° a podle toho, na kterém kole, můžeme zjistit, zda se robot otočil kladně (vpravo) nebo záporně (vlevo). Levý a pravý úhel lze vypočítat pomocí níže uvedených vzorců
int angle_left = (left_intr% 360) * (90/80); int angle_right = (right_intr% 360) * (90/80);
Kde 90 je úhel zakrytý při přerušení 80. Výsledná hodnota je vynásobený počet přerušení. Použili jsme také modul 360, takže výsledná hodnota nikdy nepřesáhne 36. Jakmile jsme vypočítali levý i pravý úhel, lze efektivní úhel, pod kterým robot stojí, jednoduše získat odečtením levého úhlu od pravého úhlu.
úhel = úhel_vpravo - úhel_vlevo;
Arduino Robot Code
Kompletní Arduino kód pro tohoto robota pro měření rychlosti a úhlu najdete na konci této stránky. Cílem programu je vypočítat rychlost, vzdálenost a úhel robota pomocí výše uvedené logiky a zobrazit ji na LCD obrazovce. Kromě toho by měl poskytovat možnost ovládat robota pomocí joysticku.
Program spustíme definováním pinů digitálních I / O pro dva motory. Všimněte si, že musíme také ovládat rychlost motoru, a proto musíme k ovládání motorů používat piny PWM na Arduinu. Zde jsme použili kolík 8,9,10 a 11.
#define LM_pos 9 // levý motor #define LM_neg 8 // levý motor #define RM_pos 10 // pravý motor #define RM_neg 11 // pravý motor #define joyX A2 #define joyY A3
Pro měření rychlosti a ujeté vzdálenosti potřebujeme znát poloměr kola, změřit hodnotu a zadat ji v metrech, jak je znázorněno níže. U mého robota byl poloměr 0,033 metrů, ale mohl by se pro vás lišit na základě vašeho robota.
float radius_of_wheel = 0,033; // Změřte poloměr kola a zadejte jej zde v cm
Uvnitř nastavení funkce, jsme inicializovat všechny hodnoty za nulové a poté zobrazí textovou Intro na displeji. Také jsme inicializovali sériový monitor pro účely ladění. Poté jsme zmínili, že snímače rychlosti H206 jsou připojeny k pinům 2 a 3 jako externí přerušení. To je místo, kde je kdykoli detekováno přerušení, bude příslušně provedena funkce ISR Left_ISR a Right_ISR .
void setup () { rotation = rpm = pevtime = 0; // Inicializace všech proměnných na nulu Serial.begin (9600); lcd.begin (16, 2); // Inicializace 16 * 2 LCD lcd.print ("Bot Monitor"); // Úvod Řádek zprávy 1 lcd.setCursor (0, 1); lcd.print ("- CircuitDigest"); // Úvodní zpoždění řádku zprávy 2 (2000); lcd.clear (); lcd.print ("Lt: Rt:"); lcd.setCursor (0, 1); lcd.print ("S: D: A:"); pinMode (LM_pos, OUTPUT); pinMode (LM_neg, OUTPUT); pinMode (RM_pos, OUTPUT); pinMode (RM_neg, OUTPUT); digitalWrite (LM_neg, LOW); digitalWrite (RM_neg, LOW); attachInterrupt (digitalPinToInterrupt (2), Left_ISR, CHANGE); // Left_ISR je volán, když je spuštěn snímač levého kola attachInterrupt (digitalPinToInterrupt (3), Right_ISR, CHANGE); // Right_ISR je volán, když je spuštěn senzor pravého kola }
Uvnitř rutiny Left_ISR jednoduše zvýšíme proměnnou nazvanou left_intr, která bude později použita při měření úhlu robota. Uvnitř Right_ISR děláme totéž, ale pak zde navíc vypočítáme rychlost. Proměnná rotace se zvyšuje pro každé přerušení a poté se výše uvedená logika použije k výpočtu rychlosti.
void Left_ISR () { left_intr ++; delay (10); } void Right_ISR () { right_intr ++; zpoždění (10); rotace ++; dtime = millis (); if (rotace> = 40) { timetaken = millis () - pevtime; // timetaken v milisekundách rpm = (1000 / timetaken) * 60; // vzorce pro výpočet rpm pevtime = millis (); rotace = 0; } }
Uvnitř funkce hlavní nekonečné smyčky sledujeme hodnoty X a Y pomocí joysticku. Na základě hodnoty, pokud se joystick pohne, odpovídajícím způsobem ovládáme robota. Rychlost robota závisí na tom, jak daleko je joystick tlačen.
int xValue = analogRead (joyX); int yValue = analogRead (joyY); int zrychlení = mapa (xValue, 500, 0, 0, 200); if (xValue <500) { analogWrite (LM_pos, acceleration); analogWrite (RM_pos, zrychlení); } else { analogWrite (LM_pos, 0); analogWrite (RM_pos, 0); } if (yValue> 550) analogWrite (RM_pos, 80); if (yValue <500) analogWrite (LM_pos, 100);
To pomůže uživateli přesunout robota a zkontrolovat, zda jsou získané hodnoty podle očekávání. Nakonec můžeme pomocí výše uvedené logiky vypočítat rychlost, vzdálenost a úhel robota a pomocí níže uvedeného kódu jej zobrazit na LCD.
v = poloměr kola * rpm * 0,104; //0.033 je poloměr kola v metrové vzdálenosti = (2 * 3,141 * radius_of_wheel) * (left_intr / 40); int angle_left = (left_intr% 360) * (90/80); int angle_right = (right_intr% 360) * (90/80); úhel = úhel_vpravo - úhel_vlevo; lcd.setCursor (3, 0); lcd.print (""); lcd.setCursor (3, 0); lcd.print (left_intr); lcd.setCursor (11, 0); lcd.print (""); lcd.setCursor (11, 0); lcd.print (right_intr); lcd.setCursor (2, 1); lcd.print (""); lcd.setCursor (2, 1); lcd.print (v); lcd.setCursor (9, 1); lcd.print (""); lcd.setCursor (9, 1); lcd.print (vzdálenost); lcd.setCursor (13, 1); lcd.print (""); lcd.setCursor (13, 1); lcd.print (úhel);
Testování robota Arduino na měření vzdálenosti, rychlosti a úhlu
Jakmile je váš hardware připraven, nahrajte kód do svého Arduina a pomocí joysticku přesuňte robota. rychlost robota, vzdálenost, kterou urazí, a úhel se zobrazí na LCD, jak je uvedeno níže.
Na LCD představuje termín Lt a Rt počet levého přerušení a pravý počet přerušení. Zjistíte, že se tyto hodnoty zvyšují pro každou mezeru detekovanou senzorem. Tem S označuje rychlost robota vm / s a termín D označuje vzdálenost v metrech. Úhel robotu je zobrazen na konci, kde 0 ° je pro přímku a jde záporně pro otáčení proti směru hodinových ručiček a kladně pro otáčení ve směru hodinových ručiček.
Můžete také sledovat video na konci této stránky, abyste pochopili, jak robot funguje. Doufám, že jste pochopili projekt a užili jste si jeho stavbu. Pokud máte nějaké obavy, nechte je v sekci komentářů a já se pokusím nejlépe odpovědět zpět. Pro rychlou technickou pomoc můžete také použít fóra.