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, Juli
Anonim
Image
Image
Prototipiranje - Perfboard
Prototipiranje - Perfboard

Ovo je napredni robot koji prati liniju zasnovan 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 u odnosu na moju prethodnu liniju robota. Brzina i odziv robota su poboljšani. Ukupna struktura je kompaktna i lagana. Komponente su raspoređene blizu osi točka kako bi se ugaoni moment sveo na minimum. Mikro-metalni zupčasti motori velike snage osiguravaju odgovarajući okretni moment, a silikonski kotači od aluminijskog stuba nude prijeko potrebno prianjanje pri velikim brzinama. Prop štit i koderi kotača omogućuju robotu da odredi svoj položaj i orijentaciju. Sa Teensyview -om ugrađenim na ploču, sve relevantne informacije mogu se vizualizirati i važni programski parametri mogu ažurirati pomoću tipki.

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

Supplies

Elektronika

  • Odbor za razvoj Teensy 3.6
  • Potporni štit sa senzorima pokreta
  • Sparkfun TeensyView
  • Pololu QTRX-MD-16A Polje senzora refleksije
  • 15x20cm dvostrani prototip PCB-a
  • Pololu Regulator napona za snižavanje/snižavanje S9V11F3S5
  • Pololu Podesivi regulator napona 4-5-20V U3V70A
  • MP12 6V 1580 o / min mikro zupčasti motor s koderom (x2)
  • DRV8833 Nosač vozača s dva motora (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)
  • Tasteri (x3)
  • 10 mm zelena LED dioda (x2)

Hardver

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

Kablovi i konektori

  • Fleksibilne žice 24AWG
  • 24 -polni FFC -DIP prekid i FFC kabel (tip A, dužina 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 uglom
  • Muški pin zaglavlje
  • Muški zatič igle

Alati

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

Korak 1: Pregled sistema

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

Glavni sistemi robota navedeni su u nastavku.

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

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

Pogon: 6V, 1580rpm, mikro metalni zupčasti motori velike snage s magnetskim enkoderom kotača i silikonskim kotačima ugrađenim na aluminijske glavčine.

Odometrija: Parovi magnetskih kodera za procjenu koordinata i pređene udaljenosti.

Orijentacijski senzor: Podupirač sa 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 sa tri tastera za prihvatanje unosa korisnika. Dva broja zelenih LED dioda promjera 10 mm za indikaciju statusa tokom rada.

Korak 2: Počnimo sa izradom prototipa

Image
Image

Gore navedeni krug implementirat ćemo na perfboard. Moramo prvo održavati naše ploče za razbijanje 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 razbojnim pločama, složite Teensyview i prekidač pomoću gumba na Teensy.

Korak 3: Prototipiranje - Perfboard

Prototipiranje - Perfboard
Prototipiranje - 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 niza senzora, kotača i motora od mikro metalnih zupčanika na lokacijama označenim bijelim krugom. Kasnije ćemo prerezati ploču uz granicu nakon lemljenja i testiranja svih komponenti.

Prototipiranje ćemo započeti lemljenjem zaglavlja i utičnica na ploči. Razbijalne ploče kasnije će biti umetnute u ova zaglavlja. Pažljivo obratite pažnju na položaj zaglavlja na ploči za pisanje. Spajat ćemo sve žice na temelju ovog rasporeda zaglavlja.

Korak 4: Prototipiranje - štitnik za podupiranje

Prototipizacija - Prop Shield
Prototipizacija - Prop Shield
Prototipizacija - Prop Shield
Prototipizacija - Prop Shield
Prototipizacija - Prop Shield
Prototipizacija - Prop Shield
Prototipizacija - Prop Shield
Prototipizacija - Prop Shield

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

Nakon što je veza dovršena, umetnite Teensy i potporni štit i kalibrirajte senzore pokreta slijedeći korake navedene ovdje.

Korak 5: Izrada prototipa - snaga i tlo

Prototipizacija - snaga i tlo
Prototipizacija - 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 nivoe 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 nosiva ploča s dvostrukim motorom može isporučiti 1,2A kontinuiranu i 2A vršnu struju po kanalu. Spojit ćemo dva kanala paralelno 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.
  • Priključite upravljačke žice ulaza 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 priključke upravljačkog programa motora.

Korak 7: Izrada prototipa - zaglavlje matrice senzorskog polja

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 za parne brojeve bit će spojeni na ADC1, a senzori za neparne brojeve na ADC0. Spajate veze slijedeći donje korake. Kasnije ćemo linijski senzor spojiti pomoću FFC -a na DIP adapter i kabel.

  • Spojite sve parne igle senzora (16, 14, 12, 10, 8, 6, 4, 2) kao što je prikazano na slici. Provucite žicu za spajanje igle osjetnika 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 elektrolitički 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

Prototipizacija - motor i koder mikro zupčanika
Prototipizacija - motor i koder mikro zupčanika
  • Popravite mikro metalni zupčanički motor s davačem 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
Prototipizacija - proboji
Prototipizacija - proboji

Sada kada smo završ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đe, pričvrstite dva točka i kotač.

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

Korak 11: Pregled biblioteka softvera

Pregled biblioteka softvera
Pregled biblioteka softvera

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

  • Enkoder
  • Teensyview
  • EEPROM
  • ADC
  • NXPMotionSense

I neki koji su napisani posebno za ovog robota,

  • PushButton
  • LineSensor
  • TeensyviewMenu
  • Motori

O bibliotekama specifičnim za ovog robota detaljno se raspravlja i dostupne su za preuzimanje u sljedećim koracima.

Korak 12: Objašnjenje biblioteka - PushButton

Ova biblioteka služi za povezivanje ploče za razbijanje tastera sa Teensy -jem. Koriste se sljedeće funkcije

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

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

int8_t waitForButtonPress (void);

Ova funkcija čeka dok se tipka 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 je odgovor da, vraća kôd ključa, inače vraća nulu.

Korak 13: Objašnjenje biblioteka - linijski senzor

LineSensor je biblioteka za povezivanje niza senzorskih linija sa Teensyjem. Slijede funkcije koje se koriste.

LineSensor (void);

Pozivanje ovog konstruktora stvaranjem objekta inicijalizira ADC0 i ADC1, čita 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 koji se prosljeđuju kao argument. Način je stanje emitera i može biti ON, OFF ili TOGGLE. Režim TOGGLE kompenzuje očitavanja refleksije senzora usled ambijentalnog svetla. Senzori spojeni na ADC0 i ADC1 očitavaju se sinkrono.

int getLinePosition (uint16_t *sensorValue);

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

uint16_t getSensorsBinary (uint16_t *sensorValue);

Vraća 16-bitni prikaz stanja senzora. Binarni označava da je senzor iznad linije, 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 linije.

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

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

Korak 14: Objašnjenje biblioteka - TeensyviewMenu

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

TeensyViewMenu (void);

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

void intro (void);

Ovo služi za kretanje kroz meni.

test praznine (void);

To se poziva interno u meniju kada se vrijednosti senzora linije prikazuju na Teensyview -u radi testiranja.

Korak 15: Objašnjenje biblioteka - Motori

Motors je biblioteka koja se koristi za pogon dva motora. Slijede funkcije koje se koriste.

Motori (praznine);

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

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.

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

Sada učitajte 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.

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

Korak 17: Testiranje - Prop Shield senzori pokreta

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 senzora linije.
  • Binarna vrijednost položaja linije dobiva se korištenjem normaliziranih vrijednosti senzora.
  • Brojanje broja senzora koji se nalaze iznad linije izračunava se iz binarne vrijednosti položaja linije.
  • Kodovi kodera se ažuriraju i ažurira se ukupna udaljenost, x-y koordinate i kut.
  • Za različite vrijednosti binarnog broja u rasponu od 0 do 16, izvršava se niz instrukcija. Ako je binarni broj u rasponu 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 u stvari i PD rutina) motori se pokreću brzinama izračunatim na osnovu greške, promjene greške, vrijednosti Kp i Kd.

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

