Handgemaakt van Arduino aangedreven RGB Moodlamp (5 / 7 stap)

Stap 5: De Code:


Op de foto's Zie je mijn proces met Arduino. Om te beginnen probeerde ik rond met mijn zelfgemaakte ProtoShield, een pak van de batterij en sommige soorten van LEDs.
Enkele maanden geleden begon ik met "Spooky projecten" en "BionicArduino" door TodEKurt.
http://todbot.com/blog/spookyarduino/

Mijn code is gewoon een lastige combinatie van zijn projectcode.
"RGBMoodlight", "RGBPotMixer"
en sommige extensies.
Drie analoog-in en.
Digitaal-in als modus-schakelaar (met dank aan Ju. voor de interrupt-routine :).
De LED's zijn verbonden met D9 D10 en D11 ter ondersteuning van PulseWithModulation.

Als je wilt, ik kan de schets te publiceren, maar het is een echt kale combinatie van deze twee geweldige codes.

Hier is mijn oorspronkelijke code van de lamp.
Het ziet er een beetje rommelig zijn, want het was mijn zeer vroeg stadium van de programmering...
Maar als u het kopieert, het zou moeten werken prima.

Er zijn mooie stukken, zoals de "PotColorMixer", de "RGBfadingFunction" en de Interrupt-Routine voor de modus-schakelaar.

/ * nejo June2008

  • Code voor mijn "Moodlamp", gebaseerd op "dimmingLEDs" door Clay Shirky < clay.shirky

* nejo Sep2008

  • Definitieve code voor de moodlamp met interrupt-modus-schakelaar, analoge-wijzerplaat van de snelheid voor RGB-fading en RGB-kleur wijzigen.
  • De dimmer-functie werkt alleen voor de witte kleur

* nejo October2008

  • Geluid-extensie voor de moodlamp:
  • Een condensator microfoon met een kleine LM368 Amp, een recifier en een RC-low-pass-filter
  • met een andere analogInput gebruik ik de RGBPotMixer-functie om de kleur te wijzigen door het verkrijgen van de mic-signaal.

*
*
-Code voor cross-fading 3 LEDs, rood, groen en blauw, of een tri-color LED, met PWM

  • Het programma cross-fades langzaam van rood tot groen, groen naar blauw en blauw naar rood
  • De debugging code wordt ervan uitgegaan dat Arduino 0004, omdat het gebruik van de new Serial.begin ()-stijl functies
  • oorspronkelijk "dimmingLEDs" door Clay Shirky < clay.shirky

*

  • AnalogRead is op Pin A0 variëren van de snelheid van de fading RGB ingeschakeld
  • AnalogRead is op Pin A2 variëren de kleur van de hueRGB ingeschakeld

*
*
*/

#include < avr/interrupt.h >
Uitgang
int ledPin = 13; controlPin voor foutopsporing
int redPin = 9; Rode LED, aangesloten op digital pin 9
int greenPin = 10; Groene LED, aangesloten op digital pin 10
int bluePin = 11; Blauwe LED, aangesloten op digital pin 11

int dimredPin = 3; Pinnen voor de analoge dimmen waarde, verbonden aan de bestuurder van de transistor
int dimgreenPin = 5;
int dimbluePin = 6;

Input
int switchPin = 2; switch is aangesloten op de pin D2
int val = 0; variabele voor het lezen van de Pinstatus
int buttonState; variabele te houden van de status van de knop
int buttonPresses = 0; 3 persen te gaan!
int potPin0 = 0; Pot voor het aanpassen van de vertraging tussen fading in Moodlamp;
int potPin2 = 2; Potentiometer uitvoer voor het wijzigen van de kleur van de hueRGB
int potVal = 0; Variabele op te slaan van de inbreng van de potentiometer
int maxVal = 0; waarde op te slaan het dimmen factor standaard is 255, als geen Pot is verbonden
int dimPin = 4; Pot aangesloten op A4 dimmen de helderheid

Programma variabelen
int redVal = 255; Variabelen voor het opslaan van de waarden te sturen naar de pinnen
int greenVal = 1; Beginwaarden zijn volle rode, groene en blauwe off
int blueVal = 1;

int i = 0; Lus teller
int wachten; / / = 15; 50 ms (.05 seconde) vertraging; verkorten voor sneller verdwijnt
int k = 0; waarde voor de gecontroleerde in de knipperen-functie
int DEBUG = 0; DEBUG teller; Indien ingesteld op 1, zal schrijf waarden terug via seriële
int LCD = 0; LCD teller; Indien ingesteld op 1, zal schrijf waarden terug via seriële

