Pantau Jarak dan Suhu Ultrasonik Arduino dengan Sistem Alarm LCD
Komponen dan Perlengkapan
- Arduino UNO — 1
- LCD Standar Adafruit - 16x2 Putih di Biru — 1
- Sensor Ultrasonik - HC-SR04 (Generic) — 1
- Termometer Digital 1-Wire Maxim Integrated DS18B20 — 1
- Resistor 4.75k ohm — 1
- Tombol Tekan SparkFun 12mm — 1
- Potensio-meter Tunggal Putar 10k ohm — 1
- Buzzer — 1
- LED (1 Hijau, 1 Kuning, 1 Merah) — 3
- Resistor 221 ohm — 3
- Papan Roti (Breadboard) — 1
- Kawat Jumper (Generic) — 1
Aplikasi dan Layanan Online
Tentang Proyek Ini
Proyek ini memberi saya informasi yang saya butuhkan tentang ketinggian air di tangki air. Saat ketinggian rendah, LED hijau menyala. Saat ketinggian sedang, LED kuning menyala. Saat ketinggian TINGGI, LED merah berkedip bersamaan dengan suara buzzer. Jarak dari sensor ke ketinggian air diukur oleh sensor ultrasonik dan dicetak ke LCD bersama dengan suhu di tangki tersebut. Proyek ini adalah bagian dari proyek yang lebih besar. Bagian kedua akan berupa 6 LED mengejar yang dipasang di lingkaran untuk menunjukkan pompa sedang memompa. Lihat: https://create.arduino.cc/projecthub/MichDragstar/arduino-uno-or-trinket-pro-5v-6-chasing-leds-with-pot-and-pb-23a1d7 Bagian ketiga akan memulai pompa saat ketinggian tinggi dan menghentikan pompa saat ketinggian rendah.(dalam pembangunan) Untuk proyek nyata saya menggunakan sensor ultrasonik wodorensi, ini tidak akan mengubah pengkabelan atau kode. Saya tidak tahu apa yang terjadi dengan pembacaan saat sensor basah (kelembaban), jadi proyek ini hanya untuk memberi saya informasi, proyek ketiga digunakan untuk aktivitas pompa dan akan dilakukan oleh kontak magnet.
Code
#include <LiquidCrystal.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 6
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
LiquidCrystal LCD(12, 11, 5, 4, 3, 2);
int trigPin = 9;
int echoPin = 7;
float pingTime;
float targetDistance;
float speedOfSound = 776.5;
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
LCD.begin(16, 2);
LCD.setCursor(0, 0);
LCD.print("Distance:");
sensors.begin();
pinMode(8, OUTPUT);
pinMode(10, OUTPUT);
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2000);
digitalWrite(trigPin, HIGH);
delayMicroseconds(15);
digitalWrite(trigPin, LOW);
delayMicroseconds(10);
pingTime = pulseIn(echoPin, HIGH);
pingTime = pingTime / 1000000;
pingTime = pingTime / 3600;
targetDistance = speedOfSound * pingTime;
targetDistance = targetDistance / 2;
targetDistance = targetDistance * 160934.4;
sensors.requestTemperatures();
LCD.setCursor(10, 0);
LCD.print(" ");
LCD.setCursor(10, 0);
LCD.print((int)(targetDistance + 0.5));
LCD.print("cm ");
LCD.setCursor(0, 1);
LCD.print(" ");
LCD.setCursor(0, 1);
if (targetDistance > 40) {
LCD.print("LEV LOW ");
LCD.print(sensors.getTempCByIndex(0));
LCD.print((char)223);
LCD.print("C");
} else if (targetDistance < 40 && targetDistance > 20) {
LCD.print("LEV MED ");
LCD.print(sensors.getTempCByIndex(0));
LCD.print((char)223);
LCD.print("C");
} else if (targetDistance < 20) {
LCD.print("LEV HIGH ");
LCD.print(sensors.getTempCByIndex(0));
LCD.print((char)223);
LCD.print("C");
}
delay(2000);
if (targetDistance > 40) {
digitalWrite(13, HIGH);
} else {
digitalWrite(13, LOW);
}
if (targetDistance < 40 && targetDistance > 20) {
digitalWrite(8, HIGH);
} else {
digitalWrite(8, LOW);
}
if (targetDistance < 20) {
digitalWrite(10, HIGH);
delay(2000);
digitalWrite(10, LOW);
} else {
digitalWrite(10, LOW);
}
}
Skematika
lcd_pot_led_buzz_pb_distsens_temp_EHVdF6S1L7.fzz