5.6 Intelligentes Fütterungssystem
5.6.1 Tür der Fütterungskabine
Öffnen Sie den Code 5.6.1Servo mit Arduino IDE.
#include <ESP32Servo.h> //Import the library of servo
Servo myservo; // create servo object to control a servo
// 16 servo objects can be created on the ESP32
int pos = 0; // variable to store the servo position
// Recommended PWM GPIO pins on the ESP32 include 2,4,12-19,21-23,25-27,32-33
int servoPin = 26;
void setup() {
Serial.begin(9600);
myservo.attach(servoPin); // attaches the servo on pin 26 to the servo object
myservo.write(180);
delay(2000);
}
void loop() {
for (pos = 80; pos <= 179; pos += 1) { // goes from 0 degrees to 80 degrees
// in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
for (pos = 180; pos >= 81; pos -= 1) { // goes from 80 degrees to 0 degrees
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
}
Wählen Sie das Board ESP32 Dev Module und den COM-Port und laden Sie den Code hoch.

Testergebnis:
Die Tür der Fütterungskabine wird langsam geöffnet und dann geschlossen.
HINWEIS: Das SG90-Servo kann sich um 180° drehen. Da die Futterbox klein ist, reichen 100° Drehung aus, um die Box vollständig zu schließen.
80°: vollständig geöffnet
120°: halb geöffnet
180°: geschlossen

ACHTUNG
Stecken Sie Ihre Finger nicht in die Box, um ein Einklemmen zu vermeiden!
Blockieren Sie die Tür nicht mit etwas, um eine Beschädigung des Servos zu vermeiden!
Die Tür wird von einem Servo gesteuert.
Interne Struktur:

① Signal (S): Es empfängt das Steuersignal vom Mikrocontroller.
② Potentiometer: der Rückkopplungsteil des Servos. Es misst die Position der Abtriebswelle.
③ Eingebettete Platine (Interner Controller): der Kern des Servos. Es verarbeitet externe Steuersignale und das Positionssignal und steuert das Servo.
④ Gleichstrommotor: der Ausführungsteil. Er gibt Geschwindigkeit, Drehmoment und Position aus.
⑤ Getriebesystem: Es skaliert die Ausgänge des Motors auf den endgültigen Ausgangswinkel gemäß einem bestimmten Übersetzungsverhältnis.
Servo ansteuern:
Signal (S) empfängt PWM, um den Ausgang des Servos zu steuern, und die Position der Abtriebswelle hängt direkt vom Tastverhältnis des PWM ab.
Zum Beispiel:
A. Wenn wir ein Signal mit einer Impulsbreite von 1,5 ms an das Servo senden, dreht sich seine Welle (Horn) in die Mittelposition (90°);
B. Wenn die Impulsbreite = 0,5 ms, dreht sich die Welle auf ihr Minimum (0°);
C. Wenn die Impulsbreite = 2,5 ms, dreht sich die Welle auf ihr Maximum (180°).
HINWEIS: Der maximale Winkel variiert je nach Servotyp. Einige sind 170°, während andere nur 90° betragen. Trotzdem bewegen sich Servos normalerweise um die Hälfte (des Maximums), wenn sie ein Signal mit einer Impulsbreite von 1,5 ms empfangen.
5.6.2 Ultraschallsensor


Öffnen Sie den Code 5.6.2 Ultrasonic-Sensor mit Arduino IDE.
#define Trigpin 12 //connect trig to io12
#define Echopin 13 //connect echo to io13
int duration,distance;
void setup(){
Serial.begin(9600); //Set the baud rate to 9600
pinMode(Trigpin,OUTPUT); //set trig pin to output mode
pinMode(Echopin,INPUT); //set echo pin to input mode
}
void loop(){
digitalWrite(Trigpin,LOW);
delayMicroseconds(2);
digitalWrite(Trigpin,HIGH);
delayMicroseconds(10); //Trigger the trig pin via a high level lasting at least 10us
digitalWrite(Trigpin,LOW);
duration = pulseIn(Echopin,HIGH); //the time of high level at echo pin
distance = duration/58; //convert into distance(cm)
delay(50);
Serial.print("distance:"); //Serial monitor prints the value
Serial.print(distance);
Serial.println("cm");
}
Wählen Sie das Board ESP32 Dev Module und den COM-Port und laden Sie den Code hoch.

Testergebnis:
In diesem Kit liegt der Erfassungsbereich zwischen 3 und 8 cm.
Öffnen Sie den seriellen Monitor und stellen Sie die Baudrate auf 9600 ein. Der serielle Monitor zeigt dann den Abstand zwischen dem Ultraschallmodul und dem Hindernis davor an.

5.6.3 Intelligentes Fütterungssystem
Öffnen Sie den Code 5.6.3Intelligent-Feeding-System mit Arduino IDE.
#include <ESP32Servo.h> //Import the library of servo on ESP32 board
Servo myservo; // create servo object to control a servo
// 16 servo objects can be created on the ESP32
#define TrigPin 12 //connect trig to D12
#define EchoPin 13 //connect echo to D13
#define ServoPin 26
int duration,distance;
void setup(){
Serial.begin(9600); //Set the baud rate to 9600
pinMode(TrigPin,OUTPUT); //set trig pin to output mode
pinMode(EchoPin,INPUT); //Set echo pin to input mode
myservo.attach(ServoPin); // attaches the servo on pin 26 to the servo object
}
void loop(){
Serial.println(getDistance());
//When the distance is detected within 2~7cm, open the feeding box. Or else, close.
if (getDistance() >= 2 && 7 >= getDistance()) {
//Servo rotates to 80° to open the box
myservo.write(80);
delay(500);
}
else{
myservo.write(180);
delay(500);
}
}
//Put the gotten distance in a function
float getDistance() {
digitalWrite(TrigPin,LOW);
delayMicroseconds(2);
digitalWrite(TrigPin,HIGH);
delayMicroseconds(10); //Trigger the trig pin via a high level lasting at least 10us
digitalWrite(TrigPin,LOW);
duration = pulseIn(EchoPin,HIGH); //the time of high level at echo pin
distance = duration/58; //convert into distance(cm)
delay(50);
return distance;
}
Wählen Sie das Board ESP32 Dev Module und den COM-Port und laden Sie den Code hoch.

Testergebnis:
Das intelligente Fütterungssystem füttert Hausgeflügel intelligent über ein Ultraschallmodul