Stap 4: verlichting
De volgende stap is om toe te voegen dat sommige krachtige LED's deze knipperen eigenlijk om effectief te maken. Het knipperende effect heet Flicker Vertigo en is "een onbalans in de activiteit van de hersenen cellen veroorzaakt door blootstelling aan laagfrequent flikkeren (of knipperend) een relatief helder licht."
We zijn met behulp van Vermogen LED's , die hebben iets anders worden behandeld dan een normale LED becasu die zij op veel hogere stromen werken. Er zijn tal van grote Instructables over hen. Voor de omvang van dit project, we gonna het zo eenvoudig mogelijk te houden. De Arduino niet kunnen leveren genoeg stroom om te rijden een macht direct leidde, dus we het gebruik van een externe voeding van een soort en een transistor moeten te schakelen. Het is vergelijkbaar met het werken met motoren. Ook, omdat deze LEDs zeer gevoelig voor minieme veranderingen in spanning zijn, dus is het beter om te rijden met behulp van een constante huidige driver, die we gaan bouwen.
Verwijst naar het schema en de afbeeldingen zijn toegevoegd boven
De
is verbonden met PIN 9 op de Arduino via een 2.2 k weerstand te beperken van de huidige. De Emitter is aangesloten op de grond en de Collector is aangesloten op de negatieve kant van de LED. De TIP120 fungeert als een switch door het onderbreken van de verbinding met de grond. De pin van
is verbonden met + 9 volt (of welke accu u gebruikt). De OUTPUT-pin is aangesloten op de pin aanpassen door een huidige zin weerstand. Dit is hier het controlemechanisme. De waarde van die weerstand bepaalt de hoeveelheid stroom die de LM317 kan erdoor. De berekening is: R(esistance) = 1,25 (voltageReference) /I (stroom in ampère). Als we 500mA, dat een goede hoeveelheid stroom voor deze LED's willen is, zou de weerstand 1,25/0,5, of 2.5 Ohm. Dit is ook een groot artikel over de LM317 als een constante stroombron met math voor warmteafvoer. We zullen met behulp van 4 1/4W 10 Ohm weerstanden parallel, waardoor ons 2,5 Ohm vanwege dit.
Zorg ervoor dat de Base van TIP120 is verbonden met PIN 9, en de led variabele is ingesteld op 9 en vervolgens het apparaat opnieuw testen. Het moet zeer onaangenaam. Onthoud, alles wat je hoeft te doen is de verlichting inschakelen voor zwenking op vandoor! Zorg enkel ervoor dat u herinneren waar het licht schakelaar is.
Dit is de definitieve code:
int led = 9; //HIGH power LED output int IRsensorPin = 2; //Infrared Sensor Pin int IRsense = 0; //IR Sensor Value int brightnessPin = 3; //Ambient Brightness Pin int brightness; //Ambient Light Value float period; //Storing our Pulse Width Period float hertz = 9; //Frequency of the flashing float width = 0.2; //The PWM of our Flashing float onTime, offTime; //Holders for actual Delay Times void setup() { pinMode(led, OUTPUT); //Set Power LED as OUTPUT Serial.begin(9600); //Start Serial period = (1/hertz)*1000; //convert Hertz into millisecond delay times onTime = period * width; //calculate On time offTime = period * abs(1-width); //calculate Off time } void loop() { brightness = analogRead(brightnessPin); //Read ambient light level // Serial.print(“B: “); Serial.println(brightness); //print out value for DEBUG if(brightness < 300) { //start IR sensing IF ambient light level is below this level IRsense = analogRead(IRsensorPin); //Read IR sensor // Serial.print(“IR: “); Serial.println(IRsense); //print out value for DEBUG if(IRsense > 80) { //if Infrared sensor detects IR light vertigo(); //Flash Light } else digitalWrite(led, LOW); //if not, keep LED OFF } } void vertigo() { //Flash LED bool flashing = 1; //a holder for the state of the flashing (true or false) while(flashing == 1) { //if flashing is TRUE //Flash LED at pre-determined rate digitalWrite(led, HIGH); delay(onTime); digitalWrite(led, LOW); delay(offTime); if(analogRead(brightnessPin) < 300) flashing = 1; //if ambient light levels rise (ie. you turn on a light) turn Flashing to FALSE else flashing = 0; //if they don't...keep on flashing } }