Operácie

Arduino autíčko: Rozdiel medzi revíziami

Zo stránky SensorWiki

StudentDTV (diskusia | príspevky)
Bez shrnutí editace
StudentDTV (diskusia | príspevky)
 
(17 medziľahlých úprav od rovnakého používateľa nie je zobrazených.)
Riadok 21: Riadok 21:
# 4x Jednosmerný motor
# 4x Jednosmerný motor
# 3x Ultrazvukový snímač (Sonar)
# 3x Ultrazvukový snímač (Sonar)
# L298n motor driver
# Napájanie motorov
# Napájanie motorov
# Napájanie mikrokontroléra
# Napájanie mikrokontroléra


Pre vytvorenie kostry autíčka sme pomocou digitálnych technológií výroby vytvorili nasledovné časti :
Pre vytvorenie kostry autíčka sme pomocou digitálnych technológií výroby vytvorili nasledovné časti :
Riadok 31: Riadok 33:
== Analýza ==
== Analýza ==


Najprv bolo potrebné vykonať analýzu dostupných možností, dostupných digitálnych  výrobných technológií, na základe ktorej sme vytvorili návrh podvozku autíčka a taktiež 3D model puzdra na mikrokontrolér arduino.
Najprv bolo potrebné vykonať analýzu dostupných možností, dostupných digitálnych  výrobných technológií, na základe ktorej sme vytvorili návrh podvozku autíčka v programe InkscapePortable a taktiež 3D model puzdra na mikrokontrolér arduino.


'''Model podvozku autíčka, následne vytvorený technológiou rezania laserom'''<br />
'''Model podvozku autíčka, následne vytvorený technológiou rezania laserom'''<br />
Riadok 41: Riadok 43:
== Popis riešenia ==
== Popis riešenia ==


Sem opíšete ako konkrétne ste problém vyriešili. Začnite popisom pripojenia k procesoru
Začali sme zapojením motorov do drivera L298n. Motory na ľavej strane sú zapojené spoločne do výstupu drivera "MOTORB". Podobne sú zapojené aj motory na pravej strane do výstupu drivera "MOTORA". Driver je napájaný 9V batériou a má spoločnú zem s arduinom aj so snímačmi. Vstupy drivera IN1 až IN4 a ENABLE A a B sú zapojené na digitálne piny mikrokontroléra. ECHO a TRIGGER snímačov sme zapojili na analógové piny mikrokontroléra a sú napájané napätím 5V. Samotný kontrolér je napájaný 9V batériou.
(nezabudnite na schému zapojenia!) a zdôraznite ktoré jeho periférie ste pritom využili.  
Motory aj ich driver sa nachádzajú medzi dvoma podvozkami a sú pripevnené skrutkami k dolnému podvozku. Mikrokontrolér a breadboard sa nachádzajú na hornom podvozku a sú pripevnené lepidlom.
 
'''Schéma zapojenia snímača'''
[[Súbor:schemaauticko.png]]


[[Súbor:Example.jpg]]
'''Schéma zapojenia snímača'''<br>
[[Súbor:schemaauticko.jpg|500px]]


Pozn.: Názov obrázku musí byť jedinečný, uvedomte si, že Obr1.jpg už pred vami skúsilo
nahrať už aspoň 10 študentov.


[[Súbor:MojObrazok.jpg|center|250px]]
[[Súbor:arduinoauticko1.jpg|400px]]
[[Súbor:arduinoauticko2.jpg|400px]]


=== Algoritmus a program ===
=== Algoritmus a program ===


Uveďte stručný popis algoritmu, v akom jazyku a verzii vývojového prostredia ste ho vytvorili.  
Program riadiaci autíčko bol naprogramovaný v jazyku C++ v prostredí Arduino IDE 1.8.9. Autíčko je naprogramované ako stavový automat, ktorý po detekovaní prekážky podľa vstupov z bočných snímačov prejde určitým počtom stavov potrebným k vyhnutiu sa prekážke. Medzi najdôležitejšie stavy patria otočenie doprava/doľava a sleduj stenu na pravej/ľavej strane. V stavoch sleduj stenu autíčko ide rovno a bočné senzory merajú dve vzorky vzdialeností s delayom 100 ms. Porovnaním týchto vzoriek sa zistí kedy sa má autíčko zastaviť a prejsť do ďalšieho stavu. V stave otočiť doprava/doľava sa motory začnú točiť do opačných smerov, čím docielime otáčanie okolo vlastnej osi. Výhodou programovania ako stavový automat bolo ľahké debugovanie pri pokusoch, nakoľko sme vždy presne vedeli určiť v ktorom stave nastala chyba. Nevýhodou algoritmu je nedostatok adaptibility v jednotlivých stavoch, čo sa nedalo riešiť kvôli hardvérovým obmedzeniam.
Je vhodné nakresliť aspoň hrubú štruktúru programu napríklad vo forme vývojového diagramu.  
Rozsiahly program pre lepšiu prehľadnosť rozdeľte do viacerých súborov.


Vyberte podstatné časti zdrojového kódu, použite na to prostredie ''source'':
[[Súbor:diagramauticko.png]]


<source lang="c">
<source lang="c">
Riadok 110: Riadok 107:
=== Výsledok ===
=== Výsledok ===


Výsledkom bolo autíčko, ktoré bolo schopné vyhýbať sa prekážkam v priestore. To vykonávalo väčšinou spoľahlivo, ale naskytli sa aj chyby, ktoré boli zapríčinené nepresnými senzormi a hlavne tým, že motory nemali spätnú väzbu a teda pri otáčaní závisel uhol otáčania od šmykľavosti podlahy, a nabitosti batérií.
Výsledkom bolo autíčko, ktoré bolo schopné vyhýbať sa prekážkam v priestore. To vykonávalo väčšinou spoľahlivo, ale naskytli sa aj chyby, ktoré boli zapríčinené nepresnými senzormi a hlavne tým, že motory nemali spätnú väzbu a teda pri otáčaní závisel uhol otáčania od šmykľavosti podlahy, a nabitosti batérií. Pre vylepšenie autíčka doporučujeme použitie motorov so spätnou väzbou, ktoré by zaistili presné otáčanie do strán a batériu s väčšou kapacitou.




