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.

#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
  }
}

Elija la placa ESP32 Dev Module y el puerto COM, y suba el código.

5458448

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

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

① 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

couy61

Abra el código 5.6.2 Ultrasonic-Sensor con 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");
}

Elija la placa ESP32 Dev Module y el puerto COM, y suba el código.

5458448

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

5.6.3 Sistema de Alimentación Inteligente

Abra el código 5.6.3Intelligent-Feeding-System con 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;
}

Elija la placa ESP32 Dev Module y el puerto COM, y suba el código.

5458448

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!