Skocz do zawartości

Wiktor2019

Użytkownicy
  • Zawartość

    60
  • Rejestracja

  • Ostatnio

Reputacja

34 Bardzo dobra

O Wiktor2019

  • Ranga
    4/10

Informacje

  • Płeć
    Mężczyzna

Ostatnio na profilu byli

523 wyświetleń profilu
  1. @Ruby Dzięki za zainteresowaniem moim projektem. Koszt tego projektu wynosi około 150 - 250 zł a dokładnie : 3x Niebieski przełącznik odpowiedzialny za włączanie grzałek - 5,85 zł 2x Przełączniki z dźwignią - 6,4 zł Termostat - 14,9 zł Amperomierz - 11,95 zł Przetwornica 3A i potencjometr z włącznikiem (nie wiem ile omów ten wziąłem dla przykładu, trzeba by zmierzyć potencjometr w przetwornicy) - 9,3 zł Złącze do zasilania grzałek oraz od czujnika temperatury - 6,5 zł Złącze zasilające (może być wypuszczony kabel) - 6,2 zł 1x Gniazdo bezpiecznikowe - 1,5 zł 2x Grzałki 50w - 20 zł 2x Grzałki 40w - 12 zł 1m Osłony silikonowe led - 5 zł Pompka powietrzna - 30 zł (ja kupiłem w sklepie internetowym z komisu za 10 zł) Wężyki złączki i akcesoria do pompki - 15-20 zł Pojemnik do trawienia szklany - 100 zł (można użyć zwykłego prostokątnego pojemnika z kuchni za 5 zł, lub dać to szklarzowi za kilka zł) I do tego jeszcze jakieś przewody i tyle Ja swoje płytki projektuje w EasyEDA dość szybko nauczyłem się go obsługiwać można się też posłużyć filmami. Najpierw Trzeba zaprojektować płytkę np. w EasyEDA później prze konwertować do pdf-a w odbiciu lustrzanym i wydrukować na papierze kredowym 100 kartek około 25 zł (są różne gramatury miałem największą i najmniejszą ale ja nie widzę różnicy). Musi być też wydrukowane na drukarce laserowej. U mnie w miejscowości w sklepie komputerowym wydrukowali mi jedną kartkę za 30 gr. zazwyczaj jedną płytkę drukuje na 3 kartkach. Od jakiegoś czasu projektuje płytki dwustronne, wtedy drukuje płytkę na 6 kartkach. Płytkę najlepiej wyczyścić papierem ściernym grubość 1000 i odtłuścić, potem położyć papier na płytce i prasować na połowie mocy około 3 min. Potem trzeba ostudzić płytkę w wodzie i ostrożnie ściągnąć papier i płytka gotowa do wytrawienia. Może to wszystko wydaje się skomplikowane ale jak się już nauczysz projektować to nie skomplikowaną płytkę zaprojektujesz po 40 min. Ja od 23.08.2019 do teraz wytrawiłem 40 płytek (dzisiaj trawię jeszcze dwie). Powodzenia w projektowaniu płytek i nauce lutowania
  2. Jeśli robi się własną płytkę trzeba pamiętać, że po wytrawieniu trzeba powiercić otwory. Otwory w uniwersalnych płytkach mają 0,9 mm więc może się zdarzyć, że podczas wiercenia złamie się kilka wierteł jeśli trzyma się wiertarkę w ręce. Najlepiej do tego celu spisuje się stojak na wiertarkę (taki metalowy) oraz zamocowany w nim silnik klasy 550 i uchwyt na wiertło. Ja na początku rysowałem płytki ręcznie, teraz robię za pomocą termotransferu ta metoda jest dużo dokładniejsza ale trzeba uważać żeby nie zrobić za cienkich ścieżek. Ponieważ po "wyprasowaniu" płytki i podczas odklejania papieru ścieżka może się przerwać. Ostatnio przerobiłem moją wytrawiarkę umieszczając grzałki na dole w jednej gumowej osłonie oraz doczepiając do nich zaworki z powietrzem (wcześniej był kamień napowietrzający ale się rozpadł). Ja zmienił bym pojemnik na wytrawiacz na szklany oraz dał go do zrobienia szklarzowi. Ponieważ na ściankach pojemnika widać w paru miejscach małe pęknięcia. Kiedyś widziałem, że można kupić taki szklany pojemnik na internecie. Zdjęcia:
  3. Jak pisałem wcześniej program działał prawie dobrze ale się zawieszał i funkcja sprintf też działała. Popatrz na mój kod z czwartku.
  4. Usunąłem z kodu funkcję sprintf ponieważ wydaje mi się, że zawiesza program. Ale jak dodałem do programu pozostałe ekrany co miałem wcześniej to program też zaczął się zawieszać. Program działa bez zarzutu jeśli machnę ręką co około 10 min. Kod: #include<Wire.h> #include <LiquidCrystal_I2C.h> #include <OneWire.h> #include <DallasTemperature.h> #define PIR 12 #include <TroykaDHT.h> #include "RTClib.h" RTC_DS3231 rtc; #include "Adafruit_APDS9960.h" Adafruit_APDS9960 apds; unsigned long aktualnyCzas = 0; unsigned long zapamietanyCzas = 0; unsigned long roznicaCzasu = 0; // Temperatury maksymalne i ninimalne int tempmin1 = 100; int tempmax1 = 1; int tempmin2 = 100; int tempmax2 = 1; int tempmin3 = 100; int tempmax3 = 1; //dni tygodnia char daysOfTheWeek[7][12] = {"ndz", "Pon", "Wt", "Sr", "Czw", "Pt", "Sob"}; // Ustawienie adresu ukladu na 0x27 LiquidCrystal_I2C lcd(0x27, 20, 4); //dht22/11 DHT dht1(10, DHT22); DHT dht2( 6, DHT22); DHT dht3( 2, DHT11); //ds18b20 #define ONE_WIRE_BUS1 7 OneWire oneWire1(ONE_WIRE_BUS1); DallasTemperature sensors1(&oneWire1); // the setup function runs once when you press reset or power the board void setup() { //dht22 dht1.begin(); dht2.begin(); dht3.begin(); //Rozpoczęcie pracy Ds18B20 sensors1.begin(); pinMode(11, INPUT_PULLUP); pinMode(8, INPUT); pinMode(13, OUTPUT); //LCD lcd.init(); lcd.backlight(); lcd.begin(20, 4); Serial.begin(115200); //komunikat RTC w razie braku moduł if (! rtc.begin()) { lcd.setCursor(0,0 ); lcd.print("Nie znaleziono RTC"); delay(1500); lcd.noBacklight(); lcd.clear(); } //ustawianie czasu w pamkięci RTC if (rtc.lostPower()) { //ustawianie czasu podczas komplikacji rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); //ustawianie casu ręcznie rok-miesiąc-dzień-godzina-minuty-numer dnia tygodnia //rtc.adjust(DateTime(2025, 10, 4, 14, 57, 6)); } //apds9960 if(!apds.begin()){ Serial.println("failed to initialize device! Please check your wiring."); } else Serial.println("Device initialized!"); apds.enableProximity(true); apds.enableGesture(true); } /////////////////////////////////////////////////////////////////////////////////////////////////////////// int zmienna = 1; int czujnikWilg3; int czujnikTemp3; int czujnikWilg1; int czujnikTemp1; int czujnikWilg2; int czujnikTemp2; void loop() { //Pobierz liczbe milisekund od startu aktualnyCzas = millis(); roznicaCzasu = aktualnyCzas - zapamietanyCzas; //Jeśli różnica wynosi ponad sekundę if (roznicaCzasu >= 3000UL) {delay(10); //Zapamietaj aktualny czas zapamietanyCzas = aktualnyCzas; dht3.read(); czujnikWilg3 = dht3.getHumidity(); sensors1.requestTemperatures(); czujnikTemp3 = sensors1.getTempCByIndex(0); dht1.read(); czujnikWilg1 = dht1.getHumidity(); czujnikTemp1 = dht1.getTemperatureC(); dht2.read(); czujnikWilg2 = dht2.getHumidity(); czujnikTemp2 = dht2.getTemperatureC(); //................................................................ // na zewnatrz if(czujnikTemp1 < tempmin1){ tempmin1 = czujnikTemp3; } if(czujnikTemp3 > tempmax1 & czujnikTemp3 < 50){ tempmax1 = czujnikTemp3; } // w tym pokoju if(czujnikTemp2 < tempmin2){ tempmin2 = czujnikTemp2; } if(czujnikTemp2 > tempmax2){ tempmax2 = czujnikTemp2; } // na dole if(czujnikTemp2 < tempmin3){ tempmin3 = czujnikTemp2; } if(czujnikTemp2 > tempmax3){ tempmax3 = czujnikTemp2; } Serial.println(aktualnyCzas); } //ustawianie zegara DateTime now = rtc.now(); // czas letni i zimowy + 1 godzina z powodu pobrania złaj godziny podczas kompilacji int czasletni = now.hour() +2; int czaszimowy = now.hour() +1; int minuty = now.minute(); switch(zmienna) { case 1: lcd.clear(); lcd.noBacklight(); digitalWrite(13,LOW); break; case 2: lcd.clear(); zmienna++; break; case 3: lcd.backlight(); if (digitalRead(11) == HIGH){ lcd.setCursor(7,0); lcd.print("czas"); lcd.setCursor(0,1); lcd.print(czasletni); lcd.print(':'); if (now.minute()<10){ lcd.print("0"); lcd.print(now.minute(), DEC); } else { lcd.print(now.minute(), DEC); } lcd.setCursor(7, 2); lcd.print("data");; lcd.setCursor(0, 3); if (now.day()<10){ lcd.print("0"); lcd.print(now.day(), DEC); } else { lcd.print(now.day(), DEC); } lcd.print('/'); if (now.month()<10){ lcd.print("0"); lcd.print(now.month(), DEC); } else { lcd.print(now.month(), DEC); } lcd.print('/'); lcd.print(now.year(), DEC); lcd.setCursor(15, 3); lcd.print(daysOfTheWeek[now.dayOfTheWeek()]); }else{ lcd.setCursor(7,0); lcd.print("czas"); lcd.setCursor(0,1); lcd.print(czaszimowy); lcd.print(':'); if (now.minute()<10){ lcd.print("0"); lcd.print(now.minute(), DEC); } else { lcd.print(now.minute(), DEC); } lcd.setCursor(7, 2); lcd.print("data");; lcd.setCursor(0, 3); if (now.day()<10){ lcd.print("0"); lcd.print(now.day(), DEC); } else { lcd.print(now.day(), DEC); } lcd.print('/'); if (now.month()<10){ lcd.print("0"); lcd.print(now.month(), DEC); } else { lcd.print(now.month(), DEC); } lcd.print('/'); lcd.print(now.year(), DEC); lcd.setCursor(15, 3); lcd.print(daysOfTheWeek[now.dayOfTheWeek()]); } break; case 4: lcd.clear(); zmienna++; zmienna++; break; case 5: lcd.clear(); zmienna--; zmienna--; break; case 6: lcd.setCursor(5,0); lcd.print("NA ZEWN"); // lcd.write(byte(1)); lcd.print("TRZ"); lcd.setCursor(0, 1);// lcd.print("Temperatura "); lcd.print(czujnikTemp3); // lcd.write(byte(0)); lcd.print("C"); lcd.setCursor(0, 2); lcd.print("Wilgotno"); // lcd.write(byte(2)); // lcd.write(byte(3)); lcd.print(" "); lcd.print(czujnikWilg3); lcd.print("%"); lcd.setCursor(0, 3); lcd.print(" "); break; case 7: lcd.clear(); zmienna++; zmienna++; break; case 8: lcd.clear(); zmienna--; zmienna--; break; case 9: lcd.setCursor(4,0); lcd.print("W TYM POKOJU"); lcd.setCursor(0, 1); lcd.print("Temperatura "); lcd.print(czujnikTemp1); // lcd.write(byte(0)); lcd.print("C"); lcd.setCursor(0,2); lcd.print("Wilgotno"); // lcd.write(byte(2)); // lcd.write(byte(3)); lcd.print(" "); lcd.print(czujnikWilg1); lcd.print(" %"); lcd.setCursor(0, 3); lcd.print(" "); break; case 10: lcd.clear(); zmienna++; zmienna++; break; case 11: lcd.clear(); zmienna--; zmienna--; break; case 12: lcd.setCursor(7,0); lcd.print("Na DOLE"); lcd.setCursor(0, 1); lcd.print("Temperatura "); lcd.print(czujnikTemp2); // lcd.write(byte(0)); lcd.print("C"); lcd.setCursor(0,2); lcd.print("Wilgotno"); // lcd.write(byte(2)); // lcd.write(byte(3)); lcd.print(" "); lcd.print(czujnikWilg2); lcd.print(" %"); lcd.setCursor(0, 3); lcd.print(" "); break; case 13: lcd.clear(); zmienna++; zmienna++; break; case 14: lcd.clear(); zmienna--; zmienna--; break; case 15: lcd.setCursor(5,0); lcd.print("NA ZEWN"); // lcd.write(byte(1)); lcd.print("TRZ"); lcd.setCursor(0, 1); lcd.print("T"); // lcd.write(byte(5)); // lcd.write(byte(4)); lcd.print(" "); lcd.print(tempmin1); // lcd.write(byte(0)); lcd.print("C"); lcd.print(" "); lcd.print(tempmax1); // lcd.write(byte(0)); lcd.print("C"); lcd.setCursor(4, 2); lcd.print("W TYM POKOJU"); lcd.setCursor(0, 3); lcd.print("T"); // lcd.write(byte(5)); // lcd.write(byte(4)); lcd.print(" "); lcd.print(tempmin2); // lcd.write(byte(0)); lcd.print("C"); lcd.print(" "); lcd.print(tempmax2); // lcd.write(byte(0)); lcd.print("C"); break; case 16: zmienna = 1; break; } uint8_t gesture = apds.readGesture(); delay(10); if(gesture == APDS9960_DOWN) Serial.println("v"); if(gesture == APDS9960_UP) Serial.println("^"); if(gesture == APDS9960_RIGHT) { zmienna++; lcd.setCursor(0,3); lcd.print(zmienna); } if(gesture == APDS9960_LEFT){ zmienna--; lcd.setCursor(0,3); lcd.print(zmienna); } }
  5. Poczytałem i wiem już jak odczytać w funkcji sprintf temperaturę i wilgotność. Ale mam taki problem, że program się trochę zawiesza. Kod: #include<Wire.h> #include <LiquidCrystal_I2C.h> #include <OneWire.h> #include <DallasTemperature.h> #define PIR 12 #include <TroykaDHT.h> #include "RTClib.h" RTC_DS3231 rtc; #include "Adafruit_APDS9960.h" Adafruit_APDS9960 apds; // Ustawienie adresu ukladu na 0x27 LiquidCrystal_I2C lcd(0x27, 20, 4); //dht22/11 DHT dht1(10, DHT22); DHT dht2( 6, DHT22); DHT dht3( 2, DHT11); // the setup function runs once when you press reset or power the board void setup() { //dht22 dht1.begin(); dht2.begin(); dht3.begin(); //LCD lcd.init(); lcd.backlight(); lcd.begin(20, 4); Serial.begin(115200); //komunikat RTC w razie braku moduł if (! rtc.begin()) { lcd.setCursor(0,0 ); lcd.print("Nie znaleziono RTC"); delay(1500); lcd.noBacklight(); lcd.clear(); } //ustawianie czasu w pamkięci RTC if (rtc.lostPower()) { //ustawianie czasu podczas komplikacji rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); //ustawianie casu ręcznie rok-miesiąc-dzień-godzina-minuty-numer dnia tygodnia //rtc.adjust(DateTime(2025, 10, 4, 14, 57, 6)); } //apds9960 if(!apds.begin()){ Serial.println("failed to initialize device! Please check your wiring."); } else Serial.println("Device initialized!"); apds.enableProximity(true); apds.enableGesture(true); } /////////////////////////////////////////////////////////////////////////////////////////////////////////// int zmienna = 1; char bufor1[17]; char bufor2[17]; char bufor3[17]; char bufor4[17]; char bufor9[10]; void loop() { //ustawianie zegara DateTime now = rtc.now(); // czas letni i zimowy + 1 godzina z powodu pobrania złaj godziny podczas kompilacji int czasletni = now.hour() +2; int czaszimowy = now.hour() +1; int minuty = now.minute(); dht1.read(); int czujnikTemp1 = dht1.getTemperatureC(); int czujnikWilg1 = dht1.getHumidity(); dht2.read(); int czujnikTemp2 = dht2.getTemperatureC(); int czujnikWilg2 = dht2.getHumidity(); sprintf(bufor1,"%02d:%02d %02d.%02d.%04d", czasletni, now.minute(), now.day(), now.month(), now.year()); sprintf(bufor2,"%02d:%02d", czasletni, now.minute()); sprintf(bufor3,"%dC %dRh", czujnikTemp1, czujnikWilg1); sprintf(bufor4,"%dC %dRh", czujnikTemp2, czujnikWilg2); sprintf(bufor9," "); switch(zmienna) { case 1: lcd.clear(); break; case 2: lcd.setCursor(0,0); lcd.print(bufor1); lcd.print(bufor9); break; case 3: lcd.setCursor(0,0); lcd.print(bufor2); lcd.print(bufor9); break; case 4: lcd.setCursor(0,0); lcd.print(bufor3); lcd.print(bufor9); break; case 5: lcd.setCursor(0,0); lcd.print(bufor4); lcd.print(bufor9); break; case 6: lcd.setCursor(0,0); lcd.print(bufor3); lcd.print(bufor9); break; } uint8_t gesture = apds.readGesture(); if(gesture == APDS9960_DOWN) Serial.println("v"); if(gesture == APDS9960_UP) Serial.println("^"); if(gesture == APDS9960_RIGHT) { zmienna++; lcd.setCursor(0,3); lcd.print(zmienna); } if(gesture == APDS9960_LEFT){ zmienna--; lcd.setCursor(0,3); lcd.print(zmienna); } }
  6. Zrobiłem ta, że po tym jak zmienna zmienia swoją wartość po tym jak machnę ręką w prawo lub lewo. Oraz wyświetla się na ekranie wartość zmiennej i ten kod działa prawidłowo. Kod: #include<Wire.h> #include <LiquidCrystal_I2C.h> #include <OneWire.h> #include <DallasTemperature.h> #define PIR 12 #include <TroykaDHT.h> #include "RTClib.h" RTC_DS3231 rtc; #include "Adafruit_APDS9960.h" Adafruit_APDS9960 apds; // Ustawienie adresu ukladu na 0x27 LiquidCrystal_I2C lcd(0x27, 20, 4); // the setup function runs once when you press reset or power the board void setup() { //LCD lcd.init(); lcd.backlight(); lcd.begin(20, 4); Serial.begin(115200); //komunikat RTC w razie braku moduł if (! rtc.begin()) { lcd.setCursor(0,0 ); lcd.print("Nie znaleziono RTC"); delay(1500); lcd.noBacklight(); lcd.clear(); } //ustawianie czasu w pamkięci RTC if (rtc.lostPower()) { //ustawianie czasu podczas komplikacji rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); //ustawianie casu ręcznie rok-miesiąc-dzień-godzina-minuty-numer dnia tygodnia //rtc.adjust(DateTime(2025, 10, 4, 14, 57, 6)); } //apds9960 if(!apds.begin()){ Serial.println("failed to initialize device! Please check your wiring."); } else Serial.println("Device initialized!"); apds.enableProximity(true); apds.enableGesture(true); } /////////////////////////////////////////////////////////////////////////////////////////////////////////// int zmienna = 1; char bufor[17]; char buforr[14]; void loop() { //ustawianie zegara DateTime now = rtc.now(); // czas letni i zimowy + 1 godzina z powodu pobrania złaj godziny podczas kompilacji int czasletni = now.hour() +2; int czaszimowy = now.hour() +1; int minuty = now.minute(); sprintf(bufor,"%02d:%02d %02d.%02d.%04d", czasletni, now.minute(), now.day(), now.month(), now.year()); sprintf(buforr,"%02d:%02d", czasletni, now.minute()); switch(zmienna) { case 1: lcd.clear(); break; case 2: lcd.setCursor(0,0); lcd.print(bufor); break; case 3: lcd.setCursor(0,1); lcd.print(buforr); break; } uint8_t gesture = apds.readGesture(); if(gesture == APDS9960_DOWN) Serial.println("v"); if(gesture == APDS9960_UP) Serial.println("^"); if(gesture == APDS9960_RIGHT) { zmienna++; lcd.setCursor(0,3); lcd.print(zmienna); } if(gesture == APDS9960_LEFT){ zmienna--; lcd.setCursor(0,3); lcd.print(zmienna); } } Ale mam problem z tym jak funkcją sprintf wyświetlić na lcd temperaturę i wilgotność próbowałem tak ale nie działa : char bufor[8]; dht1.read(); switch(dht1.getState()) { case DHT_OK: sprintf(bufor,"temp = C w = %", dht1.getTemperatureC(), dht1.getTemperatureC()); }
  7. Wiem, że mój program jest nieczytelny ale jak pisałeś: to czy dobrze rozumiem, że lepiej byłoby gdybym podzielił kod np. tak: void zegar() { // czas letni i zimowy + 1 godzina z powodu pobrania złaj godziny podczas kompilacji int czasletni = now.hour() +2; int czaszimowy = now.hour() +1; int minuty = now.minute(); if (digitalRead(11) == HIGH){ lcd.setCursor(7,0); lcd.print("czas"); lcd.setCursor(0,1); lcd.print(czasletni); lcd.print(':'); if (now.minute()<10){ lcd.print("0"); lcd.print(now.minute(), DEC); } else { lcd.print(now.minute(), DEC); } lcd.setCursor(7, 2); lcd.print("data");; lcd.setCursor(0, 3); if (now.day()<10){ lcd.print("0"); lcd.print(now.day(), DEC); } else { lcd.print(now.day(), DEC); } lcd.print('/'); if (now.month()<10){ lcd.print("0"); lcd.print(now.month(), DEC); } else { lcd.print(now.month(), DEC); } lcd.print('/'); lcd.print(now.year(), DEC); lcd.setCursor(15, 3); lcd.print(daysOfTheWeek[now.dayOfTheWeek()]); }else{ lcd.setCursor(7,0); lcd.print("czas"); lcd.setCursor(0,1); lcd.print(czaszimowy); lcd.print(':'); if (now.minute()<10){ lcd.print("0"); lcd.print(now.minute(), DEC); } else { lcd.print(now.minute(), DEC); } lcd.setCursor(7, 2); lcd.print("data");; lcd.setCursor(0, 3); if (now.day()<10){ lcd.print("0"); lcd.print(now.day(), DEC); } else { lcd.print(now.day(), DEC); } lcd.print('/'); if (now.month()<10){ lcd.print("0"); lcd.print(now.month(), DEC); } else { lcd.print(now.month(), DEC); } lcd.print('/'); lcd.print(now.year(), DEC); lcd.setCursor(15, 3); lcd.print(daysOfTheWeek[now.dayOfTheWeek()]); }} i tak dalej z kolejnymi ekranami. Oraz czy pokazał byś przykład jak skrócić kod z ekranami ponieważ nie mam wiedzy jak to zrobić? Usunąłem niektóre funkcje z kodu i wiem, że przez odczyt z czujników temperatury i wilgotności nie działa odczyt z czujnika gestów bo jeśli niema odczytu z czujników to czujnik gestów działa. Oraz jeśli jest na ekranie włączy się ekran z odczytem z czujników to ekran cały czas mruga (odświeża się) i nie da się nic przeczytać czy wiesz jak temu zaradzić? Poniżej mój kod: #include<Wire.h> #include <LiquidCrystal_I2C.h> #include <OneWire.h> #include <DallasTemperature.h> #define PIR 12 #include <TroykaDHT.h> #include "RTClib.h" RTC_DS3231 rtc; #include "Adafruit_APDS9960.h" Adafruit_APDS9960 apds; int zmienna; //dht22/11 DHT dht1(10, DHT22); DHT dht2( 6, DHT22); DHT dht3( 2, DHT11); //ds18b20 #define ONE_WIRE_BUS1 7 OneWire oneWire1(ONE_WIRE_BUS1); DallasTemperature sensors1(&oneWire1); //dni tygodnia char daysOfTheWeek[7][12] = {"ndz", "Pon", "Wt", "Sr", "Czw", "Pt", "Sob"}; // Ustawienie adresu ukladu na 0x27 LiquidCrystal_I2C lcd(0x27, 20, 4); // the setup function runs once when you press reset or power the board void setup() { Serial.begin(115200); //dht22 dht1.begin(); dht2.begin(); dht3.begin(); //Rozpoczęcie pracy Ds18B20 sensors1.begin(); //przycisk do zmiany czasu pinMode(11, INPUT_PULLUP); pinMode(8, INPUT); //LCD lcd.init(); lcd.backlight(); lcd.begin(20, 4); //komunikat RTC w razie braku moduł if (! rtc.begin()) { lcd.setCursor(0,0 ); lcd.print("Nie znaleziono RTC"); delay(1500); lcd.noBacklight(); lcd.clear(); } //ustawianie czasu w pamkięci RTC if (rtc.lostPower()) { //ustawianie czasu podczas komplikacji rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); //ustawianie casu ręcznie rok-miesiąc-dzień-godzina-minuty-numer dnia tygodnia //rtc.adjust(DateTime(2025, 10, 4, 14, 57, 6)); } if(!apds.begin()){ Serial.println("failed to initialize device! Please check your wiring."); } else Serial.println("Device initialized!"); //gesture mode will be entered once proximity mode senses something close apds.enableProximity(true); apds.enableGesture(true); } /////////////////////////////////////////////////////////////////////////////////////////////////////////// void loop() { //ustawianie zegara DateTime now = rtc.now(); // czas letni i zimowy + 1 godzina z powodu pobrania złaj godziny podczas kompilacji int czasletni = now.hour() +2; int czaszimowy = now.hour() +1; int minuty = now.minute(); if (zmienna == 0) { //Lcd pusty ekran lcd.clear(); lcd.setCursor(0,0); lcd.print(" " ); lcd.setCursor(0, 1); lcd.print(" "); lcd.setCursor(0, 2); lcd.print(" "); lcd.setCursor(0, 3); lcd.print("00 "); } if (zmienna == 1) { lcd.clear(); if (zmienna <= 1){ dht3.read(); switch(dht3.getState()) { case DHT_OK: sensors1.requestTemperatures(); lcd.setCursor(5,0); lcd.print("NA ZEWN"); lcd.write(byte(1)); lcd.print("TRZ"); lcd.setCursor(0, 1);// lcd.print("Temperatura "); lcd.print(sensors1.getTempCByIndex(0)); lcd.write(byte(0)); lcd.print("C"); lcd.setCursor(0, 2); lcd.print("Wilgotno"); lcd.write(byte(2)); lcd.write(byte(3)); lcd.print(" "); lcd.print(dht3.getHumidity()); lcd.print("%"); lcd.setCursor(0, 3); lcd.print(" "); }}} if (zmienna == 2) { //Lcd pusty ekran lcd.clear(); lcd.setCursor(0,0); lcd.print(" " ); lcd.setCursor(0, 1); lcd.print(" "); lcd.setCursor(0, 2); lcd.print(" "); lcd.setCursor(0, 3); lcd.print("22 "); } if (zmienna == 3) { //W tym pokoju lcd.clear(); dht1.read(); switch(dht1.getState()) { case DHT_OK: lcd.setCursor(4,0); lcd.print("W TYM POKOJU"); lcd.setCursor(0, 1); lcd.print("Temperatura "); lcd.print(dht1.getTemperatureC()); lcd.write(byte(0)); lcd.print("C"); lcd.setCursor(0,2); lcd.print("Wilgotno"); lcd.write(byte(2)); lcd.write(byte(3)); lcd.print(" "); lcd.print(dht1.getHumidity()); lcd.print(" %"); lcd.setCursor(0, 3); lcd.print(" "); }} if (zmienna == 4){ if (digitalRead(11) == HIGH){ lcd.setCursor(7,0); lcd.print("czas"); lcd.setCursor(0,1); lcd.print(czasletni); lcd.print(':'); if (now.minute()<10){ lcd.print("0"); lcd.print(now.minute(), DEC); } else { lcd.print(now.minute(), DEC); } lcd.setCursor(7, 2); lcd.print("data");; lcd.setCursor(0, 3); if (now.day()<10){ lcd.print("0"); lcd.print(now.day(), DEC); } else { lcd.print(now.day(), DEC); } lcd.print('/'); if (now.month()<10){ lcd.print("0"); lcd.print(now.month(), DEC); } else { lcd.print(now.month(), DEC); } lcd.print('/'); lcd.print(now.year(), DEC); lcd.setCursor(15, 3); lcd.print(daysOfTheWeek[now.dayOfTheWeek()]); }else{ lcd.setCursor(7,0); lcd.print("czas"); lcd.setCursor(0,1); lcd.print(czaszimowy); lcd.print(':'); if (now.minute()<10){ lcd.print("0"); lcd.print(now.minute(), DEC); } else { lcd.print(now.minute(), DEC); } lcd.setCursor(7, 2); lcd.print("data");; lcd.setCursor(0, 3); if (now.day()<10){ lcd.print("0"); lcd.print(now.day(), DEC); } else { lcd.print(now.day(), DEC); } lcd.print('/'); if (now.month()<10){ lcd.print("0"); lcd.print(now.month(), DEC); } else { lcd.print(now.month(), DEC); } lcd.print('/'); lcd.print(now.year(), DEC); lcd.setCursor(15, 3); lcd.print(daysOfTheWeek[now.dayOfTheWeek()]); } } if (zmienna == 5){ lcd.clear(); lcd.setCursor(0,0); lcd.print(" " ); lcd.setCursor(0, 1); lcd.print(" "); lcd.setCursor(0, 2); lcd.print(" "); lcd.setCursor(0, 3); lcd.print("55 "); } if (zmienna == 6){ lcd.clear(); lcd.setCursor(0,0); lcd.print(" " ); lcd.setCursor(0, 1); lcd.print(" "); lcd.setCursor(0, 2); lcd.print(" "); lcd.setCursor(0, 3); lcd.print("66 "); } if (zmienna == 7){ lcd.clear(); lcd.setCursor(0,0); lcd.print(" " ); lcd.setCursor(0, 1); lcd.print(" "); lcd.setCursor(0, 2); lcd.print(" "); lcd.setCursor(0, 3); lcd.print("77 "); } //read a gesture from the device uint8_t gesture = apds.readGesture(); if(gesture == APDS9960_DOWN) Serial.println("v"); if(gesture == APDS9960_UP) Serial.println("^"); if(gesture == APDS9960_LEFT){ zmienna--; Serial.println(zmienna);} if(gesture == APDS9960_RIGHT){ zmienna++; Serial.println(zmienna);} }
  8. Ostatnim razem opisywałem na forum mój termometr. Wymyśliłem sobie, żeby po przesunięciu ręki w prawo był następny ekran a jak w lewo to poprzedni ekran. Do ostatniego programu dołożyłem kod obsługujący czujnik, program opierający się na zmiennej. Problem jest w tym, że czujnik wychwytuje co któryś mój ruch ręki. Program miał działać tak, że jeśli czujnik wykryje ruch ręki w prawo to zmienna (ekran) + 1 a jeśli ruch ręki w lewo to zmienna - 1 i w zależności od zmiennej taki jest wyświetlany ekran. Specyfikacja czujnika APDS9960 Adafruit. Wiem, że kod nie jest poukładany i najlepszy ale proszę nie zwracać na to uwagi. Poniżej kod: #include <Wire.h> #include "i2c.h" #include "Wire.h" #include <LiquidCrystal_I2C.h> #include <OneWire.h> #include <DallasTemperature.h> #define PIR 12 #include <TroykaDHT.h> #include <Wire.h> #include "RTClib.h" RTC_DS3231 rtc; #include "Adafruit_APDS9960.h" Adafruit_APDS9960 apds; //dni tygodnia char daysOfTheWeek[7][12] = {"ndz", "Pon", "Wt", "Sr", "Czw", "Pt", "Sob"}; // Temperatury maksymalne i ninimalne int tempmin1 = 100; int tempmax1 = 1; int tempmin2 = 100; int tempmax2 = 1; int tempmin3 = 100; int tempmax3 = 1; //dht22/11 DHT dht1(10, DHT22); DHT dht2( 6, DHT22); DHT dht3( 2, DHT11); //ds18b20 #define ONE_WIRE_BUS1 7 OneWire oneWire1(ONE_WIRE_BUS1); DallasTemperature sensors1(&oneWire1); // Ustawienie adresu ukladu na 0x27 LiquidCrystal_I2C lcd(0x27, 20, 4); int ekran = 0; //Tworzenie znaków byte stopnie[8] = { 0b01110, 0b01010, 0b01110, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000 }; byte innea[8] = { B01110, B10001, B10001, B11111, B10001, B10001, B00010, B00001 }; byte innes[8] = { B00010, B00100, B01110, B10000, B01110, B00001, B11110, B00000 }; byte innec[8] = { B00010, B00100, B01110, B10000, B10000, B10001, B01110, B00000 }; byte tempMAX [8] = { 0b00100, 0b01110, 0b10101, 0b00100, 0b00100, 0b00100, 0b00100, 0b00100 }; byte tempMIN[8] = { 0b00100, 0b00100, 0b00100, 0b00100, 0b00100, 0b10101, 0b01110, 0b00100 }; void setup(){ Serial.begin(115200); //LCD lcd.init(); lcd.backlight(); lcd.begin(20, 4); //apds9960 if(!apds.begin()){ Serial.println("failed to initialize device! Please check your wiring."); } else Serial.println("Device initialized!"); apds.enableProximity(true); apds.enableGesture(true); //komunikat RTC w razie braku moduł if (! rtc.begin()) { lcd.setCursor(0,0 ); lcd.print("Nie znaleziono RTC"); delay(1500); lcd.noBacklight(); lcd.clear(); } //ustawianie czasu w pamkięci RTC if (rtc.lostPower()) { //ustawianie czasu podczas komplikacji rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); //ustawianie casu ręcznie rok-miesiąc-dzień-godzina-minuty-numer dnia tygodnia //rtc.adjust(DateTime(2025, 10, 4, 14, 57, 6)); } //przycisk do zmiany czasu pinMode(11, INPUT_PULLUP); pinMode(8, INPUT); //dht22 dht1.begin(); dht2.begin(); dht3.begin(); //czujnik ruchu pinMode(PIR, INPUT); //PIR jako wejście pinMode(13, OUTPUT); //Rozpoczęcie pracy Ds18B20 sensors1.begin(); } void loop(){ //Tworzenie znaków lcd.createChar(0, stopnie); lcd.createChar(1, innea); lcd.createChar(2, innes); lcd.createChar(3, innec); lcd.createChar(4, tempMAX); lcd.createChar(5, tempMIN); //ustawianie zegara DateTime now = rtc.now(); // czas letni i zimowy + 1 godzina z powodu pobrania złaj godziny podczas kompilacji int czasletni = now.hour() +2; int czaszimowy = now.hour() +1; int minuty = now.minute(); if (czasletni == 23){ if (minuty == 5){ tempmin1 = 100; tempmax1 = 1; tempmin2 = 100; tempmax2 = 1; tempmin3 = 100; tempmax3 = 1; }} else{ // na zewnatrz if(tempmin1>sensors1.getTempCByIndex(0)){ tempmin1 = sensors1.getTempCByIndex(0); } if(sensors1.getTempCByIndex(0)>tempmax1 & sensors1.getTempCByIndex(0) < 50){ tempmax1 = sensors1.getTempCByIndex(0); } // w tym pokoju dht1.read(); switch(dht1.getState()) { case DHT_OK: if(dht1.getTemperatureC()<tempmin2){ tempmin2 = dht1.getTemperatureC(); } if(dht1.getTemperatureC()>tempmax2){ tempmax2 = dht1.getTemperatureC(); }} // na dole dht2.read(); switch(dht2.getState()) { case DHT_OK: if(dht2.getTemperatureC()<tempmin3){ tempmin3 = dht2.getTemperatureC(); } if(dht2.getTemperatureC()>tempmax3){ tempmax3 = dht2.getTemperatureC(); }}} uint8_t gesture = apds.readGesture(); if(gesture == APDS9960_RIGHT) { ekran++; } if(gesture == APDS9960_LEFT){ ekran--; } if (ekran == 0){ //Lcd pusty ekran lcd.clear(); lcd.setCursor(0,0); lcd.print(" " ); lcd.setCursor(0, 1); lcd.print(" "); lcd.setCursor(0, 2); lcd.print(" "); lcd.setCursor(0, 3); lcd.print(" "); } if (ekran == 1){ //czas i data if (digitalRead(11) == HIGH){ lcd.setCursor(7,0); lcd.print("czas"); lcd.setCursor(0,1); lcd.print(czasletni); lcd.print(':'); if (now.minute()<10){ lcd.print("0"); lcd.print(now.minute(), DEC); } else { lcd.print(now.minute(), DEC); } lcd.setCursor(7, 2); lcd.print("data");; lcd.setCursor(0, 3); if (now.day()<10){ lcd.print("0"); lcd.print(now.day(), DEC); } else { lcd.print(now.day(), DEC); } lcd.print('/'); if (now.month()<10){ lcd.print("0"); lcd.print(now.month(), DEC); } else { lcd.print(now.month(), DEC); } lcd.print('/'); lcd.print(now.year(), DEC); lcd.setCursor(15, 3); lcd.print(daysOfTheWeek[now.dayOfTheWeek()]); }else{ lcd.setCursor(7,0); lcd.print("czas"); lcd.setCursor(0,1); lcd.print(czaszimowy); lcd.print(':'); if (now.minute()<10){ lcd.print("0"); lcd.print(now.minute(), DEC); } else { lcd.print(now.minute(), DEC); } lcd.setCursor(7, 2); lcd.print("data");; lcd.setCursor(0, 3); if (now.day()<10){ lcd.print("0"); lcd.print(now.day(), DEC); } else { lcd.print(now.day(), DEC); } lcd.print('/'); if (now.month()<10){ lcd.print("0"); lcd.print(now.month(), DEC); } else { lcd.print(now.month(), DEC); } lcd.print('/'); lcd.print(now.year(), DEC); lcd.setCursor(15, 3); lcd.print(daysOfTheWeek[now.dayOfTheWeek()]); } } if (ekran == 2){ //Na zewnątrz lcd.clear(); dht3.read(); switch(dht3.getState()) { case DHT_OK: sensors1.requestTemperatures(); lcd.setCursor(5,0); lcd.print("NA ZEWN"); lcd.write(byte(1)); lcd.print("TRZ"); lcd.setCursor(0, 1);// lcd.print("Temperatura "); lcd.print(sensors1.getTempCByIndex(0)); lcd.write(byte(0)); lcd.print("C"); lcd.setCursor(0, 2); lcd.print("Wilgotno"); lcd.write(byte(2)); lcd.write(byte(3)); lcd.print(" "); lcd.print(dht3.getHumidity()); lcd.print("%"); lcd.setCursor(0, 3); lcd.print(" "); } // na zewnatrz if(tempmin1>sensors1.getTempCByIndex(0)){ tempmin1 = sensors1.getTempCByIndex(0); } if(sensors1.getTempCByIndex(0)>tempmax1 & sensors1.getTempCByIndex(0) < 50){ tempmax1 = sensors1.getTempCByIndex(0); } } if (ekran == 3){ //W tym pokoju lcd.clear(); dht1.read(); switch(dht1.getState()) { case DHT_OK: lcd.setCursor(4,0); lcd.print("W TYM POKOJU"); lcd.setCursor(0, 1); lcd.print("Temperatura "); lcd.print(dht1.getTemperatureC()); lcd.write(byte(0)); lcd.print("C"); lcd.setCursor(0,2); lcd.print("Wilgotno"); lcd.write(byte(2)); lcd.write(byte(3)); lcd.print(" "); lcd.print(dht1.getHumidity()); lcd.print(" %"); lcd.setCursor(0, 3); lcd.print(" "); if(dht1.getTemperatureC()<tempmin2){ tempmin2 = dht1.getTemperatureC(); } if(dht1.getTemperatureC()>tempmax2){ tempmax2 = dht1.getTemperatureC(); }} } if (ekran == 4){ //Na dole lcd.clear(); dht2.read(); switch(dht2.getState()) { case DHT_OK: lcd.setCursor(7,0); lcd.print("Na DOLE"); lcd.setCursor(0, 1); lcd.print("Temperatura "); lcd.print(dht2.getTemperatureC()); lcd.write(byte(0)); lcd.print("C"); lcd.setCursor(0,2); lcd.print("Wilgotno"); lcd.write(byte(2)); lcd.write(byte(3)); lcd.print(" "); lcd.print(dht2.getHumidity()); lcd.print(" %"); lcd.setCursor(0, 3); lcd.print(" "); if(dht2.getTemperatureC()<tempmin3){ tempmin3 = dht2.getTemperatureC(); } if(dht2.getTemperatureC()>tempmax3){ tempmax3 = dht2.getTemperatureC(); }} } if (ekran == 5){ //LCD różnice temperatur lcd.clear(); lcd.setCursor(5,0); lcd.print("NA ZEWN"); lcd.write(byte(1)); lcd.print("TRZ"); lcd.setCursor(0, 1); lcd.print("T"); lcd.write(byte(5)); lcd.write(byte(4)); lcd.print(" "); lcd.print(tempmin1); lcd.write(byte(0)); lcd.print("C"); lcd.print(" "); lcd.print(tempmax1); lcd.write(byte(0)); lcd.print("C"); lcd.setCursor(4, 2); lcd.print("W TYM POKOJU"); lcd.setCursor(0, 3); lcd.print("T"); lcd.write(byte(5)); lcd.write(byte(4)); lcd.print(" "); lcd.print(tempmin2); lcd.write(byte(0)); lcd.print("C"); lcd.print(" "); lcd.print(tempmax2); lcd.write(byte(0)); lcd.print("C"); } if (ekran == 6){ //LCD różnice temperatur - 2 lcd.clear(); lcd.setCursor(7,0); lcd.print("Na DOLE"); lcd.setCursor(0, 1); lcd.print("T"); lcd.write(byte(5)); lcd.write(byte(4)); lcd.print(" "); lcd.print(tempmin3); lcd.write(byte(0)); lcd.print("C"); lcd.print(" "); lcd.print(tempmax3); lcd.write(byte(0)); lcd.print("C"); lcd.setCursor(0, 2); lcd.print(" "); lcd.setCursor(0, 3); lcd.print(" "); } if (ekran == 7) { ekran = 0; } }
  9. Pięć lata temu miałem termometr avt. Zepsuł się po roku więc kupiłem kolejny, kolejny też się zepsuł. Pół roku temu postanowiłem zrobić termometr na arduino. Termometr cały czas udoskonalam. Obecnie posiada cztery czujniki : jeden czujnik DS18B20, Czujnik wilgotności i temperatury DHT11, Dwa czujniki temperatury i wilgotności DHT22. Pozostałe rzeczy, które użyłem to: Wyświetlaczem 4x20 znaków Konwerterem i2C LCD Moduł RTC DS3231 Koszyk na baterie AA do podtrzymania zegara Dwie baterie AA Czujnik ruchu Arduino uno Początkowo nie wiedziałem jak zapisać godzinę i datę w pamięci modułu RTC więc całość posiadało akumulator 12v 7Ah po to by godzina i data była prawdziwa a nie odczytywana z kodu po podaniu zasilania. Nie posiadał w tedy też czujnika ruchu więc posiadał włącznik, którym włączało się podświetlenie LCD. W tym momencie posiadał tylko trzy czujniki temperatury DS18B20 oraz jeden DHT11. Teraz termometr włącza się gdy ktoś przed nim się poruszy, mierzy temperaturę maksymalną i minimalną z każdego z czujników. Oraz posiada zasilacz 12V 1A. Całość umieściłem w obudowie z sklejki 6 mm pomalowanej szarą farbą. Z przodu znajduje się wyświetlacz, czujnik ruchu oraz dioda informująca że termometr oczekuje na ruch wyłącza się jeśli ktoś przednim się poruszy i włączy się wyświetlacz. Po lewej stronie znajduje się czujnik DHT22 mierzący temperaturę w pokoju. Specjalnie oddaliłem go od obudowy, żeby wynik był jak najbardziej prawidłowy. Na arduino wytrawiłem płytkę moją wytrawiarką do PCB (ma się dobrze i ostatnio dorobiłem do niej pompkę powietrza) są do niej podłączone wszystkie rzeczy. Czujniki które są poza pokojem jeden na zewnątrz DS18B20 i DHT11 drugi na dole DHT22 są podłączone przez złącze RJ45 do arduino. Do modułu RTC na miejsce fabrycznej baterii przylutowałem koszyczek na baterie AA ponieważ zegar na fabrycznej baterii wytrzymał 4 miesiące. Temperatury maks. i min. wyświetliłem na osobnym ekranie. Od lewej Strzałki oznaczają temperaturę minimalną i maksymalną oraz jest ona wyświetlana najpierw minimalna potem maksymalna. Galeria pozostałych ekranów: Dziękuję za przeczytaniem oraz liczę na komentarze.
  10. @ElvisMam jeszcze jedno pytanie co trzeba w tym kodzie zmienić żeby działał poprawnie z dwoma czujnikami dht11? Oraz czemu nie pokazuje mi się temperatura z czujnik ds18b20 tylko -127 podłączam taj jak w kursie na forbocie. #include <Wire.h> #include <LiquidCrystal_I2C.h> #include <DS3231.h> #include <OneWire.h> #include <DallasTemperature.h> #include "DHT.h" #define DHT11_PIN 2 DHT dht; LiquidCrystal_I2C lcd(0x27, 20, 4); // set the LCD address to 0x20 for a 16 chars and 2 line display DS3231 clock; RTCDateTime dt; OneWire oneWire(A5); //Podłączenie do A5 DallasTemperature sensors(&oneWire); //Przekazania informacji do biblioteki void setup() { Serial.begin(9600); sensors.begin(); //Inicjalizacja czujnikow lcd.init(); // initialize the lcd // Print a message to the LCD. lcd.backlight(); lcd.begin(20, 4); //Deklaracja typu Serial.println("Initialize DS3231");; clock.begin(); clock.setDateTime(2019,11,23,21,21,0); Serial.begin(9600); dht.setup(DHT11_PIN); } void loop() { for (int i = 0; i < 1; i++) { //Wykonaj 1 razy dt = clock.getDateTime(); lcd.setCursor(0, 0); lcd.print("zegar i");//ekran pokazowy lcd.setCursor(0, 2);//ekran pokazowy lcd.print("termometr ");//ekran pokazowy delay(5000); lcd.clear(); lcd.setCursor(0, 0);//pusto lcd.print(" ");//pusto lcd.setCursor(0, 1);//pusto lcd.print(" ");//pusto lcd.setCursor(0, 2);//pusto lcd.print(" ");//pusto lcd.setCursor(0, 3);//pusto lcd.print(" ");//pusto } for (int i = 0; i < 100; i++) { //Wykonaj 100 razy dt = clock.getDateTime(); lcd.setCursor(0, 0); lcd.print(" #czas# "); //czas lcd.setCursor(0, 1); //czas lcd.print(dt.hour); //czas lcd.print(':'); //czas lcd.print(dt.minute);//czas lcd.print(' '); //czas lcd.setCursor(0, 2); //data lcd.print(" #data# "); //data lcd.setCursor(0, 3); //data lcd.print(dt.day); //data lcd.print('/'); //data lcd.print(dt.month); //data lcd.print('/'); //data lcd.print(dt.year); //data delay(5000); lcd.clear(); lcd.setCursor(0, 0);//przerwa lcd.print(" ");//przerwa lcd.setCursor(0, 1);//przerwa lcd.print(" ");//przerwa lcd.setCursor(0, 2);//przerwa lcd.print(" ");//przerwa lcd.setCursor(0, 3);//przerwa lcd.print(" ");//przerwa delay(100); lcd.clear(); lcd.setCursor(0, 0);//OBUDOWA lcd.print("TEMP W OBUDOWIE");//OBUDOWA lcd.setCursor(0, 1);//OBUDOWA lcd.print(clock.readTemperature());//OBUDOWA lcd.print("*C");//OBUDOWA lcd.setCursor(0, 2);//OBUDOWA lcd.print(" "); lcd.setCursor(0, 3);//OBUDOWA lcd.print(" "); //OBUDOWA delay(5000); lcd.clear(); lcd.setCursor(0, 0);//przerwa lcd.print(" ");//przerwa lcd.setCursor(0, 1);//przerwa lcd.print(" ");//przerwa lcd.setCursor(0, 2);//przerwa lcd.print(" ");//przerwa lcd.setCursor(0, 3);//przerwa lcd.print(" ");//przerwa delay(100); lcd.clear(); lcd.setCursor(0, 0);//wilgotność i temperatura lcd.print("TEMP I WILG NA ZEWN");//wilgotność i temperatura //Pobranie informacji o wilgotnosci int wilgotnosc = dht.getHumidity();//wilgotność i temperatura lcd.setCursor(0, 1);//wilgotność i temperatura lcd.print("WILGOTNOSC "); //wilgotność i temperatura lcd.print(wilgotnosc);//wilgotność i temperatura lcd.print("%RH | ");//wilgotność i temperatura //Pobranie informacji o temperaturze int temperatura = dht.getTemperature();//wilgotność i temperatura lcd.setCursor(0, 2);//wilgotność i temperatura lcd.print("TEMPERATURA ");//wilgotność i temperatura lcd.print(temperatura);//wilgotność i temperatura lcd.print("*C");//wilgotność i temperatura delay(5000); lcd.clear(); lcd.setCursor(0, 0);//pusto lcd.print(" ");//pusto lcd.setCursor(0, 1);//pusto lcd.print(" ");//pusto lcd.setCursor(0, 2);//pusto lcd.print(" ");//pusto lcd.setCursor(0, 3);//pusto lcd.print(" ");//pusto delay(100); lcd.clear(); lcd.setCursor(0, 0);//pusto sensors.requestTemperatures(); //Pobranie temperatury czujnika lcd.print("Aktualna temperatura: "); lcd.println(sensors.getTempCByIndex(0)); //Wyswietlenie informacji lcd.setCursor(0, 1);//pusto lcd.print("Aktualna temperatura: "); lcd.setCursor(0, 2);//pusto lcd.print(" ");//pusto lcd.setCursor(0, 3);//pusto lcd.print(" ");//pusto delay(5000); lcd.clear(); lcd.setCursor(0, 0);//pusto lcd.print(" ");//pusto lcd.setCursor(0, 1);//pusto lcd.print(" ");//pusto lcd.setCursor(0, 2);//pusto lcd.print(" ");//pusto lcd.setCursor(0, 3);//pusto lcd.print(" ");//pusto } } void LCDprint2digits(int number) { if (number >= 0 && number < 60) { lcd.write('0'); } lcd.print(number); }
  11. Okej ale na czujniku pisze, że temperatura -20-60 To czy w nadruku na czujniku jest błąd? W takim razie jak użyje czujnika dht22 to prawidłowo będzie się wyświetlał minus prze temperaturach ujemnych?
  12. Czujnik temperatury i wilgotności dht11 podłączony do arduino nie pokazuje mi temperatury na minusie. Pokazuje mi np. 10 wiem, że to na minusie ponieważ czujnik jest w zamrażarce ale nie chce pokazać mi minusa. Wgrywam taki program na resztą rzeczy proszę nie zwracać uwagi: #include <Wire.h> #include <LiquidCrystal_I2C.h> #include <DS3231.h> #include <OneWire.h> #include <DallasTemperature.h> #include "DHT.h" #define DHT11_PIN 2 DHT dht; LiquidCrystal_I2C lcd(0x27, 20, 4); // set the LCD address to 0x20 for a 16 chars and 2 line display DS3231 clock; RTCDateTime dt; OneWire oneWire(A5); //Podłączenie do A5 DallasTemperature sensors(&oneWire); //Przekazania informacji do biblioteki void setup() { Serial.begin(9600); sensors.begin(); //Inicjalizacja czujnikow lcd.init(); // initialize the lcd // Print a message to the LCD. lcd.backlight(); lcd.begin(20, 4); //Deklaracja typu Serial.println("Initialize DS3231");; clock.begin(); clock.setDateTime(2019,11,23,21,21,0); Serial.begin(9600); dht.setup(DHT11_PIN); } void loop() { for (int i = 0; i < 1; i++) { //Wykonaj 1 razy dt = clock.getDateTime(); lcd.setCursor(0, 0); lcd.print("zegar i");//ekran pokazowy lcd.setCursor(0, 2);//ekran pokazowy lcd.print("termometr ");//ekran pokazowy delay(5000); lcd.clear(); lcd.setCursor(0, 0);//pusto lcd.print(" ");//pusto lcd.setCursor(0, 1);//pusto lcd.print(" ");//pusto lcd.setCursor(0, 2);//pusto lcd.print(" ");//pusto lcd.setCursor(0, 3);//pusto lcd.print(" ");//pusto } for (int i = 0; i < 100; i++) { //Wykonaj 100 razy dt = clock.getDateTime(); lcd.setCursor(0, 0); lcd.print(" #czas# "); //czas lcd.setCursor(0, 1); //czas lcd.print(dt.hour); //czas lcd.print(':'); //czas lcd.print(dt.minute);//czas lcd.print(' '); //czas lcd.setCursor(0, 2); //data lcd.print(" #data# "); //data lcd.setCursor(0, 3); //data lcd.print(dt.day); //data lcd.print('/'); //data lcd.print(dt.month); //data lcd.print('/'); //data lcd.print(dt.year); //data delay(5000); lcd.clear(); lcd.setCursor(0, 0);//przerwa lcd.print(" ");//przerwa lcd.setCursor(0, 1);//przerwa lcd.print(" ");//przerwa lcd.setCursor(0, 2);//przerwa lcd.print(" ");//przerwa lcd.setCursor(0, 3);//przerwa lcd.print(" ");//przerwa delay(100); lcd.clear(); lcd.setCursor(0, 0);//OBUDOWA lcd.print("TEMP W OBUDOWIE");//OBUDOWA lcd.setCursor(0, 1);//OBUDOWA lcd.print(clock.readTemperature());//OBUDOWA lcd.print("*C");//OBUDOWA lcd.setCursor(0, 2);//OBUDOWA lcd.print(" "); lcd.setCursor(0, 3);//OBUDOWA lcd.print(" "); //OBUDOWA delay(5000); lcd.clear(); lcd.setCursor(0, 0);//przerwa lcd.print(" ");//przerwa lcd.setCursor(0, 1);//przerwa lcd.print(" ");//przerwa lcd.setCursor(0, 2);//przerwa lcd.print(" ");//przerwa lcd.setCursor(0, 3);//przerwa lcd.print(" ");//przerwa delay(100); lcd.clear(); lcd.setCursor(0, 0);//wilgotność i temperatura lcd.print("TEMP I WILG NA ZEWN");//wilgotność i temperatura //Pobranie informacji o wilgotnosci int wilgotnosc = dht.getHumidity();//wilgotność i temperatura lcd.setCursor(0, 1);//wilgotność i temperatura lcd.print("WILGOTNOSC "); //wilgotność i temperatura lcd.print(wilgotnosc);//wilgotność i temperatura lcd.print("%RH | ");//wilgotność i temperatura //Pobranie informacji o temperaturze int temperatura = dht.getTemperature();//wilgotność i temperatura lcd.setCursor(0, 2);//wilgotność i temperatura lcd.print("TEMPERATURA ");//wilgotność i temperatura lcd.print(temperatura);//wilgotność i temperatura lcd.print("*C");//wilgotność i temperatura for ( int i = 0; i > dht.getTemperature();){ lcd.setCursor(15, 3); lcd.print("- "); } delay(5000); lcd.clear(); lcd.setCursor(0, 0);//pusto lcd.print(" ");//pusto lcd.setCursor(0, 1);//pusto lcd.print(" ");//pusto lcd.setCursor(0, 2);//pusto lcd.print(" ");//pusto lcd.setCursor(0, 3);//pusto lcd.print(" ");//pusto delay(100); lcd.setCursor(0, 0);//pusto lcd.print("Aktualna temperatura: "); lcd.setCursor(0, 1);//pusto lcd.print("grrtghtrhtrh"); //Wyswietlenie informacji lcd.setCursor(0, 2);//pusto lcd.print("gtgrbn ");//pusto lcd.setCursor(0, 3);//pusto lcd.print("5675872712&&&%#@@! ");//pusto delay(5000); lcd.clear(); lcd.setCursor(0, 0);//pusto lcd.print(" ");//pusto lcd.setCursor(0, 1);//pusto lcd.print(" ");//pusto lcd.setCursor(0, 2);//pusto lcd.print(" ");//pusto lcd.setCursor(0, 3);//pusto lcd.print(" ");//pusto } } void LCDprint2digits(int number) { if (number >= 0 && number < 60) { lcd.write('0'); } lcd.print(number); } Co może być nie tak z tym kodem?
  13. A jak bym zastosował przetwornice step up 3A i podłączył jako źródło zasilania do zasilacza a na wyjście akumulator? Nie wyliczałem tego czy 2 godziny naładują akumulator.
  14. Chodziło mi o to żeby był podłączony do zasilacza 2 godziny. A nie ładować o 2 w nocy. A jest to zasilacz dc.
×
×
  • Utwórz nowe...