Nieuwe versie Philips LivingColors niet compatible met oude.

Philips heeft recent een nieuwe versie van de LivingColors lamp geintroduceerd onder de naam “LivingColors 2nd Generation“. Deze lampen zijn niet compatibel met de bestaande afstandsbedieningen en de nieuwe afstandsbedieningen kunnen niet gebruikt worden met de “oude” lampen. Je kan het nalezen in de handleiding op pagina 3).

Dit betekent ook dat kits zoals het CC2500 Arduino shield niet gebruikt kunnen worden met de nieuwe  “LivingColors 2nd Generation”.

Voor over ik kan zien is de binnen en buitenkant van de livingcolors niet veranderd. In het apparaat is er een hoop veranderd.

In plaats van het  CC2500 + MSP430 setje in deze foto :

Heeft Philips een CC2530 gebruikt. Het is een 8051-achtige microcontroller met een IEEE 802.15.4 RF :

(je kan de complete PCB hier zien)

De  CC2500 en CC2530 zijn compleet verschillende apparaten.

 

8 x 8 pixel rood display

The 8 x 8 pixel red display is een van de eerste projecten die ik heb gedaan na een lange tijd. Ik wilde iets bouwen voor de lol en ik wilde mijn  C vaardigheden bijhouden.

Het schema was gemaakt in CadSoft Eagle, de layout was ge-laser-print op overhead sheet en het printje geetst in de keuken. Tegenwoordig gebruik ik MakePCB of  BatchPCB van Sparkfun.

The schema is heel simpel : een 74HCT595 als high side driver, en een 74HCT595 met een ULN2803 als low side driver.

Ik heb de print simpel gehouden zdat ik het zelf kon etsen.

Het opgebouwde board :

De software bitbang-t een paar IO poorten om de twee schuifregisters te bedienen, het varieeren van de helderheid wordt gedaan door de duty cycle van de LED’s te varieeren. Dit voorbeeld heeft 3 bits helderheid (8 verschillende helderheden). We kunnen deze “8 pixels x 8 pixels x 3 bit helderheid” ook zien als 3 bitmaps met 8 pixels x 8 pixels. De bitmap met de hoogste helderheid (het MSB van de helderheden) wordt 2 x zo lang getoond als het tweede hoogste bit. Het tweede hoogste bit weer twee keer zo lang als het LSB.

Voorbeeld 2 :

Character bitmaps maken met de hand is nogal bewerkelijk. Als je toegang hebt tot een of andere unix achtige dan kan je  figlet en het 5×7 font om de character bitmaps te genereren.

Je hebt dan een  monospaced font en die zijn vaak niet zo mooi als de hand gemaakte.

Met figlet maak je de bitmap voor het character “0” zo  :

figlet -f 5x7 0 | tr ' #' '01' | sed "s/\([01]\{6\}\)/B8(\100),/"

Als output heb je dan :
B8(01000000),
B8(10100000),
B8(10100000),
B8(10100000),
B8(10100000),
B8(01000000),
B8(00000000),

Ik heb  Tom Torfs binconst macro gebruikt om de bitmaps een beetje handzaam te maken.

Example 3 :

Assembleren van het CC2500 Arduino Shield

Errata

De volgende dingen zijn belangrijke en niet voor de hand liggende aanwijzingen.

  • Het shield werkt alleen met de eerste generatie LivingColors.
  • Er is een nieuwere en iets aangepaste versie van het shield. Voor de bouwbeschrijving verandert er weinig, voor de software niks.
  • Bestuk JP1 en JP3 NIET tenzij je weet wat ze doen en hoe je ze wil gebruiken. Ze kunnen gebruikt worden voor het interrupten van de Atmel bij het ontvangen van een pakket of in andere situaties. Daarvoor moet eerst de library worden aangepast.
  • De doormetaliseringen van de surface mounted module komt dicht in de buurt uit van de USB connector van de Arduino. Er zit een laklaag over de doormetaliseringen (via’s) , maar het beste is om er een plakbandje op te plakken na het bestukken van de print.

Wat is het ?

De CC2500 Shield voor Arduino is een kit die een Arduino uitbreidt met een CC2500 radio zender – ontvanger.
Wat heb je nodig :

  • Een Arduino of Arduino kloon zoals de Freeduino.
  • De Arduino ontwikkelomgeving.
  • (optioneel) De Processing ontwikkelomgeving.
  • Deze kit.
  • Standaard gereedschap en skills om een electronica kit in elkaar te zetten. Minimaal heb je een kleine soldeerbout, soldeertin, en een kniptang nodig. Om fouten op te sporen is een multimeter handig en eventueel vergrootglas en om fouten te repareren litze of een tinzuiger. Op internet staan diverse pagina’s die deze basisgereedschappen beschrijven.

De assemblage.

