Alat Memberi Pakan Otomatis
Exif_JPEG_420

Alat Memberi Pakan Otomatis

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 :