Reparation Design möbel

Hur man gör en robot på Arduino gör det själv: Hemlagad Robot Arduino hemma. Arduino Robot med egna händer Kontrollera polariteten och korrekta anslutningen av modulerna

Hej alla. Den här artikeln är en liten historia om hur att göra Robot stygg hända. Varför exakt historien, frågar du? Allt på grund av det faktum att för tillverkningen av sådant hantverk Det är nödvändigt att använda betydande kunskap av kunskap, vilket är mycket svårt att presentera i en artikel. Vi kommer att vidarebefordra samlingsprocessen, titta på ett öga i programkoden och i slutändan återuppliva "Silicon Valley" brainchild. Jag råder dig att titta på videon för att få en uppfattning om att i slutändan ska träna.

Innan du går vidare, vänligen notera följande i tillverkningen hantverk En laserskärare användes. Från laserskäraren kan du vägra, ha tillräcklig erfarenhet med dina händer. Noggrannhet utskjuter att nyckeln som hjälper till att slutföra projektet framgångsrikt!

Steg 1: Hur fungerar det?

Roboten har 4 ben, med 3 servostyrningar på var och en av dem, vilket gör det möjligt att flytta lem i 3 grader av frihet. Han rör sig "Crawling Gait." Låt det sakta, men en av de minsta.

Först måste du lära roboten framåt, tillbaka, vänster och höger, lägg sedan till en ultraljudssensor, som hjälper till att upptäcka hinder / hinder, och sedan Bluetooth-modulen, tack vare vilken robothantering som kommer att släppas.

Steg 2: Obligatoriska detaljer

Skelett Den är gjord av plexiglas med en tjocklek på 2 mm.

Den elektroniska delen av hemlagad kommer att bestå av:

  • 12 servostyrningar;
  • arduino nano (kan ersättas med någon annan Arduino bräda);

  • Shilde för servostyrning;
  • strömförsörjning (i projektet använde BP 5V 4A);

  • ultraljudssensor;
  • hC 05 Bluetooth-modul;

För att göra sköld behöver du:

  • monteringsbräda (helst med delade linjer (däck) av näring och mark);
  • interplaniala PIN-kontakter - 30 st;
  • board Sockets - 36 st;

  • ledningar.

Instrument:

  • Laserskärare (eller skickliga händer);
  • Superlim;
  • Plock.

Steg 3: Skelett

Vi använder grafikprogrammet för att rita kompositdelar av skelettet.

Efter det, på något tillgängligt sätt, skär ut 30 detaljer om den framtida roboten.

Steg 4: Montering

Efter skärning tar vi bort det skyddande papperslocket från plexiglaset.

Fortsätt sedan till benets montering. Fästelement inbyggda i bitar av skelett. Allt som återstår att göra är att ansluta detaljerna tillsammans. Anslutningen är ganska tät, men för större tillförlitlighet kan du tillämpa en droppe superklon på fästena.

Då måste du slutföra servokrifterna (limmade längs skruven mitt emot servos axlar).

Denna förbättring vi kommer att göra en robot mer stabil. Förbättring behöver endast utföras för 8 servostyrningar, de återstående 4 kommer att fästas direkt på kroppen.

Fäst benen på bindemedelselementet (krökt föremål) och i sin tur till servo på kroppen.

Steg 5: Vi gör sköld

Tillverkningen av styrelsen är ganska enkel, om du följer de bilder som presenteras i steg.

Steg 6: Elektronik

Bill Servo Slutsatser på Arduino Board. Slutsatser bör anslutas i rätt ordning, annars kommer ingenting att fungera!

Steg 7: Programmering

Det är dags att återuppliva Frankenstein. Först ladda ner programmet Legs_init och se till att roboten är i en sådan position som på bilden. Nästa, ladda ner Quattro_Test för att kontrollera om roboten reagerar på de grundläggande rörelserna, som att gå framåt, bakåt, vänster och höger.

VIKTIGT: Du måste lägga till ett valfritt bibliotek till Arduino IDE-programvarumiljö. Länk till biblioteket presenteras nedan:

Roboten ska ta 5 steg framåt, 5 steg tillbaka, sväng till vänster om 90 grader, sätt på 90 grader till höger. Om Frankenstein gör allt, flyttar vi i rätt riktning.

P.. S.: Installera roboten på en kopp, som på stativet, för att hålla den på den ursprungliga punkten varje gång. Så snart testen visade robotens normala drift kan vi fortsätta provet genom att sätta det på marken / våningen.

Steg 8: Inverse Kinematics