Wat het assembleren betreft geldt :

  • Kleinste onderdelen eerst. In ons geval de twee 74LVC125 en de DPAK spanningsregelaar.
  • Als je de versie van de CC2500 module hebt met externe antenne dan kan je die nu het beste solderen. Aan de gaatjes kan je zien of de module goed is uitgelijnd.
  • Als je de module met interne antenne hebt kan je het beste  daarna het 8 pins headertje solderen.
  • Daarna de rest van de onderdelen.
  • Let er op dat de IC’s goed om op het board komen. Pin 1 moet aan de kant van het 8 pins headertje.
  • Er zitten twee verschillende waarden weerstanden op. R2 en R3 zijn 680 Ohm, R4 is 10k Ohm. Er is geen R1. Foutje.
  • De LED’s moeten met de kathode in het massavlak, de korte pen moet dus aan de kant van het experimenteerdeel, de lange kant aan de kant van de weerstanden.
  • Bestuk JP1 en JP3 NIET tenzij je weet wat ze doen en hoe je ze wil gebruiken. Ze kunnen gebruikt worden voor het interrupten van de Atmel bij het ontvangen van een pakket of in andere situaties. Daarvoor moet eerst de library worden aangepast. Er is geen JP2. Nog een foutje.

Van de assemblage van het prototype heb ik een paar filmpjes gemaakt.

De SMD onderdelen (1).

De SMD onderdelen (2).

De LED’s en het headertje.

De headers.

De test.

Na de assemblage is het belangrijk een aantal dingen te controleren.

  • Controleer de boven en onderkant op kortsluitingen en verdachte plekken. Je kan ook controleren of er geen kortsluiting is tussen de 5V en GND op J1.
  • Daarna kan je de shield zonder CC2500 module op de Arduino steken. Op de header voor de module kan je dan meten of daar 3.3V op staat, tussen pen 6 (derde van boven) en pen 1 (de onderste). De draadjes die je bet afgeknipt van de weerstanden of leds passen in de 8 pins header. Met S1 kan je de Arduino resetten.
  • Als dat allemaal klopt kan je de voeding van de Arduino af halen en de CC2500 module er op steken en de voeding er weer op zetten.

Vervolg : de software

The built up Arduino CC2500 Shield
Eagle3D allows you to render an image of the board.
Eagle3D allows you to render an image of the board.

Gebruik van het CC2500 Arduino Shield

Software : de Arduino Library

 

Update: het voorbeeld programma en de library zijn aangepast voor Arduino versie 1.0. De nieuwe versie van de applicatie is hier te vinden : a_LiCo_Control_A1.zip , de nieuwe versie van de LivingColors library hier : LivingColors.zip

De software bestaat uit een library voor de Arduino voor het bedienen van een Philips Livingcolors. Hier zit in het verzenden en ontvangen van berichten in en het kan gebruikt worden als basis om tussen twee shields te communiceren.

De library staat hier voor oude versie, en voor versies van Arduino voor 1.0 hier, en moet uitgepakt in de “/libraries” van de Arduino omgeving (in de oudere versies van Arduino is dat “hardware/libraries”). Je moet dus een “<arduino>librariesLivingColors” directory hebben met daarin :

  • CC2500.cpp
  • CC2500.h
  • ColourConversion.cpp
  • ColourConversion.h
  • keywords.txt
  • LivingColors.cpp
  • LivingColors.h

De library is hier voor oude versies, en voor versies van Arduino voor 1.0 hier, en in de bestanden zelf uitgebreid gedocumenteerd.

De broncode heeft een GPL licentie. Als je deze code of een product gebaseerd op deze code verspreidt moet dat dus ook met dezelfde licentie. De code is gebaseerd op code van Jeroen Domburg, bekend van Tweakers en diverse hacks, en beschreven in een artikel van Elektuur in de Mei 2008 editie. George Mathijssen heeft de code opgeschoond en aan de praat gekregen als Arduino library.

De library heeft vast bugs. Zo lijkt de RGB naar HSI conversie niet helemaal te kloppen en negeren we de ACK of NACK van de Livingcolors. Fixes, aanpassingen en verbeteringen zijn welkom !

LiCo_Control : een voorbeeld Arduino applicatie.

Om de library te testen de Livincolors te bedienen heb ik een Arduino applicatie gemaakt die je commando’s kan geven via de seriele poort over USB. Je kan hem dan bedienen met Putty of Hyperterminal of iets dergelijks.

Als LiCo klaar is om commando’s stuurt hij een “!”. Is een commando niet begrepen dan stuurt hij een “?”.

De commando’s zijn :

Commando Functie
r reset
wn-rrr-ggg-bbb r, g and b are numbers 000 to 255. Example “w000-255-000” for bright green. n is the lamp number.
hn-hhh-sss-iii h, s and i are numbers 000 to 255. No example for now. n is the lamp number.
i print info
nn turn lamp number n on
fn turn lamp number noff
ee e = 0 echo off, e = 1 echo on.
l listen for adresses. Use i to list adresses.
saabbccddeeffgghhii store adress in a..i. 9 numbers as 2 digit hex
? dummy command.

Hier een voorbeeld van het gebruik van deze Arduino applicatie :

In LiCo-Control bedien je de lamp door :

  • De lamp aan te doen met de afstand bediening.
  • Een verbinding te openen met een terminal applicatie (putty, hyperterminal.. etc.).
  • De code van je lampen te leren met “l”..
  • .. en dan de lamp te bedienen met de afstandbediening..
  • De Arduino luistert dan naar berichten tussen de afstandbediening en de lamp en leert daar de adressen uit.
  • Met “i” kan je dan de geleerde adressen printen.
  • Met “w0-255-000-000” kan je lamp 0 dan op fel rood zetten (R=255, G=000 eb B=000).
  • Met “w1-000-000-010” kan je lamp 1 dan op een beetje baluw zetten.

De geleerde adressen kan je hard in de broncode voor LiCo-Control zetten, je hoeft ze dan niet steeds de adressen te leren.

WheelColor : een voorbeeld Processing applicatie.

WheelColor is een Processing applicatie die commando’s kan sturen naar LiCo_Control. Je kan dan de kleur van de LivigColors instellen met een kleurenwiel. De applicatie is simple en lelijk maar er zit een goed voorbeeld in voor het communiceren met LiCo_Control op een robuste manier.

Hier een voorbeeld van het gebruik van deze Arduino applicatie :

In LiCo-Control bedien je de lamp door :

  • De lamp aan te doen met de afstand bediening.
  • Een verbinding te openen met een terminal applicatie (putty, hyperterminal.. etc.).
  • De code van je lampen te leren met “l”..
  • .. en dan de lamp te bedienen met de afstandbediening..
  • De Arduino luistert dan naar berichten tussen de afstandbediening en de lamp en leert daar de adressen uit.
  • Met “i” kan je dan de geleerde adressen printen.
  • Met “w0-255-000-000” kan je lamp 0 dan op fel rood zetten (R=255, G=000 eb B=000).
  • Met “w1-000-000-010” kan je lamp 1 dan op een beetje baluw zetten.

De geleerde adressen kan je hard in de broncode voor LiCo-Control zetten, je hoeft ze dan niet steeds de adressen te leren.

Relevante bestanden.

Het schema (als pdf).
De printlayout (als png).
De stuklijst (als txt).
De Arduino versie < 1.0 library (als zip), een Arduino versie 1.0 library (als zip).
Een Arduino versie < 1.0 voorbeeld (als zip), voorbeeld voor Arduino versie 1.0 (als zip).
Een Processing voorbeeld die het Arduino voorbeeld gebruikt (als zip).
De datasheet van de CC2500 chip van TI. (mirror). Er staan belangrijke bugs in de errata op de site van TI !
De datasheet van de CC2500 module van Quasar. (mirror)
De datasheet van de 74LVC125. (mirror)
De datasheet van de LP2950 spannings regelaar. (mirror)
De CC2500 en Atmel op de Arduino gebruiken SPI om te communiceren. TI heeft er een document over gemaakt.

LivingColors 1ste generatie

(Dit is geknipt, geplakt en vertaald van mijn oude site)

De Philips LivingColors is een op afstand bedienbare  15 W. RGB led lamp.

Hij is (April 2008) te koop in de UK, Nederland, België, Frankrijk en Luxemburgvoor ongeveer  110 tot 150 euro.

Het is kwalitatief goed ontworpen en in elkaar gezet, het is zeker geen chinees prutproduct met een Philips sticker.

De afstandbediening gebruikt een radio zender en ontvanger op de 2.4 GHz ISM band. De zender ontvanger is van Chipcon (nu Texas Instruments). Het hoeft de lamp niet te kunnen zien (zoals bij infrarood afstand bedieningen) en het kan tot 6 lampen tegelijk bedienen.
De microcontroller in de afstandsbediening is een laag verbruik microcontroller van Texas Instruments. De communicatie is bi-directioneel en dat suggereert dat Philips meer producten in de planning heeft , bijvoorbeeld een  AmbiLight – LivingColors koppeling.

Philips is eigenaar van Lumileds ( http://www.philipslumileds.com/ ), de fabrikant van de hoog vermogen LEDs .

Afstandsbediening

Lamp

Ik zag het niet zo zitten om de lamp open te breken. Iemand anders heeft dat wel gedaan.

Patenten

  • EP 05110865.2
  • EP 05111947.7
  • EP 06111044.1
  • EP 06111041.7
  • EP 06114311.1
  • JB8978

Publicaties

Elektor / Elektuur artikel over het uizoeken van het protocol .

Jeroen Domburg legt uit hoe hij het LivingColors protocol ge”reverse engineered” heeft en hoe je een USB remote controller voor de LivingColors lamp kan maken.

Zie : http://www.elektor.nl/artikelen-als-pdf/2008/mei/kleurig-computerlicht.429788.lynkx
En : http://meuk.spritesserver.nl/projects/livcol

Elektor / Elektuur artikel over het disassembleren van de lamp.

De redacteuren van Elektuur maken een LivingColors lamp en afstandbediening open en beschrijven wat ze tegen komen.
Zie : http://www.elektor.nl/artikelen-als-pdf/2008/februari/philips-livingcolors.350438.lynkx

YouTube

http://www.youtube.com/watch?v=pxv-kFQdD3w

Officiele Site

http://www.p4c.philips.com/cgi-bin/dcbint/cpindex.pl?ctn=LCS5001/12&slg=en&scy=GB