Operácie

Self Balancing Robot

Z SensorWiki

Verzia z 07:19, 10. jún 2019, ktorú vytvoril StudentDTV (diskusia | príspevky) (Definícia kominukačného prtokolu medzi android aplikáciou a vývojovou doskou Arduino UNO: Preklepy)

Autor: Eva Štalmachová a Denis Vasko
Študijný odbor: Robotika 3. Bc. (2019)

Opis projektu

Cieľom projektu je zostrojenie dvojkolesového robota typu Segway, ktorý udržuje rovnováhu.

Projekt sme si zvolili preto, pretože jeho náročnosť bola vhodná pre naše schopnosti, z čoho sme predpokladali, že nadobudneme cenné praktické vedomosti.


SelfBalanceOutput.gif


Zoznam komponenotv

Arduino Uno je riadiaca doska s 8-bitovým CMOS mikroprocesorom ATmega328P. Rozmery dosky sú 68.6 x 53.4 mm a hmotnosť je 25 g. Veľkosť pamäte mikropočítača je 32 KB. Na doske sa nachádza 20 pinov, z ktorých 14 tvoria digitálne vstupno/výstupné piny a 6 analógových vstupov. Niektoré z pinov môžu byť využité na špeciálne účely. Digitálny pin 0 (RX) a digitálny pin 1 (TX), sa využívajú pri sériovej komunikácii s iným zariadením. Digitálne piny 2 a 3 môžu byť využité na externé prerušenie. Digitálne piny 3, 5, 6, 9, 10, 11 môžu byť použité ako PWM výstupy. Na komunikáciu medzi Arduino doskou a iným zariadením je na doske USB port. Na externé napájanie môžeme využiť 3,5 mm napájací konektor. Na nahrávanie zdrojového kódu do mikropočítača sa najčastejšie používa nástroj Arduino IDE.

ArduinoUno.jpg

HC-06 Bluetooth modul použijeme na bezdrôtovú komunikáciu Arduina s počítačom pomocou sériovej linky. Bluetooth modul využijeme na získanie hodnôt meraní, ktoré by mohli byť pri jazde robota s pripojeným káblom negatívne ovplynené.

BluetoothModul.jpg

L298N riadiaci H-mostíkový modul umožňuje riadiť rýchlosť 5 V - 35 V jednosmerných motorov. Na module sa nachádzajú štyri piny pre napájanie dvoch motorov, napájací a uzemňovací pin pre riadiaci modul. Na prepojenie s Arduinom má 6 vstupných pinov. Keďže riadenie motorov je založené na technike pulzno-šírkovej modulácie (PWM), vstupné piny ENA, ENB modulu musia byť prepojené na PWM piny Arduina

L298N.jpg


Svorkovnicový shield kompatibilný s Arduino Uno. Všetky výstupné piny Arduina sú priradené k svorkám pre jednoduchšie zapojenie. Nie je potrebné externé napájanie.

ShieldSvorka.jpg


Senzor MPU-6050 obsahuje gyroskop aj akcelerometer snímajúce v troch osiach v jednom čipe. Vďaka 16-bitovému analógovému prevodníku dosahuje vysokej presnosti a spoľahlivosti. Modul sníma všetky 3 osi naraz, v rovnaký okamih a používa I2C rozhranie na komunikáciu s mikropočítačom.Na module je zabudovaná aj DMP jednotka (Digtal Motion Processor), ktorá môže byť samostatne naprogramovaná pre počítanie zložitých operácií s nameranými hodnotami. Vďaka DMP nie je nutné zaťažiť čip Arduino a výpočty robiť priamo na doske, vďaka I2C rohraniu dokáže dokonca počítať aj s hodnotami z iného čipu (napríklad iného magnetometra a podobne). Pracovné napätie je 3V-5V.

MPU6050.jpg


Ako napájací zdroj pre robota použijeme dve 7,4 V batériu. Napájací zdroj bude slúžiť na napájanie mikropočítača a ovládacieho modulu pre 6 V motory. Mikropočítač potrebuje odporúčaný zdroj napätia o veľkosti 7 V - 12 V, pričom prúd musí byť jednosmerný. Z mikropočítača sú ďalej napájané všetky potrebné senzory.

LiPO.jpg


Na poháňanie robota využijeme jednosmerné 6 V motory s prevodovým číslom 30:1, rýchlosťou 210 otáčok za minútu a Hallovým enkóderom. Enkóder je zariadenie, pomocou ktorého získame informáciu o rýchlosti motora. Okrem napájacieho a uzemňovacieho pinu má 2 výstupné piny, z ktorých získame 2 obdĺžnikové signály, ktoré sú medzi sebou posunuté. Podľa posunutia signálu vieme určiť smer motora. Jeden zo signálov musí byť pripojený na pine, ktorý obsluhuje externé prerušenia. Takto zabezpečíme neustále získavanie potrebných informácií na kontrolu rýchlostí motora.

6Vmotorencoder.jpg

