söndag 6 december 2009

IMU för styrning av servon

Nu har jag kopplat ihop IMU och servon så att servopositionerna bestäms av roll och pitch på IMUn, mest för att se att hela kedjan fungerar. På samma sätt ska vi ju styra quadcoptern är det tänkt.


tisdag 10 november 2009

IMU för styrning av 3d kub

På vår väg mot en quadcopter har jag och Torkel nu köpt in en IMU(Inertia Measurement Unit) för att förhoppningsvis kunna få en stabil farkost. Som en tidig test har jag tagit in mätvärdena från sensorn till en Java applikation där en kub visas. Kuben roteras runt x, y, och z axeln efter vad sensorn läser av.

Nu är det inga beräkningar av euler vinklar eller motsvarande, utan enbart en summering av förändringar på respektive axel som jag tar hänsyn till. Men det räcker för att jag ska lägg upp en liten videosnutt.




IMU:n är en "6DOF Razor" från SparkFun där vi även köpt ett par XBee för att kommunicera med vår helikopter.

måndag 5 oktober 2009

Ett till servo

Inte lika långt mellan inläggen denna gång...

Var på PowerToys efter jobbet idag och köpte ett till servo. Gick ganska smärtfritt att modda min konstruktion för att även styra höjdled:


Interfacet till datorn fanns redan sen tidigare, jag har lagt in stöd för 8st servon.


Med java appleten var det lika smidigt, bara att även ta hänsyn till avläst y värde på muspekaren, resultatet...






Källkoden för java-appleten finns på http://code.google.com/p/usb-interface-gui/, den är endast en moddad version av det som ingår i webcam-server.

Webbkamera med servo

Ett tag sedan förra inlägget, men har nu modifierat mitt tidigare projekt för att styra även servon. Det som krävs för detta är pulser på 1.5 - 2.5 ms med en periodicitet på 20ms.

Anledningen till att jag behövde införa detta är att jag och Torkel har börjat bygga en quad-copter och där behöver man denna styrning till motorerna.

Men i torsdags fick jag låna ett servo av Torkel så då var jag ju tvungen att hitta på något att använda det till, det blev att styra en webbkamera. Den går att styra från mitt java gui men har även gjort ett interface i php för att styra över nätet.


Här kan du se två filmer över kameran, den ena är just på kameran när den styrs från java-appleten, den andra över datorns syn över det hela.




För att få till en exakt syrning av servona är man tvungen att generera ganska exakta längde på pulserna, så mitt gamla program på usb-kortet var inte tillräckligt bra. Där hanteras USB rutinerna nämligen genom pollning. Jag löste det genom att ladda hem en ny version av grundversionen till programmet från Microchips hemsida, i detta kan jag använda interrupt för styrningen av tiderna som då blir väldigt exakta.

tisdag 26 maj 2009

USB interface kort med Java GUI

I förra veckan var jag och Torkel på Admittansen och fixade ihop ett usb kort med lite analoga ingångar samt digitala in/utgångar. I helgen satt jag och skrev ihop ett gui i Java för att styra kortet. För att smidigt kunna testa algoritmer för styrning så har jag även lagt till scriptmöjligheter.

Ett exempel på hur det kan se ut finns på videon här, jag styr en RGB lysdiod och en 1W led och låter dem bero på tiden samt en av analogingångarna. Koden för gui:t finns att ladda hem här.


måndag 11 maj 2009

RGB LED klocka

Har börjat bygga en klocka med RGB LED från Kjell&Co. Tanken är att den ska visa timmarna i rött, minuterna i grönt och sekunderna i blått. Men att bara visa prickar blir inte så spännande så jag tänkte använda lite olika presentation för de olika färgerna.

Just nu så "flyter" de röda LEDarna mot det aktuella klockslaget, de gröna studsar mot den aktuella minut-LED:en och de blå lysdioderna tonar sakta runt som ni kan se på videon.



Processorn jag använder är en pic18f4550, framförallt för att den har USB anslutning som jag använder för andra projekt.

Streama ljud från Ubuntu till SqueezeBox och Internetradio

I helgen lyckades jag få igång strömmning av ljud från Spotify på min ubuntu maskin till både min internetradio i köket och till SqueezeBoxen i vardagsrummet.

Efter ett antal olika kombinationer av applikationer fick jag ljud med följande uppsättning:
PulseAudio
GStreamer
Icecast


GStreamer skickar ljudet från PulseAudios utgång till icecast som låter mina externa enheter streama en mp3 ström.

Jag utgick från denna instruktion men ändrade till mp3 komprimering med 128kb/s bitrate.


För att installera PulseAudio köre jag endast:
  • sudo apt-get install pulseaudio
och startade om systemet.

Installerade sedan icecast:

  • sudo apt-get install icecast2
  • Konfigurera /etc/icecast2/icecast.xml med lösenord under authorization-taggen, både för source och admin(för att se webinterfacet).
  • Sätt "enable=true" i /etc/default/icecast2
Nu behöver man hitta namnet på PulseAudios enhet för ljud-ut i PulseAudio Manager:
  • paman
  • Välj fliken Devices och leta efter enheten som slutar på .monitor, min hette output.pci_10de_ac0_sound_card_0_alsa_playback_0.monitor


Detta namn ska vi nu använda i ett script som startar strömmningen till icecast, detta är taget direkt från länken ovan:

gst-launch pulsesrc device= ! audioconvert ! vorbisenc ! oggmux ! shout2send mount=/stream.ogg port=8000 password=hackme ip=127.0.0.1

För att kontrollera att icecast tar emot strömmen kan man logga in på http://localhost:8000 med det admin lösenord man skrev i icecast2.xml.

Detta ger en ogg-vorbis ström vilket inte lät så bra på min internetradio och inte funkade alls på SqueezeBoxen. Jag installerade därför lame för gstreamer:
  • sudo apt-get install gstreamer0.10-lame
Sedan ändrade jag scriptet till följande:

gst-launch pulsesrc device= ! audioconvert ! lame bitrate=128000 ! shout2send mount=/stream.mp3 port=8000 password=hackme ip=127.0.0.1

Sedan är det bara att få internetradion att ansluta till din egen "radiokanal" som nu finns på http://ditt-ip:8000/stream.mp3