Skocz do zawartości

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


Pomocna odpowiedź

Napisano

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




 }

}

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.

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

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.

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.

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 .

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ć.

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... 😉

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?

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...

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.

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...