Personal tools

HypnoDisc

From Frack - Hackerspace Friesland

Jump to: navigation, search
Project: Hypnodisc
HypnoDisc voorkant.jpg
Status voltooid
Betrokkenen
Kennisgebied(en) Arduino, Elektronica
Projectcode hypnodisc
Afgeleid van: Cirkelklok
ProjectoverzichtProject toevoegen

Een eerst project om animaties en ledaansturing met een Arduino te oefenen. De HypnoDisc is een 11cm diameter houten schijf met daarop twee dozijn witte leds, aangestuurd door een DK-Duino (Arduino Duemillanova) en een drietal HC595 schuifregisters.

Hardware

De volledig functionerende HypnoDisc bestaat uit drie onderdelen:

  1. Lichtschijf – de schijf met leds zelf
  2. Controller – prototypebord met een drietal schuifregisters
  3. Arduino

Lichtschijf

achterkant van de HypnoDisc met de bandkabel op zijn plek

Een schijf van ~11cm diameter met daarop gemonteerd een 24-tal heldere witte leds. Deze komen uit de overgebleven voorraad van het Ledbar project. Het zijn 3mm diameter leds met een continueverbruik van max 20mA en een voorwaartse spanning van 3.0V. Deze leds zijn in een zuivere cirkel geplaatst met de kathodes aan de buitenrand, verbonden aan een stuk installatiedraad dat de common-ground maakt.

Aan de anode-kant van de leds zijn 100 Ohm weerstanden aangesloten. Bij een 5V voedingsspanning valt er over deze voorschakelweerstanden 2 Volt, wat door de weerstand de gewenste stroom van 20mA oplevert. De weerstanden zijn een steek versprogen geplaatst, met een pen in lijn met de verbonden led, de andere pen in lijn met de led een positie verder. Dit levert meer ruimte aan de achterzijde van het bord om verbindingen te maken, maar geeft ook een passende 'look' aan de schijf.

Aan de achterzijde van de schijf is een 40-pens (IDE) bandkabel gebruikt om alles aan te sluiten. Draden 1 t/m 24 zijn direct verbonden met de voorschakelweerstanden, dragen 28 t/m 31 zijn samen gebruikt om de nul aan te sluiten (hiervoor meer draden omdat de stroom hier tot 24x groter wordt). De overige draden zijn niet gebruikt en afgeknipt aan de controller-kant

Controller

bovenaanzicht van de HypnoDisc controller, met duidelijk afgebeeld de overflow-verbindingen

De controller is een 8x5cm prototypebordje met daarop een dubbele rij printpennen die fungeren als header voor de bandkabel. Hier worden de 24 led-pennen aangesloten, alsmede de groep van 4 pennen voor de nul. Hiernaast zijn drie M74HC5958 schuifregisters geplaatst. De uitgangen van deze schuifregisters zijn per blok van acht aan de connector gesoldeerd.

De negende uitgang van de eerste twee schuifregisters zijn gekoppeld aan de data-in van respectievelijk de tweede en derde en de clock en latch verbindingen zijn overal parallel aangesloten. Op deze manier gedraagt het trio zich als een enkel schuifregister van lengte 24. Op de print zijn verder de verbindingen naar de arduino eenvoudig toegankelijk gemaakt met een print header.

Software

Om de aansturing te vereenvoudigen is er een kleine library die het makkelijker maakt om de schijf aan de sturen. De klasse wordt geinitialiseerd met de volgende argumenten:

  • Het aantal leds
  • Het aantal PWM-niveaus (optioneel, standaard 4)
  • De latch/clock en data pennen om de shift registers aan te sturen. (optioneel, standaard 7, 6, 5 resp.)

Na initialisatie moet er in de setup() een call naar ::begin() worden gemaakt. Hierna zijn de volgende methoden te gebruiken:

Stuurmethoden

Stuurmethoden sturen de HypnoDisc direct aan. Hierbij moet gedacht worden aan alles dat direct de schijf beinvloedt. Toevoegen van leds, draaien van de schijf en het sturen van het update commando.

addLight

Dit plaatst een nieuw led op de eerste positie in de schijf.

clockwiseDrop

Eerste design van de HypnoDisc

Dit verschuift alle leds op de schijf 1 positie (met de klok mee). Achter de leds is een spoor zichtbaar (gelijk aan het aantal PWM-levels - 1) van snel dimmende leds. Leds bewegen naar de einde van de schijf waar ze zullen stoppen. Wanneer meer leds op de schijf aanwezig zijn zullen deze achteraan aansluiten en op deze wijze langzaam de schijf vullen.

clockwiseSpin

Werkt grotendeels gelijk aan de clockwiseDrop methode, maar leds zullen aan het einde van de schijf niet stoppen. In plaats daarvan zullen ze (zoals de naam doet vermoeden) doorgaan met rondbewegen en van de laatste positie naar de eerste springen (op de schijf een even grote stap als alle andere).

clockwiseWipe

In de basis weer gelijk aan de clockwiseDrop methode, met het grote verschil dat leds die de laatste positie bereiken hier niet zullen stoppen, maar direct hierna zullen verdwijnen van de schijf. Het spoor dat achter deze leds loopt zal ook per stap verdwijnen.

updateLights

Stuurt de ingestelde positie van de leds naar de controller zodat deze op de schijf verschijnt. In de regel wordt deze functie aangeroepen direct na een clockwise* methode, maar er zijn situaties waarin hiervan afgeweken moet worden.

Statusmethoden

Met deze methoden wordt de status van de HypnoDisc opgevraagd, zo kan bepaald worden of nieuwe animaties gestart moeten worden.

allDotsLanded

Deze methode geeft aan of alle leds aan het einde van de schijf staan, of dat er nog een of meer 'onderweg' zijn. Geeft true wanneer alle leds op de schijf zich allemaal op het einde bevinden. Enige aanwezigheid van een spoor of een led elders op de schijf zal voor een false waarde zorgen.

discEmpty

Geeft aan of de schijf geheel leeg (uit) is. Enige aanwezigheid van een spoor of een led elders op de schijf zal voor een false waarde zorgen. Wanneer de schijf geheel uit is zal er een true gegeven worden.

discFull

De inverse methode van discEmpty. Alleen wanneer de schijf geheel gevuld is (een helder spoor telt niet) zal er true gegeven worden. In alle andere gevallen volgt er een false.

PCB

Een (ongeverifieerd) pcb ontwerp is beschikbaar op de GitHub repository van Martijn

Media

Twee filmpjes van de voltooide HypnoDisc. Als eerste een demonstratie zoals deze vlak na constructie is gemaakt. Het tweede filmpje heeft een viertal verschillende animaties en is ten behoeve van het filmen bedekt met een velletje wit papier.