_
Komponenty:
a1 | Propojit podle schématu (kratší nožka LED se zapojuje na GND) - obr. |
a2 | Propojit Arduino s PC USB kabelem |
a3 | Pokračovat v Arduino IDE: nastavit typ Arduina (Nástroje - Vývojová deska), nastavit port (Nástroje - Port), otestovat dostupnost Arduina (Nástroje - Získat informace o desce) |
a4 | Základy syntaxe - komentáře, funkce, proměnné lokální/globální, typy dat |
a5 | Kostra programu pro Arduino: void setup() {//provede se jednou po zapnutí} void loop() {//provádí se opakovaně do vypnutí} |
a6 | Dále zapisovat program do nového programu: nastavení výstupního pinu před setup(): // čísla pinů pro digitální výstupy cconst int ledPin = 8; |
a7 | Do setup() vložit: // inicializace digitálních výstupů pinMode(ledPin, OUTPUT); |
a8 | Do loop() vložit blikání LED: // loop se opakuje pořád dokola digitalWrite(ledPin, HIGH); delay(1000); digitalWrite(ledPin, LOW); delay(1000); |
a9 | Uložte projekt do složky c:\Temp jako led_test.ino - vytvoří se i nová složka |
a10 | Zkontrolujte a zkompilujte program (první ikona nebo Ctrl+R) |
a11 | Přeneste program do Arduina (druhá ikona nebo Ctrl+U) a ověřte funkčnost |
_
a) Krokový motor - komponenty:
a1 | Propojit podle schématu - obr. |
a2 | Propojit Arduino s PC USB kabelem |
a3 | Arduino IDE - Nástroje - ověřit port |
a4 | Základy syntaxe - komentáře, funkce, proměnné lokální/globální, typy dat |
a5 | Kostra programu pro Arduino: void setup() {//provede se jednou po zapnutí} void loop() {//provádí se opakovaně do vypnutí} |
a6 | Nastavení výstupních pinů před setup(): // čísla pinů pro digitální výstupy const int in1a = 8; const int in2a = 9; const int in3a = 10; const int in4a = 11; |
a7 | Do setup() vložit: // inicializace digitálních výstupů pinMode(in1a, OUTPUT); pinMode(in2a, OUTPUT); pinMode(in3a, OUTPUT); pinMode(in4a, OUTPUT); |
a8 | Funkce pro kroky motoru: // každý krok obsahuje výrobcem dané pořadí // pro správné spínání motoru a následnou // pauzu, kterou určujeme rychlost otáčení void krok1(){ digitalWrite(in1, HIGH); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); delay(rychlost); } void krok2(){ digitalWrite(in1, HIGH); digitalWrite(in2, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, LOW); delay(rychlost); } void krok3(){ digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, LOW); delay(rychlost); } void krok4(){ digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); delay(rychlost); } void krok5(){ digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); delay(rychlost); } void krok6(){ digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, HIGH); digitalWrite(in4, HIGH); delay(rychlost); } void krok7(){ digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); delay(rychlost); } void krok8(){ digitalWrite(in1, HIGH); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); delay(rychlost); } |
a9 | Funkce otáčení motoru = posloupnost kroků: void rotacePoSmeru() { krok1(); krok2(); krok3(); krok4(); krok5(); krok6(); krok7(); krok8(); } |
a10 | Rotace o 360° = 512 kroků (dáno konstrukcí motoru) - vložit do loop(): for(int i=0;i<512;i++){ rotacePoSmeru(); } // pauza po dobu 1 vteřiny ddelay(1000); |
a11 | Uložte projekt do složky c:\Temp jako krokovy_motor_test.ino - vytvoří se i nová složka |
a12 | Zkontrolujte a zkompilujte program (první ikona nebo Ctrl+R) - objeví se chyba - proměnná rychlost |
a13 | Globální proměnná pro nastavení rychlosti: // proměnná pro nastavení rychlosti, se zvětšujícím se číslem se rychlost zmenšuje int rychlost = 1; |
a14 | Zkontrolujte a zkompilujte program, přeneste program do Arduina (druhá ikona nebo Ctrl+U) a ověřte funkčnost |
a15 | Vytvořte funkci rotaceProtiSmeru() s opačným pořadím kroků a volejte ji z loopu() po pauze (motor se bude točit tam a zpět) |
b) Membránová klávesnice 4x4 - komponenty kromě Arduina:
b1 | Propojit podle schématu - obr. |
b2 | Propojit Arduino s PC USB kabelem |
b3 | stáhnout klavesnice-test-naserver.ino a knihovnu
keypad.zip
z Výuka\Škrla\arduino Arduino IDE - Projekt - Přidat knihovnu - Přidat ZIP knihovnu Manažer knihoven - Projekt - Přidat knihovnu - Spravovat knihovny |
b4 | Otevřít projekt klavesnice-test.ino |
b5 | Analýza kódu - připojení knihovny pomocí #include <Keypad.h> |
b6 | Vytvoření proměnných klávesnice |
b7 | Setup() - přidání kounikace přes sériový monitor: // komunikace přes sériovou linku rychlostí 9600 baud Serial.begin(9600); Serial.println("Mackej klavesy"); |
b8 | Loop() - do if {} přidat: Serial.println(klavesa); |
b9 | Po kompilaci a nahrání do Arduina otestovat klávesnici v otevřeném okně sériového monitoru (ikona úplně vpravo) |
b10 | Příklad akce podle zmáčknuté klávesy - bude vloženo v if {}: switch (klavesa) { case '0': /*zmáčknuta 0*/ break; case '1': /*zmáčknuta 1*/ break; default: /*zmáčknuta jiná klávesa*/ break; } |
_
a) Měření vzdálenosti ultrazvukem
Teorie:
Komponenty:
c1 | Propojit podle schématu -
obr. Trig je vysílač zvuku = zapojený na výstup Arduina (output), Echo je přijímač = zapojujeme na vstup (input) - bude nadefinováno v setupu() |
c2 | Spustit Arduino IDE - nový projekt uložit jako ultrazvuk.ino Připojit Arduino k PC přes USB |
c3 | vložit před setup() - místo otazníků doplnit aktuální piny podle
zapojení // piny pro připojení Trig a Echo z modulu (celé číslo -32768 až 32767) int pTrig = ?; int pEcho = ?; // inicializace proměnných, do kterých se uloží data (celé číslo na 4 byty = rozsah -2 147 483 648 až 2 147 483 647) long odezva, vzdalenost; |
c4 | Vložit do setup(): // nastavení pinů modulu jako výstup a vstup pinMode(pTrig, OUTPUT); pinMode(pEcho, INPUT); // komunikace přes sériovou linku rychlostí 9600 baud Serial.begin(9600); |
c5 | Vložit do loop() - doplnit místo otazníku rychlost zvuku z přípravy
výše a tisk výsledku do sériového monitoru (před poslední delay): // nastavíme na 2 mikrosekundy výstup na GND (pro jistotu) // poté nastavíme na 5 mikrosekund výstup rovný napájení a poté opět na GND digitalWrite(pTrig, LOW); delayMicroseconds(2); digitalWrite(pTrig, HIGH); delayMicroseconds(5); digitalWrite(pTrig, LOW); // pomocí funkce pulseIn získáme následně délku pulzu v mikrosekundách (us) odezva = pulseIn(pEcho, HIGH); // přepočet získaného času na vzdálenost v cm vzdalenost = ? * odezva/2; // pauza 0.5 s pro přehledné čtení delay(500); |
c6 | Zkontrolujte a zkompilujte program, přeneste program do Arduina (druhá ikona nebo Ctrl+U) a ověřte tisk vzdálenosti - zjistěte max. měřenou vzdálenost |
b) Detekce překážky u chytrého auta
d1 | Propojit ultrazvukový snímač s vodiči auta podle barev (žlutý Vcc, zelený GND, modrý Echo, oranžový Trig) |
d2 | Namontovat ultrazvukový snímač dopředu na auto pomocí držáku a šroubků/matic M3 |
d3 | stáhnout krokovemotory-ultrazvuk-naserver.ino
z Výuka\Škrla\arduino a otevřít v Arduino IDE |
d4 | Do funkce long ZmerVzdalenost(), která vrací vzdálenost změřenou ultrazvukovým snímačem (return vzdalenost;) doplňte měření vzdálenosti - použijte jádro z loop() výše bez posledního delay() |
d5 | Do loop() doplňte logiku řízení auta podle zelené nápovědy výše |
d6 | Zkontrolujte a zkompilujte program, přeneste program do Arduina a ověřte funkčnost auta |
_
a) Test optického snímače
Teorie:
Provedení snímače - odkaz
Úkolem je
e1 | Propojit podle schématu - obr. |
e2 | Spustit Arduino IDE - nový projekt uložit jako snimaccary.ino Připojit Arduino k PC přes USB |
e3 | vložit před setup() - místo otazníků doplnit aktuální piny podle
zapojení: // čísla pinu připojeného analogového a digitálního vstupu const int a0 = ?; const int d0 = ?; // proměnná pro čtení hodnoty vstupu int sensorValue = 0; |
e4 | vložit do setup() a doplňte inicializaci sériového monitoru: // inicializace obou vstupů pinMode(?, INPUT); pinMode(?, INPUT); |
e5 | do loop() vložte a doplňte výpis hodnot na monitor: sensorValue = analogRead(a0); //doplnte tisk hodnoty (svetlost) sensorValue = digitalRead(d0); //doplnte tisk hodnoty (pritomnost predmetu) delay(1000); |
e6 | Zkontrolujte a zkompilujte program, přeneste program do Arduina (druhá ikona nebo Ctrl+U) a ověřte hodnoty při přiblížení předmětu |
e7 | Zapište si analogové hodnoty pro bílý a černý povrch papírové předlohy (min/max) |
b) Jízda auta po čáře
f1 | Připevnit šroubkem a matičkou optický snímač na držák zespodu auta |
f2 | Napojit vodiče na snímač: žlutý Vcc, zelený GND, oranžový DO, modrý AO |
f3 | stáhnout krokovemotory-snimaccary-naserver.ino
z Výuka\Škrla\arduino a otevřít v Arduino IDE |
f4 | Do loop() doplňte načtení analogové hodnoty snímače a logiku řízení auta podle zelené nápovědy výše |
f5 | Zkontrolujte a zkompilujte program, přeneste program do Arduina a ověřte funkčnost auta na papírové předloze s černou čarou |
_
a) Programové řízení serva
Teorie:
Komponenty
Cvičení - úkolem je zapojit servo a otáčet s ním od 0 do 180° a zpátky
g1 | Propojit servo a Arduinem podle schématu (červený 5V, hnědý na GND, oranžový na 9) - obr. |
g2 | Spustit Arduino IDE - nový projekt uložit jako servo.ino Připojit Arduino k PC přes USB |
g3 | vložit před setup() - místo otazníků doplnit aktuální piny podle
zapojení: /#include <Servo.h> //knihovna pro ovladani servo motoru Servo myservo; //kazde servo svou instanci tridy Servo |
g4 | vložit do setup() a doplnit pin: myservo.attach(?); //tento motor je připojen na pin ... |
g5 | vložit do loop() a doplnit smyčku pro změnu úhlu od 0 do 180 a
zpátky (hodnota v delay ovlivňuje rychlost pohybu): myservo.write(uhel); //natočení motoru na aktuální úhel delay(15); |
g6 | Zkontrolujte a zkompilujte program, přeneste program do Arduina (druhá ikona nebo Ctrl+U) a ověřte funkci serva |
b) Ovládání serva potenciometrem + oddělené napájení
Úkolem je táhnutím potenciometru měnit polohu serva (poloha jezdce potencimetru = poloze hřídele serva)
Další komponenty:
h1 | Propojit podle schématu (červený vodič +, černý vodič -) -
obr. - ověřit nastavení výstupního napětí nap. modulu - propojení jumperem na 5V - do napájecího modulu napojit napájecí zdroj, - Arduino připojit k PC přes USB |
h2 | V Arduino IDE upravit předchozí projekt servo.ino |
h3 | vložit před setup() int potpin = A0; //pin ke kterému je připojen potenciometr |
h4 | odstranit předchozí kód v loopu a vložit do loop() - přidat definici
proměnných: napeti = analogRead(potpin); //napětí na potenciometru (0 až 1023) uhel = map(napeti, 0, 1023, 0, 180); //převod z 0 až 1023 na 0 až 180 myservo.write(uhel); //nastavení polohy podle potenciometru delay(50); //chvilka čekání než se motor natočí |
h5 | Zkontrolujte a zkompilujte program, přeneste program do Arduina (druhá ikona nebo Ctrl+U) a ověřte funkci potenciometru a serva - napájecí modul zapínejte jeho vestavěným vypínačem |
c) Pan tilt držák pro otáčení/naklápění ve 2 osách
Úkolem je jedním potenciometrem ovládat natočení a druhým potenciometrem naklopení pan/tilt držáku
Další komponenty
i1 | Sešroubovat pan/tilt držák a serva |
i2 | Vodiči připojit serva na Arduino piny 9 a 10 a potenciometry na A0, A1, napájení připojit přes nepájivé pole |
i3 | V Arduino IDE upravit předchozí projekt servo.ino pro druhé servo a potenciometr |
i4 | Ověřit funkčnost posunem potenciometrů |
Doplněk - test držáku s IP kamerou:
i5 | Přišroubovat IP kameru na držák a zapojit u kamery LAN + napájení |
i6 | zprovoznění IP kamery - ve VLC playeru otevřít Média - síťový proud a zadat rtsp://192.168.5.101:554/user=admin&password=image147&channel=0&stream=0.sdp? a Přehrát |
i7 | Ověřit funkčnost posunem potenciometrů |
d) Joystick
= 2 otočné potenciometry ovládané páčkou (na analogové vstupy) + tlačítko (na digitální vstup)
Komponenty:
Úkolem je zjistit vracené hodnoty při pohybu páčky joysticku
k1 | joystick_test |
e) Joystick + pan/tilt se servy
Úkolem je ovládat joystickem obě serva - experimentem nutno ověřit a omezit rozsah natočení serv (pro vyhnutí se kolize s konstrukcí držáku)
m1 | joystick_servo |
_
Komponenty:
Základem je program pro pan/tilt s 2 servy a joystickem
a) Test knihovny
n1 | Zapojit serva do PWM shieldu |
n2 | robotarm.ino |
_
Cílem je otestovat činnost web serveru
Komponenty:
Příprava:
Pořadí | IP | MAC |
---|---|---|
1 | 192,168,5,220 | 0xD4, 0xAD, 0xBE, 0xEF, 0xFE, 0x01 |
2 | 192,168,5,221 | 0xD4, 0xAD, 0xBE, 0xEF, 0xFE, 0x02 |
3 | 192,168,5,222 | 0xD4, 0xAD, 0xBE, 0xEF, 0xFE, 0x03 |
4 | 192,168,5,223 | 0xD4, 0xAD, 0xBE, 0xEF, 0xFE, 0x04 |
5 | 192,168,5,224 | 0xD4, 0xAD, 0xBE, 0xEF, 0xFE, 0x05 |
6 | 192,168,5,225 | 0xD4, 0xAD, 0xBE, 0xEF, 0xFE, 0x06 |
7 | 192,168,5,226 | 0xD4, 0xAD, 0xBE, 0xEF, 0xFE, 0x07 |
8 | 192,168,5,227 | 0xD4, 0xAD, 0xBE, 0xEF, 0xFE, 0x08 |
9 | 192,168,5,228 | 0xD4, 0xAD, 0xBE, 0xEF, 0xFE, 0x09 |
10 | 192,168,5,229 | 0xD4, 0xAD, 0xBE, 0xEF, 0xFE, 0x10 |
11 | 192,168,5,90 | 0xD4, 0xAD, 0xBE, 0xEF, 0xFE, 0x11 |
12 | 192,168,5,91 | 0xD4, 0xAD, 0xBE, 0xEF, 0xFE, 0x12 |
Cvičení 6a - generování odpovědi web serveru:
a1 | Nasadit shield na Arduino (pozor na ohnutí pinů/nožiček) |
a2 | Propojit shield síťovým kabelem se switchem |
a3 | Připojit Arduino k PC přes USB |
a4 | Pokračovat v Arduino IDE - nastavit vývojovou desku (Nástroje - Vývojová deska), nastavit port (Nástroje - Port), otestovat dostupnost Arduina (Nástroje - Získat informace o desce) |
a5 | Otevřít web_server_naserver.ino - analyzovat kód |
a6 | V kódu změnit IP adresu, MAC adresu a port web serveru |
a7 | Doplnit kód pro generování webové stránky <html>...</html> |
a8 | Přeložit a nahrát program do Arduina |
a9 | Otestovat dostupnost Arduina po síti přes ping |
a10 | Otestovat v www prohlížeči funkčnost web serveru (dotaz na zadanou IP adresu) |
Cvičení 6b - analýza dotazu prohlížeče:
b1 | Uložit předchozí stránku v prohlížeči do souboru html a editovat v PsPadu - analyzovat konce řádků |
b2 | V Arduino IDE do web_server_naserver.ino přidat řádky
(před </body>) pro zrcadlení HTTP dotazu z prohlížeče: client.print("<p>Delka prectenych dat: "); client.print(myBufferLength); client.print("</p><p>Nasleduji prectena data:</p><pre>"); for (int i = 0; i < myBufferLength; i++) { client.print(myBuffer[i]); } client.print("</pre><p>Konec dat</p>"); |
b3 | Otestovat v www prohlížeči funkčnost a analyzovat data na stránce |
b4 | Otestovat v jiném prohlížeči |
Cvičení 6c - přenos dat z prohlížeče pomocí adresního řádku
c1 | V prohlížeči přidejte za stejnou IP adresu Arduino web serveru
/?1 a analyzujte
vygenerovanou stránku (příkaz GET) Pozn. Správně by se měl použít způsob HTTP metody get, umožňující přenos více hodnot - např. /?led1=1&led2=1 (tak jak hodnoty předávají serveru formuláře) |
c2 | V Arduino IDE do web_server_naserver.ino doplňte
kód pro simulaci zapnutí/vypnutí LED a ověřte funkčnost: if(myBuffer[5] == '?'){ switch (myBuffer[6]) { case '0': client.println("<p>LED Vypnuta</p>"); break; case '1': client.println("<p>LED Zapnuta</p>"); break; default: client.println("<p>Chyba: Stav LED neurcen</p>"); } } |
c3 | Vylepšení - upravte kód, aby v hlavičce stránky byl parametr
kódování UTF-8: <meta charset='utf-8'> |
Cvičení 6d - zapnutí/vypnutí LED z prohlížeče:
d1 | Podle Cvičení 0 výše zapojte do Arduina LEDku s rezistorem na pin 8 |
d2 | V Arduino IDE do web_server_naserver.ino doplňte kód pro skutečné zapnutí a vypnutí LEDky (použijte příkazy z Cvičení 0) - ověřte funkčnost |
d3 | Vylepšení - umístěte na stránku odkazy "LED zapnout" a "LED vypnout" a upravte kód, aby odkazy fungovaly (LED se zapne/vypne proklikem odkazu) |
d4 | Vylepšení - LED se zapne/vypne kliknutím na formulářové zaškrtávátko (inspirace viz www) |
Další cvičení:
e1 | Automatické obnovování a čas od spuštění podle příkladu v popisu shieldu |
e2 | Příklad zobrazení analogové hodnoty graficky pomocí AJAX - www |
Další:
_