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.

5458448

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

cou63

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:

cou61

① 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

cou65

couy61

Ö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.

5458448

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.

image-20250417140529545

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.

5458448

Testergebnis:

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