VOID Setup
{
pinMode (ledPin, OUTPUT);
pinMode (redPin, OUTPUT); Hiermee stelt u de pinnen als uitgang
pinMode (greenPin, OUTPUT);
pinMode (bluePin, OUTPUT);
pinMode(dimredPin,OUTPUT);
pinMode(dimgreenPin,OUTPUT); Hiermee stelt u de pinnen als uitgang
pinMode(dimbluePin,OUTPUT);
pinMode (potPin2, INPUT); //
pinMode (potPin0, INPUT); //
pinMode (dimPin, INPUT); //
pinMode (switchPin, INPUT); De schakeloptie-pincode instellen als input
attachInterrupt(0,isr0,RISING);

Als (DEBUG) {/ / als wij dat de waarden van de pin willen voor foutopsporing...
Serial.begin(9600); .. .set van de seriële uitgang op 0004 stijl
}
}

Hoofdprogramma
void loop
{

Als (buttonPresses == 0) {}
Moodlamp(); roept de functie Moodlight
}
Als (buttonPresses == 1) {}
RGBPotMixer(); de manuel mix functie aanroept
}
Als (buttonPresses == 2) {}

White(); Het is hier allemaal wit
}
Als (buttonPresses == 3) {}

}

Moodlamp();
RGBPotMixer();
White();

Monitor();
Dim();
}
VOID Monitor() {/ / staat naar de monitor verzenden

Als (DEBUG) {/ / als we willen de uitvoer lezen
DEBUG += 1; _ / / Verhogen de DEBUG-teller
Als (DEBUG > 10) {/ / Print elke 10 lussen
DEBUG = 1; De teller instellen
Serial.Print(i); Seriële opdrachten in 0004 stijl
Serial.Print("\t"); Een tabblad Afdrukken
Serial.Print("R:"); Geven dat uitvoer waarde voor rood
Serial.Print(redVal); Afdrukken van waarde voor rood
Serial.Print("\t"); Een tabblad Afdrukken
Serial.Print("G:"); Herhaal deze stappen voor groen en blauw...
Serial.Print(greenVal);
Serial.Print("\t");
Serial.Print("B:");
Serial.Print(blueVal); println, om te eindigen met een harde return
Serial.Print("\t");
Serial.Print("dimValue:");
Serial.Print(maxVal); println, om te eindigen met een harde return
Serial.Print("\t");
Serial.Print("wait:");
Serial.Print(wait); schrijft de waarde van de potPin0 naar de monitor
Serial.Print("\t");
Serial.Print("hueRGBvalue");
Serial.Print(potVal); schrijft de waarde van de potPin0 naar de monitor
Serial.Print("\t");
Serial.Print("buttonState:");
Serial.Print(buttonState); schrijft de waarde van de potPin0 naar de monitor
Serial.Print("\t");
Serial.Print("buttonPresses:");
Serial.println(buttonPresses); schrijft de waarde van de buttonPresses naar de monitor

}
}
}

VOID dim() / / functie voor het dimmen van wit / / misschien later voor alle modi
{
maxVal = analogRead(dimPin);
maxVal / = 4; Analoge variëren van 0..1024--> teveel voor het dimmen van de 0..255-waarde
analogWrite(dimredPin,maxVal);
analogWrite(dimgreenPin,maxVal);
analogWrite(dimbluePin,maxVal);

}

VOID Moodlamp()
{
wachten = analogRead(potPin0); Zoek de waarde van de potPin0;
Als geen Pot is verbonden: wacht 255

Ik += 1; Increment teller
Ik = i - maxVal;
Als (ik < 255) / / eerste fase van verdwijnt
{
redVal-= 1; Red omlaag
greenVal += 1; Groen omhoog
blueVal = 1; Blauwe lage
}
anders als (ik < 509) / / tweede fase van verdwijnt
{
redVal = 1; Rode lage
greenVal-= 1; Groen neer
blueVal += 1; Blauwe omhoog
}
anders als (ik < 763) / / derde fase van de verdwijnt
{
redVal += 1; Rode omhoog
greenVal = 1; Groene lo2
blueVal-= 1; Blauwe down
}
anders / / re-set op de teller, en de verdwijnt opnieuw te beginnen
{
Ik = 1;
}

We doen "255-redVal" in plaats van gewoon "redVal", omdat de
LEDs zijn aangesloten op + 5V in plaats van de Gnd

analogWrite (redPin, 255 - redVal); Huidige waarden schrijven naar LED pinnen
analogWrite (greenPin, 255 - greenVal);
analogWrite (bluePin, 255 - blueVal);

/ * dimredVal = min (redVal - maxVal, 255); dimmen
dimredVal = max (redVal - maxVal, 0);
dimgreenVal = min (greenVal - maxVal, 255);
dimgreenVal = max (greenVal - maxVal, 0);
dimblueVal = min (blueVal - maxVal, 255);
dimblueVal = max (blueVal - maxVal, 0);

analogWrite (redPin, 255 - dimredVal); Huidige waarden schrijven naar LED pinnen
analogWrite (greenPin, 255 - dimgreenVal);
analogWrite (bluePin, 255 - dimblueVal);
*/

wachten / = 4;
delay(wait); Wacht 'geduld' milliseconden voor hervatting van de lus

}

