Raspberry Pi Web kontrollerad / autonom Robot
Introduktion (uppdaterad 26/12/15)
Detta är min första någonsin försök att bygga en web styrd robot med inbyggd i fristående läge. Projektet började som en Arduino Nano baserat kollision undvikande robot byggd för att inspirera lågstadiebarn och utveckla ett intresse för datorer och elektronik.
Roboten var först en enkel kollision undvikande robot som jag sedan till en Raspberry Pi. Kopplade till Pi var PIR rörelsedetektor och en Logitech C270 webbkamera, allt monterat på toppen. Jag satte ihop ett litet python program med fswebcam för att ta bilder med webbkamera när PIR rörelsedetektor upptäckt rörelse, som var hela tiden att roboten skulle flytta. De stilla bilderna ersattes senare med en direktuppspelad video, fulländade ett python program kallas MJPG-Streamer.
Efter en hel del forskning var Pi ansluten till Nano över i2c följetong (två tråd) gränssnitt till tjäna en webbsida som kan användas för att skicka och ta emot kommandon för att kontrollera förflyttning av roboten och Visa videoströmmen.
Detta är fortfarande ett pågående arbete och är långt ifrån färdig men jag tyckte det var på tiden att jag skapat en blogg på bygga. Om jag får tid senare jag kommer att göra en steg för steg, i den tiden gärna ställa mig frågor och om jag kan ska jag hjälpa.
Reservdelslista:
1. raspberry Pi modell B
2. Logitech C270 webbkamera
3. Arduino Nano AT-Mega328P (kinesisk kopia)
4. PIR detektor (överflödig i den senast bygga)
5. EasyAcc 10000mAh USB-batteripack (att driva Raspberry Pi)
6. LiPo 7.4v uppladdningsbart batteri
7. WiFi Dongle
8. HC-SR04 Ultrasonic Sensormodul
9. L298N dubbla "H" bro Motor förare ombord
10. 9g Micro Servo
10. plexiglas chassi (med 2 x DC-motorer och Caster Wheel)
11. rävar kex och G Shock klocka tenn
12. hane till hane och manliga till kvinnliga startkablar
13. Lödfritt set av brödunderläggen
Bygget
Inledningsvis, som jag nämnde ovan, roboten började i livet till följd av behovet av att bygga en kollision undvikande robot för en skola robotics klubb. Tanken var att identifiera delar billigt nog att byggnaden av en robot överkomliga för klubbmedlemmar som var i Y5 och Y6 på grundskola som jag för närvarande utbildning. Den första roboten baserades på en Arduino Nano AT-Mega328P, att hålla kostnaderna nere. Det ingår även ett plexiglas chassi Kit som ingår 2 x DC motorer och ett hjul hjul. Kollision upptäckt var etablerad där en Ultrasonic Sensor och en dubbel H bro Motor används för att kontrollera motorerna. Power lämnades inledningsvis från 1 x PP3 9v batteri (ingen forskning gjort på batterier och effektbehovet på denna punkt).
Denna ursprungliga plan var för Ultrasonic Sensor monteras på 9g Micro Servo men fattiga och un-forskat batteri valet visat sig vara otillräckliga att köra allt med servo bifogas.
Med servo utelämnas roboten fungerade beundransvärt och visade sig vara en favorit och förblev den versionen köpt och byggdes av barnen.
Effektbehovet
Som nämnts ovan var inledningsvis Roboten drivs med ett 9v PP3 batteri. Detta var bra för att driva bara motorer och ultrasonic sensor emellertid, för att denna version av roboten ska ha en ultrasonic sensor monterad på en roterande servo det skulle behöver ett bättre nätaggregat. Efter att ha forskat effektbehovet på låt oss göra robotar, fick jag rådet att dike 9v PP3 (som för övrigt är avsedda för mycket låg konsumtion föremål som röker avkännare) och välja AA-batterier, helst uppladdningsbart med runt ett 2000mAh betyg. Jag blev tillsagd att använda 6 som laddningsbara AA utgång runt 1.2V i stället för 1,5 v utgång av den icke - laddningsbara typ.
Ett annat alternativ som jag blev tillsagd att fullfölja var att använda litium Polymer (LiPo) batterier, vanligen används bland robotics broderskap. Även om batterierna är rimligt prissatta (ca £11 för en 2 Cell Pack - 7.4v) du kommer också behovet av en balans laddare som är dyra. Detta är en hög initial utgift men är en en av kostnaden.
Till slut köpte jag en 7.4v (Turnigy) LiPo-batteri:
http://www.hobbyking.com/hobbyking/Store/__9172__T...
Och en Imax B6ACBalance laddare:
http://www.hobbyking.com/hobbyking/Store/__58285 __...
Det rekommenderas också att du får en LiPo laddning väska som är brand bevis, dessa batterier är ganska säkert men om man är skadad och debiteras de kan vara besläktad med ljus ett fyrverkeri i ditt hus!
Att använda detta batteriet med laddaren jag hade att löda på en annan kontakt i änden av batteriet.
Detaljer för hur batteriet är ansluten behandlas nedan.
Raspberry Pi drivs med hjälp av en USB-laddningsbara Power Pack, i mitt fall använde jag en EasyAcc 10000mAh packa som när fullt ut sista för åldrar (inte en teknisk enhet av åtgärd men du får min drift).
Chassi-uppgradering
Att ge det en kropp och ändra den visuella aspekten av roboten jag monterade en rävar kex tenn utöver de perspex chassin och inrymt alla av elektronik inne i den. Ultrasonic sensorn var monterad inuti en tin som kom med en ny Casio G Shock. Tenn skars med en blandning av tenn Snips, sax och Stanley kniv, när snittet var försiktig eftersom kanterna är knivskarpa, jag slipat dem men också täckte dem med PVC tejp.
Mikroprocessorer
I skrivande stund denna robot har två mikroprocessorer, en Raspberry Pi och en Arduino Nano. Arduino Nano driver DC-motorer och ultraljud sensorn och RPi tillhandahåller WiFi / Web Control, kör en webbkamera och har förmåga att ytterligare förbättra / expandera denna robot.
Nano och RPi förbinds med en ic2 två tråd anslutning, Nano är inställt som en slav enhet och RPi är mästare. Med Nano för att driva motorer och sensorer på detta sätt undviker trämaterial Pis GPIO stiften som säkerställer expansionsmöjligheter.
Som nybörjare, ställa in i2c tog en hel del forskning och även om det fungerar det motoriska kontrollerar fortfarande behöver finjustering.
Elektronik
2 x likströmsmotorer är anslutna till en L298N H bro Motor förare ombord, dessa styrelser aktiverar kontroll av DC-motorer att driva dem framåt och bakåt. L298 kommer också med en onboard 5v spänningsregulator. L298 är ett billigt alternativ men lider av ett stort spänningsfall så se till att batteriet är mer än tillräckligt stor.
Batteriet är anslutet till L298 via en enkel Single Pole enda kasta (SPST) strömbrytare. L298 sedan ger 5v ström till den Lödfritt set av brödunderläggen som i sin tur ger makt till HC-SR04 Ultrasonic Sensor, 9g Micro Servo på som sensorn är monterad och Arduino Nano.
Hur det fungerar
RPi är setup med fjärråtkomst och när påslagen jag logga in på det genom att använda SSH (Secure Shell) och starta Python program som fungerar som i2c master programmet att kontrollera Arduino. Från i Python programmet ett bash-script är kör som börjar ett annat Python program att fungera en webbsida med WebIOPi ett Python program för webb-kontroll, detta kräver också en annan Python Program, mjpg-streamer som kopplar på webcam och strömmar mjpg ramar som visas på webbsidor av WebIOPi. Webbsidan som jag skapade innehåller en helt enkelt kontrollpanel med knappar märkta framåt, bakåt, vänster, höger och stopp. Jag lade också till ett par knappar för att aktivera servo som huvudet är monterad på.
När roboten själv slås på Nano eldar upp och börjar lyssna efter kommandon kommer in över i2c gränssnittet från Pi (när en knapp trycks på Kontrollpanelen webbsida). Jag har också setup en "autonoma läge" som väntar på en angiven tidsperiod och om inga kommandon tas emot av robot startar automatiskt navigera runt dess miljö.
Koden
Det finns tre program associeras till detta projekt, HTML, Python och skiss.
HTML-filen är webbsidan betjänas av Pi med WebIOpi, Python kod startar i2c master programmet, startar WebIOPi och anropar mjpg-streamer för att strömma video foder. Skiss koden laddas upp till Arduino att ställa upp som en slav och invänta och action kommandon tas emot från Pi samt ge den autonoma läget.
YouTube
Här är en länk till en kort YouTube video av roboten i aktion (endast autonomt läge), han krascha några tid men jag redigerade dem :-)
Aktuella frågor
Vid tiden för uppdateringen finns två problem med den aktuella versionen:
1. rörelse (speciellt vänster och höger). Kontrollen över webbgränssnittet ytterligare arbete, om du klickar på en kontroll på Kontrollpanelen webbsida (en .html mus ner händelse) orsakar roboten att flytta, det finns för mycket fördröjning mellan e-stoppkommandot (mus upp händelsen när användaren släpper musknappen) och roboten stoppa den aktuella kommandot. Detta är inte särskilt märkbar när du flyttar framåt och bakåt, när roboten aktiverar gäller ca 270 grader varje gång vilket gör fina kontroll omöjlig. Mer arbete krävs?
2. autonoma läge. Autonoma läge sparkar i efter ungefär en minut av inaktivitet men när användaren försöker att ta kontroll igen ganska det autonoma läge upphör, bär det på vilket resulterar i en kamp mellan användaren och robotarna AI för kontroll! Förmodligen en enkel fix men återigen mer arbete krävs.
Jag har setup en GitHub konto till värd koden men jag har aldrig använt Git NAV innan så jag kämpar för att fungera det ut allt så fort jag gör jag kommer lägga upp länken till olika koden som används i detta projekt.
Jag hoppas du gillar denna blogg / projekt och om du behöver hjälp med det du välkommen att lämna en kommentar eller hitta mig på LMR.