Inverse (Reverse) Kinematics - Det är i verkligheten och hanterar roboten (om du inte är intresserad av den matematiska sidan av det här projektet och du har bråttom för att avsluta projektet kan du hoppa över det här steget, men vet att roboten flyttas kommer alltid vara användbar).

Enkla ord, invers kinematik eller förkortad IR är "del" av trigonometriska ekvationer, vilket bestämmer läget för den akuta änden av benet, vinkeln för varje servo, etc., som i slutändan bestämmer ett par preliminära installationsparametrar. Till exempel kommer längden på varje steg i roboten eller höjden av kroppen att vara belägen under rörelse / vila. Med hjälp av dessa fördefinierade parametrar kommer systemet att extrahera det värde som ska flyttas av varje servo för att styra roboten med hjälp av kommandona.

Låt oss prata om hur man använder Arduino för att skapa en robot som balanserar som en Sigway.

Sigway från engelska. Segway - ett tvåhjuligt fordon som är utrustat med en elektrisk enhet. De kallas också gyros eller elektriska skotrar.

Har du någonsin undrat hur Sigway fungerar? I den här lektionen kommer vi att försöka visa dig hur man gör Arduino's Robot, som balanserar dig precis som Segway.

För att balansera roboten bör motorer motverka robotens fall. Denna åtgärd kräver feedback och korrigerande element. Feedback Element - som ger både acceleration och rotation i alla tre axlarna (). Arduino använder det för att känna till robotens nuvarande orientering. Korrigeringselementet är en kombination av motorn och hjulen.

Som ett resultat borde det vara ungefär en sådan vän:

Robotschema

MOTOR DRIVER MODULE L298N:

DC Växellåda Motor med hjul:

Den självbalanserande roboten är i huvudsak en inverterad pendel. Det kan bättre balanseras om mitten av massan är över i förhållande till hjulaxeln. Massens högsta centrum betyder ett högre ögonblick av tröghetsmassa, vilket motsvarar en lägre vinkelacceleration (långsammare droppe). Det är därför vi sätter batteriet på toppen. Höjden på roboten valdes emellertid på grundval av närvaron av material 🙂

Den färdiga versionen av en oberoende balanseringsrobot kan ses i figuren ovan. På toppen finns sex NI-CD-batterier för att driva ett tryckt kretskort. I intervallet mellan motorerna används ett 9 volt batteri för motordrivrutinen.

Teori

I teorin om ledning, som håller en variabel (i det här fallet, är robotens läge), som krävs, kallad PID (proportionellt integrerat derivat). Var och en av dessa parametrar har en "ökning", vanligen kallad KP, KI och KD. PID ger en korrigering mellan önskat värde (eller ingång) och det faktiska värdet (eller utmatningen). Skillnaden mellan ingången och utgången kallas ett "fel".

PID-styrenheten minskar felet till det minsta möjliga värdet, ständigt justering av utgången. I vår självbalanserande robot Arduino-ingång (som är önskad lutning i grader) installeras av programvara. MPU6050 läser robotens nuvarande lutning och levererar den till PID-algoritmen som utför beräkningar för att styra motorn och håller roboten i ett vertikalt läge.

PID kräver att värdena på KP, KI och KD är konfigurerade till optimala värden. Ingenjörer använder programvara som Matlab för att automatiskt beräkna dessa värden. Tyvärr kan vi inte använda Matlab i vårt fall, eftersom det kommer att komplicera projektet ännu mer. I stället anpassar vi PID-värdena. Så här gör du det:

  1. Gör kp, ki och kd lika noll.
  2. Justera kp. För lite kp kommer att tvinga en robot att falla, eftersom korrigeringarna inte räcker. För mycket kp gör roboten vild och bakåt. En bra kp kommer att göra att roboten helt kommer att avvika och gå framåt (eller svänger något).
  3. Så snart KP är installerat, justera KD. Det goda värdet av KD kommer att minska oscillationer tills roboten blir nästan stabil. Dessutom håller den korrekta KD roboten, även om den tolper.
  4. Slutligen installera KI. När du slår på roboten, varierar den, även om KP och KD är installerade, men kommer att stabiliseras i tid. Det korrekta värdet av KI kommer att minska den tid som krävs för att stabilisera roboten.

Robotens beteende kan ses nedan på videon:

Arduino Code självbalanseringsrobot

Vi behövde fyra externa bibliotek för att skapa vår robot. PID-biblioteket förenklar beräkningen av värdena på P, I och D. LmotorController-biblioteket används för att styra två motorer med L298N-modulen. I2CDEV-biblioteket och MPU6050_6_Axis_motionApps20-biblioteket är utformat för att läsa data med MPU6050. Du kan ladda ner koden, inklusive bibliotek i detta förråd.

#Omfatta. #Omfatta. #include "i2cdev.h" #include "mpu6050_6axis_motionapps20.h" #oF I2Cdev_implementation \u003d\u003d i2cdev_arduino_wire #incled "wire.h" #endif #define min_abs_speed 20 mpu6050 mpu; // MPU-kontroll / status VARS BOOL DMPREADY \u003d FALSE; // Ange sant om DMP INIT var framgångsrik Uint8_T MPUintstatus; // håller faktiska avbrytande statusbyte från MPU Uint8_T Devstatus; // Returstatus efter varje enhetsoperation (0 \u003d Framgång ,! 0 \u003d Fel) UINT16_T PacketSize; // Förväntad DMP-paketstorlek (standard är 42 byte) uint16_t fifocount; // räkna med alla byte för närvarande i FIFO Uint8_T FifoBuffer; // FIFO Storage Buffer // Orientering / Motion Vars Quaternion Q; // kvaternionsbehållare vecellfloat tyngdkraft; // gravitation vektor float ypr; // YAW / PITCH / ROLL CONTAINER OCH TRAVITITY Vector // PID Double OriginalsSetpoint \u003d 173; Double Setpoint \u003d Originalsetpoint; Dubbel rörelseureffeset \u003d 0,1; Dubbelingång, utgång; // Justera dessa värden för att passa din egen design Double KP \u003d 50; Dubbel kd \u003d 1,4; Dubbel ki \u003d 60; PID PID (& Input, & Output, & Setpoint, KP, KI, KD, Direkt); Dubbelmotorspeedfaktorleft \u003d 0,6; Dubbelmotorspeedfaktorright \u003d 0,5; // Motorstyrenhet INT E ENA \u003d 5; int i1 \u003d 6; int i2 \u003d 7; int i3 \u003d 8; int i4 \u003d 9; int enb \u003d 10; Lmotorcontroller Motorcontroller (ENA, IN1, IN2, ENB, IN3, IN4, MOTORSPEEDFACTORLEFT, MOTORSPEEDFACTORRIGHT); Voltile bool mpuinterrupt \u003d false; // Anger om MPU-avbrytningsstift har gått högt tomt DMPDatAready () (mpuinterrupt \u003d True;) Void Setup () (// Gå med i I2C Bus (i2CDEV-biblioteket gör inte det här automatiskt) #OF I2CDEV_IMPLEMENTION \u003d\u003d I2CDEV_ARDUINO_WIRE WIRE.BEGIN ( ); Twbr \u003d 24; // 400khz i2c klocka (200khz om cpu är 8mhz) #elif i2cdev_implementation \u003d\u003d i2cdev_builtin_fastwire fastwire :: setup (400, sant); #endif mpu.initialize (); devstatus \u003d mpu.dmpinitialize (); // leverera dina egna gyro offsets här, skalad för min känslighet mpu.setxgymounceSet (220); mpu.setygyrooffset (76); mpu.setzgyrooffset (-85); mpu.setzacceloffset (1788); // 1688 Fabriksinställningar för mitt test Chip // Se till att det fungerade (returnerar 0 om så är fallet) om (Devstatus \u003d\u003d 0) (// Slå på DMP, nu när den är klar mpu.SetDMPenabled (TRUE); // Aktivera Arduino Interrupt Detection Attachinterrupt (0 , DMPDatAready, stigande); mpuintstatus \u003d mpu.getintstatus (); // Ange vår DMP-färdig flagga så att huvudslingan () fungerar det är okej att använda det dmpread \u003d sant; // få förväntat dm P Paketstorlek för senare jämförelsepaket \u003d mpu.dmpgetfipaketsize (); // Inställning PID PID.SättMode (Automatisk); Pid.setsampletime (10); Pid. Setputputitits (-255, 255); ) Annars (// Fel! // 1 \u003d Initial Memory Load Misslyckades // 2 \u003d DMP-konfigurationsuppdateringar misslyckades // (om det kommer att bryta, vanligtvis kommer koden att vara 1) Serial.Print (F ("DMP Initialization Misslyckades (kod ")); Serial.Print (Devstatus); Serial.Println (F (") "));)) Void Loop () (// Om programmering misslyckades, försök inte göra någonting om (! Dmpready ) Returnera; // vänta på MPU-avbrott eller extra paket (er) tillgängliga medan (! 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 paket tillgängligt // (det här låter oss omedelbart läsa mer utan att vänta på ett avbrott) Fifocount - \u003d packetsize; Mpu.dmpgetQuaternion (& Q, FifoBuffer); Mpu.dmpgetgravity (& tyngdkraften, & q); mpu.dmpgetyawpitchroll (YPR, & Q, och tyngdkraften); Ingång \u003d YPR * 180 / M_PI + 180; ))

KP, KI, KD-värden kan fungera eller arbeta. Om de inte gör det, följ de ovan beskrivna stegen. Observera att lutning i koden är inställd på 173 grader. Du kan ändra detta värde om du vill, men notera att det här är en lutningsvinkel som bör stödjas av en robot. Dessutom, om dina motorer är för snabba, kan du justera värdena för MotorSpeedFactorleft och MotorSpeedFactorright.

Det är allt. Vi ses.

Men med inköp av en färdig fullfjädrad robot på grundval av denna avgift. För barn av grundskola eller förskoleålder är sådana färdiga Arduino-projekt ännu bättre, eftersom "Unexplus" avgiften ser tråkig ut. Ett sådant sätt Lämplig för dem som de elektriska scheman inte är särskilt lockade.

Genom att köpa robotens arbetsmodell, d.v.s. Egentligen redo högteknologisk leksak, du kan vakna intresse för oberoende design och skapa robotar. Efter att ha spelat i en sådan leksak och deråt i hur det fungerar kan du fortsätta att förbättra modellen, demontera allt i delar och börja samla nya projekt på Arduino, med hjälp av en plattform som släpps, kör och sensorer. Öppenheten på Arduino-plattformen gör att du kan skapa nya leksaker från samma komponentdelar.

Vi erbjuder en liten översyn av de färdiga robotarna på Arduino-styrelsen.

Maskin på Arduino, styrd via Bluetooth

Maskinstyrd via Bluetooth, värt lite mindre än $ 100. Kommer i demonterad form. Förutom huset, motorn, hjul, litiumbatterier och laddare, mottar vi Arduino UNO328-kortet, en motorstyrenhet, en Bluetooth-adapter, fjärrkontroll och så vidare.

Video med detta och en mer robot:

En mer detaljerad beskrivning av leksaken och möjligheten att köpa på webbplatsen för online-butiken DealExtreme.

Arduino Robot Turtle

Kit för montering av robotsköldpadda värt ca $ 90. Det finns inte tillräckligt med skal, allt som är nödvändigt för livet för den här hjälten, komplett: Arduino Uno, servo-enheter, sensorer, spårningsmoduler, IR-mottagare och fjärrkontroll, batteri.

En sköldpadda kan köpas på DealExtreme, en liknande billigare robot på AliExpress.

Crawler Machine på Arduino, hanterad från mobiltelefon

Crawler, styrd av Bluetooth med mobiltelefon, värt $ 94. Förutom Caterpillar-databasen får vi Arduino Uno Board och Extension Board, Bluetooth-avgift, batteri och laddare.

Den spårade bilen kan också köpas på DealExtreme hemsida, det finns en detaljerad beskrivning. Kanske mer intressant järn Arduino-tank på aliexpress

Arduino bil som passerar labyrinter

Bil som passerar labyrinter, värt $ 83. Förutom motorer, Arduino Uno-kort och andra nödvändiga fitnessmoduler och hinderkopplingsmoduler.

Klarrobot eller robotram

Förutom användningen av färdiga kit för att skapa arduino-robotar kan du köpa en separat ram (kropp) på roboten - det kan vara en plattform på hjul eller caterpillage, humanoid, spindel och andra modeller. I det här fallet måste fyllningen av roboten göra det själv. En översikt över sådana byggnader ges i vårt.

Var annars köpa färdiga robotar

I granskningen valde vi det billigaste och intressanta i vår åsikt färdiga Arduino-robotar från kinesiska nätbutiker. Om det inte finns någon tid att vänta på paketet från Kina - ett stort urval av färdiga robotar i nätbutiker Amperka och Tessy. Låga priser och snabb leverans erbjuder online-butik Robstore. Lista över rekommenderade butiker.

Kanske är du också intresserad av våra projektrecensioner på Arduino:


Utbildning Arduino.

Vet inte var du ska börja lära dig arduino? Tänk att du är närmare - församlingen av dina egna enkla modeller och gradvis deras komplikationer eller bekanta med mer komplexa, men färdiga lösningar?

Lite om roboten. Först och främst var projektet det billigaste. Korps skapade utan beräkningar och balansering, huvudbehovet för kroppen är minimala dimensioner. Så låt oss börja samla denna robot.

Lista över delar:
1. En uppsättning komponenter i huset och en tass från plexiglas 1,5 mm.
2. Arduino Mega eller Uno (används mega) - 1 st.
3. Micro Servos (Begagnade TowerPro SG90) - 8 st.
4. Ultrasonic Range Finder HC-SR04 - 1 st.
5. Batterisstorlek 18560, 3.7V (Begagnad Trustfire 2400 mAh) - 2 st.
6. Batterihållare av storlek 18560 (en förmedlad behållare används - förpackning) - 1 st.
7. Rack för ett tryckt kretskort på 25 mm. (Dessa ställen används) - 4 st.
8. En del av dumpningskortet.
9. WIRES-JUMPER.
10. Skruva DIN 7985 m2, 8 mm. - 18 st.
11. NUT DIN 934 m2 - 18 st

Z-Robodog Robotmontering:

1. Robotskrovet är tillverkat av en transparent plexiglas med en tjocklek av 1,5 mm. Alla delar skärs av en laser genom att dra i CorelDRAW-programmet:

2. Kläm fast fallet med andra lim. Styrkan i det limmade skrovet blir tillräckligt. Vid montering, ta hänsyn till hålens läge på bottenkåpan (se bilder) och bättre bifoga en avgift och se till att allt sammanfaller. Sidoväggar är fäst så att hålen för ledningarna är närmare bakväggen. En bredare öppning på bakväggen är avsedd för USB-ledningar, anser detta vid montering.


3. Markera och borra hål (2 mm borr.). Säkra servostyrningarna i fallet med hjälp av bultar och muttrar (objekt 10, 11 från listan). Axlarna på de främre servo-enheterna måste vara närmare framväggen. Bakre servoaxlar närmare bakväggen.




4.1. Samla tassar. Ta de övre delarna av tassan (med två hål). Posta mitten av delen. Att ersätta gungning av servos, markera fästplatserna med skruvar och borrhål (1,5 mm borr). Säkra de rockande sakerna så att skruvarna på skruvarna var från landningsområdena. Gungskor fäster från olika sidor och säten för axlar som är i motsatt riktning.


4,2. Markera och borra hål för montering av servostyrningar (2 mm borr). Axlar av fasta servostyrningar måste vara närmare den smala kanten av tassen.


4,3. Så att tassarna inte släpper närmare dem till exempel gummi. Men pastens framsida bör inte fastna, med stegen, hunden kan engagera och hålla fast. Jag klistrade på remsor av en liputmatta gjord av bil.

5. Markera och borra hål för fastsättning av ultraljudsfallet (2 mm borr). Installera mätaren, måste kontakternas ben riktas uppåt.

6. Montera batterihållaren så att den i det fall är beläget i mitten. Säkra Arduino-kortet och anslut alla komponenter. För kraftförgrening användes en del av dumpavgiften.

Konfigurera och starta Robot Z-Robodog:

I detta skede måste du självständigt installera tassarna så att du kan kalibrera stegen. Det största problemet i knapparna, som är fäst på axlarna endast i vissa positioner. Och även servo-enheterna kan skilja sig från arbetsgrader.

Så här ser mina hunds hundar på de extrema punkterna i servo-vinklarna (variablerna ZS1, ZS2, ZS3, etc.). Försök att sätta tassarna som på bilden. Visuellt tassar bör vara i samma positioner.

I huvudstället kan du också ställa in tassarna. Efter det, glöm inte att fästa gungstolarna till servos av servo-enheter.


Z-Robodog Software Del:

Koden är väldigt enkel, kommentarer läggs till överallt. Alla rörelser är i matrisen, för att inte bli förvirrad i antal använde jag variabler för varje servo. Till exempel S1-servo 1, S2-servo 2 och så vidare. För att förenkla förståelsen och erbjuda dig detta system.

I diagrammet är tassarna numrerade, varje del av tassen som är associerad med servoen som rör den. Även för varje tass anger rörelsens riktningar, tecknen plus och minus indikerar var tassen kommer att röra sig med ökande eller minskning i vinkeln. De initiala vinklarna är valda hörn av huvudstativet (S1, S2, S3, etc.). Om du till exempel behöver dra ut den 2: a tassen måste du öka vinkeln S3 och S4, i den matris som den kommer att se ut så här (S1, S2, S3 + 100, S4 + 50, S5, S6, S7, S8 ). Här är en komplett skiss. Koden skrevs på grund av min kunskap, låt mig veta om jag valde fel sätt att genomföra.

Video:


Skiss i arkivet: Du har inte tillgång till att ladda ner filer från vår server.