VOID RGBPotMixer()
{
potVal = analogRead(potPin2); luiden naar de waarde van de potentiometer op de invoer pin
potVal = potVal / 4; omzetten 0-255 0-1023

hue_to_rgb (potVal); behandelen van potVal als tint en omzetten in RGB-vals

"255-" is omdat wij gemeenschappelijke-anode LEDs, niet gemeenschappelijke-kathode hebben
analogWrite (redPin, 255-redVal); Schrijf de waarden naar LED pinnen
analogWrite (greenPin, 255-greenVal);
analogWrite (bluePin, 255-blueVal);

}

VOID White() {}
analogWrite (redPin, maxVal); Schrijf de waarden naar LED pinnen
analogWrite (greenPin, maxVal);
analogWrite (bluePin, maxVal);
}

/*

  • Gegeven een variabele tint 'h', dat van 0-252 varieert,
  • RGB-kleurwaarde correct ingesteld.
  • MaxValimum neemt verzadiging & maximale waarde (helderheid)
  • Hiermee voert u zuiver integer wiskunde, geen zwevende punt.

*/
VOID hue_to_rgb(byte hue)
{
Als tint (kleurtoon > 252) = 252; stetback tot en met 252!! nejo
byte hd = kleurtoon / 42; 36 == 252/7, 252 == H_MAX
byte hi = hd % 6; geeft 0-5
byte f = kleurtoon % 42;
byte fs = f * 6;
schakelen (hi) {}
Case 0:
redVal = 252; greenVal = fs; blueVal = 0;
breken;
Case 1:
redVal = 252-fs; greenVal = 252; blueVal = 0;
breken;
Case 2:
redVal = 0; greenVal = 252; blueVal = fs;
breken;
Case 3:
redVal = 0; greenVal = 252-fs; blueVal = 252;
breken;
Case 4:
redVal = fs; greenVal = 0; blueVal = 252;
breken;
Case 5:
redVal = 252; greenVal = 0; blueVal = 252-fs;
breken;
}
}
ongeldig isr0() {}
Serial.println ("\n \n inerrupt \n");

