### 5.6 Slim voedingssysteem #### 5.6.1 Deur van voedingscabine Open de **5.6.1Servo** code met Arduino IDE. ```c #include //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. ![5458448](../media/5458448.png) **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 ![cou63](../media/cou63.gif) **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:** ![cou61](../media/cou61.png) ① 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 ![cou65](../media/cou65.png) ![couy61](../media/couy61.png) Open de **5.6.2 Ultrasonic-Sensor** code met Arduino IDE. ```c #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. ![5458448](../media/5458448.png) **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. ![image-20250417140529545](../media/image-20250417140529545.png) #### 5.6.3 Intelligent voedingssysteem Open de **5.6.3Intelligent-Feeding-System** code met Arduino IDE. ```c #include //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. ![5458448](../media/5458448.png) **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.