Skocz do zawartości

Odczyt z DHT11 a sterowanie dowolnym wyjściem za pomocą przycisku


okiniu

Pomocna odpowiedź

Witam jak mam wkleić kod programu w którym potrzebuje wsparcia

[ Dodano: 17-03-2018, 15:25 ]

Za pomocą DHT11 odczytuję temperaturę i wilgotność . Temp to tylko do wglądu ,wilgotność ma sterować pracą wentylatora (OUT 1(13)) no i to jakby działa .

Nie potrafię natomiast wysterować tym wyjściem za pomocą przycisku (na żądanie ).Wciśnięcie ma załączyć OUT1 ,ponowne wciśnięcie ma wyłączyć OUT1 ,niezależnie od stanu DHT11.

Ewentualnie mogę wysterować OUT2(12) i zsumować sygnały na tranzystorze aby wysterowało wentylator.

[ Dodano: 17-03-2018, 15:32 ]


#define DHT11_PIN 8//definiuje czujnik dht na pin8
#define pinS1 2// definiuje przycisk S1 na pin 2
#define OUT1 13// definiuje wyjscie 13 jako OUT1
#define OUT2 12// definiuje wyjscie 12 jako OUT2
#include <DHT.h>//dolaczenie biblioteki czujnika dht
#include <LiquidCrystal_I2C.h> // dolaczenie pobranej biblioteki I2C dla LCD
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Ustawienie adresu ukladu na 0x3F
DHT dht;//inicjacja czujnika dht

void setup()
{
 pinMode(pinS1, INPUT_PULLUP);//przycisk do sterowania recznego
 pinMode(OUT1, OUTPUT);//sterowanie wyjsciem silnika z przycisku
 pinMode(OUT2, OUTPUT);//sterowanie wyjsciem silnika z czujnika wigotnosci

 Serial.begin(9600);
 dht.setup(DHT11_PIN);
 lcd.backlight(); // zalaczenie podwietlenia
 lcd.begin(16, 2); //Deklaracja typu wyswietlacza
 lcd.clear(); //Wyczyszczenie wyswietlacza
 lcd.setCursor(0, 0); //Ustawienie kursora

}



void loop()
{ 




 int wilgotnosc = dht.getHumidity();//Pobranie informacji o wilgotnosci
 int temperatura = dht.getTemperature();  //Pobranie informacji o temperaturze


 if (dht.getStatusString() == "OK") //jesli status i odczyt jest ok
   Serial.print(wilgotnosc);
   Serial.print("%RH | ");//wyslij wilgotnosc
   Serial.print(temperatura);
   Serial.println("*C");//wyslij temperature

   lcd.setCursor(0, 0); //Ustawienie kursora
   lcd.print("Wilg:"); //Wyświetlenie tekstu
   lcd.setCursor(5, 0); //Ustawienie kursora
   lcd.print(wilgotnosc);
   lcd.setCursor(8, 0); //Ustawienie kursora
   lcd.print("%RH"); //Wyświetlenie tekstu

   lcd.setCursor(0, 1); //Ustawienie kursora
   lcd.print("Temp:");//Wyświetlenie tekstu
   lcd.setCursor(5, 1); //Ustawienie kursora
   lcd.print(temperatura);
   lcd.setCursor(8, 1); //Ustawienie kursora
   lcd.print("*C");//Wyświetlenie tekstu
   lcd.setCursor(12, 0); //Ustawienie kursora
   lcd.print("Went");//wyświetlanie tekstu
   lcd.setCursor(13, 1); //Ustawienie kursora




 delay(dht.getMinimumSamplingPeriod());//Odczekanie wymaganego czasugo

 if (dht.getHumidity() >= 34)

 {

   digitalWrite(OUT1, HIGH); //Silnik Start
   Serial.println("Silnik: Start");
   lcd.print("On ");//wyświetlanie tekstu

 }
 else   if (dht.getHumidity() < 34)

 {
   digitalWrite(OUT1, LOW); //Silnik Stop
   Serial.println("Silnik: STOP!");
   lcd.print("Off");//wyświetlanie tekstu




 }

}
Link do komentarza
Share on other sites

Narysuj sobie tabelkę stanów co się ma dziać w każdym z przypadków: wilgotność poniżej limitu, wilgotność powyżej limitu, wentylator włączony, wentylator wyłączony, przycisk wciśnięty, przycisk zwolniony. To powinno ci ułatwić rozumowanie.

Link do komentarza
Share on other sites

Tak tabelka zrobiona już dawno , ale brak umiejętności w programowaniu

[ Dodano: 17-03-2018, 16:06 ]

wilg poniżej-wentylator stop

wilg powyżej -wentylator start

niezależnie przyciśnięcie przycisku- wentylator start- do ponownego wciśnięcia przycisku- wentylator stop

Link do komentarza
Share on other sites

Co znaczy "do poniwnego wciśnięcia przycisku"? Ma wyłączyć całą automatykę?

Przykładowa sytuacja: temperatura spada poniżej minium, coś się włącza, ty przyciskiem wyłączasz.. I co się ma stać jeśli temperatura przekroczy próg?

Pomyśl co system ma robić w każdej sytuacji, to pogadamy.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

ale kodu nikt ci nie napisze tutaj.... mała podpowiedź: "||", a najlepiej poucz się z kursu arduino Forbota i stanie się jasność w tej kwestii.