buttonState = digitalRead(switchPin); Lees de begintoestand
delayMicroseconds(100000);
Als (val! = buttonState) {/ / de status van de knop veranderd!

Als (buttonState == HIGH) {/ / controleren als de knop wordt nu gedrukt
buttonPresses ++;

// }
Val = buttonState; de nieuwe staat in onze variabele opslaan
Als (buttonPresses == 3) {/ / zur cksetzen
buttonPresses = 0;
}
}

// }

Volgende fase werden de transistor-stuurprogramma's. Ik gebruikte 3 PNP transistors met een maximale stroom van 3 Ampere. Nadat vooruit-stroom en spanning werden geregeld, werkte de LEDemitter prima met volledige intensiteit.

Gerelateerde Artikelen

Het BlokClok-Concept - Arduino aangedreven RGB abstracte klok

Het BlokClok-Concept - Arduino aangedreven RGB abstracte klok

Arduino aangedreven klok concept. Uniek concept met behulp van een 8 x 8 RGB-Dot Matrix-scherm. De tijd wordt aangegeven met behulp van blokken van kleur. Het centrale 6 x 6 raster is verdeeld in 4 x (3 x 3) rasters en elk blok van 3 x 3 is een ander
Arduino aangedreven RGB LED Scrolling klok

Arduino aangedreven RGB LED Scrolling klok

dit is een 8 x 8 RGB LED module, gedreven door 4 x 74HC595N Shift registreert gecontroleerd door een Boarduino (Arduino kloon die kan worden gebruikt op een breadboard). Het gegevenstype tijd is uit een IC DS1307 Real Time klok.De display is outputte
Arduino Powered RGB Mood Lamp plus Simon

Arduino Powered RGB Mood Lamp plus Simon

dit is eigenlijk een arduino aangedreven RGB mood lamp plus de simon zegt spel, twee in één.Hoe gebruik: Het apparaat begint met de standaard RGB Mood Lamp programma, wanneer u op een van de vier toetsen aan de onderkant, de Simon zegt spelbegin. Wan
Android Controlled RGB LED met behulp van Arduino

Android Controlled RGB LED met behulp van Arduino

Hai iedereen in de post-iam gaan laten zien hoe om te controleren de RGB LED met behulp van android met arduino en HC-05 Bluetooth-module.Ik zocht in web is er veel technieken waarmee de RGB LED. Maar dit is de methode die zeer eenvoudig en gemakkeli
Maken van een Arduino aangedreven gordijn automatisering

Maken van een Arduino aangedreven gordijn automatisering

In deze video ik aan de slag op het toont u hoe te maken van een Arduino aangedreven apparaat dat zal openen en sluiten van gordijnen!Met behulp van een touw en een continue rotatie servo ben ik kundig voor wekken een katrol systeem dat als de backbo
Arduino aangedreven door uw SmartPhone (met behulp van seriële) - deel 1 - geluid en trillingen acties

Arduino aangedreven door uw SmartPhone (met behulp van seriële) - deel 1 - geluid en trillingen acties

Welkom bij het eerste deel van deze serie. In deze nemen serie die zullen we proberen zo veel als we kunnen uit je smartphone (android momenteel) aan uw microcontroller met seriële kabel (OTG kabel).In dit deel zullen we uitleggen hoe je kan spelen e
Arduino-aangedreven A-10 stok grip externe w/Emergency Party Button!

Arduino-aangedreven A-10 stok grip externe w/Emergency Party Button!

ik Plama2002 de "Emergency Party Button" bouwen een tijdje terug kwam en wilde iets gelijkaardig voor mijn bar. Ik had ook een oude USAF B-8 stok greep uit een A-10A die ik in mijn vorige leven opgepikt. Ik dacht dat in plaats van gewoon een ges
Onder leiding van matrix beeldscherm rij-kolom scannen met behulp van arduino

Onder leiding van matrix beeldscherm rij-kolom scannen met behulp van arduino

Wij zijn zeer gevonden van Led dot matrix displays. Ik heb een Led matrix maar met behulp van verschillende technieken voor het besturen van het.Ik heb geprobeerd om het vergelijkbaar met een standaard televisie weergave. Ik heb gebruikt dezelfde tec
Bouw een Arduino-aangedreven pratende robot hoofd!

Bouw een Arduino-aangedreven pratende robot hoofd!

Deze robot hoofd werd oorspronkelijk gebouwd als een einde van het jaar-project voor mijn fysieke computing klasse, maar in de zomer het heeft "geleerd" hoe om te praten.Het hoofd wordt aangedreven door twee Freeduinos, 3 TLC5940NT chips en een
Arduino Powered RGB LED wodka plank

Arduino Powered RGB LED wodka plank

dit instructable krijgen u zal maken van uw eigen arduino aangedreven rood groen en blauwe LED project. Het hoeft zelfs niet te worden een plank! Flessen wodka toevallig mooi dus dat is wat ik wilde doen oplichten.In dit project gebruiken we elke pin
Acryl Fish Tank met Arduino aangedreven Feeder

Acryl Fish Tank met Arduino aangedreven Feeder

Heb je ooit wilde een meer handen op gevoel bij het ophalen van een vis? Of wilde iets anders dan de gemiddelde aquaria gevonden in de winkels? Dit aquarium is volledig aangepast en afgestemd op uw grootte kan worden gewijzigd en heeft een Arduino aa
Draadloze afstand zender met L.C.D ontvanger met behulp van Arduino

Draadloze afstand zender met L.C.D ontvanger met behulp van Arduino

Deze instructables laten zien hoe een arduino aangedreven afstandssensor met behulp van de ultasonic range finder, dat de afstand gemeten tot aan de ontvanger te sturen. In dit project gebruiken we een 433 mhz zender en een ontvanger voor het verzend
PC afstandsbediening met behulp van Arduino Pro Micro

PC afstandsbediening met behulp van Arduino Pro Micro

Hallo ik ben nieuw aan arduino en in het proces van leren, als ik veel door middel van tutorials, video's leren, ' ibles en door eigen ervaring.Onlangs wilde ik gebruik arduino Uno en IR afstandsbediening om controle VLC speler. Helaas werkte dat nie
De Wireless, obstakel detectie, piepen Robot met behulp van Arduinos!

De Wireless, obstakel detectie, piepen Robot met behulp van Arduinos!

Dit is een belemmering van het draadloos gecontroleerde, autonome robot opsporen!Een tijdje terug had ik maakte van dit Instructable en wilde maken sommige belangrijke verbeteringen sinds.De volgende zijn de robot de kenmerken:-1.he de draadloos geco