### 5.6 Sistema de Alimentación Inteligente #### 5.6.1 Puerta de la cabina de alimentación Abra el código **5.6.1Servo** con 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 } } ``` Elija la placa **ESP32 Dev Module** y el puerto **COM**, y suba el código. ![5458448](../media/5458448.png) **Resultado de la prueba:** La puerta de la cabina de alimentación se abre lentamente y luego se cierra. **NOTA:** El servo SG90 puede girar 180°. Como la caja de alimentación es pequeña, 100° de rotación son suficientes para cerrar completamente la caja. 80°: completamente abierto 120°: medio abierto 180°: cerrado ![cou63](../media/cou63.gif) **ATENCIÓN** ¡No meta los dedos en la caja para evitar pellizcos! ¡No bloquee la puerta con nada para evitar dañar el servo! La puerta está controlada por un servo. **Estructura interna:** ![cou61](../media/cou61.png) ① Señal (S): Recibe la señal de control del microcontrolador. ② Potenciómetro: la parte de retroalimentación del Servo. Mide la posición del eje de salida. ③ Placa integrada (controlador interno): el núcleo del Servo. Procesa la señal de control externa y la señal de retroalimentación de posición y acciona el Servo. ④ Motor de CC: la parte de ejecución. Emite velocidad, par y posición. ⑤ Sistema de engranajes: Escala las salidas del motor al ángulo de salida final de acuerdo con una cierta relación de transmisión. **Accionar el Servo:** La señal (S) recibe PWM para controlar la salida del Servo, y la posición del eje de salida depende directamente del ciclo de trabajo del PWM. **Por ejemplo:** A. Si enviamos una señal con un ancho de pulso de 1.5ms al Servo, su eje (cuerno) girará a la posición media (90°); B. Si el ancho de pulso = 0.5ms, el eje gira a su mínimo (0°); C. Si el ancho de pulso = 2.5ms, el eje gira a su máximo (180°). **NOTA: El ángulo máximo varía según el tipo de Servos. Algunos son de 170° mientras que otros son solo de 90°. A pesar de esto, los Servos generalmente se moverán la mitad (del máximo) si reciben una señal con un ancho de pulso de 1.5ms.** #### 5.6.2 Sensor Ultrasónico ![cou65](../media/cou65.png) ![couy61](../media/couy61.png) Abra el código **5.6.2 Ultrasonic-Sensor** con 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"); } ``` Elija la placa **ESP32 Dev Module** y el puerto **COM**, y suba el código. ![5458448](../media/5458448.png) **Resultado de la prueba:** En este kit, el rango de detección está entre 3 y 8 cm. Abra el monitor serie y configure la velocidad de transmisión a 9600, el monitor serie mostrará la distancia entre el módulo ultrasónico y el obstáculo frontal. ![image-20250417140529545](../media/image-20250417140529545.png) #### 5.6.3 Sistema de Alimentación Inteligente Abra el código **5.6.3Intelligent-Feeding-System** con 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; } ``` Elija la placa **ESP32 Dev Module** y el puerto **COM**, y suba el código. ![5458448](../media/5458448.png) **Resultado de la prueba:** El sistema de alimentación inteligente alimenta aves de corral domésticas mediante un módulo ultrasónico y un servo. El primero detecta la distancia a los animales mientras que el segundo controla la apertura o el cierre de la caja de alimentación. Cuando se detecta una mascota cerca de la caja, el servo la abre para alimentarla. **ATENCIÓN** ¡No meta los dedos en la caja para evitar pellizcos!