Robot Arduino DIY. Si të bëni një robot në Arduino me duart tuaja: robot shtëpiak Arduino në shtëpi Robotët në arduino uno

Por edhe nga blerja e një roboti të gatshëm dhe të plotë bazuar në këtë tabelë. Per femijet Shkolla fillore ose mosha parashkollore të tilla projektet e përfunduara Arduino është madje i preferueshëm, sepse Bordi "i paanimuar" duket pak i mërzitshëm. Kjo mënyrë i përshtatshëm për ata që qarqet elektrike jo veçanërisht tërheqëse.

Duke blerë një model roboti pune, d.m.th. në fakt një lodër e gatshme e teknologjisë së lartë, për të cilën mund të zgjoni interes dizajn i pavarur dhe krijimin e robotëve. Pasi të keni luajtur mjaftueshëm një lodër të tillë dhe të kuptoni se si funksionon, mund të filloni të përmirësoni modelin, të hiqni gjithçka dhe të filloni të montoni projekte të reja në Arduino, duke përdorur tabelën e liruar, disqet dhe sensorët. Hapja e platformës Arduino lejon nga e njëjta gjë komponentët bëni vetes lodra të reja.

Ne ofrojmë një përmbledhje të vogël të robotëve të gatshëm në tabelën Arduino.

Makina Arduino e kontrolluar përmes Bluetooth

Makina e kontrolluar me Bluetooth, kushton pak më pak se 100 dollarë. Jepet i pamontuar. Përveç kasës, motorit, rrotave, baterisë litium dhe karikuesit, marrim një pllakë Arduino UNO328, kontrollues motori, përshtatës Bluetooth, telekomandë. telekomandë Dhe kështu me radhë.

Video me këtë dhe një robot tjetër:

Më shumë pershkrim i detajuar lodra dhe mundësia për të blerë në faqen e internetit të dyqanit online DealExtreme.

Roboti Arduino Turtle

Kompleti i montimit të breshkave robot kushton rreth 90 dollarë. E vetmja gjë që mungon është guaska, përfshihet gjithçka tjetër e nevojshme për jetën e këtij heroi: pllakë Arduino Uno, servo, sensorë, module gjurmuese, marrës IR dhe telekomandë, bateri.

Breshka mund të blihet në faqen e internetit DealExtreme, një robot i ngjashëm më i lirë është në Aliexpress.

Arduino gjurmoi automjetin e kontrolluar nga një celular

Automjeti i gjurmuar, i kontrolluar nëpërmjet Bluetooth celular , kushton 94 dollarë. Përveç bazës së pistave, marrim një tabelë Arduino Uno dhe një tabelë zgjerimi, një tabelë Bluetooth, një bateri dhe një karikues.

Automjeti i gjurmuar mund të blihet edhe në faqen e internetit DealExtreme, aty ka edhe një përshkrim të detajuar. Ndoshta një hekur më interesant Tanke Arduino në Aliexpress.

Makina Arduino duke ecur nëpër labirint

Makina lëviz nëpër labirint, kushton 83 dollarë. Përveç motorëve, bordit Arduino Uno dhe sendeve të tjera të nevojshme, ai përmban module gjurmimi dhe module për shmangien e pengesave.

Robot i gatshëm ose kornizë për një robot

Përveç opsionit të përdorimit të kompleteve të gatshme për krijimin e robotëve Arduino të diskutuar në rishikim, mund të blini një kornizë (trup) të veçantë të robotit - mund të jetë një platformë në rrota ose një vemje, një humanoid, një merimangë dhe modele të tjera. Në këtë rast, do të duhet ta bëni vetë mbushjen e robotit. Një pasqyrë e rasteve të tilla është dhënë në tonën.

Ku tjetër mund të blini robotë të gatshëm?

Në rishikim, ne zgjodhëm robotët më të lirë dhe më interesantë, për mendimin tonë, të gatshëm Arduino nga dyqanet online kineze. Nëse nuk keni kohë të prisni një pako nga Kina - zgjedhje e madhe robotë të gatshëm në dyqanet online Amperka dhe DESSY. Cmime te uleta dhe dërgesa e shpejtë ofrohet nga dyqani online ROBstore. Lista e dyqaneve të rekomanduara.

Ju gjithashtu mund të jeni të interesuar në rishikimet tona të projekteve Arduino:


Trajnim Arduino

