Wake-up Light Part 1: Flipping switches

2014-02-08 22.45.39 2014-02-08 22.45.20 2014-02-08 22.45.31

I’ve had the idea to build my own wake-up light for quite some time. This winter i finally got around to it. This is the first part of my write-up of the project.

In simple terms, the point of a wake-up light is to gently wake you up by slowly turning up the light before the alarm goes off in the morning. There are several commercial products available that do this already, all of which I think are either ugly, too small or simply not practical enough for my use case. Some of the things I wanted that are commonly not available in these products are:

  • Big, powerful light. Usually, products are night stand-size alarm clocks with a few measly watts of power.
  • RGB controllable light. My living room is also my bedroom. If I’m going to make the wake-up light big and powerful, I also want to be able to set it to a cosy warm evening-setting. Plus, this would make it able to do a more sunrise-like color fade in the morning.
  • Powerful scheduling options. I’m a student and don’t get up at regular hours every day. I want the wake-up time to be easily settable, preferably synchronized to my alarm or even my schedule.

Flipping some switches

I figured I could use my Raspberry Pi as the central point for the system. It’s hanging off the back off my TV, running Raspbmc and is on 24/7 anyway, so a simple start would be to add a cronjob to simply turn on some lights in the morning. I already had 433 MHz light switches connected to three ambient lights in my room, so I started out with by hooking up a transmitter to the Pi.

2013-10-12 22.51.17

Having someone in Shenzen send me a transmitter/receiver pair for 433 MHz on Ebay set me back about the same amount sending a normal letter home to my mother would. Mine was titled “RF Wireless Transmitter & Receiver Kit Module 433Mhz for Arduino/ARM/MCU WL”.

rf

Obviously, someone on the Internetz already wrote the code to talk to my outlets using Arduino. And someone else also ported it to Raspberry Pi. Sweet! The project I’m using is called rcswitch-pi. According to the readme, it depends on the (seemingly useful) wiringpi project, so first we need to get that (assuming you have git installed):

Wiringpi is used for the gpio calls inside rc-switch and is sort of replacing the Arduino’s digitalWrite() and the like. Now let’s install rcswitch-pi:

The program is hardcoded to have the transmitter connected to Wiringpi pin 0, which corresponds to pin 11 of the GPIO header on the Pi. If you want, you can change this by editing send.cpp and running the make command again.

Hooking up the receiver to my Arduino and using the original rc-switch library, I figured out what group and channel corresponded to the buttons on my remote.

2013-10-12 22.50.14

I could now control the lights from the Pi using these commands:

A small explaination to all these numbers: my outlets have “group switches” allowing different remotes to control  different sets of outlets. I have mine set to 11111. The buttons on the remote are labeled A-D. I have some lights hooked up to C (3) and D (4). All this I learned by loading the example sketch from the rc-switch library onto my Arduino and observing the serial output as I pushed some buttons on the remote.

Once I knew the send command was working, I linked it into /usr/bin/. This makes it possible to run the command without having to cd into the folder every time, which will be convenient for scheduling later.

Next time: Scheduling!

Hi, I’m Albert

This is where I post projects from the past and present in the hope that someone else (my future self included) will find them useful. Also, one day I really would like to be featured on Hackaday and become internet-famous. You can contact me on social media, or at “mail” on this domain.


Kör Control Center till TI eZ430-Chronos på Mac

5226.8103.chron.png-550x0

I slutet av november kunde man köpa en eZ430-Chronos-klocka från Texas Instruments webshop för halva priset. Här kommer en snabb förklaring hur man får igång deras Control Center som används för att ta emot data och programmera om klockan, på macen.

Vi börjar med en kort bakgrund: jag läste ett inlägg av en annan kille som hade köpt en likadan klocka. I förbifarten uppfattade jag att Control Center-programmet var skrivet i Tcl/Tk. Jag hade ingen aning om vad det var då, men lite efterforskningar visade att det borde gå bra att köra samma kod även under OS X.

  1. Det första som behövs är en mac-version av Tcl/Tk. Det finns att ladda ner här: http://www.activestate.com/activetcl/downloads. Efter installationen finns ett nytt program som heter Wish.app i /Program/Verktygsprogram/
  2. Nu behöver vi själva tcl-skriptet. Det finns i två versioner, en för Windows och en för Linux. Dumt nog har TI låst in dem i arkiv som bara går att packa upp på respektive operativsystem. Jag fick ut filerna genom att installera arkivet på en virtuell linuxmaskin som jag körde i Virtualbox. Koden flyter även runt på internet, till exempel här: https://github.com/bhutley/Chronos-Control-Center. Ladda ner filerna eller extrahera dem ur arkivet.
  3. Till sist behöver vi ändra raden som anger vilken komport som är USB-dongeln. Öppna eZ430-Chronos CC 1_2.tcl och ändra rad 66 från:

    till:

    De tre siffrorna på slutet i den ursprungliga raden varierar från dator till dator (och ibland från gång till gång). Skriptet ska nu välja första bästa komport med lämpligt namn så att namnet inte behöver hårdkodas.
  4. För att använda programmet, koppla in USB-dongeln, öppna en terminal, navigera till mappen med tcl-skripten och skriv:
  5. Klart! Programfönstret dyker upp och det ska gå att se accelerometerdata precis som i Windows. Notera att avläsning av knapparna inte fungerar i OS X – om man trycker på någon av knapparna på klockan så genereras ett fel och ingenting händer. Återkommer eventuellt med lösning på detta!

Skärmavbild 2013-12-28 kl. 20.20.00

Uppdaterad: Programmera MSP430 Lauchpad med en Mac

Launchpad

Här om dagen insåg jag att jag inte programmerat MSP430 Launchpad sedan jag installerade om datorn till Mountain Lion (OS X 10.8) tidigare i år. 2011 skrev jag ihop en guide om vad man behöver installera för att komma igång och eftersom det har ändrats lite tänkte jag att det vore på sin plats med en uppdatering.

  1. Ladda ner och installera MSP430LPCDC, det är en drivrutin som gör att datorn kan hitta launchpaden. Installationen kräver av någon anledning  att du startar om datorn efteråt.
  2. Installera Macports (eller Fink om du föredrar det). Det är en pakethanterare som gör det enkelt att installera program via terminalen.
  3. Installera själva kompilatorn MSPGCC och debuggern MSPDebug som används för att föra över koden till mikrokontrollern genom att köra följande kommando i terminalen. (Om använder Fink, byt ut “port” mot “fink”).

    sudo port install msp430-gcc msp430-libc mspdebug

  4. Klart!

I den gamla guiden finns ytterligare några steg (4-8) som visar hur man kan ladda ner ett färdigt program och testa så att allt fungerar. Lycka till!

Programmera MSP430 Lauchpad med en Mac

Launchpad + Mac

 

Jag har precis lyckats börja programmera min Launchpad i OSX och tänkte berätta hur jag gjorde. Till att börja med ska jag säga att det här utgår ifrån en annan blogpost, men jag har tänkt lägga till fler steg för den som inte är så van!

För att jobba med launchpaden behöver vi två saker, dels en kompilator som kan kompilera vår kod så att den kan köras på en MSP och dels en drivrutin för att kommunicera med den och föra över kod. Idag (11-12-29) heter de senaste versionerna MSP430-Launchpad-toolchain-20111001.pkg.zip samt MSP430LPCDC 1.0.3b.zip. Båda finns att ladda ner på http://code.google.com/p/osx-launchpad/downloads/list. Om du vill följa det här exemplet hela vägen så passa på att ladda ner demo-breathing-led-gcc-4.5.3.zip också!

1. Ladda ner MSP430-Launchpad-toolchain-20111001.pkg.zip, MSP430LPCDC 1.0.3b.zip och demo-breathing-led-gcc-4.5.3.zip.

2. Zippa upp och installera MSP430-Launchpad-toolchain-20111001.pkg och MSP430LPCDC 1.0.3b.pkg som du precis laddade ner.

3. Klart!

Förhoppningsvis ska du nu kunna programmera din Launchpad, dock hade jag lite mer bekymmer än så, så vi fortsätter med ett exempel. Vi tar nu breathing-led-demot (som vi laddade ner precis), kompilerar det och laddar in på Launchpaden.

4. Zippa upp demo-breathing-led-gcc-4.5.3.zip.

5. Öppna Terminal.app (finns under /Program/Verktygsprogram)

Jag antar att du har laddat ner filen till mappen som heter Hämtningar (Downloads) i OSX, har du till exempel sparat den på skrivbordet får du skriva Desktop istället för Downloads!

6. Gå in i den uppzippade mappen (skriv kommandot och tryck enter)

cd Downloads/demo-breathing-led-gcc-4.5.3

7. Koppla in Launchpaden om du inte redan gjort det!

8. Kompilera programmet och ladda upp till Launchpaden med det förberedda skiptet (skriv in lösenord när det efterfrågas!):

./build-msp430g2231.sh

Nu ska LED1 börja dimmas upp och ner långsamt om allt har gått bra! För mig funkade det dock inte direkt utan jag fick följande felmeddelande:

dyld: Library not loaded: /usr/local/Cellar/libmpc/0.9/lib/libmpc.2.dylib

För att lösa det installerade jag MacPorts och körde kommandot

sudo port install libmpc

 

Stöter du på andra problem så kommentera gärna nedan!

Hej Texas!

Jag kan ha råkat nämna den här hemsidan till några som jobbar på Texas Instruments idag, så därför tänkte jag nu skyndsamt visa upp mitt flashigaste projekt med TI-hårdvara, nämligen min alldeles egna studentoverall! Det är en mycket avancerad krets bestående av resistorer, lysdioder och en Launchpad från TI. Håll till godo:

Projekt: autonom robot

Okej, mycket har hänt. Till att börja med; nästan inget har hänt med bilen jag postat bilder på tidigare, den har om något rört sig bakåt i utvecklingen mot supercool autonom robot. Däremot har jag byggt en annan tillsammans med några klasskamrater som del i en projektkurs. Den nya roboten har bluetooth, GPS, kompass, varvräknare och sex avståndssensorer av samma typ som på den gamla. Målet med projektet är att, på vinterväglag, utforska en parkeringsplats där ett antal flyttkartonger finns utställda och hitta den snabbaste vägen mellan två GPS-koordinater. Det ska ske genom att via bluetooth skicka sensordata till en laptop där en karta ritas upp och sen användas för att beräkna bästa vägen. Mycket spännande. Hittills har vi hunnit med följande:

  • Bestämt hur systemet ska vara uppbyggt och vilka komponenter som ska ingå
  • Ritat och tillverkat ett eget kretskort
  • Köpt en radiobil
  • Monterat en varvräknare
  • Monterat avståndssensorerna (typ)
  • Hittat på ett kommunikationsprotokoll mellan bilen och datorn
  • Skrivit kod för att köra bilen via bluetooth från en dator
  • Skrivit kod för att samla in sensordata
  • Skrivit kod för att räkna om GPS-koordinater till ett eget, lokalt koordinatsystem

Slutspurten fram till 19/12 kommer innefatta att sätta ihop all kod så att delarna fungerar tillsammans och att trimma in systemet så att det funkar så bra som möjligt. Två saker står klart; det är, har varit och kommer fortsätta vara sjukt kul att jobba med robotprojekt OCH det tar otroligt mycket tid! Till sist en bild på kretskortet och merparten av modulerna vi köpt:

 

Kretskort

Baby steps

 stiftlist, hylslist och flatkabel

 

Batterier har anlänt och jag har ägnat mig åt den mycket spännande sysslan att löda flatkablar till avståndssensorerna. Hade ingen flatkabel så el gammal IDE-sladd fick duga. De har pyttesmå ledare. Har även konstruerat en manick bestående av två ihoplödda T-kontakter för att plocka ut ström till Arduinon direkt från batteriet (det ska alltså lödas dit ett par små sladdar i mitten där):

 

specialare

 

Så här ser bilen ut just nu; kopplingsplattorna ligger lösa ovanpå tills vidare.

 

 roboten

 

Till sist ett snabbt litet funktionstest! Ville få den att backa när den kom för nära så man kunde “skjuta” den fram och tillbaka med handen framför, men fartreglaget bråkar lite – den tolkar det som att man bromsar om man inte stannar först eller någonting i den stilen. Det får bli nästa mål!

 

 

 

Andra leveransen

 

Idag kom två brev till från asien: Avståndssensorer av ultraljudstyp (DYP-ME007) och ett par små kopplingsplattor. Jag snodde ihop ett enkelt funktionstest från lite kod jag hittade:

int trigPin = 2;
int echoPin = 3;
int ledPin  = 5;
int distance, cm;

void setup()
{
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(ledPin, OUTPUT);

  Serial.begin(9600);
}

void loop()
{
  for(int i=0; i<2; i++)
  {
    digitalWrite(trigPin, LOW);
    delayMicroseconds(2);
    digitalWrite(trigPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(trigPin, LOW);  

    distance += pulseIn(echoPin, HIGH);
  }
  distance /= 3;
  cm = distance/58;

  analogWrite(ledPin, (distance/10)%255);

  Serial.println(cm); //Avstånd i cm skickas till datorn
}

Så här blev resultatet: