Volt némi RGB LED szalagom, elég ramaty állapotban ahhoz, hogy ne sajnáljam. És színes fényt akartam tenni az ablakba... de úgy, hogy csak este kapcsoljon fel, akkor is, ha nem vagyok itthon.
A LED szalaghoz volt egy USB-ről tápolt (tehát 5V-os) vezérlőm+driverem, ami táp ráadására ott folytatja a beállított világítási módot, ahol abbahagyta. Tehát kellett valami, amivel az USB-t tudom kapcsolgatni, a környezeti fény függvényében.
Adódik, hogy Arduinoval,mert ugyan egy sima komparátor is megtenné, de azt hirtelen nehezebb lett volna összehajigálni Tehát túrtam pár dolgot :
- fotoellenállás
- Arduino
- 10k ellenállás
- FET modul Arduinohoz (Relé is lehetne, de nincs több 5V-os Hamlin relém.)
- USB aljzat
- USB dugó
Inkább nem fényképeztem le, mert a levegőben lóg az egész És nem is marad egyben, januárban szétszedem. Amúgy sem bonyolult.
Egy telefontöltő adja a tápot, ehhez kellett az USB dugó. ez a FET modul bemenetére (VIN+, VIN-) csatlakozik, innen kap tápot maga az Arduino is. A LED szalag felé az USB aljzat a FET modul kimenetéről megy tovább. A FET modul SIG bemenete az Arduino Digital 13 lábáról jön.
A fotoellenállás az Arduino 5V-járól kap tápot, és az Arduino földjére csatlakozik a 10k ellenálláson át. A fotoellenállás és a 10k közös pontja az Arduino Analog 5 lábára van kötve, itt olvasható le a "fényerő".
A program sem bonyolult. Az elején van egy 10mp tesztvilágítás, és soros portot is beállít, hogy be lehessen lőni a fényerősséget, ahol kapcsolni fog (a kiolvasott értéket, és a sötétségszámlálót írja ki sorosra).
A lényege, hogy a LED vezérlő nem szeretné, ha sötétedéskor 1-2mp-enként megjelenne, majd eltűnne a tápja. Tehát biztosítani kell, hogy ha felkapcsol, akkor úgy is maradjon.
Azaz, ha a program sötétet mér (a fényszenzor kiolvasása 400-nál kisebb egy 1023...0 skálán) akkor növeli a darken változó értékét, ha 400-nál nagyobbat, akkor csökkenti. 2mp-enként történik mérés, és ha a darken értéke 200-nál nagyobb, akkor felkapcsolja a LED-eket. Ha egymás után 250-szer világost érzékel, lekapcsol.
int sensorPin = A5; //Fotoellenállás bemenet az analóg 5-ös lábon
int fetpin = 13; //LED szalag meghajtás digitális 13-as kimeneten
int sensorValue = 0; //Fotoellenállás értéke
int darken=0; //Számláló
void setup() {
pinMode(fetpin, OUTPUT);
Serial.begin(9600);
//Teszt világítás 10mp-ig
digitalWrite(fetpin,HIGH);
delay(10000);
digitalWrite(fetpin,LOW);
}
void loop() {
//Fotoellenállás kiolvasása
sensorValue = analogRead(sensorPin);
//Kiíratni sorosra :
Serial.print("Sensor : ");Serial.println(sensorValue);
Serial.print("Darkness counter : ");Serial.println(darken);
//Ha elég sötét van, akkor a sötétség-számlálót növelni, ha világos, akkor csökkenteni. A 400-at a saját igényeid alapján írd át más értékre :)
if (sensorValue < 400) { darken++; }
if (sensorValue > 400) { darken--; }
//A számláló azért bizonyos határok között mozogjon...
if (darken > 250) {darken=250;}
if (darken<0) { darken=0; }
//Ha elég ideje van sötét, akkor LED szalagot bekapcsolni, ha elég ideje van világos, akkor ki
if (darken > 200) digitalWrite(fetpin,HIGH);
if (darken < 1) {digitalWrite(fetpin,LOW);}
//2mp várakozás minden mérés között
delay(2000);
}
Tehát giccsre fel, még bőven meg lehet építeni 24-éig Az USB, és az 5V lehet más is, csak ha magasabb tápról üzemel a LED, akkor az Arduinonak valahonnan kell 5V-ot adni. A FET modulban ugyanaz a jó, mint a relében; a kapcsolt tápfesz és kimenet teljesen független az Arduinotól, és kevéssé melegszik (azért 220-at mégsem érdemes vele kapcsolni, arra jobb egy relé, amit pl. egy FET modullal kell meghajtni; a FET modul magában 25-30V egyenfeszültségig elég).