Witajcie
Przedstawiam wam czujnik zmierzchowy jeszcze w fazie testów. Jako iż Arduino kupiłem 4 dni temu, proszę o wyrozumiałość jeśli coś jest źle zrobione. Dopiero zaczynam, ale koniec pierdół, bierzemy się do roboty! ;)
Co będzie potrzebne?
- Arduino (w moim przypadku UNO)
- Płytka stykowa
- Ekran LCD
- Potencjometr
- 2 Ledy Czerwony oraz Zielony
- Kabelki
- 3x Rezystor 22 OM
- Fotorezystor
A więc na początek projekt graficzny arduino:
Należy pamiętać aby GND od LED-ów był podłączony bezpośrednio do Arduino. Dlaczego nie do płytki? Otóż kiedy podłączyłem do płytki, włączał się delay i zamiast reagować na światło, czujnik nie reagował wcale, bądź wskazywał stan Wysoki lub Niski i tak w kółko. Być może jest błąd w kodzie, lecz wszystko przeanalizowałem i nie wyglądało nic na źle robione.
Czas na kod. Kod nie wydaje się zbyt skomplikowany, każdy sobie go przeanalizuje spokojnie ;)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
//////////////////////////////////////////////// // Czujnik Zmierzchowy by LorEnzoo wersja BETA// //////////////////////////////////////////////// // Pin 5 na LCD podpinamy pod - //pin 4 pod 12 a pin 6 pod 11 // pin kontrastu potecjometr pod pin 3 //Diody informujące stan załączenia zawsze podpinamy pod arduino (jeśli wyświetlacz wariuje) int pin_pr = A0; int pin_dioda = 13;// czerwona int pin_dioda2 = 10;//zielona #include <LiquidCrystal.h> LiquidCrystal lcd(12,11,5,4,3,2);// porty lcd void setup() { lcd.begin(16,2);// ile wierszy i kolumn lcd.print("Jasnosc: %");// tekst na pierwszej linii lcd.setCursor (0,1);// setcursor odpowiada za zmianę linii i gdzie zacząć pisać lcd.print("Oswietlenie:");// tekst na 2 linii pinMode(pin_pr, INPUT); pinMode(pin_dioda, OUTPUT); pinMode(pin_dioda2, OUTPUT); } void loop() { int czujnik = analogRead(pin_pr); int ekran = czujnik *12 /(10.23) ; // każdy sobie to sam definiuje, to jest mnożnik który wyświetla % światła lcd.setCursor(10,0); if(ekran<10)lcd.print("0"); lcd.print(ekran); delay(500); if(czujnik>5) { ///////////// Ile % ma się wyłączyć digitalWrite(pin_dioda, LOW); digitalWrite(pin_dioda2, HIGH); lcd.setCursor(13,1); lcd.print("OFF"); } if(czujnik<5) ///////////////// Ile % ma się włączyć { digitalWrite(pin_dioda, HIGH); digitalWrite(pin_dioda2, LOW); lcd.setCursor(13,1); lcd.print("ON "); } } |
To na tyle jeśli chodzi o projekt, to jest jeszcze wersja nieskończona, ciągle będę coś dopisywał i modyfikował. W planach mam dodać godzinę oraz temperaturę na zewnątrz. Urządzenie jest budowane z myślą o ogródek, czyli automatyczne uruchamianie lamp ogrodowych lub innych rzeczy, można cokolwiek pod to podłączyć. Jeszcze muszę dokupić przełącznik elektroniczny i zamontować i będzie cacy ;) Myślę że artykuł się wam przyda, Pozdrawiam ;)
Hmm… Coś jest ewidentnie nie tak. Innymi słowy nie ma takiej opcji, by trzeba było koniecznie masę LEDów podpinać do arduino. A jak do płytki stykowej, to nie działa. Nie ma cudów. Musisz szukać błędów :) (przepraszam za tak drastyczne słowa). Martwią mnie jeszcze wartości rezystorów do LEDów. 22Ohm, to raczej napenwo jest źle, chyba że bierzemy pod uwagę zasilanie 3,3V (dla tego nie liczyłem). Ale ze “schematu” wynika, że 5V, tym bardziej, że wykorzystywany jest wyświetlacz…
Także propunuję dla LEDa czerwonego: 330OHm a dla LEDa zielonego 170OHm. Dla fotorezystora zaś wartość taką jaką ma nominalnie fotorezystor, by uzyskać dzielnik rezystancyjny o współczynniku 1/2 lub jak kto woli 0,5.
Przydał by się zmienny próg przełączenia oświetlenia, no i koniecznie
jakaś histereza, może się zdażyć że w pewnych warunkach zaobserwujesz
problem z cykicznym włączaniem i wyłączaniem co pół sekundy.
Schematu nie analizowałem ale świecenie diód nie może (nie powinno) wpływać na pracę czujnika natężenia oświetlenia.
SQ9MDD a mógłbyś mi napisać w kodzie ten próg oświetlenia gdyż nie wiem za bardzo jak to napisać ;)
Daj mi jakiś namiar na siebie
SQ9MDD a mógłbyś mi napisać w kodzie ten próg oświetlenia gdyż nie wiem za bardzo jak to napisać ;)
Masakrycznie przekombinowane. Taki układ robi się na jednym fotorezystorze, tranzystorze i potencjometrze. Do tego nie trzeba kodu ani audrino. Programować powinieneś dopiero na etapie dodawania czasu do Twojego projetku.
Powiedz mi czemu dzielisz zmienną typu całkowitego przez liczbę zmiennoprzecinkową?
Można tak robić, w czym problem? Zmienna wyjsciowa i tak bedzie typu całkowitego, wykonał tzw rzutowanie niejawne.
Zrobiłem tak ponieważ źle mi wskazywało na LCD, więc zrobiłem sobie tak bo chciałem sobie samemu ustawić na LCD według siebie % oświetlenia. :)
Zauważ, że szyny + i – od połowy płytki nie są zwarte, to może być problem dlaczego nie miałeś masy na diodzie .
Piotrek dobrze mówi – bardzo często linie zasilające podzielone są na dwie lub więcej sekcji.
Może to zabrzmi śmiesznie, ale podstawowy błąd jest w linii 32 – nie jest ona
zakomentowana.