• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Termometr cyfrowy z alarmem
#3
przycisk kasowania alarmu pod pin 10 do masy
brzęczek pod pin 13 i do masy

Cykl trwa 40 sekund jak temperatura spadnie poniżej 37 lub będzie powyżej 80 włączy się alarm na 20sek.
po tym czasie sam się wyłączy lub możesz go wyłączyć w każdej chwili przyciskiem . Po 40 sekundach od
włączenia się alarmu kod restartuje wyzwolenie alarmu i znowu zaczyna wyć jeżeli temp. jest poniżej 37
lub powyżej 80. Jeżeli to ma być pod układ bojlera albo kotła c.o. to daj znać trzeba będzie przerobić
bo takie wycie co minutę będzie z goła upierdliwe .

Kod:
#include <OneWire.h>
   #include <LiquidCrystal.h>

   // Connections:
   // rs (LCD pin 4) to Arduino pin 12
   // rw (LCD pin 5) to Arduino pin 11
   // enable (LCD pin 6) to Arduino pin 10
   // LCD pin 15 to Arduino pin 13
   // LCD pins d4, d5, d6, d7 to Arduino pins 5, 4, 3, 2
   LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
   OneWire  ds(8);        // ds18b20 pin #2 (middle pin) to Arduino pin 8
  
    byte buzer = 13;       // pin pod który dajesz brzęczek
    byte przycisk = 10;    // pin przycisku , przycisk do masy
    byte stanalarmu = 0;   // zminna pomocnicza
    long czaswyl = 0;      // zmienna pomocnicza
  
   void setup(void) {
   lcd.begin(16, 2);
  
   pinMode(buzer,OUTPUT);
   pinMode(przycisk,INPUT_PULLUP);
  
  
}
byte i;
byte present = 0;
byte type_s;
byte data[12];
byte addr[8];
float celsius, fahrenheit;
  
   int HighByte, LowByte, SignBit, Whole, Fract, TReading, Tc_100, FWhole;

///////

void loop(void) {


if ( !ds.search(addr)) {
   ds.reset_search();
   delay(250);
   return;
}

if (OneWire::crc8(addr, 7) != addr[7]) {

     return;
}


// the first ROM byte indicates which chip
switch (addr[0]) {
   case 0x10:

     type_s = 1;
     break;
   case 0x28:

     type_s = 0;
     break;
   case 0x22:

     type_s = 0;
     break;
   default:

     return;
}

ds.reset();
ds.select(addr);
ds.write(0x44, 1);        // start conversion, with parasite power on at the end

delay(1000);     // maybe 750ms is enough, maybe not
// we might do a ds.depower() here, but the reset will take care of it.

present = ds.reset();
ds.select(addr);    
ds.write(0xBE);         // Read Scratchpad


for ( i = 0; i < 9; i++) {           // we need 9 bytes
   data[i] = ds.read();

}


// Convert the data to actual temperature
// because the result is a 16 bit signed integer, it should
// be stored to an "int16_t" type, which is always 16 bits
// even when compiled on a 32 bit processor.
int16_t raw = (data[1] << 8) | data[0];
if (type_s) {
   raw = raw << 3; // 9 bit resolution default
   if (data[7] == 0x10) {
     // "count remain" gives full 12 bit resolution
     raw = (raw & 0xFFF0) + 12 - data[6];
   }
} else {
   byte cfg = (data[4] & 0x60);
   // at lower res, the low bits are undefined, so let's zero them
   if (cfg == 0x00) raw = raw & ~7;  // 9 bit resolution, 93.75 ms
   else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
   else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
   //// default is 12 bit resolution, 750 ms conversion time
}
celsius = (float)raw / 16.0;
fahrenheit = celsius * 1.8 + 32.0;
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Temperatura: ");
     lcd.setCursor(2,1);
  
     if (SignBit) {
        lcd.print("-");
     }
     lcd.print(celsius);
     lcd.print(" C ");
     delay(5000);  //Czeka 5 sekund i odswieza
    
     byte reset = digitalRead(przycisk);
  if ((celsius < 37 or celsius > 80) and stanalarmu == 0 ){
      
       czaswyl = millis();
       digitalWrite( buzer , HIGH );
       stanalarmu = 1;}
      
  if ( ((millis()-czaswyl)/1000 > 20) or reset == LOW ){digitalWrite( buzer , LOW );}
  if ((millis()-czaswyl)/1000 > 40){stanalarmu = 0;}
    
}
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
  


Wiadomości w tym wątku
Termometr cyfrowy z alarmem - przez Mur7ik - 11-10-2015, 10:13
RE: Termometr cyfrowy z alarmem - przez adix - 11-10-2015, 10:49
RE: Termometr cyfrowy z alarmem - przez JasQ - 12-10-2015, 07:43
RE: Termometr cyfrowy z alarmem - przez Mur7ik - 12-10-2015, 08:55
RE: Termometr cyfrowy z alarmem - przez JasQ - 12-10-2015, 12:52
RE: Termometr cyfrowy z alarmem - przez Mur7ik - 12-10-2015, 15:13
RE: Termometr cyfrowy z alarmem - przez JasQ - 12-10-2015, 15:58

Skocz do:


Przeglądający: 1 gości