Po sestavení podvozku je čas na test všech periferií (LED diody, motory, ultrazvuk, servo...) V Příloze nalezneme 4 ukázkové programy pro otestování správného zapojení.
Program LED
Po vložení kódu budou střídavě blikat: levá světla (10x), pravá světla (10x), brzdová světla (10x), přední světla (10x)...
#define PIN_LED_LEFT 16 //A2 levá strana blinkr #define PIN_LED_RIGHT 17 //A3 pravá strana blinkr #define PIN_LED_REAR 13 // přední světla #define PIN_LED_FRONT 12 // zadní světla void setup() {//začátek setup pinMode(PIN_LED_LEFT,OUTPUT); pinMode(PIN_LED_RIGHT,OUTPUT); pinMode(PIN_LED_REAR,OUTPUT); pinMode(PIN_LED_FRONT,OUTPUT); }//konec setup void loop() {//začátek loop for(byte x=0; x<10; x++){ // 10x opakování - levá světla digitalWrite(PIN_LED_LEFT,HIGH); delay(100); digitalWrite(PIN_LED_LEFT,LOW); delay(100); }//konec opakování for(byte x=0; x<10; x++){ // 10x opakování - pravá světla digitalWrite(PIN_LED_RIGHT,HIGH); delay(100); digitalWrite(PIN_LED_RIGHT,LOW); delay(100); }//konec opakování for(byte x=0; x<10; x++){ // 10x opakování - brzdová světla digitalWrite(PIN_LED_REAR,HIGH); delay(100); digitalWrite(PIN_LED_REAR,LOW); delay(100); }//konec opakování for(byte x=0; x<10; x++){ // 10x opakování - přední světla digitalWrite(PIN_LED_FRONT,HIGH); delay(100); digitalWrite(PIN_LED_FRONT,LOW); delay(100); }//konec opakování }//konec loop |
Video ukázka - LED
Program servo
Po vložení kódu se bude servo pomalu natáčet: vlevo, čeká 2s, rovně, čeká 2s, vpravo, čeká 2s... Pozice 0 kouká vpravo, 180 kouká vlevo. S ohledem na servo je lepší nevyužívat 0 a 180 stupňů (servo potom přemáhá dorazy), ale například 10 až 170 stupňů.
/* * testovací program pro servo podvozku 2WD dle webu: www.pihrt.com * https://pihrt.com/elektronika/403-podvozek-2wd-a-jeho-sestaveni?start=2 */ #define PIN_SERVO 11 // servo je zapojeno na pinu 11 #include <Servo.h> // knihovna pro servo (je již součástí Arduina IDE) Servo servomotor; // vytvoření objektu servomotor pro knihovnu servo int pozice = 20; // pomocná pro pozici serva void setup() {//začátek setup servomotor.attach(PIN_SERVO); // připojení serva na pinu 11 servomotor.write(pozice); // servo natočit na 20 stupňů (vpravo) delay(2000); // čekej 2 vteřiny }//konec setup void loop() {//začátek loop for (pozice = 20; pozice <= 100; pozice += 1) { // pomalu přesuň pozici serva na 100 stupňů (střed) servomotor.write(pozice); delay(15); } delay(2000); // čekej 2 vteřiny for (pozice = 100; pozice <= 170; pozice += 1) { // pomalu přesuň pozici serva na 170 stupňů (vlevo) servomotor.write(pozice); delay(15); } delay(2000); // čekej 2 vteřiny for (pozice = 170; pozice >= 100; pozice -= 1) { // pomalu přesuň pozici serva na 90 stupňů (střed) servomotor.write(pozice); delay(15); } delay(2000); // čekej 2 vteřiny for (pozice = 100; pozice >= 20; pozice -= 1) { // pomalu přesuň pozici serva na 20 stupňů (vpravo) servomotor.write(pozice); delay(15); } delay(2000); // čekej 2 vteřiny }//konec loop |
Video ukázka - servo
Program ultrazvuk
Po vložení kódu se bude na sériovou linku s rychlostí 9600Bd vypisovat vzdálenost v cm (pokud se vypíše -1, znamená to špatné čidlo, špatně zapojené čidlo, vzdálenost je nesmyslná - může se stát i pokud se ultrazvuk od překážky špatně odrazí).
/* * testovací program pro ultrazvuk podvozku 2WD dle webu: www.pihrt.com * https://pihrt.com/elektronika/403-podvozek-2wd-a-jeho-sestaveni?start=2 */ #define PIN_ULTRAZVUK_TRIG 14 // A0 vstup do ultrazvuku je zapojen na pinu 14 #define PIN_ULTRAZVUK_ECHO 15 // A1 výstup z ultrazvuku je zapojen na pinu 15 #define Max_cas_mereni 30000 // 3000µs = 50cm // 6000us = 1m // 12000us = 2m // 30000 µs = 5m void setup() {//začátek setup pinMode(PIN_ULTRAZVUK_TRIG, OUTPUT); pinMode(PIN_ULTRAZVUK_ECHO, INPUT); Serial.begin(9600); // knihovna pro výpis na sériovou linku }//konec setup void loop() {//začátek loop Serial.print(Vzdalenost()); // vytiskni vzdálenost v cm Serial.println(F(" cm")); delay(1000); }//konec loop long Zmer_vzdalenost(){ // zahájí měření vzdálenosti long trvani = 0; digitalWrite(PIN_ULTRAZVUK_TRIG, LOW); delayMicroseconds(2); digitalWrite(PIN_ULTRAZVUK_TRIG, HIGH); delayMicroseconds(10); digitalWrite(PIN_ULTRAZVUK_TRIG, LOW); trvani = pulseIn(PIN_ULTRAZVUK_ECHO, HIGH, Max_cas_mereni); // načti do proměnné trvani počet pulsů if(trvani == 0) { // pokud nepřijde z ultrazvuku nic, tak se vrátí číslo z Max_cas_mereni trvani = Max_cas_mereni+1000; }//konec if return trvani; }// konec long long Vzdalenost(){ // provede přepočet vzdálenosti na cm long trvani = 0; trvani = Zmer_vzdalenost(); if(trvani == Max_cas_mereni+1000) return -1; // chyba měření return trvani/29/2 ; // vrátí vzdálenost v cm }// konec long |
Program motor
Po vložení kódu se budou testovat motory: stop, vlevo, vpravo, vzad, vpřed (čas přepínání je 2 sec). Rychlost (PWM) lze nastavit v rozmezí 0-255, ale běžně je vhodné použít více než 127 (aby se podvozek pohnul). Oba motory mají stejné PWM (oba vstupy ENA a ENB jsou spojeny spolu) a rychlost motorů se řídí společně...
/* * testovací program pro motory podvozku 2WD dle webu: www.pihrt.com * https://pihrt.com/elektronika/403-podvozek-2wd-a-jeho-sestaveni?start=2 */ #define PIN_MOTOR_EN 10 // PWM výstup pro rychlost motorů #define PIN_MOTOR_IN1 9 // motor L můstek 1 #define PIN_MOTOR_IN2 8 // motor L můstek 2 #define PIN_MOTOR_IN3 7 // motor P můstek 3 #define PIN_MOTOR_IN4 6 // motor P můstek 4 void setup() {//začátek setup pinMode(PIN_MOTOR_EN,OUTPUT); pinMode(PIN_MOTOR_IN1,OUTPUT); pinMode(PIN_MOTOR_IN2,OUTPUT); pinMode(PIN_MOTOR_IN3,OUTPUT); pinMode(PIN_MOTOR_IN4,OUTPUT); }//konec setup void loop() {//začátek loop byte rychlost = 200; // rychlost je 0-255, 127 je 50% rychlost Stop(); delay(2000); Vlevo(rychlost); delay(2000); Vpravo(rychlost); delay(2000); Vzad(rychlost); delay(2000); Vpred(rychlost); delay(2000); }//konec loop void Vlevo(byte PWM){ if(PWM) analogWrite(PIN_MOTOR_EN,PWM); digitalWrite(PIN_MOTOR_IN1, HIGH); digitalWrite(PIN_MOTOR_IN2, LOW); digitalWrite(PIN_MOTOR_IN3, HIGH); digitalWrite(PIN_MOTOR_IN4, LOW); } void Vpravo(byte PWM){ if(PWM) analogWrite(PIN_MOTOR_EN,PWM); digitalWrite(PIN_MOTOR_IN1, LOW); digitalWrite(PIN_MOTOR_IN2, HIGH); digitalWrite(PIN_MOTOR_IN3, LOW); digitalWrite(PIN_MOTOR_IN4, HIGH); } void Vzad(byte PWM){ if(PWM) analogWrite(PIN_MOTOR_EN,PWM); digitalWrite(PIN_MOTOR_IN1, HIGH); digitalWrite(PIN_MOTOR_IN2, LOW); digitalWrite(PIN_MOTOR_IN3, LOW); digitalWrite(PIN_MOTOR_IN4, HIGH); } void Vpred(byte PWM){ if(PWM) analogWrite(PIN_MOTOR_EN,PWM); digitalWrite(PIN_MOTOR_IN1, LOW); digitalWrite(PIN_MOTOR_IN2, HIGH); digitalWrite(PIN_MOTOR_IN3, HIGH); digitalWrite(PIN_MOTOR_IN4, LOW); } void Stop(){ analogWrite(PIN_MOTOR_EN,0); digitalWrite(PIN_MOTOR_IN1, LOW); digitalWrite(PIN_MOTOR_IN2, LOW); digitalWrite(PIN_MOTOR_IN3, LOW); digitalWrite(PIN_MOTOR_IN4, LOW); } |
Video ukázka - motor
Vývojový diagram (zjednodušený popis základního rozhodování)
DONATE
Registrovaní uživatelé, kteří přispěli "Donate" mají možnost stažení kompletního zdrojového kódu (V1.0 a vyšší). Tedy ultrazvuk, servo, LED, nárazník a motor v akci. V programu je použit stavový automat (bez funkce delay) pomocí časovače.