Led modul, ktorý mení v závislosti od napätia na pinoch R,G,B farbu led diódy. Pracovné napätie 3V-5V. Nie je potrebný ďalší resitor.

RGBmodul.jpg

Prepínací modul, ktorý má na výstupe pri zopnutí logickú 0 inak logickú 1. Pracovné napätie 3V-5V. Nie je potrebný ďalší resitor.

Button.jpg


  • Prepojovacie káble (Počet viď. schéma zapojenia)
  • Dištančné stĺpiky na oddelenie prvého poschodia robota od druhého 4ks [2,5 cm] a na oddelenie druhého poschodia od zvyšku 4ks[4,5 cm]
  • Skrutky 3x10 ~30ks 3x5 4ks (na pripevnie motorv na rámiky)
  • Matice 3mm ~25ks
  • Lepiaca páska (izolačná a obojstranná)
  • Náradie (šrobováky, imbusové klúče)

Zapojenie elektronických častí

Všetky elektronické časti robota zapojíme podľa nasledujúcej elektrickej schémy.

Elektrická schéma

Použité zdroje a software

Analýza

Definované časti úlohy

  • Vykonať montáž súčiastok a zapojiť elektronické časti.
  • Kalibrácia MPU6050 gyroskopu a akcelerometra a čítanie dát zo senzoru.
  • Zabezpečiť komunikáciu vývojovej dosky Arduino UNO cez bluetooth modul HC-06.
  • Definovať komunikačný protokol medzi android aplikáciou a vývojovou doskou Arduino UNO.
  • Vývoj android aplikácie.
  • Vývoj algoritmu, ktorý zabezpečí taký akčný zasah pre motory, že robot zostatne vo vyváženej polohe.

Popis riešenia

Návrh častí robota

Rezanie lasérom

Nasledujúce časti robota boli vyrezané lasérom. Použitý materiál bol akryl.

Podvozok (spodný)

Podvozok bol navrhnutý v programe qcad. Na tomto podvozku sa nachádzajú dierky na priskrutkovanie držiakov motorov. K tejto časti podvozku je tiež prichytená batéria. Taktiež sa na tomto podvozku nachádajú dierky na priskrutkovanie dištančných stĺikov a rovanké dierky slúžia aj na priskrutkovanie nárazníkov. Podvozok bol vyrezaný lasérom z platne akrylu.

Návrh spodnej časti podvozku v programe qcad

Médiá:dtv2019_sbr_podvozok_spodny_subor_na_rezanie.pdf

Médiá:dtv2019_sbr_podvozok_spodny_subor_cad.dxf

Podvozok (vrchný)

Nákres bol vyhotovený v programe qcad. Na podvozku sa nachádzajú dierky pre priskrutkovanie modulu na ovládanie motorov L298n a dierky pre priskrutkovanie vývojovej dosky Arduino UNO. Taktiež sa tu nachádzajú dierky pre dištančné stĺpiky, spájajúce tento podvozok so spodným podvozkom a hlavou robota.

Návrh vrchnej časti podvozku v programe qcad

Médiá:dtv2019_sbr_podvozok_vrchny_subor_na_rezanie.pdf

Médiá:dtv2019_sbr_podvozok_vrchny_subor_cad.dxf

Senzorová lišta

Návrh bol vyhotovený v programe qcad. Táto lišta bude pripevnená na Screw Shield v.3 a slúži ako miesto prilepenia bluetooth modulu HC-06 a ako miesto priskrutkovania MPU6050 gyroskopu.

Návrh senzorovej lišty v programe qcad

Médiá:dtv2019_sbr_senzorova_lista_subor_na_rezanie.pdf

Médiá:dtv2019_sbr_senzorova_lista_subor_cad.dxf

Nárazníky

Nárazníky sú taktiež navrhnuté v programe qcad. Nárazníky sú priskrutkované k spodnému podvozku a slúžia na zastavenia pádu robota. Zabezpečujú, že sa pri páde robota nepoškodia časti elektorniky.


Návrh nárazníkov programe qcad

Médiá:dtv2019_sbr_narazniky_subor_na_rezanie.pdf

Médiá:dtv2019_sbr_narazniky_subor_cad.dxf

Vyrezané časti

Vyrezané časti

Vyrezaný vrchný a spodný podvozok a 4ks nárazníkov.

Nárazník

Nárazník

LISTA

Senzorová lišta

3D tlač

Materiál použitý pri 3D tlači bol PLA filament.

Hlava s podstavou

3D model bol navruhný v online editore Tinkercad. Po dokončení bol 3D model vytlačený na 3D tlačiarni Prusa.

3dmodel

Stl súbor pre 3D tlač

Médiá:DTVHLAVA.stl

Rezanie na plotry

Páska cez oko

Páska robota je prilepená na hlavu robota.

Návrh pásky cez oko v programe Inkscape

Médiá:dtv2019_sbr_paskacezoko_inkscape.svg


Výsledná hlava s podstavcom vytlačená na 3D tlačiarni, na ktorej je nalepená nálepka pirátskej pásky na oko.

Hlava s páskou na oko

Postup montáže súčiastok

  • Pripevníme kolesá k spodnej časti spodného podvozku a pripevníme rámy.
Stepone.jpg
  • Pripevníme batériu k vrchnej časti spodného podvozku a pripevníme 2,5cm dištančné stĺpiky.
Steptwo.png
  • Pripevníme senzorovú lištu a elektrické šúčiastky na vrchnú časť vrchného podvozku a zapojíme súčiastky podľa elektrickej schémy.
Stepthree.jpg
  • Do vytlačenej hlavy umiestníme RGB modul tak aby ledka bola umiestnená v oku hlavy a na podstavec hlavy pripevníme 4,5cm dištačné stĺpiky. V našom prípade ich ešte zvýšimi o 2,5cm pomocou šróbov (dokopy 6cm).
Stepfour.png
  • Na finálne dokončenie pripevníme hlavu s podstavcom k vrchnému podvozku.
Final.png

Kalibrácia MPU6050 gyroskopu a akcelerometra a čítanie dát zo senzoru

Na čítanie dát zo senzoru bola použitá knižnica MPU6050, ktorá vyžaduje inštaláciu knižnice [link na knižnicu i2cdev]. Konkrétne sme ako šablónu využili súbor MPU6050_DMP6.ino. Pred čítaním dát sa vytvorí globálny objekt mpu, ktorý sa vo funckií setup inicializuje.

Dtv2019 sbr MPU6050 setup.png

Čítanie dát zo senzoru prebieha vo funkcií loop.

Dtv2019 sbr MPU6050 citanie dat.png

Kalibrácia (určenie offestov) bola vykonaná pomocou skriptu, ktorý je možné nájsť tu. Tento kalibračný skript si vyžaduje inštaláciu predchádzajúcej knižnice na čítanie dát. Pred spustením kalibrácie je robot umiestnený tak, aby boli podvozky vo vodorovnej polohe. Po ukončení skriptu sa cez sériový port vypíšu offesty. Offsety sa potom použijú pri nastavení mpu objektu vo funkcii setup.

Komunikácia Arduino UNO cez bluetooth modul HC-06

V našom prípade ide len o jednosmernú komunikáciu z Android aplikácie cez bluetooth modol do vývojovej dosky Arduino UNO. Pri danom zapojení je monžné dáta z modulu HC-06 čítať ako sériovú linku pomocou metód Serial.read(). Zisťovať prítomnosť neprečítaťných dát je možné pomocou metódy Serial.available().

Dtv2019 sbr HC05 citanie dat.png

Definícia kominukačného prtokolu medzi android aplikáciou a vývojovou doskou Arduino UNO

K akciám, ktoré môžu byť vykonávané cez aplikáciu, sme priradili číselné znaky a znaky z abecedy (bajty). Každá operácia má priradený iný znak, ktorý sa pri stlačení tlačidla pošle cez bluetooth pripojenie do vývojovej dosky. Vývojová doska následne túto hodnotu prečíta a rozhodnote akú operáciu vykonať.

Dtv2019 sbr HC05 protokol.png

Vývoj vyvažovacieho algoritmu

Prevažná časť projektu bola napísaná v editore Vim. Kompilácia a nahrávanie programu do vývojovej dosky prebiehaly pomocou Arduino IDE.

Na vyvažovanie robota boli použité PID regulátory. Prvý regulátor určuje akčné zásahy do motorov pri náklone robota dopredu a druhý pri náklone robota dozadu. Parametre regulátorov sú nastavované vyvynutou aplikáciu, keďže tento spôsob natavovania umožňuje zmenu parametrov bez potreby kompilácie a nahratia kódu do vývojovej dosky.

Dtv2019 sbr PID vypocet zasahu.png

Vývoj android aplikácie

Aplikácia bola vyvynutá pomocou softwéru Android Studio. Aplikácia má 3 aktivity. Prvá slúži na pripojene bluetooth modulu k mobilu, na zapnutie/vypnutie robota a nachádza sa tu riadenie robota dopredu/dozadu a doľava/doprava. Druhá aktivita slúži na ladenie PID regulátorov a žiadanej hodnoty náklonu robota. Tretia aktivita zapína/prepína/vypína led diódu.

Activity1.png Activity2.png Activity3.png

Zdrojové súbory

Projekt Arduino IDE: Médiá:dtv2019_sbr_arduino_projekt.zip

Projekt aplikácie v Android Studio: Médiá:Dtv2019_sbr_android_projekt.zip ‎

Výsledok

Podarilo sa nám zostrojiť robota, ktorý dokáže balansovať na mieste. Možnosť na zlepšenie vidíme v implementovaní riadenia robota, tak aby dokázal chodiť dopredu/dozadu a doľava/doprava. S konečným výsledkom sme spokojní. Tento projekt, bol pre nás prínos nakoľko sme mohli využiť znalosti z riadenia, z technológií výroby a mohli sme prepojiť softvérovú časť s hardvérovou.