Agar lebih mudah dalam menjaga hewan ternak dalam memberi makan hewan, lebih mudah jika kita membuat alat memberi makan otomatis agar tidak pusing memikirkan memberi makan pada hewan ternak, alat ini sudah di atur agar setiap jam 8:00 hewan akan di beri pakan selama 1 menit dan di jam 17:00 akan di beri lagi secara otomatis selama 1 menit, dan anda bisa menambahkan pakan secara manual menggunkan alat tersebut.
Alat-alat yang dibutuhkan :
-ESP8266
-ShieldESP8266
-Servo Motor
-Sensor Jarak (HCSR04)
-Kabel Jumper
Wiring :
Servo Motor :
-Kabel Coklat(GND) > GND (Shield ESP8266)
-Kabel Merah(VCC) > 5v (Shield ESP8266)
-Kabel Kuning(Pin) > D3 (Shield ESP8266)
HCSR04 :
-VCC > 5v (Shield ESP8266)
-Trigger Pin > D1 (Shield ESP8266)
-Echo Pin > D2 (Shield ESP8266)
-GND > GND (Shield ESP8266)
Set Up Blynk :






Codingan :
#define BLYNK_TEMPLATE_ID "TMPL6ivjZK_aX"
#define BLYNK_TEMPLATE_NAME "SENSORSERVO"
#define BLYNK_AUTH_TOKEN "3u4ePh3EbLXcbiCTU3dtLOClbNmjOJB7"
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <Servo.h>
#include <TimeLib.h>
#include <WidgetRTC.h>
#define TRIGGERPIN D1
#define ECHOPIN D2
#define SERVOPIN D3
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "lab-robotika";
char pass[] = "lab-robotika";
BlynkTimer timer;
WidgetRTC rtc;
Servo myServo;
bool hasFedMorning = false;
bool hasFedEvening = false;
unsigned long startTime = 0;
bool isServoRunning = false;
int servoPosition = 0; // Posisi default servo
// Fungsi untuk mengatur posisi servo dari aplikasi Blynk
BLYNK_WRITE(V1) {
int buttonState = param.asInt();
if (buttonState == 1) { // Jika tombol ditekan
myServo.write(180); // Servo bergerak ke posisi 180 derajat
Serial.println("Servo opened (180 degrees)");
} else { // Jika tombol dilepas
myServo.write(0); // Servo kembali ke posisi 0 derajat
Serial.println("Servo closed (0 degrees)");
}
}
// Fungsi untuk mengirim jarak ke aplikasi Blynk
void sendDistanceToBlynk() {
long duration, distance;
digitalWrite(TRIGGERPIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGGERPIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGERPIN, LOW);
duration = pulseIn(ECHOPIN, HIGH);
distance = duration * 0.034 / 2;
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
Blynk.virtualWrite(V0, distance);
}
void runServoForOneMinute() {
unsigned long currentTime = millis();
if (currentTime - startTime < 60000) { // Jika waktu berjalan kurang dari 1 menit
myServo.write(180); // Gerakkan servo ke posisi 180 derajat
delay(500); // Tunggu 0,5 detik
myServo.write(0); // Kembalikan servo ke posisi 0 derajat
delay(500); // Tunggu 0,5 detik
} else {
isServoRunning = false; // Hentikan gerakan servo
Serial.println("Servo stopped after 1 minute.");
}
}
// Fungsi untuk memeriksa waktu
void checkFeedingTime() {
int currentHour = hour();
int currentMinute = minute();
// Jika waktu 08:00 dan belum memberi makan
if (currentHour == 8 && currentMinute == 0 && !hasFedMorning) {
startTime = millis();
isServoRunning = true;
hasFedMorning = true;
Serial.println("Servo started at 08:00.");
}
// Reset flag pagi setelah 08:01
if (currentHour == 8 && currentMinute > 1) {
hasFedMorning = false;
}
// Jika waktu 17:00 dan belum memberi makan
if (currentHour == 17 && currentMinute == 0 && !hasFedEvening) {
startTime = millis();
isServoRunning = true;
hasFedEvening = true; // Tandai pemberian makan sore selesai
Serial.println("Servo started at 17:00.");
}
// Reset flag sore setelah 17:01
if (currentHour == 17 && currentMinute > 1) {
hasFedEvening = false;
}
}
// Fungsi sinkronisasi waktu
BLYNK_CONNECTED() {
Blynk.syncAll(); // Sinkronisasi waktu
rtc.begin(); // Mulai RTC bawaan Blynk
}
void setup() {
Serial.begin(9600);
pinMode(TRIGGERPIN, OUTPUT);
pinMode(ECHOPIN, INPUT);
myServo.attach(SERVOPIN);
myServo.write(0); // Posisi awal servo
Blynk.begin(auth, ssid, pass);
Serial.println("Blynk connected");
timer.setInterval(60000L, checkFeedingTime); // Periksa waktu setiap 1 menit
timer.setInterval(1000L, sendDistanceToBlynk); // Kirim jarak setiap 1 detik
timer.setInterval(1000L, []() {
if (isServoRunning) {
runServoForOneMinute();
}
});
}
void loop() {
Blynk.run();
timer.run();
}
Selamat Mencoba..!!
Kalau ingin bertanya lebih lanjut silahkan hubungi admin ya..!!
Contact Here :



