5.6 Slim voedingssysteem
5.6.1 Deur van voedingscabine
Open de 5.6.1Servo code met 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
}
}
Kies het ESP32 Dev Module bord en de COM poort, en upload de code.

Testresultaat:
De deur van de voedingscabine wordt langzaam geopend en vervolgens gesloten.
OPMERKING: SG90 servo kan 180° draaien. Aangezien de voedingsdoos klein is, is 100° rotatie voldoende om de doos volledig te sluiten.
80°: volledig open
120°: half open
180°: gesloten

LET OP
Steek uw vingers niet in de doos om beknelling te voorkomen!
Blokkeer de deur niet met iets om schade aan de servo te voorkomen!
De deur wordt bediend door een servo.
Interne structuur:

① Signaal (S): Het ontvangt het controlesignaal van de microcontroller.
② Potentiometer: het feedbackgedeelte van de Servo. Het meet de positie van de uitgaande as.
③ Ingebouwde printplaat (interne controller): de kern van de Servo. Het verwerkt externe controlesignalen en het feedbacksignaal van de positie en stuurt de Servo aan.
④ DC-motor: het uitvoerende deel. Het levert snelheid, koppel en positie.
⑤ Tandwielsysteem: Het schaalt de uitgangen van de motor naar de uiteindelijke uitgangshoek volgens een bepaalde overbrengingsverhouding.
De Servo aansturen:
Signaal (S) ontvangt PWM om de output van de Servo te regelen, en de positie van de uitgaande as is direct afhankelijk van de duty cycle van PWM.
Bijvoorbeeld:
A. Als we een signaal met een pulsbreedte van 1,5 ms naar de Servo sturen, zal de as (hoorn) naar de middelste positie (90°) draaien;
B. Als de pulsbreedte = 0,5 ms, draait de as naar zijn minimum (0°);
C. Als de pulsbreedte = 2,5 ms, draait de as naar zijn maximum (180°).
OPMERKING: De maximale hoek varieert per type Servo. Sommige zijn 170°, terwijl andere slechts 90° zijn. Desondanks zullen Servo’s meestal de helft (van het maximum) bewegen als ze een signaal met een pulsbreedte van 1,5 ms ontvangen.
5.6.2 Ultrasone sensor


Open de 5.6.2 Ultrasonic-Sensor code met 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");
}
Kies het ESP32 Dev Module bord en de COM poort, en upload de code.

Testresultaat:
In deze kit is het detectiebereik binnen 3~8cm.
Open de seriële monitor en stel de baudrate in op 9600, de seriële monitor zal de afstand tussen de ultrasone module en het obstakel ervoor weergeven.

5.6.3 Intelligent voedingssysteem
Open de 5.6.3Intelligent-Feeding-System code met 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;
}
Kies het ESP32 Dev Module bord en de COM poort, en upload de code.

Testresultaat:
Het slimme voersysteem voert pluimvee op intelligente wijze met behulp van een ultrasone module en een servomotor. De ultrasone module detecteert de afstand tot de dieren, terwijl de servomotor de voerbak opent en sluit. Wanneer een dier zich in de buurt van de voerbak bevindt, opent de servomotor deze om te voeren.