Witajcie Majsterkowicze i Programiści, ponieważ zbliżają się wakacje to jest coraz “luźniej” w szkole, a co za tym idzie i w domu, dlatego zacząłem tworzyć i programować “moduły”. Będą one częścią większego projektu, który postaram się opisać po skończeniu :D .
Co to? W jakim celu jest to stworzone?
Chciałbym Wam dzisiaj zaprezentować jeden moduł. Jest to automatyczne sterowanie jasnością LCD podpiętego do Arduino. Normalnie podświetlanie jest dostosowane do jasności pomieszczenia. Po przyciśnięciu przycisku jasność jest równa 100% na określony czas przykładowo 6 sekund. No i każdy by w tym momencie mógł powiedzieć pff też tak umiem, no ale mój kod nie używa funkcji delay. Czyli to znaczy że nie “zatrzymuje” programu na czas podświetlenia ekranu (np. 6 sekund)
Jak to działa?
Arduino mierzy napięcie na środkowej nóżce dzielnika napięcia stworzonego z fotorezystora i rezystora. Przelicza wartość tego z 0-1024 na 5-255. Potem jeśli nie jest wciśnięty przycisk, za pomocą pinu PWM steruje podświetlaniem LCD. Natomiast jeśli jest wciśnięty to zapala maksymalne podświetlanie i wtedy zaczyna odliczać czas (tak jak w programie Blink Wiothout Delay). Po określonym wcześniej czasie podświetlanie jest “przełączane” na automatyczne.
Co będzie nam potrzebne?
- Arduino np. Leonardo (jak moje :D )
- wyświetlacz lcd + potencjometr ok. 10k
- fotorezystor + rezystor (u mnie to jest 20-30k i 22k)
- przycisk + rezystor ok. 10k
może to być np. ten zestaw startowy
Dalej -> Zbudujmy sobie to i wgrajmy program najpierw podłączamy LCD:
- (pin od lewej) GND
- +5V
- środkowa nóżka potencjometru
- Arduino pin 12
- GND
- Arduino pin 11
- Arduino pin 5
- Arduino pin 4
- Arduino pin 3
- Arduino pin 2
- Arduino pin 9
- GND
potem robimy dzielnik napięcia: 1 nóżka fotorezystora +5V 2 nóżka fotorezystora łączymy z nóżką rezystora > to podłączamy do Arduino pin A0 2 nóżka rezystora GND przycisk 1 nóżka +5V 2 nóżka Arduino pin A5 i przez rezystor 10k do GND a oto jak powinien wyglądać układ potem wgrywamy program. stworzyłem go na podstawie kodu który znalazłem w sieci (tu) nie do końca go rozumiem ale trudno :/ czas podświetlania można ustawić w: #define LCD_LIGHT_ON_TIME 6000 (dokładniej zmieniając to 6000)
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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
//TAM GDZIE JEST NAPISANE "U W A G A" PROSZĘ NIE EDYTOWAĆ KODU #include <LiquidCrystal.h> #include <Wire.h> // wybór pinów: #define BUTTON_PIN A5 // przycisk #define LCD_LIGHT_PIN 9 // podświetlanie ekaranu anoda const int analogInPin = A0; //środkowa nóżka dzielnika napięcia //T U N A S T A W I A S Z C Z A S P O D Ś W I E T L A N I A #define LCD_LIGHT_ON_TIME 6000 // milisekundy //U W A G A int sensorValue = 0; int outputValue = 0; int czas = 0; unsigned int currentLcdLightOnTime = 0; unsigned long lcdLightOn_StartMillis; boolean isLcdLightOn; int buttonState = 0; // LiquidCrystal(rs, e, d4, d5, d6, d7) LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup(){ //Serial.begin(9600); lcd.begin(16, 2); pinMode(0,INPUT); pinMode(BUTTON_PIN, INPUT); pinMode(LCD_LIGHT_PIN, OUTPUT); isLcdLightOn = false; // Przykładowy tekst na wyświetlaczu :) lcd.setCursor(6, 0); lcd.print("TEST"); lcd.setCursor(3, 1); lcd.print("NEONRADEON"); } void loop(){ //U W A G A (do komentarza "koniec" sensorValue = analogRead(analogInPin); outputValue = map(sensorValue, 0, 1024, 5, 255); buttonState = digitalRead(BUTTON_PIN); if (czas == 0){analogWrite(LCD_LIGHT_PIN, outputValue);} if (buttonState == HIGH){ lcdLightOn_StartMillis = millis(); currentLcdLightOnTime = 0; isLcdLightOn = true; digitalWrite(LCD_LIGHT_PIN, HIGH); (czas = czas ++); } else{ if(isLcdLightOn){ currentLcdLightOnTime = millis() - lcdLightOn_StartMillis; if(currentLcdLightOnTime > LCD_LIGHT_ON_TIME){ isLcdLightOn = false; digitalWrite(LCD_LIGHT_PIN, LOW); (czas = 0); } } } // koniec /* T U M O Ż N A W S T A W I Ć J A K I Ś K O D :) */ } |
Ok, to chyba było by na tyle co do przygotowania. Teraz możemy to przetestować. Termometr DS18B20 Pokażę Wam możliwość zastosowania tego kodu w praktyce. Przyda nam się termometr DS1820, a najlepiej dwa. Zapytać mogli byście czemu akurat ten. Odpowiedź jest prosta: taki dostałem w starter kicie :) Budujmy: najpierw zobaczmy jego wyprowadzenia: jak wiemy już jakie ma wyprowadzenia to podłączamy: 1 nóżkę do GND 2 nóżkę do Arduino pin 1 3 nóżkę do +5V teraz bardzo ważne, aby pomiędzy 2 i 3 nóżką dać rezystor ok. 5k dwa DS18B20 możemy podłączyć pod w Arduino jeden pin ponieważ każdy z nich ma własny unikalny numer :D no i znowu czas na kod ;) to jest to samo co przedtem + obsługa DS18B20
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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
#include <Wire.h> #include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 5, 4, 3, 2); #include <OneWire.h> #include <DallasTemperature.h> #define ONE_WIRE_BUS 1 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); // wybór pinów: #define BUTTON_PIN A5 // przycisk #define LCD_LIGHT_PIN 9 // podświetlanie ekaranu anoda const int analogInPin = A0; //środkowa nóżka dzielnika napięcia //T U N A S T A W I A S Z C Z A S P O D Ś W I E T L A N I A #define LCD_LIGHT_ON_TIME 6000 // milisekundy //U W A G A int sensorValue = 0; int outputValue = 0; int czas = 0; unsigned int currentLcdLightOnTime = 0; unsigned long lcdLightOn_StartMillis; boolean isLcdLightOn; int buttonState = 0; void setup(void) { lcd.begin(16,2); //Serial.begin(9600); sensors.begin(); pinMode(0,INPUT); pinMode(BUTTON_PIN, INPUT); pinMode(LCD_LIGHT_PIN, OUTPUT); isLcdLightOn = false; } void loop(void) { //U W A G A (do komentarza "koniec" sensorValue = analogRead(analogInPin); outputValue = map(sensorValue, 0, 1024, 5, 255); buttonState = digitalRead(BUTTON_PIN); if (czas == 0){analogWrite(LCD_LIGHT_PIN, outputValue);} if (buttonState == HIGH){ lcdLightOn_StartMillis = millis(); currentLcdLightOnTime = 0; isLcdLightOn = true; digitalWrite(LCD_LIGHT_PIN, HIGH); (czas = czas ++); } else{ if(isLcdLightOn){ currentLcdLightOnTime = millis() - lcdLightOn_StartMillis; if(currentLcdLightOnTime > LCD_LIGHT_ON_TIME){ isLcdLightOn = false; digitalWrite(LCD_LIGHT_PIN, LOW); (czas = 0); } } } sensors.requestTemperatures(); lcd.clear(); lcd.print("TEMPERATURA"); lcd.setCursor(0,1); lcd.print(sensors.getTempCByIndex(0)); lcd.setCursor(7,1); lcd.print(sensors.getTempCByIndex(1)); delay(100); } |
a i jeszcze zapomniałem że będziecie potrzebować kilku bibliotek do obsługi tego termometru, które są dostępne tutaj teraz możemy przetestować :)) Pod koniec kilka zdjęć
Na sam koniec…. PODZIĘKOWANIA
chciałbym podziękować Elektro Marasowi, za to że na moją prośbę próbował coś zrobić ale niestety nie udało mu się to :( , dzięki temu miałem motywację do dalszego poszukiwania i pisania. Następnie dziękuję Neonowi za to że pokazał mi Arduino i wskazał sposób jak próbować poprawić niedziałający kod :)) No i chyba to już wszystko co chciałbym Wam dzisiaj pokazać. Zachęcam do komentowania. Postaram się odpowiedzieć na wszelkie pytania :)
Pytania:
Czy ktoś byłby zainteresowany sposobem pokazywania temperatury za pomocą Led RGB?
Czy ktoś byłby zainteresowany kasą dla dzieci? (interkatywna)
Edycja.
Załączam filmik przedstawiający działanie całego układu :D
Mi sie podoba. Jeszcze tylko filmik by się przydał działania tego podświetlania ekranu. :)
hah Elektromaras, polecam :)
wstawię w niedziele właśnie wydawało mi się że czegoś zapomniałem
filmik już jest sorry że tak późno
Nie ma za co ;)
co neon? jakoś tak nagle spadła średnia gwiazdek :/
Trochę zapomniałeś o wielkich literach w środku.
Wiesz co, trochę formatowanie tekstu się zepsuło. Jak pisałem to wszystko miało jeszcze sens :)
Dobrze by było gdybyś umieścił normalny schemat, a nie tylko Fritzinga.
Regulację jasnością podświetlania zrobiłbym całkowicie analogowo.
Czyli że co? Tylko fotorezystor trochę kondensatorów i dwie diody? Czy o coś innego ci chodzi?
Coś w tym stylu, fotorezystor spiąć z lcd bez pośrednictwa uC, bez zajmowania mu pinów i przetwornikaAD i PWM. O schemat mnie nie pytaj, sam bym chciał go zobaczyć (doświadcznie mam bardziej “cyfrowe”).
W zasadzie uC mógłby sterować tylko okazjonalnym “pojaśnieniem 100%”.
myślałem o tym ale….
a fotorezystorem bez uC nie możesz wygodnie ustawić max i min jasność :D
BTW ja jeszcze będę korzystał z tego fotorezystora podpiętego do uC.
Ja po obejrzeniu filmu też właśnie Elektro Marasa chciałem termometr na DS18B20 ale z LCD, a potem do tego automatyczne podświetlenie LCD xD Sam próbowałem to ogarnąć ale nie udawało mi się to sterowanie :D Po przeczytaniu tego postu muszę spróbować wg twoich instrukcji
to sterowanie to można do wszystkiego wykorzystać :D
Pingback: Sterowanie jasnością LCD podłączonego pod Arduino | Pan Kleks
Równie dobrze mogłeś to zrobić z diodą ale nie.. wtedy to po prostu miałbyś trochę bardziej rozbudowany przykładowy program i pewnie nie weszłoby na główną.
myślałem o tym, żeby dać to na początku, a potem to co jest ale nie chciało mi się tyle (zbędnych) rzeczy pisać
Po co dajesz na potencjometr napięcie 5 V (prawa strona Fritzing) ? Według mnie jest to zbędny zabieg.
bo gdzieś się tak tego nauczyłem :D
W tym wypadku używając 2 dallasów podłączyłbym je dwu przewodowo. Noga 1 i 3 razem do GND, noga 2 do pinu arduino 1 wraz z rezystorem podciągającym 4k7 do +5V. Efekt ten sam a przewodów mniej ;)
U mnie nie działa przycisk, w sensie podświetlenie świeci się tylko wtedy, gdy trzymam go przyciśniętego, gdy puszczę od razu gaśnie. Ktoś wie czego problem to może być?
Pingback: hampton bay
Pingback: watch full movies hd
Pingback: url opener online
juz po samym dzialaniu lcd widac ze program ma powazne bledy w kodzie. Podobnie jesli chodzi o konwersje temperatury. Co do samego dzialania to na liczniku 555 lub opamp bedzie chodzilo. No ale co kto lubi, jeden do otwarcia konserwy uzyje nozyka a drugi imadla i przecinaka.
Pingback: daryl
Witam,
Nurtuje mnie jedna rzecz. W jakim celu została załączona biblioteka wire.h ?
Pingback: bill
Pingback: chota bheem games online play
Pingback: hay day games online play free
Pingback: hay day games online free to play
Pingback: Roy
Pingback: temple run secrets in the uk
Pingback: hampton bay track lighting
Pingback: hampton bay fan
Pingback: morris
Pingback: donnie
Pingback: palacevip
Pingback: hamptonbayfanandlighting.com
Pingback: casino
Pingback: hampton bay lighting solutions
Pingback: hampton bay lighting fans
It can be fantastic time and energy to come up with a couple of blueprints with the long term and it is time for it to be happy. I’ve see this upload in case I may simply just I would like to give you advice a few attention-grabbing things or perhaps advice. You could possibly might create next content discussing this article.. Best Online Casino,Best Online Casinos, I’m going to read all the more difficulties concerning this!
Termometr ciągle pokazuje -127. Użyłem tylko jednego czujnika DS18B20. Co robię nie tak?
już działa, błędnie podłączyłem czujnik
Like this man, we invest inside us the belief that our life
is supposed to be a particular way. Bahya kumbhaka is the state in which the yogi surrenders
his very self , within the form of his breath, for the lord and merges with universal breath it may be the noblest
form of surrender, because the yogi’s identity is entirely merged
with all the Lord. The basis for this is because fiber
optic cables are made-up of conducting light material and so transmit the lighting from
the end to an alternative end.
A czy można poprosić o normalny schemat? Ten jest nieczytelny
Witam wszystko git , pytanie mam tylko , jak usunąć minimalne migania na wyświetlaczu , te odświeżanie temperatury .
Wow such a great article and thanks for sharing.
I like this kind of technology and your blog is also interesting.