Hoe een Arduino Mood Lamp te bouwen

De nieuwste generatie adresseerbare RGB-LED's opent een wereld aan mogelijkheden voor projecten. Dit project begeleidt je bij het creëren van een door Arduino bestuurd sfeerlicht dat je in staat stelt om van kleur te veranderen, helderheid in te stellen en zelfs over te schakelen naar een kleurkromme-effect dat doet denken aan de geliefde lavalamp van vervlogen tijden.

In deze tutorial laat ik je zien hoe je een drieledige LED-lamp bouwt, pincodewisselaars op het Arduino-platform gebruikt en permanente waarden in het Arduino-geheugen opslaat.

Verzamel de componenten, tools en bibliotheken

Components

  • 12 LED Neopixel
  • 16 LED Neopixel
  • 24 LED Neopixel
  • Officiële Arduino Nano (of klonen als u op het budget let)
  • 7V-2A-voeding (Neopixels kunnen veel sap gebruiken en de Nano ~ 7V)
  • 10K Ohm-weerstanden (1/4 watt) Bruin-Rood-Oranje (bewaar een aantal weerstanden in je set)
  • Breadboard-vriendelijke 2,1 mm DC vat jack
  • Broodplank 1/4 grootte
  • 22 Gauge Hookup Wire (meerdere kleuren) (Een hele doos zoals deze is handig voor veel projecten)
  • 20 Gauge Hookup Wire (zwart) voor de staanderpalen
  • Breadboard vriendelijke aan / uit schakelaar
  • Breadboard-vriendelijke pulsdrukkers (4 uit de 20-pack)
  • LRF-ondersteuning (kleine rubberen voetjes)

Hulpmiddelen

  • Soldeerbout
  • Soldeer
  • Draadstripper die 22 gauge draad kan strippen
  • Computer met Arduino IDE voor het programmeren van Nano
  • Arduino IDE (1.0.5 of nieuwer)
  • USB A-Male naar Mini-B-kabel (voor het programmeren van Nano)

bibliotheken

Download de volgende Aduino-bibliotheken, start de Arduino IDE en installeer elke met de Schets> Bibliotheek importeren> Bibliotheek toevoegen menu. 

  • PinChangeInterrupt Library om pin-change-events te detecteren
  • Adafruit Neopixel Library om de Neopixel-ringen te controleren

Met deze methode hoeft u de handmatig niet meer te vinden Bibliotheek map en unzip. De IDE zorgt voor deze stap. Na het importeren van de bibliotheken, verlaat u de Arduino IDE.

Overzicht

De onderstaande instructies laten zien hoe u de lamp en het circuit op de printplaat en de programmering van de Arduino moet monteren. De functie van de lamp is vrij eenvoudig: elke knop activeert een onderbreking in de Arduino die op zijn beurt een gedragsverandering teweeg zal brengen. 

De knoppen van rechts naar links (omdat ik zo moeilijk ben) zijn: aan / uit-schakelaar, kleurvoorkeuzemodus, helderheids vooraf ingesteld niveau, effectmodus. Wanneer het lampje wordt uitgeschakeld, gaat de LED uit en worden de huidige instellingen in het permanente geheugen geschreven. Wanneer het lampje aan gaat, leest het de instellingen en is klaar om opnieuw te beginnen waar u was gebleven.

Montage van de LED-toren

U zult de drie LED-ringen gebruiken om een ​​LED-toren te bouwen die het lampgedeelte van de lamp is. 

  • Knip negen 3-inch lengtes van de zwarte 20 gauge aansluitdraad
  • Strip elke draad 1/4 "aan elk uiteinde
  • Soldeer een zwarte draad in de GND, Gegevensinvoer, en PWR +5 gaten op de 24-pixelring vanaf de onderkant, zodat de draden onder de ring uitkomen en de pixels van de ring omhoog gericht zijn. Probeer de draden gelijkmatig te verdelen, omdat deze de basisstijgbuis voor de lamp vormen
  • Soldeer een zwarte draad in de open lucht GND, Data Out, en PWR +5 gaten op de bovenkant van de ring, naar boven gericht in dezelfde richting als de pixels. Je zou nu de 24-pixelring moeten hebben met drie draden die van onder naar beneden wijzen, en drie die in dezelfde richting wijzen als de pixels
  • Soldeer de drie zwarte draden van de 24-pixelring aan de onderkant van de 16-pixelring. De draden moeten de verbinden Data Out (van de 24-pixelring) naar de Gegevensinvoer (op de 16-pixelring), de GND (van de 24-ring) naar de Grond (op de 16), en de PWR +5 (van de 24) naar Vermogen 5V DC (op de 16). Je hebt nu een tweevoudige pixeltoren
  • Soldeer drie zwarte draden op de onderkant van de 12-pixelring in de Data Out, 5V DC vermogen, en GND gaten zodat de draden uit de zijkant steken weg van de LED-pixels
  • Soldeer de Gegevensinvoer draad van de onderkant van de 12-pixelring in de naar de Data OUT gat bovenop de 16-pixelring
  • Verteer de twee overgebleven draden van de 12-pixelring door een beetje soldeersel eraan toe te voegen
  • Soldeer de 5V DC macht draad van de 12-pixelring naar de bovenkant van de draad die door de Vermogen 5V DC gat op de 16-pixelring. Als u een volledige 1/4 "isolatie van de uiteinden van de draden hebt verwijderd, steekt er voldoende gestripte draad door de bovenkant van de 16-pixelring om de twee draden te solderen
  • Soldeer de resterende losse draad van de 12-pixelringen GND gat naar de top van de draad porren door de GND gat op de 16-pixelring

Aan het einde van dit proces moet je controleren of de aardingsdraad van de bodem naar de bovenkant van de LED-ringtoren loopt via alle met de grond genoemde gaten en dat het vermogen hetzelfde is voor de power-achtige holes. 

Er is een klein verschil in de naamgevingsconventie van de zeefdruk op de ringen, maar je begrijpt het wel. Controleer of de data out-draad van elke ring in de hole gaat vanaf de volgende ring. Dit zal een enkelvoudige strook van adresseerbare lichten creëren voor zover het de Neopixel-bibliotheek betreft. 

Hoe hard ik ook probeerde de draden gelijk te houden, ik ontdekte dat ik ze een beetje moest buigen na het solderen om de ringen op de toren waterpas te maken. Misschien moet u hetzelfde doen. Het zou er ongeveer zo uit moeten zien als de volgende afbeelding.


LED toren gemonteerd

Monteer het breadboard-circuit

Gebruik de diagramafbeelding hieronder om het circuit aan te sluiten. Elk van de componenten moet gemakkelijk in het bord passen en misschien wilt u de 22-gauge-aansluitdraad op maat snijden voor routing op het breadboard voor een meer afgewerkte pasvorm. Een paar dingen om op te letten over het circuit.

  • De aan / uit-schakelaar onderbreekt de niet-geregelde 7V stroom van de voeding die de LED-ringen en de Arduino voedt. Het wordt sterk aanbevolen om deze schakelaar in te stellen op uit voordat u de voeding aansluit of verwijdert. Dit beschermt de ringen tegen spanningspieken van gelijkwaardige voedingen van hoge kwaliteit.
  • De momentele drukknoppen verbinden een gereguleerde 5V-bus van de spanningsregelaar op de Arduino met de pennen die de druk op de knop detecteren. De 10K Ohm-weerstanden houden de pinnen LOW totdat er op de knop wordt gedrukt.
Schakelschema

Nadat het bord is gemonteerd, plaatst u de LED-toren op het bord zodat de aardingsdraad wordt aangesloten op een aardingsbus, de stroomdraad op de niet-geregelde voedingsbus (de bovenste rode stroombus in het diagram) en de signaaldraad op de D10 pin op de Arduino. Breng tenslotte vier kleine rubberen voetjes aan op de onderkant van de breadboard om te voorkomen dat deze slipt.

Gemonteerde lamp

Programmeer de Arduino

De hardware is nu geconstrueerd en de volgende stap is om het te programmeren. Download de zipverpakking met deze tutorial of bekijk de github-repository voor het licht.

  • Open nightlight.ino in de Arduino IDE
  • Verbind de Arduino Nano met de computer met de USB-naar-USB-minikabel
  • Zorg ervoor dat de seriële poort is ingesteld op de poort die de computer heeft gedetecteerd toen u de Arduino met behulp van de Hulpmiddelen> Seriële poort menu
  • Zorg ervoor dat het bord is ingesteld op Arduino Nano w / ATmega328 met behulp van de Hulpmiddelen> Bord menu
  • Controleer of de bibliotheken correct zijn geïnstalleerd door op te klikken Verifiëren knop en controleer of er geen fouten zijn
  • Gebruik de Uploaden om de code naar de Arduino te duwen
  • Open het venster Seriële monitor door op te drukken Ctrl-Shift-M en zorg ervoor dat deze is ingesteld op 19200 baud. Je zou de Arduino moeten zien initialiseren met uitvoer zoals het onderstaande voorbeeld
RGB-stemmingslampje V1.0: Ready Reading from EEPROM: Status: 1 Bright-voorinstelling: 1 Kleurvoorinstelling: 1 Effectniveau: 9 Status: 1 Setup voltooid. In de uit-modus. slewdelay = 20 climbdelay = 200 In functie Initialiseren van het effect met preset: 1 
  • Zorg ervoor dat de aan / uit-schakelaar in de uit-stand staat
  • Sluit de 7V-voeding aan op de vatconnector
  • Draai aan de schakelaar op
  • Probeer de knoppen uit en zie dat ze reageren zoals hierboven beschreven, van links naar rechts: aan / uit-schakelaar, kleurvoorkeuzemodus, helderheids vooraf ingesteld niveau, effectmodus. De effectmodus start een langzame klim van pixels vanaf de onderste ring die langzaam van kleur verandert naar de volgende preset. Zodra alle 52 pixels zijn gewijzigd in de volgende kleur, wordt het proces voor het wijzigen van de kleur opnieuw gestart. Druk op de Effect knop herhaaldelijk verandert de snelheid van het effect.

Opmerkingen over het programma

EEPROM

De Arduino heeft een bepaalde hoeveelheid EEPROM die kan worden beschreven en gelezen waaruit waarden over de stroom van de Arduino behouden blijven. Het lampprogramma bevat het EEPROM.h-bestand dat de functies blootlegt EEPROM.read () en EEPROM.write () die bytes lezen en schrijven in de EEPROM-geheugenruimte. 

Als programmeur bent u er verantwoordelijk voor dat u weet welk adres u moet lezen en schrijven en de code die u gebruikt om dit te doen #bepalen om het adres op te geven dat een specifieke instelling vasthoudt bij schrijven en lezen.

#define STATEADDR 1 #define BRIGHTADDR 2 #define COLORADDR 3 #define EFFECTADDR 4
 // lees de variabelen uit EPROM en stel systeemstatus in = EEPROM.read (STATEADDR); currentBrightLevel = EEPROM.read (BRIGHTADDR); currentColorPreset = EEPROM.read (COLORADDR); currentEffectLevel = EEPROM.read (EFFECTADDR); 

Het EEPROM-geheugen heeft een limiet tot hoe vaak het kan worden geschreven voordat het degradeert, maar dat aantal is 10.000 bereik, dus er is weinig zorg over het verslijten van uw EEPROM met deze toepassing in de komende decennia. Merk op dat het geen goed idee is om elke seconde of zo in een toepassing naar de EEPROM te schrijven.

interrupts

Het programma gebruikt interrupts om te detecteren wanneer de knoppen worden ingedrukt in plaats van te pollen voor wanneer de pin hoog is. In de volgende code van de opstelling() routing, de functie fobHandler () is toegewezen om te worden aangeroepen wanneer een van de vier knoppen wordt ingedrukt.

  // stel de interrupt in op elk van de pinnen PCintPort :: attachInterrupt (FOBPINA, & ​​fobHandler, RISING); PCintPort :: attachInterrupt (FOBPINB, & fobHandler, RISING); PCintPort :: attachInterrupt (FOBPINC, & fobHandler, RISING); PCintPort :: attachInterrupt (FOBPIND, & fobHandler, RISING); 

De interrupt-methode biedt een veel nauwkeuriger detectie van de druk op de knop. De Arduino heeft slechts twee ingebouwde generieke hardware-interrupts, maar het ondersteunt ook een PinChangeInterrupt op elke pin. 

De Atmel-chip kan op elke pin veranderings-, stijg- of dal-modes detecteren. Wanneer de interrupt wordt getriggerd, de functie die eerder in het programma is opgegeven fobHandler () onderbreekt de uitvoeringscode en neemt deze over. Wanneer de interrupt handler klaar is, keert de uitvoering terug naar het programma waar het gestopt was. Zie de projectpagina over het onderwerp voor meer informatie over onderbrekingen in pinwijzigingen.

Het programma gebruikt een interrupt om te detecteren welke pen is gewijzigd en de functie fobHandler () stelt de globale variabele in latest_interrupted_pin naar het nummer van de pin die is gewijzigd. De chip is ingesteld om a te detecteren STIJGENDE LIJN spanningsverandering, wat betekent dat deze wordt geactiveerd als de knop wordt ingedrukt in plaats van wanneer deze wordt losgelaten. 

De hoofdlus van het programma controleert op een wijziging van de latest_interrupted_pin variabel en beslist wat te doen. Het zware opheffen van wat te doen wanneer de knop wordt ingedrukt, wordt overgelaten aan de hoofdleiding lus() omdat het uitvoeren van bepaalde functies binnen de interruptfunctie ervoor kan zorgen dat dingen wankel worden, zoals Serial.print (), millis (), vertraging(), en alles wat het extra gebruik van interrupts vereist. 

In dit programma verandert de onderbrekingsafhandelingsroutering eenvoudigweg een variabele en laat de hoofdlus het gecompliceerde werk doen om wonkiness te voorkomen.

Samenvatting

Je hebt nu een nieuwe sfeerlamp gebouwd die wordt aangedreven door een Arduino. In de basisconfiguratie kunt u de kleur, de helderheid en het effect van de lamp veranderen met een druk op de knop. 

Ik heb u laten zien hoe u Neopixel-eenheden aan elkaar moet koppelen terwijl u een enkele adresseerbare strip maakt. Tijdens deze build hebt u ook geleerd over het gebruik van pin change-interrupts om hardwarewijzigingen te lezen en hoe u gegevens in het permanente geheugen van uw Arduino kunt opslaan om instellingen te creëren die blijven bestaan ​​bij stroomuitval.

Er zijn veel plaatsen om dit project te nemen als je het wilt hacken als iets dat verder gaat dan de nieuwigheid met blanke draad met elektro-thema, de lichtsculptuur die het nu is. Verbeteringen die u zou kunnen proberen, zijn onder meer meer kleurvoorinstellingen toevoegen, een ander effect wanneer de lamp in de effectmodus staat of zelfs een schaduw van doorschijnend velum.