Jag programmerade ett enkelt filter med glidande medelvärde. Detta lågpassfiltrerar bort snabba förändringar vilket gjorde roboten lugnare och med färre översvängningar.
Som man ser i videon klarar den nu av större stötar än tidigare.
Jag programmerade ett enkelt filter med glidande medelvärde. Detta lågpassfiltrerar bort snabba förändringar vilket gjorde roboten lugnare och med färre översvängningar.
Som man ser i videon klarar den nu av större stötar än tidigare.
I videon kan man se att roboten håller sig på någorlunda samma ställe på golvet och klarar av att ta emot lättare stötar. För att uppnå detta kaskadkopplade jag två PID-regulatorer och la till lågpassfilter på både hjulens rotationshastighet och robotens lutning.
Eftersom en Arduino inte har väldigt mycket processorkraft valde jag att använda totalt 3 mikroprocessorer:
Två kaskadkopplade PID-regulatorer. Den första har hastighet som setpoint (alltid 0 i det här fallet) och lutning som output. Om roboten rullar framåt kommer regulatorn att få ett positivt är-värde och skicka ut en negativt utsignal. Detta innebär att roboten kommer att vilja luta bakåt för att bromsa upp hastigheten.
PID-regulatorn nummer 2 tar hand om robotens vinkel relativt golvet. Börvärdet är utsignal från den tidigare PID-regulatorn. Normalt kommer börvärdet att variera från -3 till 3. Noll motsvarar att roboten ska stå helt rakt upp. Utsignalen kopplas till motorstyrningen och varierar från -100 till 100. -100 motsvarar full spänning till motorerna i bakåtriktning.
För att få renare insignaler används FIR-filter på både vinkel och hjulens hastighet. Lågpassfilter gör att snabba förändringar (exempelvis sensorbrus) inte släpps igenom.
Till vinkeln relativt golvet används en IMU med accelerometer och gyro. Ett komplementärfilter kombinerar signalerna från dessa och ger en utsignal som går att använda.
Jag hade som mål att all kod till detta projekt ska vara öppen och finnas att hämta på github. I readme finns länkar till bibliotek jag använt.
Lägger också upp cad och ritningar.
Jag kommer behöva justera PID för att få den självbalanserande. Det är för stora översvängningar och den beter sig väldigt oroligt. Uppdaterar när jag får bättre stabilitet.
Vid busshållplatser finns det ofta en monitor som visar tid till nästa buss. Min tanke var att en sådan vore användbar även hemma för att veta när man behöver gå ut. Såhär blev det:
Monitorn står på en garderob i kontoret väl synlig även från hallen. Nu kan man slå ett öga på busstiderna när man klär på sig. Allt för ofta har jag sprungit ner till en buss och ändå missat den. Kanske ändrar detta på saken.
Jag programmerade en egen webbplats för att visa busstider. Den som finns på Västtrafiks webbplats är för plottrig. Efter att jag publicerat webbplatsen på min server var det bara att öppna webbläsaren i Raspberry Pi och skriva in adressen. Var 5:e sekund uppdaterat sidan sig själv vilket borde vara mer än tillräckligt. Allt ligger på https://sebastiannilsson.com/vasttrafik-widget/. Testa exempelvis att söka från brunnsparken till chalmers.
Jag har nu fått tillräckligt många delar för att börja montera roboten.
Jag blev tvungen att borra upp hålen något för att få dem att passa M3.
Accellerometern sätts så nära motoraxeln som möjligt.
Smart grej för att dra åt alla muttrar är att ta en skruvdragare, en bit tejp och därefter snurra den gängade stången. Håll fast muttern med fingrarna och låt borrmaskinen göra jobbet. Annars tar det ett bra tag att få dit alla 24 muttrar.
Såhär ser den ut just nu:
Jag ville testa att löda ytmonterat och köpte mig därför adapter från TQFP32 till vanlig dip att sätta i breadboard.
Skaffa adapter från TQFP32 till dip. Chip att löda fast är i det här fallet en Atmega328P-AUR.

Tänk på att det är lättare att löda med flux:

Såhär ser det ut när man alla ben och headers sitter på plats:

Montera på breadboard och bränn in Arduino Uno bootloader:

Klart. Atmega328P-AUR på en breadboard med Arduino Uno bootloader:

Förbättrade nyligen hårdvaran för att fjärrstyra min dammsugare över internet. Tidigare använde jag ett helt Arduino Uno-kort vilket är overkill. Bättre och snyggare blir det att göra det direkt på en breadboard. Video när det fungerar (med lite annan hårdvara).
1. Koppla upp Atmega328 på breadboard för att få en Arduino Uno.
2. Dra kablar från varje knapp på fjärrkontrollen.
3. Sätt dit ett gäng transistorer. En för varje knapp du vill fjärrstyra. Kom ihåg att kombinera jord för breadboard och fjärrkontrollen. Jag satte också dit några lysdioder för att lättare se vilket kommando som skickas.
4. Tejpa kablarna så att de sitter på plats.
5. Tejpa fast breadboard på fjärrkontrollen. Detta gör den mer intakt och risken för att kablar lossnar minskar.
6. Koppla in till datorn och konfigurera eventghost till att styra roomba.
Nu ikväll gjorde jag cad och beställde delar till att göra en egen självbalanserande robot. Kommer att använda Arduino som mikroprocessor och en liten 6 degrees of freedom som tilt-sensor.
Cadden på bilderna är inte helt klar men jag tror att de flesta delar är på sin rätta plats.
Uppdatterar med nya blogginlägg allt eftersom framsteg blir gjorda.
La till skruvförband till motorfäste, hjul och de stängerna. Uppdaterade bilder:
Att sätta ihop sin egen Arduino på en labbplatta är ingen större konst. Visar här några illustrationer som förklarar hur man gör. Du kan köpa ett arduino-kit från mät.se för att få allt du behöver.
Enklaste konfigurationen som kräver en ftdi-kabel:

Vill man kunna mata denna koppling med ström från ett batteri lägger man bara till en några få komponenter. Finns att köpa här.

Istället för en ftdi-kabel kan man sätta dit en usb-modul såhär. Länk till usb-modul.

För att snabbare se vilka portar som är vilka. Skriv ut arket nedan:
Klistermärke Arduino Atmega328
Komponenter finns här:
För att göra detta själv så är det bara att klippa ut och klistra på:



