Podvozek 2WD a jeho sestavení

Seznam článků

Po zakoupení 11ks "Inteligentních Robotických Podvozků 2WD Včetně Elektroniky" z arduino shopu (sada stojí okolo 1840,-) jsem začal celý natěšený skládat co "Chiňan" připravil. Tento článek je stavební plán původní konstrukce, ale bohužel nic není jak se zdá (ale to již níže v článku)...

Video (finální program V1.1 - 14.2.2019 s nárazníkem)

Z e-shopem arduino-shop.cz mám výborné zkušenosti a je mi jasné, že není výrobce tohoto podvozku, ale pouze dovozcem a prodejcem.

Sada se skládá z těchto dílů

Z webu prodejce

Mechanická konstrukce je jednoduchá a velmi snadno se instaluje.
Součástí dodávky je kompletní výbava pro sestavení jednoduchého robota.
Součástí dodávky jsou i optické enkodéry s rozlišením 20 a chybou měření 1 - 3mm.
Napájení pomocí 4ks AA baterií vystačí pro všechny periferie robota.
Centrální spínač start-stop, driver L298, ultrazvukový senzor a spousty dalších komponent
dělá tuto stavebnici velice uceleným celkem pro začínající, kteří by rádi pronikli do světa robotiky.  
 
Součástí dodávky:
1 X Robotický auto podvozek
2 X Autokola
2 X DC převodovaný motor
2 X Disk enkodéru
1 X Kolečko x 1
1 X Box na 4 baterie
1 X Kvalitní kolébkový spínač
1 X V5 shield
1 X UNO R3
1 X SG90
1 X FPV
1 X L298N
Různé šrouby a matice

Po sloupnutí krycí fólie z plexiskla...

Mé poznatky

Za tyto peníze je stavebnice velice ošizená -> doporučuji si podvozek vytisknout a zakoupit pouze potřebné díly (Arduino, motory...)

"Mechanická konstrukce je jednoduchá" - ano na první pohled je jednoduchá, ale

  • za prvé je potřeba poznamenat, že celý laserem vyřezaný podvozek je z křehkého plexiskla (dle mého odhadu stačí aby podvozek spadl například ze stolu a je hotovo -> přesně to se mi stalo při montáži prvního podvozku). Stačí málo a v místě, kde je uchycen motor dojde okamžitě k zlomení plexiskla rámu a držáku motoru
  • z plexiskla je potřeba odstranit ochranný papír (nejde to zcela snadno sundat a s papírem jsem to nechtěl nechat)
  • jediné co na podvozek pasovalo a šlo namontovat byly motory, vypínač a kolečko (ostruha). Všechny ostatní věci na podvozek nejdou bez úpravy (vrtačky) namontovat.Nesedí ani jedna díra (neskutečně odfláknutá konstrukce :-( )

"Součástí dodávky jsou i optické enkodéry s rozlišením 20 a chybou měření 1 - 3mm"

  • nenechme se zmást - nejsou to samotné snímače, ale pouze děrovaná kolečka na motor. Snímače si sežeň sám...

"Různé šrouby a matice"

  • nalezneme šrouby na přidělání kolečka, serva, desky můstku motoru a šrouby pro motory. Chiňan píše, že mají být součástí i plastové distanční šroubky pro uchycení elektroniky, ale jaksi ani v jednom balení nic nebylo...

Vůbec jsem nepochopil držák ultrazvukového snímače (jak má být složen jako celek: servo-plast-senzor-podvozek), tak jsem držák vůbec nemohl použít.

!!! Je nutné všechny desky spojů prohlédnout a případně propájet cínem -> ušetříme si hledání chyb PROČ TO NEFUNGUJE? (spousty studených spojů) !!!

Moje řešení

Po zničení prvního plexiskla jsem se rozhodl původní podvozky zahodit a udělat svoje pomocí 3D tisku tak, aby šlo vše namontovat bez vrtačky (sloupků a dalších věcí...)

Ve Fusion 360 jsem vymodeloval podvozek na který bez problémů osadíme:

  • oba motory
  • ostruhu (kolečko - mimochodem toto kolečko jsem také nepochopil a hledal bych ho spíše na kancelářském stolku)
  • desku s můstkem pro řízení motorů
  • spínač
  • servo
  • desku Arduina
  • držák baterií
  • jako bonus zadní a přední světla a blinkry

Foto ze stavby prvního vytištěného kusu

Vytištěno z materiálu PET-G s 0,2mm vrstvou a 30% výplní. Doba tisku okolo 6 hodin na tiskárně Pruša i3 - MK3.

Montáž držáku baterií

Kolečko (ostruha) a spínač napájení

Deska můstku motorů

Montáž motorů (matky nejsou potřeba, šroub si udělá v plastu závit)

Montáž serva do podvozku

Montáž sloupků pro Arduino desku

Osazení shieldu na Arduino

Osazení LED diod (žlutá a bílá předek, žlutá a červená zadek)

Vývody u LED "uštípneme" a spojíme k sobě katodou (mínusem)

4x k LED připojíme 3 vodiče (společný mínus - GND a 2x anoda tedy +bílá a +žlutá) a vyvedeme k desce Arduino. To samé provedeme u zadních světel (společný mínus - GND a 2x anoda tedy +červená a +žlutá)

Připojíme motory k desce můstku

Připevníme ultrazvukový snímač k servu tak, aby šlo se snímačem otáčet vlevo, vpravo). Při montáži jsem zjistil, že musím z desky Arduino odstranit napájecí konektor (nepotřebuji ho a je to méně práce, než znovu tisknout všechny podvozky...)


