Gudang Ilmu: June 2024

Saturday, 29 June 2024

Membuat Tong Sampah Otomatis Bisa Berbicara

 


Alat dan Bahan yang Dibutuhkan :

  1. Arduino Uno
  2. Sensor Ultrasonic HC-SR04
  3. Servo Motor
  4. DFPlayer Mini
  5. Speaker kecil
  6. Kabel jumper
  7. Breadboard (opsional)
  8. Sumber daya eksternal (jika diperlukan)

Skema Rangkaian :

1. Sensor Ultrasonic HC-SR04

  • VCC -> Arduino 5V
  • Trigger -> Arduino pin 8
  • Echo -> Arduino pin 9
  • GND -> Arduino GND

2. DFPlayer Mini

  • VCC -> Arduino 5V
  • GND -> Arduino GND
  • RX -> Arduino pin 5 (TX dari SoftwareSerial)
  • TX -> Arduino pin 6 (RX dari SoftwareSerial)

3. Servo

  • Signal -> Arduino pin 7
  • VCC -> Arduino 5V atau sumber daya eksternal
  • GND -> Arduino GND

Koding Arduino :


#include <HCSR04.h>
#include <Servo.h>
#include <DFPlayerMini_Fast.h>
#include <SoftwareSerial.h>

// Inisialisasi komunikasi serial untuk DFPlayer Mini
SoftwareSerial mySerial(5, 6); // RX, TX

// Inisialisasi sensor ultrasonic
UltraSonicDistanceSensor distanceSensor(8, 9);  // Sensor menggunakan pin digital 8 dan 9

// Inisialisasi variabel untuk menyimpan jarak
int jarak = 0;

// Inisialisasi servo
Servo myservo; 

// Inisialisasi DFPlayer Mini
DFPlayerMini_Fast myMP3;

void setup() {
  // Menyambungkan servo ke pin 7 dan mengatur posisi awal ke 0 derajat
  myservo.attach(7);
  myservo.write(0);  
  
  // Memulai komunikasi serial
  Serial.begin(9600);
  mySerial.begin(9600);

  // Memulai DFPlayer Mini
  myMP3.begin(mySerial, true);

  // Mengatur volume DFPlayer Mini ke maksimum (25)
  Serial.println("Setting volume to max");
  myMP3.volume(25);
}

void loop() {
  // Membaca jarak dari sensor ultrasonic
  jarak = distanceSensor.measureDistanceCm();
  
  // Jika jarak lebih dari 0 dan kurang dari 50 cm
  if (jarak > 0 && jarak < 50) {
    // Memutar servo ke 150 derajat untuk membuka tutup tong sampah
    myservo.write(150); 
    delay(500);
    
    // Selama jarak masih dalam rentang 0-50 cm, terus membaca jarak
    while (jarak > 0 && jarak < 50) {
      jarak = distanceSensor.measureDistanceCm();
      delay(100);
    }
    
    // Menunggu 2 detik sebelum memutar audio
    delay(2000);
    
    // Memutar audio file ke-1
    myMP3.play(1);
    delay(3000);
    
    // Mengembalikan servo ke posisi 0 derajat untuk menutup tutup tong sampah
    myservo.write(0); 
  }
  
  // Delay 500 ms sebelum membaca jarak lagi
  delay(500);
}


Penjelasan Kode

  1. Inisialisasi dan Deklarasi:
    • Mengimpor library yang dibutuhkan: HCSR04.hServo.hDFPlayerMini_Fast.hSoftwareSerial.h.
    • Membuat objek mySerial untuk komunikasi serial dengan DFPlayer Mini.
    • Mengatur pin untuk sensor ultrasonic menggunakan UltraSonicDistanceSensor distanceSensor(8, 9);.
    • Membuat variabel jarak untuk menyimpan jarak yang diukur.
    • Membuat objek myservo untuk servo motor.
    • Membuat objek myMP3 untuk DFPlayer Mini.
  2. Setup:
    • Menyambungkan servo ke pin 7 dan mengatur posisi awal ke 0 derajat.
    • Memulai komunikasi serial dengan baud rate 9600.
    • Memulai DFPlayer Mini.
    • Mengatur volume DFPlayer Mini ke maksimum.
  3. Loop:
    • Membaca jarak dari sensor ultrasonic.
    • Mengecek apakah jarak dalam rentang 0-50 cm.
    • Memutar servo ke 150 derajat untuk membuka tutup tong sampah.
    • Selama jarak masih dalam rentang, terus membaca jarak.
    • Menunggu 2 detik sebelum memutar audio.
    • Memutar audio file pertama.
    • Menutup kembali tutup tong sampah dengan memutar servo ke posisi 0 derajat.



