Podvozek 2WD a jeho sestavení - Programové vybavení (kód)

Seznam článků

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.

Attachments:
Download this file (program_LED.zip)Program LED[Program pro Arduino IDE]0.5 kB215 Downloads2018-12-16 10:11
Download this file (program_motor.zip)Program motor[Program pro Arduino IDE]0.6 kB175 Downloads2018-12-17 05:29
Download this file (program_servo.zip)Program servo[Program pro Arduino IDE]0.6 kB166 Downloads2018-12-17 04:31
Download this file (program_ultrazvuk.zip)Program ultrazvuk[Program pro Arduino IDE]0.8 kB174 Downloads2018-12-17 05:15