Nuk e dini se ku të filloni të mësoni Arduino? Mendoni për atë që është më afër jush - të montoni tuajën modele të thjeshta dhe ndërlikimi gradual i tyre apo njohja me zgjidhje më komplekse por të gatshme?

Njerëzit fillojnë të mësojnë Arduino duke krijuar robotë të thjeshtë. Sot do të flas për robotin më të thjeshtë në Arduino Uno, i cili, si një qen, do të ndjekë dorën tuaj ose çdo objekt tjetër që reflekton dritën infra të kuqe. Ky robot do të argëtojë edhe fëmijët. Nipi im 3-vjeçar luajti me padurim me robotin :)

Do të filloj duke renditur pjesët që do të nevojiten gjatë ndërtimit - Arduino UNO;

Gjetës të rrezeve infra të kuqe;

- Motorë 3 volt me ​​kambio dhe rrota;

- lidhëse për bateritë 3A;

-bateria (nëse nuk ka bateri të mjaftueshme);

-Reletë për kontrollin e motorëve;

Epo, dhe materiale të tjera që do të nevojiten gjatë procesit të krijimit.
Së pari bëjmë bazën. Vendosa ta bëj prej druri. Dërrasë druri dhe e sharruan në atë mënyrë që motorët të përshtaten në mënyrë të përsosur në vrima


Pastaj i shtrëngoj motorët me një shirit druri, duke e vidhosur këtë shirit

Më pas në trup vendosa një arduino, një stafetë, një Bradboard, matës distancash dhe një shasi rrotulluese nën bazën

Tani lidhim gjithçka sipas diagramit

Në fund, ngarkoni skicën e mëposhtme në Arduino:

Const int R = 13; //Kinjat me të cilat janë të lidhur matësit e rrezeve IR const int L = 12; motori intL = 9; //kunjat me të cilat është lidhur rele int motorR = 11; butoni intState = 0; setup void() ( pinMode(R,INPUT); pinMode(L,INPUT); pinMode(motorR,OUTPUT); pinMode(motorL,OUTPUT); ) void loop() ( ( buttonState = digitalRead(L); if (buttonState == LARTË) (Dixhital Shkruani (motorR, LARTË); ) tjetër (Dixhital Shkruani (motorR, LOW); ) ) (( buttonState = digitalLead(R); nëse (buttonState == LARTË) (DixhitalWrite(motorL, LARTË); ) tjetër (Dixhital Shkrimi (motorL, LOW); ) ) )

Parimi i funksionimit është shumë i thjeshtë. Distanca e majtë është përgjegjëse për timonin e djathtë, dhe e djathta për të majtën

Për ta bërë më të qartë, mund të shikoni një video që tregon procesin e krijimit dhe funksionimin e robotit

Ky robot është shumë i thjeshtë dhe çdokush mund ta bëjë atë. Kjo do t'ju ndihmojë të kuptoni parimet e funksionimit të moduleve të tilla si reletë dhe matësat IR dhe mënyrën më të mirë për t'i përdorur ato.

Shpresoj se ju ka pëlqyer kjo zanat, mbani mend që zanatet janë të lezetshme!

Pershendetje te gjitheve. Ky artikull është një histori e shkurtër se si bëj robot e tyre duart. Pse një histori, ju pyesni? Kjo për faktin se për prodhimin e të tilla vepra artizanaleështë e nevojshme të përdoret një sasi e konsiderueshme njohurish, e cila është shumë e vështirë të paraqitet në një artikull. Ne do të ecim përmes procesit të ndërtimit, do t'i hedhim një sy kodit dhe në fund do të sjellim në jetë një krijim të Silicon Valley. Ju këshilloj të shikoni videon për të marrë një ide se me çfarë duhet të përfundoni.

Para se të vazhdoni, ju lutemi vini re sa vijon: gjatë prodhimit vepra artizanaleështë përdorur një prerës lazer. Nga prerës lazer Ju mund të refuzoni nëse keni përvojë të mjaftueshme duke punuar me duart tuaja. Saktësia është çelësi për të përfunduar me sukses projektin!

Hapi 1: Si funksionon?

Roboti ka 4 këmbë, me 3 servo në secilën prej tyre, të cilat i lejojnë të lëvizë gjymtyrët në 3 gradë lirie. Ai lëviz me një "ecje zvarritëse". Mund të jetë i ngadaltë, por është një nga më të lëmuarit.