Wrzuć jakiś własny kod to popatrzymy i pomożemy. Ethanak ma rację, musisz rozważyć wszystkie opcje bo potem wyskakują niespodzianki i często trza przerabiać cały kod, choć początkowo problem wydawał się banalny.

Pozdrawiam.

Link do komentarza
Share on other sites

Dziękuję koledzy za pomoc.

To ,że uczę się dopiero z arduino pewnie widać .

Po długiej lekturze i teorii doszedłem do kodu jaki jest na początku postu własnymi siłami . Liczyłem na większe zrozumienie i już żałuję , że zaczołem.

Czytam kursy , zarejestrowałem zestaw (pod hasłem: pełne wsparcie na forum) a tu od razu kop na dzień dobry

[ Dodano: 17-03-2018, 18:47 ]

Nie liczę na gotowy kod .

Ale na pomysł na kod.

Założenie jest takie :wilgotność pow>=34% wentylator ma działać

wilgotność pon<34% wentylator ma stać

Po wciśnięciu przyciskiem ten sam wentylator ma się kręcić do skutku ,przyciskając ponownie wentylator ma się wyłączyć .

Automatyka DHT11 ma działać równolegle do działania z "ręki" stąd podpięcie pod OUT2 , tylko nie wiem jak zrobić odczyt stanu klawisza i wysterować OUT2 .

[ Dodano: 17-03-2018, 18:49 ]

Nie liczę na gotowy kod .

Ale na pomysł na kod.

Założenie jest takie :wilgotność pow>=34% wentylator ma działać

wilgotność pon<34% wentylator ma stać

Po wciśnięciu przyciskiem ten sam wentylator ma się kręcić do skutku ,przyciskając ponownie wentylator ma się wyłączyć .

Automatyka DHT11 ma działać równolegle do działania z "ręki" stąd podpięcie pod OUT2 , tylko nie wiem jak zrobić odczyt stanu klawisza i wysterować OUT2 .

[ Dodano: 17-03-2018, 18:50 ]

Nie liczę na gotowy kod .

Ale na pomysł na kod.

Założenie jest takie :wilgotność pow>=34% wentylator ma działać

wilgotność pon<34% wentylator ma stać

Po wciśnięciu przyciskiem ten sam wentylator ma się kręcić do skutku ,przyciskając ponownie wentylator ma się wyłączyć .

Automatyka DHT11 ma działać równolegle do działania z "ręki" stąd podpięcie pod OUT2 , tylko nie wiem jak zrobić odczyt stanu klawisza i wysterować OUT2 .

Link do komentarza
Share on other sites

Ale tu echo...

A co ma się dziać, jak wentylator działa bo wilgotność >=34%, ale naciśniesz przycisk? Ma się wyłączyć?

Narysuj sobie taką tabelkę jak ci napisałem, przemyśl wszystkie możliwości po kolei i jestem pewien, że przyjdzie ci wtedy do głowy pomysł jak to zrobić.

Link do komentarza
Share on other sites

Mój pomysł na kod jest taki:

rozrysować sobie wszystko jak pisze deshipu,
sprawdzić możliwe kombinacjei włączenia i wyłączenia,
jeśli przycisk ma mieć priorytet nad DHT, pomyśleć co z tym zrobić,
użyć podstawowych informacji z kursu arduino o zmiennych, operatorach logicznych, przyciskach(piszesz, że nie wiesz jak odczytać stan przycisku....),
napisać kod i wysłać go tutaj(kod z funkcją obsługi przycisków),
poczekać na pochwałę lub krytykę,
wyciągnąć wnioski... 😉

Link do komentarza
Share on other sites

Nie liczę na gotowy kod .

Ale na pomysł na kod.

Założenie jest takie :wilgotność pow>=34% wentylator ma działać

wilgotność pon<34% wentylator ma stać

Po wciśnięciu przyciskiem ten sam wentylator ma się kręcić do skutku ,przyciskając ponownie wentylator ma się wyłączyć .

Automatyka DHT11 ma działać równolegle do działania z "ręki" stąd podpięcie pod OUT2 , tylko nie wiem jak zrobić odczyt stanu klawisza i wysterować OUT2 .

Temat mnie tak zaciekawił, że aż zarejestrowałem się na forum.

okiniu: tak jak zrozumiałem Twój problem to jedynym przypadkiem w którym włączysz ręcznie wentylator będzie, gdy wilgotność jest poniżej 34% (w automacie powyżej 34%Rh będzie już pracował),
więc wprowadzenie zmiennej logicznej powinno rozwiązać twój problem. Tylko nie wiem, czy jest sens temat dalej drążyć: czy się nie poddałeś (A), albo już sam doszedłeś do rozwiązania (B).

Jeżeli (B) to gratki.

SOYER: "||", poważnie? Podpowiedz słuszna, ale czy do osoby początkującej odpowiednia?

Link do komentarza
Share on other sites

Ale przecież napisałem mu żeby poczytał o operatorach logicznych, faktycznie "||" było może mało zrozumiałe, ale zrób kopiuj i wklej tego"||" do wujka google i zobaczysz, że podpowiedź była wzorowa... jak już wiesz czego nie wiesz, to łatwiej pytać dalej...

Link do komentarza
Share on other sites

Zrób sobie dwa programy:

1. Włącza przyciskiem i włącza wentylator.

2. Drugi zależnie od sygnału czujnika wilgotności

3. Połącz oba. Np. wg zasady załączenie wentylatora ma priorytet.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.