BedLight tai naktinis apšvietimas po lova. Privalumų duoda toks apšvietimas tikrai nemažai. Pirmiausiai nereikia savęs žaloti ieškant šviesos jungiklio, nereikia žaloti dar miegančių akių, o ir šeimos nariai nenukenčia per kaltininko norą pasisioti ar paniamnioti vidurį nakties.
Idėja pasigaminti automatinį palovio apšvietimą kilo labai senai, berods prieš gerus du metus. Kaip mėgstu sakyti, kai gyvenome dar sename bute 😀 Dar tada pasigaminau tiek PCB, tiek programą mikrovaldikliui parašiau, bet dėl kažkokių priežasčių reikalas sustojo. Dabar, kuomet turime gimusi vaikelį, grįžo ir poreikis sugrąžinti projektuką į dienos šviesą, t.y. yra nakties tamsą.
Dar prieš rodydamas schemas ir plokštes paminėsiu mano mini sistemos ypatybes:
- Attiny25 mikroprocsorius – suteiks mums lankstumą;
- PIR sensorius – judesiui stebėti;
- Šviesos daviklis – sekti ar naktis po lova, ar diena. Greta jo derinama varža, su kuria galime nustatyti norimą apšvietimo kiekį, kuomet jau reikia uždegti palovio šviesos šaltinį;
- 12V maitinimo šaltinis – elektronikos ir apšvietimo šaltinio maitinimui;
- MOSFET – apšvietimo šaltiniui maitinti. Palaipsninis užsidegimas bei užgesinimas naudojant LED tipo šviesos šaltinį. Galimybė pasijungti rėlę jei norima pajungti 220v lempą;
- Galimybė rankiniu būdu valdyti sistema (trys rėžimai: visada išjungta, automatinis, visada įjungta);
Schema ir PCB
Kuomet jau aiškios sudedamosios dalys nesunku pasidėlioti ir schemą. Tuo metu, t.y. prieš du metus, dar nebuvau toks patyręs elektronikos projektuotojas, tad net ir tokią schemą suprojektuoti buvo ką veikti. Dabar aišku juokinga.
Taigi pati schema atrodo taip:
Kaip matote ji minimali. Mikrovaldiklis naudos vidinį dažnį tad kvarco nedėjau, maitinimas jam reguliuojamas su paprastu 7805. Rinkausi Attiny25, nes jo resursų pilnai pakaks, o jis priedo turi ir galybę ADC bei PWM kanalų. Du ADC kanalus panaudosime apšvietimo stebėjimui ir jo intensyvumui nustatyti, o vieną skaitmeninį išėjimą panaudosime judesio davikliui. Išėjimą valdysime su gana silpnu MOSFET’u. Dabar gamindamas schemą dar pridėčiau diodą prie MOSET’o apsaugai ir 0.1uF kondensatorių mikrovaldiklio maitinimui triukšmams sumažinti. Abu šie elementai dabar yra papildomai sumontuoti ant senai pagamintos PCB.
PCB gavosi tikrai tikrai nedidelė:
Dabar galima techninę įrangą realizuoti.
Įrenginys
Štai taip atrodė sulituota schema pačioje pradžioje:
Pirminė idėja buvo montuoti PIR ir šviesos daviklį įrenginio šone, bet dabar grįžęs prie įrenginio kiek persigalvojau. Šiuos du komponentus perkelsiu į korpusą. Korpuso viduje dabar štai tokia makalynė:
O išoriškai dėžė atrodo taip:
Kadangi niekas įrenginio nematys, tai grožis buvo paskutinėje vietoje.
Tikriausiai pastebėjote, kad maitinimas bei apšvietimo išėjimas gana keistai sujungtas kaladėlę? Jungiau viska taip, kad atskirčiau dvi maitinimo linijas: maitinimą elektronikai bei tiesioginį maitinimą apšvietimui. Taip įvykdžiau trijų rėžimų reikalavimą. Kadangi MOSFEt perjunginėją apšvietimo GND, tai trijų padėčių mygtukas perjunginės maitinimo nulį arba elektronikai arba tiesiai apšvietimui. Pats jungtukas jau mėtėsi stalčiuje nuo kažkokio kito išardyto įrenginio ir atrodo taip:
HI padėtis įjungs pastovų apšvietimą, OFF atjungs viską, o esant LO padėčiai įrenginys veiks automatiniu rėžimu.
Kadangi LED lemputės bus negalingos tai nusprendžiau maitinimo blokui neinvestuoti ir panaudoti tai kas liko iš senai išardyto Canon rašalinio spausdintuvo:
Patikrinus išėjimo lizdą radau kontaktus kurie duoda 11.06v, ko man tikrai pakaks.
Programa
Kadangi Attiny25 programavimui naudosiu Arduino kaip programatorių, tai kodėl nenaudoti ir Arduino kodo tam? Parsiunčiau arduino-tiny papildymą kurį sumečiau į Arduino IDE ir galiu pilnai programuoti šį mažylį kaip paprasta Arduino. Žinoma daug kas pasakys kad tai neefektyvų, didelis kodas ir lalala, bet man patogumas daug reiškia. Mano atveju tik pajungiau švaru Attiny prie Arduino, o IDE pati surašė reikiamus saugiklius. Klaidų taip darome taip minimaliai ir susikoncentruoti galime kitose srityse.
Išnaudojau 66proc. iš 2kB atminties ir likau štai su tokia programa:
#define pirSensorPin 1
#define ledPin 0
#define lightSetupPin A1
#define lightSensorPin A3
#define TIMEOUT 60byte ledState = 0;
byte pirState = LOW;
boolean dark = false;
unsigned long timer = 0;
void setup()
{
pinMode(pirSensorPin, INPUT);
digitalWrite(pirSensorPin, LOW);
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
pinMode(lightSetupPin, INPUT);
pinMode(lightSensorPin, INPUT);
}void loop()
{
if (ledState==0)
{
int light = analogRead(lightSensorPin);
int lightSetup = analogRead(lightSetupPin);
if (light<lightSetup)
dark = true;
else
dark = false;
}
pirCheck();
if (timer < millis())
ledOff();
else
{
if (dark)
ledOn();
}
}
void ledOn()
{
for (ledState; ledState<255; ledState++)
{
analogWrite(ledPin, ledState);
delay(30);
if (pirCheck()) return;
}
analogWrite(ledPin, ledState);
}
void ledOff()
{
for (ledState; ledState>0; ledState--)
{
analogWrite(ledPin, ledState);
delay(100);
if (pirCheck()) return;
}
analogWrite(ledPin, ledState);
}
boolean pirCheck()
{
byte pir = digitalRead(pirSensorPin);
boolean result = false;
if (pir==HIGH && pirState==LOW)
{
timer = millis() + (unsigned long)1000 * (unsigned long)TIMEOUT;
result = true;
}
pirState=pir;
return result;
};
Paprastais žodžiais tariant programa fiksuoja paskutinio PIR signalo pradžios laiką ir jei patalpoje tamsu pakankamai tam tikra laiką degina LED. Programuodamas atsižvelgiau į tai kad žmogui vaikštant LED degimo laikas vis prasitęstu, o net ir vykstant apšvietimo gesinimo procesui butu galimybė jį vėl esant reikalui įžiebti pakartotinai.
Montavimas
Viska lyg ir pradebuginus bei sukonfigūravus metas įrangą montuoti po lovą. Pagrindinis modulis su sensorisis buvo primontuotas ties vidurine koja ir atsuktas taip kad “matytu“ daugiau vieną lovos pusę ir toje pačioje pusėje esančias miegamojo duris:
Maitinimo bloką taip pat primontavau netoliese, bet kiek atokiau. Dabar naudoju tiek viena LED lempą bet artimoje ateityje primontuosiu ir pajungsiu antrą tokį.
Dabar liko tik įtaisyti valdymo jungikli. Jį tiesiog perkišau per lovos rėmą tarp čiužinio. Jungiklis bus lovos viduryje, kad abu jos naudotojai galėtu valdyti situacija:
Vėliau, kuomet pastovaus apšvietimo poreikis dings, jungtuką paslėpsiu.
Veikimas
Radau video kuris filmuotas senai, kuomet gaminau plokšte ir programavau pirmą programa:
Matote PIR ir šviesos sensoriai dar ant PCB. Dabar, kuomet viskas sumontuota savo vietoje, veikimas kiek analogiškas tik pilnai užbaigtas. Priminsiu, kad programa buvo pilnai perrašyta ir dabar LED užsidega gana greitai, bet užgęsta labai lėtai:
Degimo trukmė dabar nureguliuota 2 minutės. Filmuke ties 1,30 matysite jau pradedanti užgesti apšvietimą kai kažkas sujuda. Tuomet apšvietimas dideliu greičiu vėl įžiebiamas ir laikas pratęsiamas dar porai minučių.
Apibendrinimas
Kaip matėte beveik visas projektas sudėtas ir panaudotos įrangos. LED lempos nuo senų DRL, maitinimas nuo seno spausdintuvo, jungiklis taip pat rastas ir nuardytas nuo kažkur. Naujas tik valdymo blokelis, bet ir jis toks menkas savo funkcionalumu. Programa taip pat ne pati gudriausia, bet daro tai ko reikia.
Ateityje planuoju dar grįžti prie projekto – noriu pridėti dar viena PIR sensorių, kad būtų aprėpiamas visas kambarys ir sumontuoti normalias LED juostas vietoje LED lempų. Dabar galima gyventi ir be to.
Resursai
Schema ir PCB Eagle formate: http://www.files.com/shared/5386eb87bd776/v3.zip
Arduino programa: http://www.files.com/shared/5386ebfd9e5bf/BadLight.zip
Najs. Nors aš naktinį apšvietimą daryčiau raudoną, kad naktinio regėjimo visai negadintų 🙂
Teisngai mastote kolega. Neatmetu galimybės kokias šviesiai raudonos ar gelsvos spalvos 12V LED juostas po lova sumesti ir taip gaučiau tolygų ir mielą akiai apšvietimą. Tik va tokiu atveju tektu investuoti, o dabar viskas nuo senų laikų..
http://www.aliexpress.com/item/Cool-White-5M-Waterproof-5050-SMD-LED-Strip-5M-300-Leds-60LED-M-Green-Blue-Red/641938364.html
Su tokiom kainom galima ir investuoti… 😀
Tiesa pasakius iš kiniečiu nenoriu pirkti LED juostu. Kiek perku LED’us tiek būna bėdų. Dažniausia arba dalis tiesiog nedega, arba ryškumai skiriasi LED’u.. Žinoma galima rinktis geresni gamintoja, bet tada ir kaina blogesnė..
Nu tai ten reikia pasižiūrėti, kas per atsiliepimai pas pardavėją ir panašiai… kiek padarydavau tyrimukų ir ką nors įsigydavau, tiek nė karto nesigailėjau… daugiau būdavo „human error“, kai tiesiog nepagalvoji, ką perki 😀
Norint labai kokybiškų juostų galima iš čia imt:
http://www.leds.de/en/LED-strips-modules-oxid-oxid-oxid-oxid-oxid/Deco-SMD-LED-strips/SMD-LED-strip-red-36x150mcd-120-12V.html
Na ateityje bus matyti. Dabar leisiu apsigulėti dalykams, Gal gerai ir su LED lempomis bus 🙂
As is Satisled.com esu nusipikres kokiu 20metru led juostu (beje, emiau ir per ju parduotuve ir per ebay, kur jie tas pacias prekes parduoda pigiau) ir visai nebloga kokybe. Is tu 20metru gal kokie 3-5 gabaliukai po tris ledus siek tiek skiriasi savo spalva nuo kitu.
Beje, montuodamas tas juostas priejau isvados, kad jie tokia gera kaina isgauna tiesiog sulituodami kazkokius normaliu (skaityk brangesniu) juostu likucius, nes 5m ritejes juosta yra sulituota is 0.5-1.5m ilgio atkarpu. Na bet kai kaina kokius 5-10 kartu mazesne negu pas mus parduotuvese, tai man viskas tinka 🙂
Super. Aciu uz pasidalinta patirti 🙂 siaip planuose ateityje butu kokie 5m ne vandeniui atsparios juostos isigyti, tai matau kad tokia is viso piguva 🙂
o kai smarkiai siūbuoja lova, nesuveikinėja? :)))
Turiu grazia zmona, tegu tik sviecia 🙂
Ačiū už puikų projektą. Ką tik baigiau. Viskas jau po lova. Panaudojau baltų ledų juostą – tai nežinau ar nebus per daug šviesos naktį. Beliko padaryti mechanizmą, kad vaikui čiulptuką į burna iškritus įkištų 🙂
Jei ka sugalvosi su tuo ciulptuku tai pasidalink informacija 🙂
Mikrovaldiklis iš esmės tokiam daiGtui nereikalingas – pats PIR jutiklis geba formuoti norimos trukmės signalą. Tiesa, nežinia ar konkrečiam modeliui galima pridėti fotorezistorių. Jei negalima – pirkti PIR sensorių su fotorezistoriumi. Pats su tokiu esu padaręs. Tiesa, norėjau ilgesnių laikų, tai kelis kondikus pakeisti teko.
O šiaip patiko idėja daryti pašvietimą po lova beigi naudoti raudoną lempą.
Nesąmonė, mikrokontroleris yra būtinas! Pabandyk dabar padaryti savo sistemai LED’ų palaipsninį uždegimą ir vėliau palaipsninį užgesinimą. Dar pagalvok kaip padaryti kad užgesinimas būtų pratemptas ilgesniam laikui. Dar padaryk kad galėtum reguliuoti uždegimo ir užgesinimo laikus, o jei to nesugalvosi ekprementu/matematikos butu keisk komponentus kol viska suregiliuosi kaip nori. Kol tu galvosi ir ekspermentuosi daug greičiau ir net pigiau gali padaryti tokia sistema kaip mano be jokiu žaidimų su kondensatoriais ir t.t. Vien tas faktas, kad prieš 2 metus pagamintas įrenginys be jokių elektronikos pakeitimų veikia dabar kaip aš noriu yra labai gerai, nes keisti tereikia programą.
[…] čia atnaujinimas, labiau pabaigimas. Kadangi aprašius BedLight įrenginį susilaukiau krūvos patarimų LED juostų tema, taigi neatsispyriau kinų kainoms ir […]
“Dabar gamindamas schemą dar pridėčiau diodą prie MOSET’o apsaugai ir 0.1uF kondensatorių mikrovaldiklio maitinimui triukšmams sumažinti.“ – Gal galėtum parašyti kuriose tiksliau vietose dėti komponentus? Na kondensatorius tai turbūt tarp vcc ir mikrokontrolerio, bet kur tas diodas turėtų eiti 🙂
Čia tau reiktu pagooglinti mosfetų jungimo su Arduino schemų ir tikrai rasi kaip ir kur dedasi atgalinis diodas.