Së pari, duhet ta mësoni robotin të ecë përpara, prapa, majtas dhe djathtas, më pas shtoni një sensor tejzanor, i cili do të ndihmojë në zbulimin e pengesave/pengesave, dhe më pas një modul Bluetooth, falë të cilit kontrolli i robotit do të arrijë një nivel të ri. .

Hapi 2: Pjesët e nevojshme

Skeleti prej pleksiglas me trashësi 2 mm.

Pjesa elektronike e produktit të bërë në shtëpi do të përbëhet nga:

  • 12 servo;
  • arduino nano (mund të zëvendësohet me çdo bord tjetër arduino);

  • Mburoja për kontrollin e servove;
  • furnizimi me energji elektrike (në projekt është përdorur një furnizim me energji 5V 4A);

  • sensor tejzanor;
  • moduli hc 05 bluetooth;

Për të bërë një mburojë do t'ju duhet:

  • pllakë qark (mundësisht me linja të përbashkëta (autobusë) të energjisë dhe tokëzimit);
  • lidhës kunjash ndër-borde - 30 copë;
  • bazat për tabelë - 36 copë;

  • telat.

Mjetet:

  • Prerës me lazer (ose duar të aftë);
  • Super ngjites;
  • Ngjitës i shkrirë në nxehtësi.

Hapi 3: Skeleti

Le të përdorim një program grafik për të vizatuar përbërësit e skeletit.

Pas kësaj, në çdo mënyrë të përballueshme prerë 30 pjesë të robotit të ardhshëm.

Hapi 4: Asambleja

Pas prerjes, hiqni mbulesën mbrojtëse të letrës nga pleksiglasi.

Më pas fillojmë të montojmë këmbët. Elementet e fiksimit të ndërtuara në pjesë të skeletit. Gjithçka që mbetet për t'u bërë është të lidhni pjesët së bashku. Lidhja është mjaft e ngushtë, por për besueshmëri më të madhe mund të aplikoni një pikë super ngjitës në elementët e fiksimit.

Pastaj ju duhet të modifikoni servos (ngjitni një vidë përballë boshteve të servo).

Me këtë modifikim do ta bëjmë robotin më të qëndrueshëm. Vetëm 8 servo duhet të modifikohen; 4 të tjerët do të ngjiten drejtpërdrejt në trup.

Ne i bashkojmë këmbët në elementin lidhës (një pjesë e lakuar), dhe kjo, nga ana tjetër, në servo drive në trup.

Hapi 5: Bërja e mburojës

Bërja e tabelës është mjaft e thjeshtë nëse ndiqni fotografitë e paraqitura në hap.

Hapi 6: Elektronikë

Le të bashkojmë kunjat e servo drive në tabelën arduino. Përfundimet duhet të lidhen me sekuencë e saktë, përndryshe asgjë nuk do të funksionojë!

Hapi 7: Programimi

Është koha për të sjellë në jetë Frankenstein. Fillimisht, le të ngarkojmë programin legs_init dhe të sigurohemi që roboti të jetë në pozicionin si në foto. Më pas, le të ngarkojmë quattro_test për të kontrolluar nëse roboti u përgjigjet lëvizjeve themelore, të tilla si lëvizja përpara, prapa, majtas dhe djathtas.

E RËNDËSISHME: Duhet të shtoni një bibliotekë shtesë në arduino IDE. Lidhja me bibliotekën është dhënë më poshtë:

Roboti duhet të bëjë 5 hapa përpara, 5 hapa prapa, të kthehet majtas 90 gradë, të kthehet djathtas 90 gradë. Nëse Frankenstein bën gjithçka siç duhet, ne po ecim në drejtimin e duhur.

P. S: Vendoseni robotin në filxhan, si në një mbajtëse, në mënyrë që të mos keni nevojë ta vendosni çdo herë në pikën e fillimit. Sapo testet treguan punë normale robot, ne mund të vazhdojmë testimin duke e vendosur në tokë/kat.

Hapi 8: Kinematika e anasjelltë

Kinematika e anasjelltë është ajo që drejton robotin në të vërtetë (nëse nuk jeni të interesuar për anën matematikore të këtij projekti dhe jeni me nxitim për të përfunduar projektin, mund ta kaloni këtë hap, por të dini se çfarë e shtyn robotin do të jetë gjithmonë i dobishëm).

