vrijdag 3 januari 2014

Wii Nunchuck aansluiten op Arduino UNO R3

Dit is weer eens een "om later terug te lezen hoe het ook al weer moest" blogje:

Een Wii Nunchuck is een 3.3V i2c device:
http://wiibrew.org/wiki/Wiimote/Extension_Controllers
http://wiibrew.org/wiki/Wiimote/Extension_Controllers/Nunchuck

Ik heb een adaptertje: https://www.sparkfun.com/products/9281
(bron: Sparkfun)

Dit bordje prik je in de nunchuck stekker. Je hebt nu vier pinnen:

  1. SCL (i2c clock)
  2. SDA (i2c data)
  3. Vcc Dit moet dus 3.3V zijn, maar arduino UNO is 5V.
  4. GND
SCL zit aan de kant van de Nunchuck. (Op het plaatje rechts).

Je kunt deze adapter dus helaas niet zondermeer in een (5V) arduino prikken ivm de 3.3V / 5V. Niet zoals in het bovenstaande plaatje dus.

Met de adapter in een breadbord werkt het wel:
  1. SCL aan A5 
  2. SDA aan A4
  3. Vcc aan 3v3
  4. GND aan GND


Note to self:

Het zo handig zijn om de i2c uitgang aan de USB kant van de Arduino UNO te gebruiken (bij Aref). Maar helaas heeft de UNO geen 3.3v als AREF. 

Neopixel pong

Idee: Laat een rode pixel "bewegen" over een blauwe achtergrond en bestuur e.e.a. met een Wii Nunchuck.


Probleem was vooral dat het Adafruit neopixel shield geen "stackable" headers heeft maar alleen pennen. Als je het shield op een arduino prikt kun je verder niets aansluiten. Ook geen Wii Nunchuck.

Dus ik 4 pennen losgesoldeerd en vervangen door stackable headers. In de i2c poort wel te verstaan. Helaas, de arduino library kreeg ik niet werkend.

Een wel werkende library gebruikt 3.3v, GND en A4 en A5... Maar daar zaten dan weer geen header in. Uiteindelijk het hele zaakje in een breadbord gestoken.

Het werkt niet heel soepel omdat de Nunchuck maar 2x per seconde wordt uitgelezen. De "delay" zit op de verkeerde plaats in de loop(). Enfin, kan allemaal beter, maar het werkt.

Code e.d. later.

Adafruit Neopixel shield

Vergeet robots.
Vergeet knipperende ledjes.

Neopixels!

Wat een geweldige dingen. Neopixels zijn RGB leds die serieel aangestuurd worden. Dat betekent dat ze als een lange sliert gebruikt kunnen worden met slechts 1 data-lijn. De RGB leds hebben een ingebouwde controller die de data (kleur) elke clocktick doorschuift naar de volgende led.

Maar nog veel belangrijker deze LEDs zijn bizar fel. Echt niet normaal. Alleen onder een papiertje zijn ze te fotograferen. Bijna niet zichtbaar, maar er ligt een papiertje (stukje uit een A4tje gescheurd bovenop de matrix).

(het was gewoon licht in de kamer toen ik deze foto nam).

Met de LEDs uit ziet het er zo uit:

Even snel wat in elkaar gezet met de NeoMatrix library van Adafruit: De gelukkig nieuwjaarswens nu ook in Neopixels:

Een snelle test: Een lopende rode pixel over een blauwe achtergrond:


Kan ik deze pixel ook besturen met een Wii Nunchuck!? We zullen zien...

donderdag 2 januari 2014

Attiny85 breadbord programmer adapter

Dit is weer zo'n post om later terug te vinden wat (en vooral hoe) ik inelkaar gebeund heb. Ditmaal een attiny85-programmer-breadbord adapter.

Nadeel van het werken met de attiny85 op een breadbord is het aansluiten van mijn programmer. Ik heb een Adafruit usbtinyisp programmer die een 10 (2x5) of 6 (2x3) pins connector heeft. Zo'n connector in twee rijen past eigenlijk nooit handig in een breadbord. Daar is dus een adapter voor nodig.

Ik heb een printje gemaakt (van een stuk stripboard) waar een 10pins connector en een attiny85 opzit. Dit printje prikt in een breadbord waarbij de aansluitingen van de attiny worden doorverbonden.

Eigenlijk was het ook de bedoeling om direct een V-USB oplossing in te bouwen, zodat het printje via USB +5V krijgt en ook als USB device kan functioneren. Ik probeerde een easylogger achtige oplossing na te bouwen. (Link naar schema enzo). Maar ipv de 68 ohm weerstanden in D+ en D- gebruikte ik 47 ohm weerstanden (geen 68 ohm in de rommelbak) en ipv de 3v6 zener diodes gebruikte ik 3v3 zeners. Deze zeners beperken de spanning in signaallijnen D+ en D-.
Omdat D+ en D- dezelfde poorten gebruiken als SCK en MOSI (van de programmer) zijn er problemen met programmeren als de zeners zijn aangesloten... Ik gebruikte bewust niet pin 2 en 3 als D+ en D- om de optie open te houden om een kristal te gebruiken. De zeners moeten dus losgekoppeld worden voor het programmeren.

Close-up van de schakeling met V-USB. Als Vcc/GND zijn aangesloten brand de LED ter controle.
De programmer wordt aangesloten in het 10 pins voetje (de 6 pins is handiger/kleiner, maar ik had dit voetje nog liggen). Vcc van de programmer is niet aangesloten. De print moet extern worden gevoed.

Enfin: De V-USB poging faalde. (Ik gebruikte deze test software). Zeners? of toch de weestanden? Overigens werkte het ook niet zonder zeners. Het bleef een "unknown device". "Het apparaat wordt niet herkend." Geen mogelijkheid om een driver te kiezen of te installeren.

Uiteindelijk het V-USB deel eraf gesloopt. Dat moet ik (als ik de juiste componenten heb) maar eerst op een breadbord opbouwen.

Dat ziet er uiteindelijk zo uit:


Op PB4 (Arduino pin 4) = pin 3 van de attiny heb ik een signaal LEDje aangesloten. De LED zit niet direct op pin 3, maar een 20 kOhm weerstand stuurt een NPN transistor open als pin 3 hoog wordt. Zo volgt het LEDje het signaal op pin 3 zonder het noemswaardig te verstoren.

Nog even de pinouts:




woensdag 1 januari 2014

8x8 LED Matrix kit review (Linksprite.com)

Bij floris.cc kocht ik een 8x8 LED Matrix kit van Linksprite.com (link naar beschrijving) met in het achterhoofd om deze door leerlingen te laten gebruiken. Deze blogpost is een review van deze kit vanuit dat uitgangspunt.

De keuze voor deze kit (en niet het goedkopere equivalent van adafruit) was puur toevallig: De adafruit matrix was niet op voorraad bij floris.cc (of elders in NL) en deze wel. 

Wat is het?
Een LED Matrix bevat 8x8=64 leds die per rij en kolom verbonden zijn. Datasheet: http://www.chlazza.net/files/TOM-1088BMR-B.PDF Zo dus:
(bron: link)

Dat betekent dat er "trucs" nodig zijn om ze per led aan te sturen. Door de rijen en kolommen aan/uit te schakelen kunnen individuele leds per kolom aangestuurd worden (maar niet tegelijkertijd). Als we echter heel veel keer per seconden schakelen ontstaat een voor onze hersenen stilstaand beeld, dat eigenlijk uit een snel knipperend beeld bestaat.

Een dergelijke schakeling kan met schuifregisters e.d., maar veel handiger is de max7219 driver. Met dit IC kan een 8x8 matrix met 3 signaal lijnen worden aangestuurd. Dit kitje is eigenlijk een max7219 en LED Matrix "breakout board". Vanuit een arduino o.i.d. zijn dan slechts 5 draden nodig: 5V, GND en 3x signaal. Je gebruikt dus 3 arduino pins.

Prijs: 11 euro. Niet onbelangrijk: De lage prijs maakt het eenvoudig voor leerlingen beschikbaar. De adafruit kitjes zijn goedkoper, maar de LED matrix is dan *nog* kleiner. De adafruit mini 8x8 LED Matrixen zijn 0.8" (20mm) volgens de adafruit website.

Afmetingen: Het bordje is ongeveer 4 x 6 cm. De matrix is 35x35mm.

Wat krijg je:

In een klein doosje zit het bouwpakketje keurig verpakt:
In het doosje zat geen handleiding, maar die was makkelijk online te vinden: http://linksprite.com/wiki/index.php5?title=LED_Matrix_Kit

Bouwen was eenvoudig. De handleiding heeft duidelijke foto's van het in elkaar zetten.   Ik was enigszins eigenwijs en heb de elko liggend gemonteerd ipv staand, zodat de matrix er makkelijk op past. M.i. is dit ook echt nodig, want staand past het niet (goed):

Na het weerstandje en de twee condensatoren wordt het IC voetje en wat headers gemonteerd. Het solderen was ook met bijna 40-jarige ogen nog goed te doen zonder loep. Wel is een fijne soldeerbout en fijn soldeer (0,5mm oid) nodig. Hier mijn resultaat:

Solderen is eenvoudig. Soldeer ervaring is eigenlijk niet nodig, zeker omdat alle kwetsbare onderdelen in voetjes geplaatst worden. Problemen kunnen makkelijk worden hersteld. Alleen de orientatie en plaatsing van de Elko kan wat moelijkheden opleveren. De online handleiding is op dat vlak te summier.

Het bordje wordt m.b.v. niet meegeleverde jumper stekkertjes aangesloten. Niet meegeleverd betekende in dit geval ook "niet aanwezig". Ik had niets meer in de rommeldoos. Daarom heb ik het bordje rechtop in een breadbord geprikt. (Werkt ook).
De standaard code in de Arduino IDE plakt en direct resultaat:
De LED matrix is zoals gezegd in een breadbord geprikt. (Met nog een oude schakeling erop) en is aangesloten op een Arduino UNO met prototype shield. Dit werkt eenvoudig.

De eerste "eigen toepassing" moest natuurlijk een scrollende text zijn. Na wat zoeken kwam ik bij de bibliotheek (library) "maxmatrix" terecht: https://code.google.com/p/arudino-maxmatrix-library/
Na installeren van deze bibliotheek was het met het standaard voorbeeld zo gepiept: 

CONCLUSIE:
Het linksprite kitje is makkelijk in elkaar te zetten, zonder dat veel soldeerervaring nodig is. Wel is wat extra uitleg nodig, zeker voor correcte plaatsing van de elko. Het kitje werkt "out of the box" met arduino. Voor de max7219 driver is veel arduino code beschikbaar. Dus goed toepasbaar voor iedereen, ook leerlingen.

Met een LED Matrix is heel veel te doen. Mijn handen jeuken om vanalles te "prutsen" ermee.