Otpremite TestRun20.ino. Vidjet ćemo kako se kretati kroz izbornik, prilagoditi postavke i kako kalibrirati linijske senzore u sljedećim koracima nakon kojih ćemo testirati našeg robota.

Korak 19: Kretanje kroz meni i postavke

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

  1. CALIBRATE: Za kalibraciju linijskih senzora.
  2. TEST: Za prikaz vrijednosti senzora linije.
  3. LAUNCH: Za početak linije.
  4. MAX BRZINA: Za postavljanje gornje granice brzine robota.
  5. BRZINA ROTIRANJA: Za postavljanje gornje granice brzine robota kada izvrši zaokret, odnosno kada se oba kotača okreću jednakim brzinama u suprotnim smjerovima.
  6. KP: Proporcionalna konstanta.
  7. KD: Derivativna 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. Ovo se može koristiti za ubrzavanje robota na ravnim dijelovima staze. Sljedeće postavke su dostupne samo ako je RUN MODE postavljen na ACCL.
  9. UDALJENOST KRUGA: Za postavljanje ukupne dužine 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. FAZA 1: Za postavljanje početne i završne udaljenosti etape u kojoj je MAX SPEED zamijenjena ACCL SPEED. Za svaku fazu početna i krajnja udaljenost mogu se postaviti zasebno.

Korak 20: Kalibracija senzora linije

Image
Image

Kalibracija linijskog senzora je proces kojim se određuje granična vrijednost svakog od 16 senzora. Ova se granična vrijednost koristi za odlučivanje da li je određeni senzor iznad linije 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 srednje vrijednosti svih 16 senzora. Isti postupak se ponavlja nakon postavljanja linijskih senzora preko crne površine. Granična vrijednost 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. Maksimalne i minimalne vrijednosti na koje svaki senzor naiđe pohranjene su. Granična vrijednost je prosjek minimalnih i maksimalnih vrijednosti.

Tako dobivene granične vrijednosti preslikavaju se 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 sa binarnim 1 koji označava da je odgovarajući linijski senzor iznad linije i binarni 0 koji označava da je linijski senzor izvan linije.
  • Brojanje ukupnog broja senzora koji se nalaze iznad linije.
  • 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 senzora 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šne misli i poboljšanja

Takmičenje robota
Takmičenje 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 sa enkodera mogu se kombinirati s podacima o orijentaciji iz štitnika za podupiranje za precizno određivanje položaja i smjera robota. Ti se podaci tada 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.

Takmičenje robota
Takmičenje robota

Druga nagrada na takmičenju Roboti

Preporučuje se: