5.6 Système d’alimentation intelligent

5.6.1 Porte de la cabine d’alimentation

Ouvrez le code 5.6.1Servo avec 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
  }
}

Choisissez la carte ESP32 Dev Module et le port COM, puis téléchargez le code.

5458448

Résultat du test :

La porte de la cabine d’alimentation s’ouvre lentement puis se ferme.

NOTE : Le servomoteur SG90 peut pivoter de 180°. Comme la boîte d’alimentation est petite, une rotation de 100° est suffisante pour fermer complètement la boîte.

80° : complètement ouvert

120° : à moitié ouvert

180° : fermé

cou63

ATTENTION

Ne mettez pas vos doigts dans la boîte pour éviter de vous pincer !

Ne bloquez pas la porte avec quelque chose pour éviter d’endommager le servomoteur !

La porte est contrôlée par un servomoteur.

Structure interne :

cou61

① Signal (S) : Il reçoit le signal de commande du microcontrôleur.

② Potentiomètre : la partie rétroaction du servomoteur. Il mesure la position de l’arbre de sortie.

③ Carte embarquée (contrôleur interne) : le cœur du servomoteur. Il traite le signal de commande externe et le signal de rétroaction de position et pilote le servomoteur.

④ Moteur CC : la partie exécution. Il produit la vitesse, le couple et la position.

⑤ Système d’engrenages : Il met à l’échelle les sorties du moteur à l’angle de sortie final selon un certain rapport de transmission.

Piloter le servomoteur :

Le signal (S) reçoit le PWM pour contrôler la sortie du servomoteur, et la position de l’arbre de sortie dépend directement du rapport cyclique du PWM.

Par exemple :

A. Si nous envoyons un signal avec une largeur d’impulsion de 1,5 ms au servomoteur, son arbre (corne) tournera à la position médiane (90°) ;

B. Si la largeur d’impulsion = 0,5 ms, l’arbre tourne à son minimum (0°) ;

C. Si la largeur d’impulsion = 2,5 ms, l’arbre tourne à son maximum (180°).

NOTE : L’angle maximal varie selon les types de servomoteurs. Certains sont de 170° tandis que d’autres ne sont que de 90°. Malgré cela, les servomoteurs se déplaceront généralement de moitié (du maximum) s’ils reçoivent un signal avec une largeur d’impulsion de 1,5 ms.

5.6.2 Capteur à ultrasons

cou65

couy61

Ouvrez le code 5.6.2 Ultrasonic-Sensor avec 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");
}

Choisissez la carte ESP32 Dev Module et le port COM, puis téléchargez le code.

5458448

Résultat du test :

Dans ce kit, la plage de détection est comprise entre 3 et 8 cm.

Ouvrez le moniteur série et réglez le débit en bauds sur 9600, le moniteur série affichera la distance entre le module à ultrasons et l’obstacle en face.

image-20250417140529545

5.6.3 Système d’alimentation intelligent

Ouvrez le code 5.6.3Intelligent-Feeding-System avec 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;
}

Choisissez la carte ESP32 Dev Module et le port COM, puis téléchargez le code.

5458448

Résultat du test :

El sistema de alimentación inteligente alimenta a las aves de corral mediante un módulo ultrasónico y un servomotor. El primero detecta la distancia a los animales, mientras que el segundo controla la apertura y el cierre del comedero. Cuando se detecta una mascota cerca del comedero, el servomotor lo abre para alimentarla.