autor: WitekR » 20 lis 2022, 19:01
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 (180.45 KiB) Przejrzano 1557 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(" ");
}
}
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
[attachment=0]Rys1_3.jpg[/attachment]
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:
[code]
#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(" ");
}
}
[/code]