Strona 1 z 1

Termometr cyfrowy z alarmem

: 20 lis 2022, 19:01
autor: WitekR
Poniżej szybki projekt cyfrowego termometru z alarmem opartego na Arduino Uno.

Wstęp

Do wykonani opisanego układu wykorzystałem.

- Arduino Uno;
- Buzzer FY248 32mm;
- Wyświetlacz 2x16 ze sterownikiem HD44780 oraz
konwerterem I2C,
- Cyfrowy termometr DS18B20;
- Dwa potencjometry.

Podłączenie

Schemat podłączenia przedstawiłem na poniższym rysunku. Został on opracowany w programie Fritzi
Rys1_3.jpg
Rys1_3.jpg (180.45 KiB) Przejrzano 1554 razy
Program

Zasada działania programu jest dosyć prosta. Buzzer zacznie piszczeć, kiedy zostanie przekroczona dolna lub górna granica wartości ustawionej temperatury.

Ustawianie wartości granicznych wykonuje się za pomocą potencjometrów, które zostały podłączone do pinów analogowych, następnie wartości odczytane zostały przetworzone na wartości graniczne temperatur. Tą operacje wykonuje się poprzez wykorzystanie funkcji map().

Wygląda ona następująco:

Minimum = map(wartosc, poczatek, koniec, wartoscdolna, wartoscgorna);

W programie przyjmuje ona postać zaprezentowaną poniżej:

Minimum = map(analogRead(0), 0, 1023, -40, 90);
Maximum = map(analogRead(1), 0, 1023, -40, 90);

Poniżej przedstawiam cały plik programu:

Kod: Zaznacz cały


#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
 
#define ONE_WIRE_BUS 2          //Linia danych podpięta jest pod pin 2 Ardiuno
#define AlarmPin 10
OneWire oneWire(ONE_WIRE_BUS);
 
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Ustawienie adresu ukladu na 0x27
 
DallasTemperature sensors(&oneWire);  //Przekazanie danych dotyczących One Wire do DallasTemperature
 
//deklaracja zmiennych
float Temperatura=0;
int Maximum=0;
int Minimum=0;
 
void setup(void)
{
  lcd.begin(16,2);      //Definicja wyswietlacza
  lcd.backlight();      //Zalaczenie podwietlenia 
  sensors.begin();      //Włączenie biblioteki
  pinMode(AlarmPin, OUTPUT); //deklaracjapinualarmu
}
 
void loop(void)
{
  //wyslanie komend do czujnika
  sensors.requestTemperatures();
  //wypisanie wartosci temperatury na ekranie
  lcd.setCursor(0,0);
  lcd.print("Temp1:");
  lcd.setCursor(6,0);
  Temperatura = sensors.getTempCByIndex(0);
  lcd.print(Temperatura);
 
  //Odczytanie dolnej wartosci
  Minimum = map(analogRead(0), 0, 1023, -40, 90);
  lcd.setCursor(13,0);
  lcd.print(Minimum);
  lcd.print(" ");
 
  //Odczytanie gornej wartosci
  Maximum = map(analogRead(1), 0, 1023, -40, 90);
  lcd.setCursor(13,1);
  lcd.print(Maximum);
  lcd.print(" ");
 
  if(Minimum >= Maximum)
  {
    Minimum = Maximum - 1;
  }
 
  //Sprawdzenie wartosci czy miesci sie w przedziale
  if(Temperatura < Minimum || Temperatura > Maximum)
  {
      lcd.setCursor(0, 1);
      lcd.print("ALARM!");
      digitalWrite(AlarmPin, HIGH);
  }
  else
  {
      digitalWrite(AlarmPin, LOW);
      lcd.setCursor(0, 1);
      lcd.print("      ");
  }
}

Re: Termometr cyfrowy z alarmem

: 29 mar 2023, 23:09
autor: Romek
A tam w kodzie niema błedu w linijce odczytywanie dolnej temperatury?