Označení pinů na desce shieldu

Ultrazvuk

Ke konektoru (vpravo dole) na shieldu (je označen jako URF01 - Ultrasonic Interface) připojíme ultrazvukový snímač 1:1 tedy:

Shield URF01
Snímač HC-SR04 Význam
VCC VCC +5V
A0 Trig výtup pingu
A1 Echo vstup pingu
GND Gnd zem

 

Servo

Servo připojíme na desce shieldu do konektoru označeného GVS11.

Shield Servo SG90
Význam
G 11 GND (hnědý) zem
V 11 VCC (rudý) +5V
S 11 Signál (žlutý) výstup řízení

Osvětlení

LED diody připojíme na desce shieldu do konektorů následovně

Shield LED diody blinkry vlevo
Význam
G A2 GND společná zem diod (lze spojit všechny země diod spolu a zapojit na kterýkoliv vývod G)
V A2 VCC nezapojeno
S A2 Signál výstup přes rezistor 100 Ohm do LED diod levých blinkrů. Diody jsou zapojeny paralelně přes jeden rezistor.
Shield LED diody blinkry vpravo
Význam
G A3 GND společná zem diod
V A3 VCC nezapojeno
S A3 Signál výstup přes rezistor 100 Ohm do LED diod pravých blinkrů. Diody jsou zapojeny paralelně přes jeden rezistor.
Shield LED diody brzda
Význam
G 13 GND zem
V 13 VCC nezapojeno
S 13 Signál výstup přes rezistor 100 Ohm do LED diod zadních brzdových světel. Diody jsou zapojeny paralelně přes jeden rezistor.
Shield LED diody světla
Význam
G 12 GND zem
V 12 VCC nezapojeno
S 12 Signál výstup přes rezistor 100 Ohm do LED diod předních světel. Diody jsou zapojeny paralelně přes jeden rezistor.

 

Můstek motorů

Na desce můstku je nutné odstranit propojky (jumpery ENA a ENB). Na ENA a ENB přivedeme PWM signál pro regulaci rychlosti motorů.

Motory připojíme k desce můstku, desku propojíme s deskou shieldu následovně

Shield Můstek
Význam
G 10 GND zem můstek - zem shield
V 10 VCC 5V VCC 5V do Arduina
S 10  ENA, ENB PWM D10 Arduina
S 9  IN1 D9 Arduina (motor L)
S 8  IN2 D8 Arduina (motor L) 
S 7  IN3 D7 Arduina (motor P)
S 6  IN4 D6 Arduina (motor P)

 

Schované rezistory 100 Ohm ve "smršťovací" bužírce

Vedení vodičů po "zadrátování" podvozku

Nárazník (2x mikrospínač)

Použité mikrospínače: https://www.tme.eu/cz/details/d3v-163-3c5/mikrospinace-snap-action/omron/ za a=20,-

Shield Nárazník
Význam
G 5 GND zem
V 12 VCC nezapojeno
S 5 Signál Dva mikrospínače zapojené paralelně oproti GND.


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.


11.12.2019

Jak už to tak bývá, tak se vždy někde za čas ukáže nějaké kazítko (kurvítko). V tomto případě se na všech 10 podvozcích co mám na motorech utrhl plast, co drží třmen motoru. Materiál převodovky motoru je z toho nejhoršího plastu co může být (a třmen má přeci jen nějaký tah na držák).

Řešením je třmeny odstranit a vytisknout z PETG na 3D tiskárně držák svůj.

Na mé verzi podvozku jsem si připravil otvory na kabely, které jsem nakonec nevyužil. Ukázalo se, že stačí do těchto otvorů vložit plastový úhelník a je to! Jsem zvědavý, jaké další překvapení mi "Chiňan" přichystá napříště :-)

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