Chcę zaprezentować dziś mój projekt jakim jest Zegar, Termometr oraz Sterownik Rolet. :)
Pierwszym założeniem miało być samo zautomatyzowanie rolet wolno wiszących, lecz potem postanowiłem dodać zegar i termometr… (jak najtańszym kosztem).
MATERIAŁY:
- Wyświetlacz LCD 2×16 https://botland.com.pl/wyswietlacze-alfanumeryczne/223-wyswietlacz-lcd-2×16-znakow.html?search_query=wyswietlacz+2×16&results=48
- Konwerter I2C https://botland.com.pl/konwertery-pozostale/2352-konwerter-i2c-dla-wyswietlacza-lcd-hd44780.html?search_query=i2c&results=519
- Atmega 328P https://botland.com.pl/avr-tht-dip/1264-mikrokontroler-avr-atmega328p-pu-dip.html?search_query=atmega&results=206
- Rezonator kwarcowy 16MHz https://botland.com.pl/rezonatory/166-rezonator-kwarcowy-16mhz-hc49-niski.html?search_query=kwarc+16&results=52
- 2x Kondensator 22pF https://botland.com.pl/kondensatory-ceramiczne-dip/448-kondensator-ceramiczny-22pf50v-tht-10szt.html?search_query=22pF&results=3
- Kondensatory 100nF https://botland.com.pl/kondensatory-ceramiczne-dip/210-kondensator-ceramiczny-100nf50v-tht-10szt.html?search_query=100nF&results=6
- Fotorezystor https://botland.com.pl/fotorezystory/1564-fotorezystor-5-10-k-gl5616.html?search_query=fotorezystor&results=36
- 2x Serwo https://botland.com.pl/serwa-tower-pro/484-serwo-towerpro-sg-90-micro.html?search_query=serwo+tower&results=72
- Koszyk 2x 18650 https://botland.com.pl/koszyki-na-baterie/5240-koszyk-na-2-baterie-typu-18650.html?search_query=18650&results=20
- 2x ogniwo 18650 https://botland.com.pl/akumulatory-li-ion/5660-ogniwo-18650-li-ion-samsung-icr18650-26jm-2600mah.html?search_query=18650&results=20
- Czujnik temperatury DS18B20 https://botland.com.pl/czujniki-temperatury/165-czujnik-temperatury-ds18b20-cyfrowy-1-wire-tht.html?search_query=ds18b20&results=33
- Podstawka DIP28 https://botland.com.pl/podstawki-pod-uklady-scalone/90-podstawka-do-ukladow-dip-28pin-waska-5szt.html?search_query=podstawka+dip+28&results=24
- Rezystory
- Przewody 4 oraz 2 żyłowe
- 2x przyciski monostabilne
- Włącznik
- Gniazdo głośnikowe
- Obudowa uniwersalna
NARZĘDZIA:
- Klej na gorąco
- Wiertarka\Wkrętarka
- Lutownica
Niestety nie robiłem zbyt wielu zdjęć podczas montażu :(
- Rolety
Po pierwsze usunąłem oryginalne mechanizmy “łańcuszkowe”, i w ich miejscu, po wywierceniu kilku dziurek oraz użyciu kleju na gorąco zamontowałem serwa przerobione na zwykłe silniki.
Następnie doprowadziłem do pierwszego z nich przewód czterożyłowy. Dwie żyły dołączyłem do pierwszego serwa, a drugie dwie do drugiego (dalszego) serwa…
Zasilanie rolet pochodzi z dwóch połączonych szeregowo ogniw 18650, co daje nam ponad 7V. Obydwa bieguny (dodatni przez dodatkowy wyłącznik) są poprowadzone do przełącznika trójpozycyjnego, monostabilnego i zmostkowane z drugim przełącznikiem.
Następnie z każdego z przełączników wyprowadziłem po 4 przewody do wyjść głośnikowych (Jedną parę zgodnie z biegunowością, a drugą odwracając biegunowość, aby silniki mogły kręcić się w dwie strony ) :)
2. Zegar i Termometr
Chcąc oszczędzić, postanowiłem nie kupować modułu zegaru czasu rzeczywistego. Pisałem w Arduino IDE, i prototypowałem na płytce UNO. Udało mi się zrobić kod do zegarka, następnie termometru i połączyłem obydwa kody w jeden…
Kod jest trochę “pokręcony”, po wielu przeróbkach, ale działa :)
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 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
#include <OneWire.h> #include <Wire.h> #include <LiquidCrystal_I2C.h> int DS18S20_Pin = 7; //DS18S20 na pinie 7 OneWire ds(DS18S20_Pin); LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7); #define BACKLIGHT_PIN 3 float temperature, min = 150, max = -150; //ustawienia czasu int sensorValue = 0; int s=0; int h=0; int m=0; void setup(void) { lcd.begin(16, 2); lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE); lcd.setBacklight(HIGH); lcd.print(" Witaj !"); //nasze powitanie lcd.setCursor(0,1); lcd.print(" Stacja ZTR v1"); delay(5000); for (int positionCounter = 0; positionCounter < 15; positionCounter++) { // przesunięcie tekstu w prawo lcd.scrollDisplayRight(); //odczekanie delay(250); } delay(500); lcd.clear(); delay(100); pinMode(3, INPUT_PULLUP); pinMode(4, INPUT_PULLUP); } void loop(void){ float temperature = getTemp(); lcd.setCursor(0,0); while(millis()%1000 != 0); s +=1; if(s==60){s=0; m +=1;} if(m==60){m=0; h +=1;} if(h==24){h=0; m=0; s=0;} if (digitalRead(3) == LOW){ (m +=1); } if (digitalRead(4) == LOW){ (h +=1); } { lcd.setCursor(0,0); lcd.print(" Temp: "); lcd.print(temperature,1); //wyswietlenie temperatury z dokładnością do 0.1 lcd.write(0xDF); lcd.write('C'); lcd.setCursor(0,1); lcd.print("Godz:"); lcd.print(" "); lcd.print(int(h/10)); lcd.print(h%10); lcd.print(":"); lcd.print(int(m/10)); lcd.print(m%10); lcd.print(":"); lcd.print(int(s/10)); lcd.print(s%10); lcd.print("s"); } } float getTemp(){ byte data[12]; byte addr[8]; if ( !ds.search(addr)) { ds.reset_search(); return -1000; } ds.reset(); ds.select(addr); ds.write(0x44,1); byte present = ds.reset(); ds.select(addr); ds.write(0xBE); for (int i = 0; i < 9; i++) { data[i] = ds.read(); } ds.reset_search(); byte MSB = data[1]; byte LSB = data[0]; float tempRead = ((MSB << 8) | LSB); float TemperatureSum = tempRead / 16; return TemperatureSum; } |
Zmiany godziny dokonujemy poprzez zwarcie pinu 3 (minuty) lub 4 (godziny) do masy poprzez tact switche.
Wyświetlanie temperatury ustawiłem z dokładnością do 0,1’C.
Dodałem jeszcze ekran powitalny, uruchamiany przy włączaniu stacji.
Aby wyświetlacz nie świecił mi mocno w nocy, dodałem w miejscu zworki od podświetlenia – fotorezytor wyciągnięty poza obudowę.
3. Składanie
Teraz nadszedł moment aby wyjąć Atmegę z wgranym programem z Arduino i zmontować całość na płytce uniwersalnej…
Zasilanie logiki pochodzi z zasilacza 5V (stara ładowarka od telefonu)
Należy wlutować podstawkę DIP28, następnie do pinów 9 i 10 dołączyć rezonator kwarcowy 16MHz wraz z kondensatorami 22pF dołączonymi do masy. Do pinu 1 (RESET) dołączamy rezystor 10kOhm połączony z linią 5V.
Resztę łączymy już według pinoutu atmegi i naszego kodu:
Warto dodać również kondensatory filtrujące 100nF między piny 7-8, 20-22 (+\-) oraz pin 21(ARef) i masę .
W obudowie dodałem odbiornik IR, gdyż w przyszłości planuję zrobić sterowanie roletami na pilota. :)
Dziękuję za uwagę i proszę o ocenę mojego projektu…
Bardzo pomysłowe zastosowanie wyjść głośnikowych! ;)
Dzięki :)
Pomysł miałeś fajny, chęci pewnie też. Ale te serwa mają plastikowe przekładnie, dodatkowo specyfikacja podaje że pracują z napięciem z przedziału 4,8-6V. Pomyśl nad silnikiem krokowym, dzięki obliczeniu liczby kroków na pełne złożenie rolet będziesz mógł nimi sterować programowo a nie manualnie przełącznikami. Zegar czasu rzeczywistego jest konieczny jeśli zależy Ci na dokładnym pomiarze. Chyba że odchylenie dzienne około 10 minut nie jest dla Ciebie problemem :) Polecam ds323, tani i niezawodny. Daję 3 za chęci :)
Dzięki za radę z silnikami krokowymi ;)
A co do konieczności zastosowania zegara czasu rzeczywistego, to jestem innego zdania ;)
Zegar pracuje u mnie bez przerwy ok kilkunastu dni i przez ten czas nie ma odchylenia nawet o kilka sekund :)
pomysłowe widzę że też zamawiasz paczki od AVT
W tym projekcie akurat nie ma nic ze sklepu AVT, ale zdarza się, że czasami coś od nich zamówię …
Gratuluję ciekawego i funkcjonalnego projektu.
Chyba też zrobię sobie takie rolety :)
Dziękuję, i życzę powodzenia przy budowie własnego projektu :)
Świetne wykonanie! :)
Dzięki :)