Cuprins:

Robot de auto-echilibrare cu două roți: 7 pași
Robot de auto-echilibrare cu două roți: 7 pași

Video: Robot de auto-echilibrare cu două roți: 7 pași

Video: Robot de auto-echilibrare cu două roți: 7 pași
Video: Au Uitat Să Oprească Camera De FILMAT! Momente Incredibile Filmate În LIVE 2024, Noiembrie
Anonim
Robot de auto-echilibrare cu două roți
Robot de auto-echilibrare cu două roți

Acest instructable va trece prin procesul de proiectare și construcție pentru un robot de auto-echilibrare. Ca o notă, vreau doar să spun că roboții de auto-echilibrare nu sunt un concept nou și au fost construiți și documentați de alții. Vreau să folosesc această ocazie pentru a vă împărtăși interpretarea mea despre acest robot.

Ce este un robot auto-echilibrat?

Un robot de auto-echilibrare este un sistem care utilizează date de măsurare inerțiale, colectate de la un senzor de la bord, pentru a-și regla continuu poziția pentru a se menține în poziție verticală.

Cum functioneazã?

O analogie simplă de luat în considerare este un pendul inversat. Unde centrul de masă este deasupra punctului de pivotare. Cu toate acestea, în cazul nostru, restricționăm pendulul la 1 grad de libertate având o axă de rotație, în cazul nostru axa de rotație a celor două roți. Deoarece orice fel de tulburare va cauza căderea robotului, avem nevoie de o metodă de menținere activă a robotului echilibrat. Aici intervine algoritmul nostru în buclă închisă (controlerul PID), știind în ce direcție cade robotul nostru, putem regla direcția de rotație a motoarelor noastre pentru a menține sistemul echilibrat.

Cum funcționează algoritmul cu buclă închisă?

Principiul de bază în menținerea echilibrului robotului este că, în cazul în care robotul cade înainte, acesta va compensa prin mișcarea fundului robotului înainte pentru a se prinde singur și, prin urmare, a se menține vertical. La fel, dacă robotul cade înapoi, acesta va compensa prin mișcarea fundului robotului înapoi pentru a se prinde singur.

Deci, trebuie să facem două lucruri aici, mai întâi, trebuie să calculăm unghiul de înclinare (Roll) pe care îl experimentează robotul și, ca rezultat, trebuie să controlăm direcția de rotație a motoarelor.

Cum vom măsura unghiul de înclinare?

Pentru a măsura unghiul de înclinare vom folosi o unitate de măsurare inerțială. Aceste module încorporează un accelerometru și un giroscop.

  • Accelerometrul este un dispozitiv electromagnetic care măsoară accelerația corectă, aceasta este accelerația unui corp într-un cadru de repaus instantaneu.
  • Un giroscop este un dispozitiv electromecanic care măsoară viteza unghiulară și este utilizat pentru a determina orientarea dispozitivului.

Cu toate acestea, problema utilizării acestor senzori este că:

  • Accelerometrul este foarte zgomotos, dar este constant în timp, unghiul variază în funcție de mișcări orizontale bruște
  • Valoarea giroscopului, pe de altă parte, va deriva în timp, dar inițial este destul de precisă

Pentru acest lucru instructiv, nu voi implementa un filtru în loc să folosesc Procesarea digitală a mișcării (DMP). Alții au folosit un filtru complementar pentru a obține un semnal lin, puteți alege oricare metodă doriți. pe măsură ce robotul se echilibrează cu ambele implementări.

Provizii

Părți:

  1. Arduino Pro Mini 3.3V 8 cu un ATMEGA328 de 8 Mhz
  2. FT232RL 3.3V 5.5V FTDI USB la modulul adaptor serial TTL
  3. Modul GY-521 cu MPU-6050
  4. O pereche de micro-motor N20 de 6V - 300rpm
  5. Driver motor L298N
  6. LM2596S Convertor DC-DC
  7. Baterie (acumulator Li-ion reîncărcabil de 9,7 V)
  8. Cureaua bateriei
  9. Două plăci de circuite PCB de prototipare
  10. Cârligul masculin și cel feminin al știfturilor

Instrumente:

  1. Fier de lipit și lipit
  2. Distanțier hexagonal din nailon
  3. Set de șurubelnițe de precizie
  4. imprimantă 3d

Pasul 1: Construcție

De când aveam acces la o imprimantă 3D, am decis să imprim 3D șasiu și să folosesc standoff-uri pentru a conecta totul împreună.

Robotul este format din 4 straturi

  1. Stratul inferior conectează motoarele și are puncte de montare pentru modulul driverului de motor L298N
  2. Următorul strat găzduiește placa prototip cu Arduino pro mini și anteturi lipite pe ea
  3. Al treilea strat montează IMU
  4. Stratul superior, pe care îl numesc „stratul barei de protecție”, ajută bateria, convertorul buck și un comutator monetar

Principiul meu principal de proiectare a fost să păstrez totul modular. Motivul pentru acest lucru a fost dacă ceva nu a funcționat corect cu una dintre componente, aș putea să o înlocuiesc cu ușurință sau dacă aveam nevoie de o componentă pentru un alt proiect, o pot lua cu ușurință fără să-mi fac griji că nu pot folosi din nou sistemul.

Pasul 2: Cablare

Cablare
Cablare

Am lipit niște pinte de antet feminin pe o placă de perfecționare pentru a se potrivi cu pinii de antet Arduino pro mini. În urma acestui lucru, am lipit pini de antet de sex masculin pentru a permite accesul la I / O. Restul componentelor au fost montate pe cadrul imprimat 3D și conectate folosind fire jumper.

Pasul 3: Teoria controlului

Acum trecem la miezul proiectului. Pentru a menține robotul echilibrat, trebuie să generăm un semnal de control adecvat pentru a conduce motoarele în direcția corectă și la viteza corectă pentru a menține robotul echilibrat și stabil. Pentru a face acest lucru, vom folosi un popular algoritm de buclă de control cunoscut sub numele de controler PID. După cum sugerează acronimul, există trei termeni pentru acest controler, aceștia sunt termenii proporționali, integrali și derivați. Fiecare dintre acestea este însoțit de coeficienți care determină influența lor asupra sistemului. De multe ori, cea mai consumatoare de timp a implementării controlerului este reglarea câștigurilor pentru fiecare sistem unic pentru a obține cel mai optim răspuns.

  • Termenul proporțional înmulțește direct eroarea pentru a da o ieșire, deci cu cât eroarea este mai mare, cu atât răspunsul este mai mare
  • Termenul integral generează un răspuns bazat pe o acumulare a erorii pentru a reduce eroarea la starea de echilibru. Cu cât sistemul este mai dezechilibrat, cu atât mai repede vor răspunde motoarele
  • Termenul derivat este derivatul erorii care este utilizată pentru a prezice răspunsul viitor și, prin aceasta, reduce oscilația datorată depășirii stării de echilibru.

Principiul de bază al acestui algoritm este de a calcula continuu unghiul de înclinare care este diferența dintre poziția dorită și poziția curentă, aceasta fiind cunoscută sub numele de eroare. Apoi folosește aceste valori de eroare și calculează suma răspunsurilor proporționale, integrale și derivate pentru a obține o ieșire, care este semnalele de control trimise către motoare. Ca rezultat, dacă eroarea este mare, semnalul de comandă trimis motoarelor va roti motoarele la viteză mare pentru a ajunge la o stare echilibrată. La fel, dacă eroarea este mică, semnalul de comandă va roti motoarele cu viteză redusă pentru a menține robotul echilibrat.

Pasul 4: Utilizarea MPU 6050

Biblioteca MPU6050

github.com/jrowberg/i2cdevlib/tree/master/…

Calibrarea compensărilor Nu toți senzorii sunt replici exacte ale celuilalt. Ca rezultat, dacă testați două MPU 6050, puteți obține valori diferite pentru accelerometru și giroscop atunci când sunt plasate pe aceeași suprafață. Pentru a depăși acest unghi constant de compensare, trebuie să sărbătorim fiecare senzor pe care îl folosim. Rularea acestui script:

www.i2cdevlib.com/forums/topic/96-arduino-…

scris de Luis Rodenas, vom primi compensări. Erorile de offset pot fi eliminate prin definirea valorilor de offset în rutina setup ().

Utilizarea procesorului de mișcare digitală

MPU6050 conține un DMP (procesor de mișcare digitală).

Ce este un DMP? Vă puteți gândi la DMP ca la un microcontroler de la bord care procesează mișcarea complexă de la giroscopul cu 3 axe și accelerometrul cu 3 axe de la bordul mpu6050, folosind algoritmi proprii de fuziune a mișcării. Descărcarea procesării care altfel ar fi făcută de Arduino

Cum să-l folosească? Pentru a afla cum să utilizați DMP, consultați exemplul schiței MPU6050_DMP6 care vine cu biblioteca MPU6050 (în IDE Arduino: Fișier-> Exemplu-> MPU6050-> MPU6050_DMP6). Aceasta este, de asemenea, o bună oportunitate de a verifica dacă senzorul funcționează efectiv și cablajul este corect

Pasul 5: Codificare

Am folosit Arduino IDE și o interfață FTDI pentru a programa Arduino pro mini.

Folosind schița de exemplu (MPU6050_DMP6) care vine împreună cu biblioteca MPU6050 ca cod de bază, am adăugat funcții PID () și MotorDriver ().

Adăugați biblioteca

  • MPU6050: Pentru a utiliza senzorul MPU6050 va trebui să descărcăm biblioteca de dezvoltatori I2C de la Jeff Rowberg și să o adăugăm în folderul „biblioteci” Arduino din fișierele de programe de pe computer.
  • Wire: Avem nevoie și de biblioteca Wire pentru a ne permite să comunicăm cu dispozitivele I2C.

Pseudo cod

Includeți biblioteci:

  • Sârmă.h
  • MPU6050
  • I2Cdev.h

Inițializați variabile, constante și obiecte

Înființat ()

  • Setați modul pin pentru controlul motoarelor
  • Setați modul pin pentru LED-ul de stare
  • Inițializați MPU6050 și setați valorile de offset

PID ()

Calculați valoarea PID

MotorDriver (răspuns PID)

Folosiți valoarea PID pentru a controla viteza și direcția motoarelor

Bucla ()

  • Obțineți date de la DMP
  • Apelați funcțiile PID () a MotorDriver ()

Pasul 6: Procedura de reglare PID

Aceasta este cea mai obositoare parte a proiectului și necesită puțină răbdare, cu excepția cazului în care veți avea mare noroc. Iată pașii:

  1. Setați termenul I și D la 0
  2. Ținând robotul, reglați P astfel încât robotul să înceapă să oscileze în jurul poziției de echilibru
  3. Cu setarea P, creșteți I astfel încât robotul să accelereze mai repede atunci când nu este echilibrat. Cu P și I sunt reglați corespunzător, robotul ar trebui să se poată echilibra automat cel puțin câteva secunde, cu o oarecare oscilație
  4. În cele din urmă, creșterea D reduce oscilația

Dacă prima încercare nu dă rezultate satisfăcătoare, repetați pașii cu o valoare diferită de P. Rețineți, de asemenea, că puteți regla fin valorile PID după aceea, pentru a crește și mai mult performanța. Valorile de aici sunt dependente de hardware, nu vă mirați dacă obțineți valori PID foarte mari sau foarte mici.

Pasul 7: Concluzie

Micromotoarele folosite trebuiau să încetinească pentru a reacționa la perturbări mari și având în vedere că sistemul era prea ușor, nu exista suficientă inerție pentru a obține efectul pendul dorit, așa că, dacă robotul se apleacă în față, acesta se va înclina într-un unghi și va alerga înainte. În cele din urmă, roțile imprimate 3D sunt o alegere proastă, deoarece continuă să alunece.

Sugestii de îmbunătățire:

  • Motoarele mai rapide cu cuplu mai mare, adică pentru motoarele de curent continuu este mai mare tensiunea nominală cuplul mai mare
  • obțineți o baterie mai grea sau pur și simplu mutați masa puțin mai sus
  • Înlocuiți roțile imprimate 3D cu cele din cauciuc pentru a obține mai multă tracțiune

Recomandat: