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.

5458448

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

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

① 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

couy61

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.

5458448

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

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.

5458448

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.