#include <WiFi.h>
#include <HTTPClient.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Ultrasound sensor pins
#define TRIG_PIN 12
#define ECHO_PIN 14
// LED pins
#define RED_LED_PIN 16
#define YELLOW_LED_PIN 4
#define GREEN_LED_PIN 2
// Buzzer pin
#define BUZZER_PIN 17
LiquidCrystal_I2C lcd(0x27, 16, 2);
const char *ssid = "Wokwi-GUEST";
const char *password = "";
const char *thingspeak_api_key = "your_thingspeak_api_key";
void setup()
{
Serial.begin(115200);
// Kết nối WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
// Khởi tạo LCD & pin
lcd.init();
lcd.backlight();
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(RED_LED_PIN, OUTPUT);
pinMode(YELLOW_LED_PIN, OUTPUT);
pinMode(GREEN_LED_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
}
float readDistanceCM()
{
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH);
float distance = duration * 0.034 / 2;
return distance;
}
void uploadToThingSpeak(float distance)
{
if (WiFi.status() == WL_CONNECTED)
{
String url = String("http://api.thingspeak.com/update?api_key=") + thingspeak_api_key + "&field1=" + String(distance);
HTTPClient http;
http.begin(url);
int httpCode = http.GET();
http.end();
}
}
void loop()
{
float distance = readDistanceCM();
lcd.setCursor(0, 0);
lcd.print("Distance: ");
lcd.setCursor(10, 0);
lcd.print(distance, 1);
lcd.print("cm");
if (distance < 100)
{
digitalWrite(RED_LED_PIN, HIGH);
digitalWrite(YELLOW_LED_PIN, HIGH);
digitalWrite(GREEN_LED_PIN, HIGH);
digitalWrite(BUZZER_PIN, HIGH);
uploadToThingSpeak(distance);
}
else if (distance < 120)
{
digitalWrite(RED_LED_PIN, LOW);
digitalWrite(YELLOW_LED_PIN, HIGH);
digitalWrite(GREEN_LED_PIN, LOW);
digitalWrite(BUZZER_PIN, LOW);
}
else
{
digitalWrite(RED_LED_PIN, LOW);
digitalWrite(YELLOW_LED_PIN, LOW);
digitalWrite(GREEN_LED_PIN, HIGH);
digitalWrite(BUZZER_PIN, LOW);
}
delay(1000);
}