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.
Download de volgende Aduino-bibliotheken, start de Arduino IDE en installeer elke met de Schets> Bibliotheek importeren> Bibliotheek toevoegen menu.
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.
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.
U zult de drie LED-ringen gebruiken om een LED-toren te bouwen die het lampgedeelte van de lamp is.
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.
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.
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 lampDe 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.
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
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.
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.
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.