Sumber: dwiarsana

Membuat IoT Pembaca Suhu Akuarium dengan DS18B20, LCD 16×2, Telegram dan Wemos D1 Mini


 

Pembaca suhu akuarium dengan sensor DS18B20, LCD 16×2, dan Wemos D1 Mini. Proyek ini juga bisa mengirimkan data suhu ke Telegram saat kita kirim pesan “lapor”. 

Alat dan Bahan yang Digunakan :

  1. Wemos D1 Mini – Mikrokontroler berbasis ESP8266 dengan konektivitas WiFi.
  2. Sensor Suhu DS18B20 – Sensor suhu digital dengan komunikasi OneWire.
  3. LCD 16×2 dengan I2C Module – Display LCD yang mudah dihubungkan dengan I2C.
  4. Breadboard dan Kabel Jumper – Untuk menyambungkan komponen-komponen.
  5. Resistor 4.7kΩ – Untuk pull-up pada data pin DS18B20.

Skema Koneksi

  1. DS18B20:
    • VCC ke 3.3V
    • GND ke GND
    • Data ke D4 (GPIO2) dengan resistor pull-up 4.7kΩ ke 3.3V
  2. LCD 16×2:
    • VCC ke 5V
    • GND ke GND
    • SDA ke D2 (GPIO4)
    • SCL ke D1 (GPIO5)

Library yang Dibutuhkan

  1. OneWire
  2. DallasTemperature
  3. LiquidCrystal_I2C
  4. UniversalTelegramBot
  5. NTPClient
  6. WiFiUdp

Pastikan  sudah menginstal semua library ini melalui Library Manager di Arduino IDE.

Kode Program

.Berikut adalah kode lengkap beserta penjelasannya:


#include <ESP8266WiFi.h> // Library untuk koneksi WiFi
#include <WiFiClientSecure.h> // Library untuk koneksi aman
#include <UniversalTelegramBot.h> // Library untuk Telegram Bot
#include <LiquidCrystal_I2C.h> // Library untuk LCD I2C
#include <OneWire.h> // Library untuk komunikasi OneWire
#include <DallasTemperature.h> // Library untuk sensor suhu Dallas
#include <NTPClient.h> // Library untuk NTP client
#include <WiFiUdp.h> // Library untuk UDP WiFi

// Ganti dengan kredensial jaringan Anda
const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";

// Inisialisasi Telegram BOT
#define BOTtoken "your_BOTtoken"  // Token Bot Anda (Dapatkan dari Botfather)
WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);

// Inisialisasi NTP client untuk mendapatkan waktu
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", 25200, 60000); // 25200 untuk WIB, sesuaikan dengan zona waktu Anda

// Pin untuk sensor DS18B20
#define ONE_WIRE_BUS D4
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

// Inisialisasi LCD
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C 0x27, 16 kolom dan 2 baris

// Variabel untuk menyimpan data suhu dan waktu
float temperature;
String formattedTime;
String formattedDate;
bool reportedHot = false;
bool reportedCold = false;

void setup() {
  // Memulai komunikasi serial untuk debugging
  Serial.begin(115200);
  
  // Inisialisasi LCD
  lcd.begin();
  lcd.backlight(); // Menyalakan backlight LCD

  // Menghubungkan ke Wi-Fi
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("WiFi connected");
  
  // Inisialisasi NTP client
  timeClient.begin();
  
  // Inisialisasi sensor suhu
  sensors.begin();
  
  // Menyiapkan Telegram bot
  client.setInsecure();
}

