czujnik temperatury i ruchu

Masz problem, z którym nie możesz sobie poradzić? Pisz śmiało!
ODPOWIEDZ
Mateusz_P
Młodszy majsterkowicz
Posty: 1
Rejestracja: 5 cze 2018, 10:15

czujnik temperatury i ruchu

Post autor: Mateusz_P » 17 cze 2018, 19:14

cześć,
mam taki problem, zbudowałem układ z czujnika temperatur DS18B20 i czujnika wibracji DFR0027.
Program ma za zadanie : sprawdza (wykrywać ruch), sprawdza temperaturę, jak mieści się w zakresie to włączać 2 diody
oprócz tego ma wykrywać że jeśli temperatur podskoczy, wejdzie w przedział 81-92 stopni to ma sygnalizować poprzez miganie jedną diodą a druga ma świecić cały czas. Jeśli skoczy powyżej 92stopni to ma wszystko wyłączyć ( zgasić diody).
Jak nie wykryje ruchu to odczekać około 8s i też wszystko wyłączyć.

Ogólnie wszystka działa ale, podczas wykrycia ruch jedna dioda świeci a druga powoli miga około co 3s może rzadziej, próbowałem już chyba wszystkich możliwość jakie mi do głowy przyszły i nie mam pojęcia dlaczego się tak dzieje . Nie wiem też jak ustawić czas po jakim ma się wyłączyć jak nie wykryje ruch. Tak jak jest obecnie to strasznie wolno działa tzn ruszam czujnikiem a dopiero po około 3 s wszystko zaczyna działać.

PS. przepraszam z góry za lakoniczne komentarze w kodzie ale dopiero się uczę i dzięki temu lepiej się łapie w tym co tam popisałem.

Kod: Zaznacz cały

#include <OneWire.h>                           
#include <DallasTemperature.h>                 
#include <LiquidCrystal.h>                     

int one_wire = 2;                              //Transmisja 1-Wire na pinie 10
int temp = 12;                                 //pin 12 jako led wyjscie


#define ruchLED   13                           //wyjscie czujnika wibracji led
#define ruchINPUT  3                           //wejscie czujnika wibracji  
unsigned char state = 0;                          


OneWire oneWire(one_wire);                     //wywołujemy transmisję 1-Wire na pinie 10
DallasTemperature sensors(&oneWire);           //informujemy Arduino, ze przy pomocy 1-Wire
                                               //chcemy komunikowac sie z czujnikiem                          

void setup(void)
{
  pinMode(ruchLED, OUTPUT);                    //ustawian ruchled na wyjsciu danych
  pinMode(ruchINPUT, INPUT);                   //ustawian ruchinput jako wejscie danych
  //Trigger the blink function when the falling edge is detected
  attachInterrupt(0, blink, FALLING);
  
  Serial.begin(9600);                          //odczyt danych
  pinMode(temp,OUTPUT);                        //ustawiamy led od temp jako wyjscie
  sensors.begin();                             //rozpocznij odczyt z czujnika
  
  
}

void loop(void){   

  sensors.requestTemperatures(); 
  if (state != 0 && sensors.getTempCByIndex(0)  >= 81 && sensors.getTempCByIndex(0) <= 92) {
      state = 0;
                   digitalWrite(ruchLED, HIGH); //jesli jest ruch i miesci sie w przedziale załącza led
                   digitalWrite(temp, HIGH);   
                   delay(3000);                 
                   digitalWrite(ruchLED, HIGH);  
                   digitalWrite(temp, LOW);    //miganie sygnalizując zaduza temp
                   delay(2000);                 // czekaj x 
                  
  }
  
  sensors.requestTemperatures(); 
  if (state != 0 && sensors.getTempCByIndex(0) <= 80) {    // jezeli jest temp dobre wszytskie led włączone
      state = 0;
                   digitalWrite(ruchLED, HIGH); //jesli jest ruch załacz diody  spełniony warunek
                   digitalWrite(temp, HIGH);    
                   delay(8000);
  }

   
  else                                         // w przeciwnym wypadku (brak ruchu) zgaś wszystko
  
                  digitalWrite(ruchLED, LOW);  
                  digitalWrite(temp, LOW);     
  
  

}

void blink() {
    state++;
   
}

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


Awatar użytkownika
Slawek
Starszy majsterkowicz
Posty: 449
Rejestracja: 29 mar 2015, 15:05

Re: czujnik temperatury i ruchu

Post autor: Slawek » 18 cze 2018, 17:33

Jak zastąpisz delay() czymś co nie blokuje działania kodu programu to będzie lepiej. Poczytaj o blink without delay.

Pozdr
ODPOWIEDZ

Strony partnerskie: