Prvi koraki v Arduino – avtomobilček
Milan
Gaberšek in Slavko Kocijančič
V desetem zaporednem prispevku na temo Prvi koraki v Arduino bomo krmilnik Arduino uporabili za krmiljenje modela avtomobilčka. Prek štirih tipk bomo lahko avtomobilček premikali levo, desno, naprej in nazaj. Pri tem bomo poleg Arduina uporabili tiskano vezje H-mostič – modul z dvema integriranima vezjema L9110. Modul omogoča, da Arduino lahko krmili dva enosmerna motorčka za poganjanje levega in desnega kolesa avtomobilčka. V naslednjih prispevkih bomo model avtomobilčka nadgradili tako, da tipke za ročno krmiljenje ne bodo potrebne in bo vožnja avtonomna.
Programsko kodo si lahko preko kopiraj/prilepi prenesete v Arduino IDE, da vam ne bo treba pretipkavati.
// // Program Arduino - // avtomobileek // Pina tipk za krmiljenje motorja levega kolesa const int pinTipkaA1 = 2; const int pinTipkaA2 = 3; // Pina tipk za krmiljenje motorja desnega kolesa const int pinTipkaB1 = 4; const int pinTipkaB2 = 5; //Pina za krmiljenje // Pina motoreka levega kolesa za modul L9110 const int pinMotorA1 = 9; const int pinMotorA2 = 10; // Pina motoreka desnega kolesa za modul L9110 const int pinMotorB1 = 11; const int pinMotorB2 = 12; // Nastavitev vhodov in izhodov krmilnika Arduina void setup() { // Nastavitev tipk pinMode(pinTipkaA1, INPUT_PULLUP); pinMode(pinTipkaA2, INPUT_PULLUP); pinMode(pinTipkaB1, INPUT_PULLUP); pinMode(pinTipkaB2, INPUT_PULLUP); // Nastavitev izhodov za motoreka pinMode(pinMotorA1, OUTPUT); pinMode(pinMotorA2, OUTPUT); pinMode(pinMotorB1, OUTPUT); pinMode(pinMotorB2, OUTPUT); } // Prva parametra povesta, katera pina poganjata motor // tretji parameter pove smer: // -1 kolo se vrti nazaj, 0 miruje, 1 kolo se vrti naprej void motor(int pinMotor1, int pinMotor2, int nSmer) { if (nSmer == 1) { // Naprej digitalWrite(pinMotor1, HIGH); digitalWrite(pinMotor2, LOW); } else if (nSmer == -1) { // Nazaj digitalWrite(pinMotor1, LOW); digitalWrite(pinMotor2, HIGH); } else { // Se ne vrti digitalWrite(pinMotor1, LOW); digitalWrite(pinMotor2, LOW); } } // Preveri stanje tipk in vrni vrednost // true, ee je pogoj izpolnjen, oziroma false, ee ni bool preveriTipki(int pinTipka1, bool stanje1, int pinTipka2, bool stanje2) { if ( (digitalRead(pinTipka1) == stanje1) && (digitalRead(pinTipka2) == stanje2) ) { return true; } else { return false; } } void loop() { // Motor levega kolesa int stanjeMotorja = 0; // Privzeto stanje - kolo se ne vrti if (preveriTipki(pinTipkaA1, HIGH, pinTipkaA2, LOW)) { stanjeMotorja = 1; } else if (preveriTipki(pinTipkaA1, LOW, pinTipkaA2, HIGH)) { stanjeMotorja = -1; } motor(pinMotorA1, pinMotorA2, stanjeMotorja); // Motor desnega kolesa int stanjeMotorja2 = 0; // Privzeto stanje - kolo se ne vrti if (preveriTipki(pinTipkaB1, HIGH, pinTipkaB2, LOW)) { stanjeMotorja2 = 1; } else if (preveriTipki(pinTipkaB1, LOW, pinTipkaB2, HIGH)) { stanjeMotorja2 = -1; } motor(pinMotorB1, pinMotorB2, stanjeMotorja2); } |