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ě :-)