Sadržaj:

Napredni robot koji prati liniju: 22 koraka (sa slikama)
Napredni robot koji prati liniju: 22 koraka (sa slikama)

Video: Napredni robot koji prati liniju: 22 koraka (sa slikama)

Video: Napredni robot koji prati liniju: 22 koraka (sa slikama)
Video: Seksi prekida žurku u čačku!!! ARMANIJU OTVORILI GLAVU NA ŽURCI 2024, Srpanj
Anonim
Image
Image
Izrada prototipova - Perfboard
Izrada prototipova - Perfboard

Ovo je napredni robot koji slijedi temeljen na Teensy 3.6 i QTRX linijskom senzoru koji sam izgradio i na kojem radim već duže vrijeme. Postoje neka velika poboljšanja u dizajnu i performansama od mojih ranijih robota koji slijede. Brzina i odziv robota su poboljšani. Ukupna struktura je kompaktna i lagana. Komponente su postavljene blizu osi kotača tako da se kutni moment minimizira. Snažni mikromotorni zupčasti motori velike snage osiguravaju odgovarajući okretni moment, a silikonski kotači od aluminija pružaju prijeko potrebno prianjanje pri velikim brzinama. Enkoderi štitnika i kotača omogućuju robotu da odredi svoj položaj i orijentaciju. S ugrađenim Teensyviewom na brod, sve relevantne informacije mogu se vizualizirati i važni programski parametri ažurirati pomoću gumba.

Za početak izrade ovog robota trebat će vam sljedeće zalihe (i puno vremena i strpljenja na raspolaganju).

Pribor

Elektronika

  • Teensy 3.6 razvojna ploča
  • Podupirač sa senzorima pokreta
  • Sparkfun TeensyView
  • Pololu QTRX-MD-16A Senzorski niz senzora
  • 15x20cm dvostrani prototip PCB-a
  • Pololu Regulator napona za snižavanje/snižavanje S9V11F3S5
  • Pololu podesivi regulator napona 4-5-20V za povećanje napona U3V70A
  • MP12 6V 1580 o / min mikro prijenosni motor s koderom (x2)
  • DRV8833 Nosač s dvostrukim motorom (x2)
  • Li-Po baterija od 3,7 V, 750 mAh
  • ON/OFF prekidač
  • Elektrolitički kondenzator 470uF
  • Elektrolitički kondenzator 1000uF (x2)
  • Keramički kondenzator 0,1uF (x5)
  • Tipke (x3)
  • 10 mm zelena LED dioda (x2)

Hardver

  • Atom silikonski kotač 37x34 mm (x2)
  • Kotač za polulu s metalnom kuglom 3/8”
  • N20 nosač motora (x2)
  • Vijak i matice

Kabeli i priključci

  • Fleksibilne žice 24AWG
  • 24 -polni FFC -DIP prekid i FFC kabel (tip A, duljina 150 mm)
  • Okrugli ženski pin header
  • Okrugli ženski pin pin dugačak terminal
  • Žensko zaglavlje s dva reda pod pravim kutom
  • Dvoredni muški zaglavlje pod pravim kutom
  • Muški pin zaglavlje
  • Muški zatič igle

Alati

  • Multimetar
  • Lemilica
  • Lemljena žica
  • Skidač žice
  • Rezač žice

Korak 1: Pregled sustava

Kao i s mojim ranijim dizajnom samobalansirajućeg robota, ovaj robot je sklop ploča za razbijanje postavljenih na ploču koja također služi svrsi strukture.

Glavni sustavi robota navedeni su u nastavku.

Mikrokontroler: Teensy 3.6 razvojna ploča s 32-bitnim 180MHz ARM Cortex-M4 procesorom.

Linijski osjetnik: Pololuov QTRX-MD-16A niz 16-kanalnih analognih izlaznih linijskih senzorskih nizova u rasporedu srednje gustoće (korak senzora 8 mm).

Pogon: 6V, 1580rpm, mikromotorni motori velike snage s metalnim enkoderom kotača i silikonskim kotačima ugrađenim na aluminijske glavčine.