Me fjalë të thjeshta, kinematika e kundërt, ose shkurt IR, është "pjesa" e ekuacioneve trigonometrike që përcaktojnë pozicionin e skajit të mprehtë të këmbës, këndin e secilit servo, etj., të cilat përfundimisht përcaktojnë disa cilësime paraprake. Për shembull, gjatësia e çdo hapi të robotit ose lartësia në të cilën do të vendoset trupi gjatë lëvizjes/pushimit. Duke përdorur këto parametra të paracaktuar, sistemi do të nxjerrë sasinë me të cilën çdo servo duhet të lëvizë në mënyrë që të kontrollojë robotin duke përdorur komandat e dhëna.

Pak për robotin. Para së gjithash, projekti duhej të ishte sa më i lirë. Trupi u krijua pa asnjë llogaritje ose balancim; kërkesa kryesore për trupin ishte dimensionet minimale. Pra, le të fillojmë të montojmë këtë robot.

Lista e pjesëve:
1. Një grup pjesësh trupi dhe putrash prej pleksiglas 1,5 mm.
2. Arduino Mega ose Uno (Mega përdoret) - 1 pc.
3. Micro servo drive (përdoret TowerPro SG90) - 8 copë.
4. Distanca tejzanor HC-SR04 - 1 pc.
5. Madhësia e baterisë 18560, 3.7V (përdoret TrustFire 2400 mAh) - 2 copë.
6. Mbajtësja e baterisë me madhësi 18560 (duke përdorur një enë të konvertuar - ambalazh) - 1 pc.
7. Qëndroni për bordi i qarkut të printuar 25 mm. (përdoren stenda të tilla) - 4 copë.
8. Pjesë e dërrasës së bukës.
9. Telat kërcyes.
10. Vidhos DIN 7985 M2, 8 mm. - 18 copë.
11. Arrë DIN 934 M2 - 18 copë.

Montimi i robotit Z-RoboDog:

1. Trupi i robotit është prej pleksiglas transparent me trashësi 1.5 mm. Të gjitha pjesët janë prerë me lazer sipas një vizatimi të bërë në CorelDraw:

2. Ngjiteni trupin ngjitës i dytë. Forca e trupit të ngjitur do të jetë mjaft e mjaftueshme. Kur montoni, merrni parasysh pozicionin e vrimave në kapakun e poshtëm (shikoni foton), ose më mirë akoma, lidhni tabelën dhe sigurohuni që gjithçka të përputhet. Ngjitni muret anësore në mënyrë që vrimat për telat të jenë më afër muri i pasmë. Vrima më e gjerë në murin e pasmë është për një kabllo USB, ju lutemi merrni parasysh këtë kur montoni.


3. Shënoni dhe shponi vrimat (grykë shpimi 2 mm). Siguroni servot në kutinë duke përdorur bulona dhe dado (artikujt 10, 11 nga lista). Boshtet servo të përparme duhet të jenë më afër murit të përparmë. Boshtet e pasme të servo makinës janë më afër murit të pasmë.




4.1. Mblidhni putrat. Merrni pjesët e sipërme të putrave (me dy vrima). Shënoni mesin e pjesës. Pasi të keni vendosur lëkundësin e servo drive, shënoni pikat e montimit me vida dhe vrima shpuese (stërvitja 1,5 mm). Mbërtheni rrotulluesit në mënyrë që kokat e vidhave të jenë në anën e sediljeve. Siguroni rrotulluesit në anët e ndryshme dhe ndenjëset sepse boshtet më parë ishin në drejtim të kundërt.


4.2. Shënoni dhe shponi vrimat për montimin e servove (grup shpimi 2 mm). Boshtet e servove të bashkangjitura duhet të jenë më afër skajit të ngushtë të putrës.


4.3. Për të parandaluar rrëshqitjen e putrave, ngjitni gomë mbi to, për shembull. Por nuk duhet të ngjitni pjesën e përparme të putrës; kur qeni shkel, ai mund të kapet dhe të ngecë. Ngjita shirita rrogoze ngjitëse nga makina.

5. Shënoni dhe shponi vrimat për ngjitjen e matësit tejzanor (stërvitja 2 mm). Instaloni matësin e distancës me këmbët e kontaktit të drejtuara lart.

6. Instaloni mbajtësin e baterisë në mënyrë që të vendoset në mes të kutisë. Siguroni tabelën Arduino dhe lidhni të gjithë komponentët. Një pjesë e tabelës së bukës u përdor për shpërndarjen e energjisë.

Vendosja dhe lëshimi i robotit Z-RoboDog:

Në këtë pikë do t'ju duhet të instaloni vetë këmbët në mënyrë që hapat të mund të kalibrohen. Problemi kryesor është në lëkundet, të cilët janë ngjitur në boshte vetëm në pozicione të caktuara. Dhe gjithashtu vetë servot mund të ndryshojnë në shkallët e funksionimit.

Kështu duken putrat e qenit tim pikat ekstreme kënde servo (ndryshoret zs1, zs2, zs3, etj.). Mundohuni të poziciononi putrat tuaja si në foto. Vizualisht, putrat duhet të jenë në të njëjtat pozicione.

Në pozicionin kryesor, mund të nxirrni edhe putrat. Pas kësaj, mos harroni të vidhosni rrotulluesit në boshtet servo.


Pjesë e softuerit të Z-RoboDog:

Kodi është shumë i thjeshtë, komentet janë shtuar kudo. Të gjitha lëvizjet janë në një grup, për të mos u ngatërruar në numra, kam përdorur variabla për çdo servo. Për shembull, s1 është servo 1, s2 është servo 2 dhe kështu me radhë. Për ta kuptuar më lehtë, ju ofroj këtë diagram.

Putrat janë të numëruara në diagram; secila pjesë e putrës shoqërohet me një servo makinë që e lëviz atë. Gjithashtu, për secilën putra tregohen drejtimet e lëvizjes; shenjat plus dhe minus tregojnë se ku do të lëvizë putra kur këndi rritet ose zvogëlohet. Këndet e fillimit ishin qoshet e shtyllës kryesore (s1, s2, s3, etj.). Për shembull, nëse keni nevojë të zgjasni putrën e dytë, duhet të rrisni këndin s3 dhe s4, në grup do të duket kështu (s1, s2, s3+100, s4+50, s5, s6, s7, s8) . Ja skica e plotë. Kodi është shkruar në bazë të njohurive të mia, ju lutem më njoftoni nëse kam zgjedhur rrugën e gabuar të zbatimit.

Video:


Skica në arkiv: Ju nuk keni akses për të shkarkuar skedarë nga serveri ynë

Le të flasim se si mund të përdorni Arduino për të krijuar një robot që balancon si një Segway.

Segway nga anglishtja. Segway është një automjet me dy rrota në këmbë i pajisur me një makinë elektrike. Ata quhen gjithashtu hoverboard ose skuter elektrike.

A keni menduar ndonjëherë se si funksionon një Segway? Në këtë tutorial do të përpiqemi t'ju tregojmë se si të bëni një robot Arduino që balancon vetveten ashtu si një Segway.

Për të balancuar robotin, motorët duhet t'i rezistojnë robotit në rënie. Ky veprim kërkon reagime dhe elemente korrigjuese. Elementi i reagimit - i cili siguron nxitim dhe rrotullim në të tre akset (). Arduino e përdor këtë për të njohur orientimin aktual të robotit. Elementi korrigjues është kombinimi i motorit dhe rrotës.

Rezultati përfundimtar duhet të jetë diçka si kjo:

Diagrami i robotit

Moduli i drejtuesit të motorit L298N:

Motor ingranazhi DC me rrotë:

Një robot vetë-balancues është në thelb një lavjerrës i përmbysur. Mund të jetë më i balancuar nëse qendra e masës është më e lartë në krahasim me boshtet e rrotave. Një qendër më e lartë e masës nënkupton një moment më të lartë të inercisë së masës, që korrespondon me një nxitim këndor më të ulët (rënie më të ngadaltë). Kjo është arsyeja pse ne vendosim paketën e baterisë sipër. Sidoqoftë, lartësia e robotit u zgjodh bazuar në disponueshmërinë e materialeve :)

Versioni i kompletuar i robotit vetë-balancues mund të shihet në figurën e mësipërme. Në krye ka gjashtë bateri Ni-Cd për të fuqizuar PCB-në. Në mes të motorëve, një bateri 9 volt përdoret për drejtuesin e motorit.

Teoria

Në teorinë e kontrollit, mbajtja e disa ndryshoreve (në këtë rast pozicioni i robotit) kërkon një kontrollues të veçantë të quajtur PID (derivativ integral proporcional). Secili prej këtyre parametrave ka një "fitim", zakonisht i quajtur Kp, Ki dhe Kd. PID siguron korrigjim midis vlerës (ose hyrjes) të dëshiruar dhe vlerës (ose daljes) aktuale. Dallimi midis hyrjes dhe daljes quhet "gabim".

Kontrolluesi PID e redukton gabimin në vlerën më të vogël të mundshme duke rregulluar vazhdimisht daljen. Në robotin tonë vetë-balancues Arduino, hyrja (e cila është animi i dëshiruar në gradë) vendoset nga softueri. MPU6050 lexon animin aktual të robotit dhe e ushqen atë me algoritmin PID, i cili kryen llogaritjet për të kontrolluar motorin dhe për ta mbajtur robotin në këmbë.

PID kërkon që vlerat Kp, Ki dhe Kd të rregullohen në vlerat optimale. Inxhinierët përdorin softuer të tillë si MATLAB për të llogaritur automatikisht këto vlera. Fatkeqësisht, ne nuk mund të përdorim MATLAB në rastin tonë sepse do ta komplikojë edhe më shumë projektin. Në vend të kësaj, ne do të rregullojmë vlerat PID. Ja se si ta bëni atë:

  1. Bëni Kp, Ki dhe Kd të barabarta me zero.
  2. Rregullo Kp. Një Kp shumë i vogël do të bëjë që roboti të bjerë sepse korrigjimi nuk është i mjaftueshëm. Shumë Kp bën që roboti të shkojë egërsisht përpara dhe mbrapa. Një Kp e mirë do ta bëjë robotin të lëvizë pak para dhe prapa (ose të lëkundet pak).
  3. Pasi të vendoset Kp, rregulloni Kd. Vlere e mire Kd do të zvogëlojë lëkundjet derisa roboti të jetë pothuajse i qëndrueshëm. Përveç kësaj, Kd e saktë do ta mbajë robotin edhe nëse shtyhet.
  4. Së fundi, instaloni Ki. Kur aktivizohet, roboti do të lëkundet edhe nëse Kp dhe Kd janë vendosur, por do të stabilizohet me kalimin e kohës. Vlera e saktë Ki do të zvogëlojë kohën e nevojshme për të stabilizuar robotin.

Sjellja e robotit mund të shihet në videon e mëposhtme:

Kodi Arduino për robotin vetë-balancues

Na duheshin katër biblioteka të jashtme për të krijuar robotin tonë. Biblioteka PID thjeshton llogaritjen e vlerave P, I dhe D. Biblioteka LMotorController përdoret për të kontrolluar dy motorë me modulin L298N. Biblioteka I2Cdev dhe biblioteka MPU6050_6_Axis_MotionApps20 janë krijuar për të lexuar të dhëna nga MPU6050. Ju mund ta shkarkoni kodin, duke përfshirë bibliotekat, në këtë depo.

#përfshi #përfshi #include "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE #include "Wire.h" #endif #define MIN_ABS_SPEED 20 mpu600 // Kontrolli i MPU-së/statusi vars bool dmpReady = false; // vendos true nëse fillimi i DMP ishte i suksesshëm uint8_t mpuIntStatus; // mban bajtin aktual të statusit të ndërprerjes nga MPU uint8_t devStatus; // kthen statusin pas çdo operimi të pajisjes (0 = sukses, !0 = gabim) uint16_t packetSize; // Madhësia e pritshme e paketës DMP (parazgjedhja është 42 byte) uint16_t fifoCount; // numërimi i të gjithë bajteve aktualisht në FIFO uint8_t fifoBuffer; // Buffer ruajtjeje FIFO // orientim/lëvizje vars Quaternion q; // enë kuaternion VectorFloat graviteti; // vektori i gravitetit float ypr; //yaw/pitch/roll enë dhe vektori i gravitetit //PID dyfishi origjinalSetpoint = 173; pikë e caktuar e dyfishtë = pikëcaktimi origjinal; me lëvizje të dyfishtëAngleOffset = 0.1; hyrje, dalje e dyfishtë; //rregulloni këto vlera për t'iu përshtatur dizajnit tuaj të dyfishtë Kp = 50; dyfishi Kd = 1,4; dyfishi Ki = 60; PID pid(&hyrja, &dalja, &pika e vendosjes, Kp, Ki, Kd, ​​DIRECT); motor i dyfishtëSpeedFactorLeft = 0.6; motor i dyfishtëSpeedFactorRight = 0,5; //KONTROLLER MOTOR int ENA = 5; int IN1 = 6; int IN2 = 7; int IN3 = 8; int IN4 = 9; int ENB = 10; LMotorController MotorController (ENA, IN1, IN2, ENB, IN3, IN4, motorSpeedFactorLeft, motorSpeedFactorRight); volatile bool mpuInterrupt = false; // tregon nëse pini i ndërprerjes së MPU-së është zbehur dmpDataReady() ( mpuInterrupt = true; ) void setup() ( // bashkohu me autobusin I2C (biblioteka I2Cdev nuk e bën këtë automatikisht) #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIREbegin(Wirebe. ); TWBR = 24; // Ora I2C 400 kHz (200 kHz nëse procesori është 8 MHz) #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire::setup(400, e vërtetë); #endif mpu.mpu.initialize; // jepni këtu zhvendosjet tuaja të xhiros, të shkallëzuara për ndjeshmërinë min. mpu.setXGyroOffset(220); mpu.setYGyroOffset(76); mpu.setZGyroOffset(-85); mpu.setZAccelOffset(1788); // 1688 parazgjedhja e fabrikës për testin tim çipi // sigurohuni që të funksionojë (kthehet 0 nëse po) nëse (devStatus == 0) ( // aktivizoni DMP-në, tani që është gati mpu.setDMPEnabled(true); // aktivizoni zbulimin e ndërprerjeve në ArduinoInterrupt(0 , dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus(); // vendosni flamurin tonë DMP Ready në mënyrë që funksioni kryesor loop() ta dijë se është në rregull ta përdorë atë dmpReady = e vërtetë; // merrni madhësinë e pritshme të paketës DMP për paketën e krahasimit të mëvonshëm = mpu.dmpGetFIFOPacketSize(); //konfigurim PID pid.SetMode(AUTOMATIC); pid.SetSampleTime(10); pid. SetOutputLimits (-255, 255); ) else ( // ERROR! // 1 = ngarkimi fillestar i memories dështoi // 2 = Përditësimet e konfigurimit DMP dështuan // (nëse do të prishet, zakonisht kodi do të jetë 1) Serial.print(F("Initializimi DMP dështoi (kodi ")); Serial.print(devStatus); Serial.println(F(")")); ) ) void loop() ( // nëse programimi dështoi, mos u përpiqni të bëni asgjë nëse (!dmpReady ) kthehen; // prisni për ndërprerjen e MPU-së ose paketat shtesë të disponueshme ndërsa (!mpuInterrupt && fifoCount< packetSize) { //no mpu data - performing PID calculations and output to motors pid.Compute(); motorController.move(output, MIN_ABS_SPEED); } // reset interrupt flag and get INT_STATUS byte mpuInterrupt = false; mpuIntStatus = mpu.getIntStatus(); // get current FIFO count fifoCount = mpu.getFIFOCount(); // check for overflow (this should never happen unless our code is too inefficient) if ((mpuIntStatus & 0x10) || fifoCount == 1024) { // reset so we can continue cleanly mpu.resetFIFO(); Serial.println(F("FIFO overflow!")); // otherwise, check for DMP data ready interrupt (this should happen frequently) } else if (mpuIntStatus & 0x02) { // wait for correct available data length, should be a VERY short wait while (fifoCount < packetSize) fifoCount = mpu.getFIFOCount(); // read a packet from FIFO mpu.getFIFOBytes(fifoBuffer, packetSize); // track FIFO count here in case there is >1 pako në dispozicion // (kjo na lejon të lexojmë menjëherë më shumë pa pritur një ndërprerje) fifoCount -= packetSize; mpu.dmpGetQuaternion(&q, fifoBuffer); mpu.dmpGetGravity(&graviteti, &q); mpu.dmpGetYawPitchRoll(ypr, &q, &graviteti); hyrje = ypr * 180/M_PI + 180; ) )

Vlerat Kp, Ki, Kd mund të funksionojnë ose jo. Nëse nuk e bëjnë, ndiqni hapat e mësipërm. Vini re se animi në kod është vendosur në 173 gradë. Nëse dëshironi, mund ta ndryshoni këtë vlerë, por kini parasysh se ky është këndi i animit që roboti duhet të mbajë. Gjithashtu, nëse motorët tuaj janë shumë të shpejtë, mund të rregulloni vlerat motorSpeedFactorLeft dhe motorSpeedFactorRight.

Kjo është e gjitha për tani. Shihemi.