Czujnik zmierzchowy BETA2 + termometr

Czujnik zmierzchowy BETA2 + termometr

INFORMACJA: Poniższy post nie wydostał się z Poczekalni :(

Witajcie

 

Przedstawiam wam drugą wersję mojego czujnika zmierzchowego. We wcześniejszym artykule udostępniłem nieskończoną wersję czujnika. Zawierał on sporo błędów oraz troszkę błędne dane. W tym artykule zamieszczam wam 2 betę projektu z poprawionymi błędami oraz czujnikiem temperatury na switch. Więc zabieramy się do roboty :)

Potrzebne:

*5x Rezystor 1K-1,5K (ja takie zastosowałem)

*Czujnik temperatury LM35 lub inne

*Fotorezystor

*Arduino

*Płytka stykowa i kabelki

*Potencjometr 10K(ja taki zastosowałem)

*Button/Switch

A więc najpierw przedstawię projekt podłączenia poszczególnych elementów. Może trochę to chaotyczne, ale program fritzing używam dopiero 2 raz.

Untitled Sketch_bb

Co zostało zmienione?

Otóż wiele zmian kryje się w całym projekcie. Cały kod programu został edytowany i napisany od nowa, dodany został switch oraz termometr cyfrowy LM35. Do programu została dodana pętla histerezy, która eliminuje włączanie i wyłączanie stanu niskiego i wysokiego, więc już nie zaobserwujemy zmieniającego się co chwilę stanu. Całość wygląda i działa banalnie prosto. Co najważniejsze, problem z minusem odprowadzonym do oddzielnego minusa w arduino został naprawiony, co miało miejsce w poprzednim projekcie. Tak więc zmian jest sporo, a prace nad projektem nie przerywam. Ciągle będę coś dodawał nowego. W następnych wersjach postaram się dodać zegar czasu rzeczywistego oraz informator o nowych listach w skrzynce pocztowej.

Trochę się rozpisałem, więc czas na program i jego objaśnienie:

/////////////////////////////////////////////////
// Czujnik Zmierzchowy by LorEnzoo wersja BETA2//
/////////////////////////////////////////////////


// Pin 5 na LCD podpinamy pod -
//pin 4 pod 12 a pin 6 pod 11
// pin kontrastu potecjometr pod pin 3
//switch-rezystor do - a + bezposrednio do płytki, zaś wyście cyfrowe u góry
//LM35- oznaczenia z okrągłośći z przodu + SIGN -
//

 int guzik = 8; // switch
int pin_pr = A0; // pin fotorezystora
 int pin_term = A1;// pin analogowy LM35
int pin_dioda = 13;// czerwona
 int pin_dioda2 = 10;//zielona
#include <LiquidCrystal.h>// biblioteka LCD
 LiquidCrystal lcd(12,11,5,4,3,2);// porty lcd

 void setup() {
lcd.begin(16,2);
  pinMode(guzik, INPUT);
pinMode(pin_pr, INPUT);
  pinMode(pin_term, INPUT);
pinMode(pin_dioda, OUTPUT);
  pinMode(pin_dioda2, OUTPUT);
Serial.begin(19200);
 }
boolean stan=0;//zmienna logiczna ustawiająca stan wyjścia na 0
 
void loop()
 {

  int czujnik = analogRead(pin_pr);
int temp = (5.0  analogRead(pin_term)  100.0) / 1024; //Mnożnik do LM35
  delay(1000);
//Zbiór seriali które można zobaczyć w Serial Monitor
//  Serial.println("Temp");
//  Serial.println(temp)'
//  Serial.println("Oswietlenie");
//  Serial.println(czujnik);
  
if(digitalRead(guzik) == HIGH)// jezeli(wejsciecyfrowe(guzik) == Stan wysoki)
  {
delay(20);
    stan=!stan;//zmienna stan zmienia wartość na przecwną  
while(digitalRead(guzik) == HIGH);//pętla bedzie czekac dopoki odczyt 0 pinu bedzie wysoki
    delay(20);
}
////////////////////////////////////////////////////////////////////////////////////////////////  
if(czujnik>=5)
  { 
digitalWrite(pin_dioda, LOW);
    digitalWrite(pin_dioda2, HIGH); 
}
  if((czujnik>=3) && (czujnik<=4)) //Bariera,czyli od pewnego momentu Jest w stanie, potem tak jakby pływa bez zmiay stanu i jeśli zaskoczy to się stan zmienia, tzw pętla histerezy. 
{
    digitalWrite(pin_dioda, LOW);
digitalWrite(pin_dioda2, HIGH);
  }
if(czujnik<=1)
  {
digitalWrite(pin_dioda, HIGH);
    digitalWrite(pin_dioda2, LOW);
}
//////////////////////////////////////////////////////////////////////////////////////////////  
if(stan){
  if(czujnik>=5)
{
    lcd.setCursor(0,0);
lcd.print("Jasnosc: WYSOKA ");
    lcd.setCursor(0,1);
lcd.print("Oswietlenie: OFF");
  }
if((czujnik>=3) && (czujnik<=4)) //Bariera,czyli od pewnego momentu Jest w stanie, potem tak jakby pływa bez zmiay stanu i jeśli zaskoczy to się stan zmienia tzw pętla histerezy.
  {               
lcd.setCursor(0,0);
    lcd.print("Jasnosc: SREDNIA");
lcd.setCursor(0,1);
    lcd.print("Oswietlenie: OFF");   
}
  if(czujnik<=1)          
{
    lcd.setCursor(0,0);
lcd.print("Jasnosc: NISKA  ");
    lcd.setCursor(0,1);
lcd.print("Oswietlenie: ON ");
  }
}
  if(!stan)
{
    lcd.setCursor(0,0);
lcd.print("    Termomert   ");
    lcd.setCursor(0,1);
lcd.print("Temperatura:");
    lcd.setCursor(13,1);
lcd.print(temp);
    lcd.setCursor(15,1);
lcd.print("C");
  }
}

Program wygląda na całkiem ładny. Choć pewnie nie jest idealny, każdy by coś dodał lub przerobił inaczej, program działa bez zarzutu.

Myślę że artykuł wam się spodoba, zachęcam do komentowania i oceniania :)

 

PS: Bardzo bym prosił, aby ktoś mi powiedział, jak przejść 3 tryby w LCD za pomocą jednego switcha. Tzn 1 to czujnik zmierzchu, 2 to termometr oraz 3 czyli powiedzmy czas.

INFORMACJA: Poniższy post nie wydostał się z Poczekalni :(

Ocena: 0/5 (głosów: 0)

Podobne posty

23 komentarzy do “Czujnik zmierzchowy BETA2 + termometr

Odpowiedz

anuluj

Masz uwagi?