Odometrija: Parovi magnetskih kodera kotača za procjenu koordinata i prijeđene udaljenosti.

Orijentacijski senzor: Štitnik s senzorima pokreta za procjenu položaja i smjera robota.

Napajanje: 3.7V, 750 mAh lipo baterija kao izvor napajanja. 3.3V step-up/down regulator napaja mikrokontroler, senzore i uređaj za prikaz. Podesivi regulator pojačanja napaja dva motora.

Korisničko sučelje: Teensyview za prikaz informacija. Prekid s tri tipke za prihvaćanje unosa korisnika. Dva broja zelenih LED dioda promjera 10 mm za indikaciju statusa tijekom rada.

Korak 2: Počnimo s izradom prototipa

Image
Image

Gore navedeni krug implementirat ćemo na perfboard. Najprije moramo pripremiti naše ploče za probijanje lemljenjem zaglavlja na njih. Videozapis će dati ideju o tome koja bi zaglavlja trebala biti lemljena na koje ploče za razbijanje.

Nakon lemljenja zaglavlja na pločama za probijanje, složite Teensyview i prekidač pomoću gumba na Teensy.

Korak 3: Prototipiranje - Perfboard

Izrada prototipova - Perfboard
Izrada prototipova - Perfboard

Nabavite dvostranu prototipnu ploču dimenzija 15x20 cm i označite granicu trajnim markerom kao što je prikazano na slici. Izbušite rupe veličine M2 za montažu polja senzora, kotača i motora od mikro metalnih zupčanika na mjestima označenim bijelim krugom. Kasnije ćemo prerezati ploču uz granicu nakon lemljenja i ispitivanja svih komponenti.

Započeti ćemo s izradom prototipa lemljenjem klinova i utičnica zaglavlja na ploči za postavljanje. Razdjelne ploče kasnije će biti umetnute u ta zaglavlja. Pažljivo obratite pozornost na položaj zaglavlja na ploči. Spajat ćemo sve žice na temelju ovog rasporeda zaglavlja.

Korak 4: Prototipiranje - Štitnik za podupiranje

Prototipizacija - Štitnik za podupiranje
Prototipizacija - Štitnik za podupiranje
Prototipizacija - Štitnik za podupiranje
Prototipizacija - Štitnik za podupiranje
Prototipizacija - Štitnik za podupiranje
Prototipizacija - Štitnik za podupiranje
Prototipizacija - Štitnik za podupiranje
Prototipizacija - Štitnik za podupiranje

Prvo ćemo lemiti veze na štitnik podupirača. Budući da koristimo samo senzore pokreta štitnika podupirača, moramo spojiti samo SCL, SDA i IRQ igle osim 3V i uzemljenih pinova štitnika podupirača.

Nakon povezivanja umetnite Teensy i potporni štit te kalibrirajte senzore pokreta slijedeći korake navedene ovdje.

Korak 5: Izrada prototipa - snaga i tlo

Prototipiranje - snaga i tlo
Prototipiranje - snaga i tlo

Lemite sve priključke za napajanje i uzemljenje koji se odnose na sliku. Umetnite sve ploče za razbijanje na mjesto i osigurajte kontinuitet pomoću multimetra. Provjerite različite razine napona na brodu.

  • Li-po izlazni napon (obično između 3V i 4.2V)
  • Izlazni napon regulatora s povećanjem/spuštanjem (3,3 V)
  • Podesivi izlazni napon regulatora pojačanja (postavljen na 6V)

Korak 6: Izrada prototipa - nosač vozača motora

Prototipiranje - nosač vozača motora
Prototipiranje - nosač vozača motora
Prototipiranje - nosač vozača motora
Prototipiranje - nosač vozača motora
Prototipiranje - nosač vozača motora
Prototipiranje - nosač vozača motora

DRV8833 ploča s dva motora pokretačkog sklopa može isporučiti 1,2A kontinuirane i 2A vršne struje po kanalu. Paralelno ćemo spojiti dva kanala za pogon jednog motora. Spajate veze slijedeći donje korake.

  • Paralelno dva ulaza i dva izlaza nosača upravljačkog programa motora kao što je prikazano na slici.
  • Spojite ulazne upravljačke žice na upravljački program motora.
  • Spojite elektrolitski kondenzator od 1000uF i keramički kondenzator od 0,1uF preko priključaka Vin i Gnd na dvije noseće ploče.
  • Spojite 0,1uF keramički kondenzator na izlazne stezaljke upravljačkog programa motora.

Korak 7: Prototipiranje - zaglavlje niza senzorskih linija

Prototipiranje - Zaglavlje niza senzorskih linija
Prototipiranje - Zaglavlje niza senzorskih linija
Prototipiranje - Zaglavlje niza senzorskih linija
Prototipiranje - Zaglavlje niza senzorskih linija
Prototipiranje - Zaglavlje niza senzorskih linija
Prototipiranje - Zaglavlje niza senzorskih linija
Prototipiranje - Zaglavlje niza senzorskih linija
Prototipiranje - Zaglavlje niza senzorskih linija

Teensy 3.6 ima dva ADC -a - ADC0 i ADC1 koji su multipleksirani na 25 dostupnih pinova. Možemo pristupiti bilo kojem dva pina s dva ADC -a istovremeno. Spojit ćemo po osam linijskih senzora na ADC0 i ADC1. Senzori parnih brojeva bit će spojeni na ADC1, a senzori neparnih brojeva na ADC0. Spajate veze slijedeći donje korake. Kasnije ćemo linijski osjetnik spojiti pomoću FFC -a na DIP adapter i kabel.

  • Spojite sve parne igle osjetnika (16, 14, 12, 10, 8, 6, 4, 2) kao što je prikazano na slici. Provucite žicu za spajanje senzorskog zatiča 12 kroz stražnju stranu ploče.
  • Spojite kontrolni pin emitera (ČAK) na Teensy pin 30.
  • Spojite sve neparne pinove senzora (15, 13, 11, 9, 7, 5, 3, 1) kao što je prikazano na slici.
  • Spojite elektrolitski kondenzator od 470uF preko Vcc i Gnd.

Ako pomno promatrate pinove senzora linije i odgovarajuće pinove zaglavlja na ploči, primijetit ćete da se gornji red senzora linije preslikava u donji red zaglavlja na ploči i obrnuto. To je zato što kada povežemo linijski senzor s perfboardom pomoću dvorednih pravokutnih zaglavlja, redovi će se ispravno poravnati. Trebalo mi je dosta vremena da to shvatim i ispravim dodjelu pinova u programu.

Korak 8: Izrada prototipa - motor i koder mikro prijenosnika

Prototipiranje - motor i koder mikro zupčanika
Prototipiranje - motor i koder mikro zupčanika
  • Popravite mikro metalni zupčanički motor pomoću davača pomoću nosača motora N20.
  • Spojite žice motora i davača kako je prikazano na slici.
  • Lijevi koder - Teensy pinovi 4 i 0
  • Desni koder - Teensy pinovi 9 i 27

Korak 9: Prototipiranje - LED diode

Prototipiranje - LED diode
Prototipiranje - LED diode
Prototipiranje - LED diode
Prototipiranje - LED diode

Dvije LED diode pokazuju je li robot otkrio skretanje ili ne. Koristio sam otpornik serije 470 ohma za spajanje LED dioda na Teensy.

  • Lijeva LED anoda na Teensy pin 6
  • Desna LED anoda na Teensy pin 8

Korak 10: Izrada prototipa - prekidi

Image
Image
Prototipiranje - proboji
Prototipiranje - proboji

Sada kada smo dovršili sva lemljenja na perfboard -u, možemo pažljivo rezati uz granicu označenu na perfboard -u i ukloniti dodatne dijelove perfboard -a. Također, pričvrstite dva kotača i kotač.

Umetnite sve zaštitne ploče u odgovarajuće utičnice. Za umetanje prekida FFC-DIP i za pričvršćivanje linijskog osjetnika QTRX-MD-16A pogledajte video.

Korak 11: Pregled knjižnica softvera

Pregled knjižnica softvera
Pregled knjižnica softvera

Programirat ćemo Teensy u Arduino IDE. Trebat će nam neke knjižnice prije nego počnemo. Biblioteke koje ćemo koristiti su:

  • Enkoder
  • Teensyview
  • EEPROM
  • ADC
  • NXPMotionSense

I neki koji su napisani posebno za ovog robota,

  • Pritisnite gumb
  • LineSensor
  • TeensyviewMenu
  • Motori

Knjižnice specifične za ovog robota detaljno se raspravljaju i dostupne su za preuzimanje u sljedećim koracima.

Korak 12: Objašnjenje knjižnica - PushButton

Ova knjižnica služi za povezivanje ploče za razbijanje tipki s Teensyjem. Korištene funkcije su

PushButton (int leftButtonPin, int centreButtonPin, int rightButtonPin);

Pozivanje ovog konstruktora stvaranjem objekta konfigurira pinove gumba u način rada INPUT_PULLUP.

int8_t waitForButtonPress (void);

Ova funkcija čeka dok se gumb ne pritisne i otpusti te vraća kod ključa.

int8_t getSingleButtonPress (void);

Ova funkcija provjerava je li tipka pritisnuta i otpuštena. Ako da, vraća kôd ključa, inače vraća nulu.

Korak 13: Objašnjenje knjižnica - linijski senzor

LineSensor je knjižnica za povezivanje niza senzorskih linija s Teensyjem. Slijede funkcije koje se koriste.

LineSensor (void);

Pozivanje ovog konstruktora stvaranjem objekta inicijalizira ADC0 i ADC1, očitava prag, minimalne i maksimalne vrijednosti iz EEPROM -a i konfigurira pinove senzora u način unosa, a upravljački pin emitera u način rada izlaza.

void calibrate (uint8_t calibrationMode);

Ova funkcija kalibrira linijske senzore. Način calibrationMode može biti MIN_MAX ili MEDIAN_FILTER. Ova funkcija je detaljno objašnjena u kasnijem koraku.

void getSensorsAnalog (uint16_t *sensorValue, način rada uint8_t);

Čita niz senzora u bilo kojem od tri načina poslana kao argument. Način je stanje emitera i može biti ON, OFF ili TOGGLE. Način rada TOGGLE kompenzira očitanja refleksije senzora zbog svjetla u okolini. Senzori spojeni na ADC0 i ADC1 očitavaju se sinkrono.

int getLinePosition (uint16_t *sensorValue);

Izračunava položaj polja senzora iznad crte metodom ponderiranog prosjeka.

uint16_t getSensorsBinary (uint16_t *sensorValue);

Vraća 16-bitni prikaz stanja senzora. Binarni označava da je senzor iznad crte, a binarna nula pokazuje da je senzor izvan linije.

uint8_t countBinary (uint16_t binaryValue);

Prosljeđivanjem 16-bitnog prikaza vrijednosti senzora ovoj funkciji vraća se broj senzora koji se nalaze iznad crte.

void getSensorsNormalized (uint16_t *sensorValue, način rada uint8_t);

Očitava vrijednosti senzora i ograničava svaku vrijednost senzora na odgovarajuće odgovarajuće min i max vrijednosti. Vrijednosti senzora tada se preslikavaju iz odgovarajućeg min do max raspona do 0 do 1000 raspona.

Korak 14: Objašnjenje knjižnica - TeensyviewMenu

TeensyviewMenu je knjižnica u kojoj se može pristupiti funkcijama izbornika prikaza. Slijede funkcije koje se koriste.

TeensyViewMenu (ništavno);

Pozivanje ovog konstruktora stvara objekt klase LineSensor, PushButton i TeensyView.

void intro (void);

Ovo služi za kretanje po izborniku.

void test (void);

To se naziva interno unutar izbornika kada se vrijednosti senzora linije trebaju prikazati na Teensyviewu radi testiranja.

Korak 15: Objašnjenje knjižnica - Motori

Motors je knjižnica koja se koristi za pogon dva motora. Slijede funkcije koje se koriste.

Motori (praznina);

Pozivanje ovog konstruktora stvaranjem objekta konfigurira upravljanje smjerom motora i PWM upravljačke pinove u način rada izlaza.

void setSpeed (int leftMotorSpeed, int rightMotorSpeed);

Pozivanje ove funkcije pokreće dva motora brzinama koje su proslijeđene kao argumenti. Vrijednost brzine može se kretati od -255 do +255 s negativnim predznakom koji pokazuje da je smjer rotacije obrnut.

Korak 16: Testiranje - Odometrija kodera

Testirat ćemo davače magnetskih kotača i prikazati položaj i udaljenost koju robot prelazi.

Prenesite DualEncoderTeensyview.ino. Program prikazuje šifre kodera na Teensyviewu. Enkoder označava povećanje ako pomaknete robota naprijed i smanjenje ako ga pomaknete unatrag.

Sada prenesite EncoderOdometry.ino. Ovaj program prikazuje položaj robota u smislu x-y koordinata, prikazuje ukupnu udaljenost pređenu u centimetrima i kut okrenut u stupnjevima.

Uputio sam Implementaciju mrtvog računanja pomoću Odometrije na robotu s R/C servo diferencijalnim pogonom od strane Seattle Robotics Society za određivanje položaja prema krpeljima kodera.

Korak 17: Testiranje - Senzori pokreta s štitnikom za podupiranje

Provjerite jeste li kalibrirali senzore pokreta slijedeći korake navedene ovdje.

Sada prenesite PropShieldTeensyView.ino. Trebali biste moći vidjeti vrijednosti akcelerometra, žiroskopa i magnetometra za sve tri osi na Teensyviewu.

Korak 18: Pregled programa

Program za naprednog sljedbenika linija napisan je u Arduino IDE -u. Program radi u sljedećem slijedu objašnjenom u nastavku.

  • Vrijednosti pohranjene u EEPROM -u se čitaju i prikazuje se izbornik.
  • Nakon pritiska na tipku LAUNCH, program ulazi u petlju.
  • Očitavaju se normalizirane vrijednosti osjetnika voda.
  • Binarna vrijednost položaja linije dobiva se korištenjem normaliziranih vrijednosti senzora.
  • Brojanje broja senzora koji se nalaze iznad crte izračunava se iz binarne vrijednosti položaja linije.
  • Kodovi kodera se ažuriraju i ažuriraju ukupna udaljenost, x-y koordinate i kut.
  • Za različite vrijednosti binarnog broja u rasponu od 0 do 16, izvršava se skup uputa. Ako je binarni broj u rasponu od 1 do 5 i ako su senzori koji se nalaze iznad linije susjedni, poziva se PID rutina. Rotacija se izvodi u drugim kombinacijama binarne vrijednosti i binarnog broja.
  • U PID rutini (koja je zapravo PD rutina) motori se pokreću brzinama izračunatim na temelju pogreške, promjene pogreške, vrijednosti Kp i Kd.

Program trenutno ne mjeri vrijednosti orijentacije iz štitnika podupirača. Ovo je u tijeku i ažurira se.

Učitajte TestRun20.ino. Vidjet ćemo kako se kretati izbornikom, prilagoditi postavke i kako kalibrirati linijske senzore u sljedećim koracima nakon kojih ćemo testirati našeg robota.

Korak 19: Kretanje kroz izbornik i postavke