[[Category:DTV2019]]
[[Category:DTV2019]]

Aktuálna revízia z 18:16, 9. jún 2019

Autori: Peter Štefaňák, Bálint Sallay a Matúš Klement
Študijný odbor: Aplikovaná informatika, Robotika a kybernetika 3. Bc. (2019)

Opis projektu

Cieľom projektu je vytvoriť arduino autíčko, ktoré bude schopné samostatne jazdiť a obchádzať prekážky.

Prečo?

  1. Model slúži ako pohybový koncept pre automatické robotické vysávače, schopné samostatne sa pohybovať v priestore.


Ako ?

Autíčko sa skladá z týchto častí:

  1. Mikrokontrolér Arduino UNO
  2. 4x Jednosmerný motor
  3. 3x Ultrazvukový snímač (Sonar)
  4. L298n motor driver
  5. Napájanie motorov
  6. Napájanie mikrokontroléra


Pre vytvorenie kostry autíčka sme pomocou digitálnych technológií výroby vytvorili nasledovné časti :

  1. 2x plastový podvozok vytvorený laserovým rezaním
  2. Kryt pre Mikrokontrolér vytvorený 3D tlačou

Analýza

Najprv bolo potrebné vykonať analýzu dostupných možností, dostupných digitálnych výrobných technológií, na základe ktorej sme vytvorili návrh podvozku autíčka v programe InkscapePortable a taktiež 3D model puzdra na mikrokontrolér arduino.

Model podvozku autíčka, následne vytvorený technológiou rezania laserom


3D modely pre puzdro na mikrokontrolér, následne vytvorené technológiou 3D tlače

Popis riešenia

Začali sme zapojením motorov do drivera L298n. Motory na ľavej strane sú zapojené spoločne do výstupu drivera "MOTORB". Podobne sú zapojené aj motory na pravej strane do výstupu drivera "MOTORA". Driver je napájaný 9V batériou a má spoločnú zem s arduinom aj so snímačmi. Vstupy drivera IN1 až IN4 a ENABLE A a B sú zapojené na digitálne piny mikrokontroléra. ECHO a TRIGGER snímačov sme zapojili na analógové piny mikrokontroléra a sú napájané napätím 5V. Samotný kontrolér je napájaný 9V batériou. Motory aj ich driver sa nachádzajú medzi dvoma podvozkami a sú pripevnené skrutkami k dolnému podvozku. Mikrokontrolér a breadboard sa nachádzajú na hornom podvozku a sú pripevnené lepidlom.

Schéma zapojenia snímača


Algoritmus a program

Program riadiaci autíčko bol naprogramovaný v jazyku C++ v prostredí Arduino IDE 1.8.9. Autíčko je naprogramované ako stavový automat, ktorý po detekovaní prekážky podľa vstupov z bočných snímačov prejde určitým počtom stavov potrebným k vyhnutiu sa prekážke. Medzi najdôležitejšie stavy patria otočenie doprava/doľava a sleduj stenu na pravej/ľavej strane. V stavoch sleduj stenu autíčko ide rovno a bočné senzory merajú dve vzorky vzdialeností s delayom 100 ms. Porovnaním týchto vzoriek sa zistí kedy sa má autíčko zastaviť a prejsť do ďalšieho stavu. V stave otočiť doprava/doľava sa motory začnú točiť do opačných smerov, čím docielime otáčanie okolo vlastnej osi. Výhodou programovania ako stavový automat bolo ľahké debugovanie pri pokusoch, nakoľko sme vždy presne vedeli určiť v ktorom stave nastala chyba. Nevýhodou algoritmu je nedostatok adaptibility v jednotlivých stavoch, čo sa nedalo riešiť kvôli hardvérovým obmedzeniam.

        dist=sonar.ping_cm();
	distleft=sonarleft.ping_cm();
	distright=sonarright.ping_cm();

	if(dist>10 && !sleduj_prava && !sleduj_lava && !zastav)
	{
		digitalWrite(in1, LOW);
		digitalWrite(in2, HIGH);
		digitalWrite(in3, LOW);
		digitalWrite(in4, HIGH);
		
		analogWrite(enA, 100);
		analogWrite(enB, 100);
	}
 
	if(dist<10 && !zastav)
	{
		digitalWrite(in1, LOW);
		digitalWrite(in2, LOW);
		digitalWrite(in3, LOW);
		digitalWrite(in4, LOW);
		
		delay(500);
		
		if(distleft>25 && distright<25)
		{
			otoc_dolava=true;
		}
		if(distright>25 && distleft<25)
		{
			otoc_doprava1=true;
		}
		if(distright>25 && distleft>25)
		{
			otoc_dolava=true;
		}
	}


Zdrojový kód : program.ino

Výsledok

Výsledkom bolo autíčko, ktoré bolo schopné vyhýbať sa prekážkam v priestore. To vykonávalo väčšinou spoľahlivo, ale naskytli sa aj chyby, ktoré boli zapríčinené nepresnými senzormi a hlavne tým, že motory nemali spätnú väzbu a teda pri otáčaní závisel uhol otáčania od šmykľavosti podlahy, a nabitosti batérií. Pre vylepšenie autíčka doporučujeme použitie motorov so spätnou väzbou, ktoré by zaistili presné otáčanie do strán a batériu s väčšou kapacitou.