/******************************************************************************* * * Projeto 84: Medindo temperatura em baixo d'água com disparo de alarme * Autor: Angelo Luis Ferreira * Data: 15/06/2020 * http://squids.com.br/arduino * *******************************************************************************/ #include #include #include // define a conexão do terminal de sinal do DS18B20 e o botão com o Arduino const byte sensorPin = 9; const byte botPin = 10; const byte buzzerPin = 13; const byte ledVermelho = 8; const byte ledVerde = 7; // define o estado do botão boolean estado = 0; // instancia a classe OneWire da biblioteca "OneWire.h" com o nome "pin" OneWire pin(sensorPin); // instancia a classe DallasTemperatura da biblioteca DallasTemperature.h com o nome "bus" DallasTemperature bus(&pin); // define o endereço com o nome de "sensor" DeviceAddress sensor; // Inicializa o LCD com o módulo I2C LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE); // Declara as temperaturas minima, maxima e leitura float minC, minF; float maxC, maxF; float tC, tF; // Set temperaturas alarme const float setMx = 22; const float setMn = 18; void setup() { Serial.begin(9600);// inicia monitor serial lcd.begin(16, 2); // inicia lcd pinMode(botPin, INPUT_PULLUP); // define botão como pullup interno do Arduino pinMode(ledVermelho, OUTPUT); pinMode(ledVerde, OUTPUT); pinMode(buzzerPin, OUTPUT); lcd.clear(); // limpa o disply bus.begin(); // inicializa o objeto bus bus.getAddress(sensor, 0); // localiza o sensor ds18b20 // definie as temperaturas max e mi (primeira leitura) minC = 999; maxC = -999; } void loop() { // faz leitura do sensor bus.requestTemperatures(); // permite a leitura do sensor tC = bus.getTempC(sensor); // temperatura em ºC // Atualiza temperaturas minima e maxima if (tC < minC) minC = tC; if (tC > maxC) maxC = tC; celsius(); // mostra valores em ºC no display verifica(); // verifica se o botão foi pressionado // verfica a temperatura máxima e mínima if(tC > setMx){ // setado como 32ºC sirene(); } else if (tC < setMn) { sirene(); } else { digitalWrite(ledVermelho, LOW); noTone(buzzerPin); // interrompe o tom } } // liga/desliga o modo silencioso void verifica() { // verifica se o botão está pressionado if (!digitalRead(botPin)) { estado = !estado; // muda o valor do estado digitalWrite(ledVerde, estado); // acende luz verde while(!digitalRead(botPin)) {} delay(150); } } // função exibe no display void celsius() { // mostra valores no LCD em ºC lcd.setCursor(0,0); lcd.print("Temp.: "); lcd.print(tC); lcd.write(B11011111); // Símbolo de grau lcd.print("C "); lcd.setCursor(0,1); lcd.print("L="); lcd.print(minC); lcd.print(" H="); lcd.print(maxC); } //Função sirene void sirene(){ // desliga led vermelho digitalWrite(ledVermelho, LOW); delay(50); verifica(); // verifica se é modo sirene ou modo silencioso if (estado) { // modo silencioso noTone(buzzerPin); digitalWrite(ledVermelho, HIGH); delay(150); verifica(); } else { // modo sirene - tocar 5 ciclos for (int k=0; k<5; k++){ verifica(); tone(buzzerPin, 1350); //Gerar um sinal de 1350Hz delay(150); tone(buzzerPin, 1050); //Gerar um sinal de 1050Hz delay(150); digitalWrite(ledVermelho, HIGH); } } }