Alat Untuk Memberi Pakan Secara Otomatis
Exif_JPEG_420

Alat Untuk Memberi Pakan Secara Otomatis

Agar menjaga hewan ternak menjadi lebih mudah, ada baiknya kita membuat alat memberi makan secara otomatis supaya tidak repot memikirkan untuk memberi makan pada hewan ternak, dan alat ini sudah diatur setiap jam 08:00 dan jam 17:00 alat akan otomatis memberi pakan kepada hewan berlangsung lama 1 menit, dan bisa memberi pakan secara manual juga melalui alat tersebut.

Alat yang diperlukan :

  • Servo
  • Kabel Jumper
  • Sensor HC-SR04
  • ESP8266
  • Shield ESP8266

Wiring

Servo :

  • Kabel Coklat (GND) = GND (Shield ESP8266)
  • Kabel Merah (VCC) = 5V (Shield ESP8266)
  • Kabel Kuning (Pin) = D3 (Shield ESP8266)

HC-SR04 :

  • VCC = VUSB (Shield ESP8266)
  • Trig = D2 (Shield ESP8266)
  • Echo = D1 (Shield ESP8266)
  • GND = GND (Shield ESP8266)

Setup di Blynk Cloud :

Codingan di Arduino IDE :

#define BLYNK_TEMPLATE_ID "TMPL6o5-FzMjp"
#define BLYNK_TEMPLATE_NAME "SERVO"
#define BLYNK_AUTH_TOKEN "kvUbBC5WeOnqk-iDNVUys4168TC-HiZJ"

#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[] = "wifi-iot";
char pass[] = "password-iot";

BlynkTimer timer;
WidgetRTC rtc;
Servo myServo;

bool hasFedMorning = false;
bool hasFedEvening = false;

unsigned long startTime = 0;
bool isServoRunning = false;

int servoPosition = 0;

BLYNK_WRITE(V1) {
  int buttonState = param.asInt();
  if (buttonState ==1) {
    myServo.write(180);
    Serial.println("Servo opened (180 degrees)");
  } else {
    myServo.write(0);
    Serial.println("Servo closed (0 degrees)");
  }
}

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){
    myServo.write(180);
    delay(500);
    myServo.write(0);
    delay(0);
  } else {
    isServoRunning = false;
    Serial.println("Servo stopped after 1 minute");
  }
}

void checkFeedingTime() {
  int currentHour = hour();
  int currentMinute = minute();

  if (currentHour == 8 && currentMinute == 0 && !hasFedMorning) {
    startTime = millis();
    isServoRunning = true;
    hasFedMorning = true;
    Serial.println("Servo started at 08:00.");
  }

  if (currentHour == 8 && currentMinute > 1) {
    hasFedMorning = false;
  }

  if (currentHour == 17 && currentMinute == 0 && !hasFedEvening) {
    startTime = millis();
    isServoRunning = true;
    hasFedEvening = true;
    Serial.println("Servo started at 17:00.");
  }

  if (currentHour == 17 && currentMinute > 1) {
    hasFedEvening = false;
  }
}

BLYNK_CONNECTED() {
  Blynk.syncAll();
  rtc.begin();
}

void setup() {
  Serial.begin(9600);

  pinMode(TRIGGERPIN, OUTPUT);
  pinMode(ECHOPIN, INPUT);

  myServo.attach(SERVOPIN);
  myServo.write(0);

  Blynk.begin(auth, ssid, pass);
  Serial.println("Blynk connected");

  timer.setInterval(60000L, checkFeedingTime);
  timer.setInterval(1000L, sendDistanceToBlynk);
  timer.setInterval(1000L, []() {
    runServoForOneMinute();
  });
}

void loop() {
  Blynk.run();
  timer.run();
}

Silahkan Mencoba!!

Untuk mengetahui lebih lanjut mengenai Source Code Projek Kami atau pertanyaan lainnya seputar Arduino dan Jasa, teman teman dapat menghubungi Sosial Media kami sebagai berikut

Contact Here :