### 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. ```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 } } ``` Choisissez la carte **ESP32 Dev Module** et le port **COM**, puis téléchargez le code. ![5458448](../media/5458448.png) **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](../media/cou63.gif) **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](../media/cou61.png) ① 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](../media/cou65.png) ![couy61](../media/couy61.png) Ouvrez le code **5.6.2 Ultrasonic-Sensor** avec 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"); } ``` Choisissez la carte **ESP32 Dev Module** et le port **COM**, puis téléchargez le code. ![5458448](../media/5458448.png) **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](../media/image-20250417140529545.png) #### 5.6.3 Système d'alimentation intelligent Ouvrez le code **5.6.3Intelligent-Feeding-System** avec 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; } ``` Choisissez la carte **ESP32 Dev Module** et le port **COM**, puis téléchargez le code. ![5458448](../media/5458448.png) **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.