Izbornik ima sljedeće postavke kojima se možete kretati pomoću lijevog i desnog gumba i birati pomoću središnjeg gumba. Postavke i njihove funkcije opisane su u nastavku.

  1. KALIBRIRAJ: Za kalibriranje linijskih senzora.
  2. TEST: Za prikaz vrijednosti senzora linije.
  3. LAUNCH: Za početak slijedećeg retka.
  4. MAX BRZINA: Za postavljanje gornje granice brzine robota.
  5. BRZINA ROTIRANJA: Za postavljanje gornje granice brzine robota kada izvrši zaokret, tj. Kada se oba kotača okreću jednakim brzinama u suprotnim smjerovima.
  6. KP: Proporcionalna konstanta.
  7. KD: Izvedena konstanta.
  8. RUN MOD: Za odabir između dva načina rada - NORMALNI i ACCL. U NORMALNOM načinu rada robot radi unaprijed definiranim brzinama koje odgovaraju vrijednostima položaja linije. U načinu ACCL, MAX SPEED robota zamjenjuje se ACCL SPEED na unaprijed definiranim fazama staze. To se može koristiti za ubrzavanje robota na ravnim dijelovima staze. Sljedeće postavke dostupne su samo ako je RUN MODE postavljen na ACCL.
  9. UDALJENOST KRUGA: Za postavljanje ukupne duljine trkaće staze.
  10. ACCL SPEED: Za podešavanje brzine ubrzanja robota. Ova brzina zamjenjuje MAX SPEED u različitim fazama staze kako je dolje definirano.
  11. NE. OD ETAPA: Za postavljanje broja faza u kojima se koristi ACCL SPEED.
  12. KORAK 1: Za postavljanje početne i završne udaljenosti stupnja u kojem je MAX SPEED zamijenjen ACCL SPEED. Za svaku fazu početna i krajnja udaljenost mogu se postaviti zasebno.

Korak 20: Kalibracija senzora linije

Image
Image

Kalibracija linijskog senzora postupak je kojim se određuje granična vrijednost svakog od 16 senzora. Ova se vrijednost praga koristi za odlučivanje nalazi li se određeni senzor preko crte ili ne. Za određivanje graničnih vrijednosti 16 senzora koristimo bilo koju od dvije metode.

MEDIJSKI FILTER: U ovoj metodi linijski senzori postavljaju se iznad bijele površine i uzima se unaprijed definirani broj očitanja senzora za svih 16 senzora. Određene su medijanske vrijednosti svih 16 senzora. Isti se postupak ponavlja nakon postavljanja linijskih senzora preko crne površine. Vrijednost praga je prosjek srednjih vrijednosti crno -bijelih površina.

MIN MAX: U ovoj metodi, vrijednosti senzora se čitaju više puta dok korisnik ne zatraži zaustavljanje. Pohranjuju se maksimalne i minimalne vrijednosti na koje svaki senzor naiđe. Vrijednost praga je prosjek minimalnih i maksimalnih vrijednosti.

Tako dobivene vrijednosti praga preslikane su u raspon od 0 do 1000.

Kalibracija linijskih senzora metodom MIN MAX prikazana je u videu. Nakon kalibriranja linijskih senzora, podaci se mogu vizualizirati kao što je prikazano na slici. Prikazuju se sljedeće informacije.

  • 16-bitni binarni prikaz položaja linije s binarnim 1 koji označava da je odgovarajući linijski osjetnik iznad linije i binarni 0 koji označava da je linijski osjetnik izvan linije.
  • Brojanje ukupnog broja senzora koji se nalaze iznad crte.
  • Minimalne, maksimalne i vrijednosti senzora (neobrađene i normalizirane) od 16 senzora, jedan po jedan senzor.
  • Položaj linije u rasponu od -7500 do +7500.

Minimalne i maksimalne vrijednosti linijskog osjetnika tada se pohranjuju u EEPROM.

Korak 21: Probni rad

Image
Image

Video je probnog rada u kojem je robot programiran da se zaustavi nakon što završi jedan krug.

Korak 22: Završna razmišljanja i poboljšanja

Natjecanje robota
Natjecanje robota

Hardver koji je sastavljen za izradu ovog robota ne koristi u potpunosti program koji ga pokreće. U programskom dijelu moglo bi se napraviti mnogo poboljšanja. Senzori pokreta potpornog štita trenutno se ne koriste za određivanje položaja i orijentacije. Podaci o kilometraži od kodera mogu se kombinirati s podacima o orijentaciji s oklopa za točno određivanje položaja i smjera robota. Ti se podaci zatim mogu koristiti za programiranje robota da nauči stazu u više krugova. Potičem vas da eksperimentirate na ovom dijelu i podijelite svoje rezultate.

Sretno.

Natjecanje robota
Natjecanje robota

Druga nagrada na natjecanju Roboti

Preporučeni: