ArduinoInstructable

Elektronische dobbelsteen

Kennelijk is er belangstelling voor want uit de web-statistics van mijn provider maak ik op dat er regelmatig een bezoekje aan mijn website wordt gebracht waarbij de zoekterm “elektronische dobbelsteen” gebruikt is. Eerder had ik over dit onderwerp al eens een video tutorial gemaakt maar met deze blog is het setje nu dan compleet.

Het idee is heel simpel: 7 LEDjes representeren de ogen van een dobbelsteen en alleen die LEDjes die horen bij het getal dat je wilt weergeven gaan branden. Dus een ‘1’ laat alleen het middelste LEDje branden, een ‘6’ alleen de buitenste LEDjes, etc. Arduino heeft in totaal 14 digitale I/O pinnen dus aansluiten is simpel. De LEDjes kunnen vanaf de 5[V] middels een kleine weerstand (220[Ω] – 560[Ω]) rechtreeks op de I/O pennen van de Arduino worden aangesloten, zie schema.


Om het schudden van de dobbelsteen na te bootsen maken we gebruik van een ADXL335 Triple Axis Accelerometer. De analoge uitgangen hiervan worden rechtstreeks verbonden met de analoge ingangen van de Arduino. De accelerometer moet nog wel van stroom voorzien worden. Maar let op: de chip werkt op 3.3[V] en niet op 5[V] dus gebruik de juiste pin op de Arduino! Zie onderstaand elektrisch schema en de PCB layout voor details (deze met Fritzing gemaakte ontwerpjes zijn hier te downloaden).

 

De ADXL335 accelerometer is een beetje prijzig dus wie goedkoper wil zou als fallback eventueel nog de Parallax 4 direction tilt sensor kunnen overwegen, maar omdat we de ADXL335 later wellicht ook nog voor andere projecten willen gaan inzetten loont het de moeite om deze sensor alvast eens nader te bestuderen.

Een accelerometer is een sensor die, zoals de naam al aangeeft, reageert op “versnellingen” (ofwel g-krachten) en dat apart voor de x-, de y- en de z-as. De elektrische spanning die op de x, y, of z-uitgang van de sensor verschijnt is evenredig met die g-versnelling op die as. Volgens de datasheet is dat ~300[mV/g]. De sensor heeft een meetbereik van -3[g] tot +3[g] want versnellingen kunnen natuurlijk zowel linksom als rechtsom optreden. Wanneer de sensor in rust is (lees: stil ligt) is de uitgangsspanning gelijk aan de halve voedingsspanning, in ons geval 1,65[V]. Bij (hard) schudden varieert het elektrische uitgangssignaal dus tussen de 1,65±0,9[V] (= 0,75[V] tot 2,55[V]). Let op: de sensor die ‘plat’ ligt (meestal de z-sensor) ondervindt in elk geval ook de zwaartekracht (=1[g]). In rust zal het elektrisch uitgangssignaal van deze sensor dus ~1,35[V] bedragen. Het totale signaalbereik blijft echter hetzelfde, tussen de 0,75[V] en 2,55[V].

Een Arduino leest deze elektrische waarde binnen middels de ingebouwde Analoog/Digitaal omzetters. Deze ADC’s hebben een ingangsbereik van 0-5[V], iets meer dus dan de accelerometer afgeeft. Met de ‘analogRead()’ functie wordt de waarde van het elektrisch signaal door de ADC omgezet in een getal waarbij meetwaarde ‘0’ overeen komt met 0[V] en meetwaarde ‘1023’ met 5[V]. Met het gegeven elektrisch signaalbereik van 0,75[V] tot 2,55[V] liggen de te verwachten meetwaardes van de ‘analogRead()’-functie tussen ‘154’ en ‘523’. Indien de sensor in rust is dan zal de ADC dus een meetwaarde afgeven van 1.65/5*1024 = ‘338’ (en de z-sensor een meetwaarde van 1,35/5*1024 = ‘277’).

Als we nu willen testen of de dobbelsteen geschud wordt zullen we moeten testen of de ADC een meetwaarde afgeeft die enerzijds ver genoeg af ligt van de sensor-in-rust-waarde van ‘338’ (of ‘277’ voor de z-sensor), maar die ook veilig binnen het maximale meetbereik past. Een praktijktest moet uiteraard uitwijzen wat ‘prettig’ werkt maar op basis van de theorie zou de volgende pseudo-code afdoende trefzeker moeten zijn:

meetwaarde = analogRead(0);
if ( (meetwaarde < 250) || (meetwaarde > 425) ) schudden = true;

U kunt hier de werkende Arduino broncode downloaden die hoort bij het getoonde elektrisch schema.