void loop() {
  // Memperbarui waktu
  timeClient.update();
  formattedTime = timeClient.getFormattedTime();
  formattedDate = String(timeClient.getEpochTime());

  // Meminta pembacaan suhu dari DS18B20
  sensors.requestTemperatures();
  temperature = sensors.getTempCByIndex(0);

  // Menampilkan suhu dan waktu di LCD
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Temp: ");
  lcd.print(temperature);
  lcd.print(" C");
  lcd.setCursor(0, 1);
  lcd.print("Time: ");
  lcd.print(formattedTime);

  // Memeriksa suhu dan menampilkan pesan jika terlalu panas atau dingin
  if (temperature > 25) {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Temp: ");
    lcd.print(temperature);
    lcd.print(" C");
    lcd.setCursor(0, 1);
    lcd.print("Suhu terlalu panas");
    
    if (!reportedHot) {
      bot.sendMessage("your_chat_id", "Peringatan: Suhu terlalu panas! Suhu saat ini: " + String(temperature) + " C", "");
      reportedHot = true;
      reportedCold = false; // Reset laporan suhu dingin
    }
  } else if (temperature < 15) {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Temp: ");
    lcd.print(temperature);
    lcd.print(" C");
    lcd.setCursor(0, 1);
    lcd.print("Suhu terlalu dingin");
    
    if (!reportedCold) {
      bot.sendMessage("your_chat_id", "Peringatan: Suhu terlalu dingin! Suhu saat ini: " + String(temperature) + " C", "");
      reportedCold = true;
      reportedHot = false; // Reset laporan suhu panas
    }
  } else {
    reportedHot = false; // Reset laporan suhu panas
    reportedCold = false; // Reset laporan suhu dingin
  }

  // Memeriksa pesan baru di Telegram
  int numNewMessages = bot.getUpdates(bot.last_message_received + 1);
  while (numNewMessages) {
    handleNewMessages(numNewMessages);
    numNewMessages = bot.getUpdates(bot.last_message_received + 1);
  }
  
  delay(1000); // Jeda 1 detik sebelum loop berikutnya
}

void handleNewMessages(int numNewMessages) {
  for (int i = 0; i < numNewMessages; i++) {
    String chat_id = String(bot.messages[i].chat_id); // Mendapatkan chat ID dari pesan
    String text = bot.messages[i].text; // Mendapatkan teks dari pesan
    
    // Jika pesan adalah "lapor", kirimkan data suhu dan waktu
    if (text == "lapor") {
      String message = "Suhu: " + String(temperature) + " C\nWaktu: " + formattedTime + "\nTanggal: " + formattedDate;
      bot.sendMessage(chat_id, message, ""); // Mengirim pesan balasan ke Telegram
    }
  }
}


Penjelasan 

  1. Inisialisasi Library dan Variabel:
    • ESP8266WiFi.hWiFiClientSecure.hUniversalTelegramBot.hLiquidCrystal_I2C.hOneWire.hDallasTemperature.hNTPClient.h, dan WiFiUdp.h adalah library yang diperlukan untuk mengatur WiFi, Telegram bot, LCD, sensor suhu DS18B20, dan mendapatkan waktu dari server NTP.
    • ssid dan password digunakan untuk menyimpan kredensial WiFi.
    • BOTtoken adalah token untuk bot Telegram.
    • timeClient digunakan untuk mengatur NTP client dengan zona waktu yang disesuaikan.
    • oneWire mengatur komunikasi dengan sensor DS18B20.
    • lcd mengatur komunikasi dengan LCD melalui I2C.
  2. Fungsi setup:
    • Memulai komunikasi serial untuk debugging.
    • Menginisialisasi LCD dan mengaktifkan backlight.
    • Menghubungkan ke jaringan WiFi dan menunggu hingga koneksi berhasil.
    • Menginisialisasi NTP client dan sensor suhu.
    • Menyiapkan koneksi aman untuk Telegram bot.
  3. Fungsi loop:
    • Memperbarui waktu dari server NTP.
    • Meminta data suhu dari sensor DS18B20.
    • Menampilkan suhu dan waktu di LCD.
    • Memeriksa pesan baru dari Telegram bot dan memprosesnya jika ada.
  4. Fungsi handleNewMessages:
    • Memproses pesan baru yang diterima oleh bot Telegram.
    • Jika pesan adalah “lapor”, bot akan mengirimkan data suhu dan waktu kembali ke pengirim pesan.

Sumber : duwiarsana