5.6 Sistema di Alimentazione Intelligente
5.6.1 Sportello della cabina di alimentazione
Aprire il codice 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
}
}
Scegliere la scheda ESP32 Dev Module e la porta COM, quindi caricare il codice.

Risultato del test:
Lo sportello della cabina di alimentazione si apre lentamente e poi si chiude.
NOTA: Il servo SG90 può ruotare di 180°. Poiché la scatola di alimentazione è piccola, una rotazione di 100° è sufficiente per chiudere completamente la scatola.
80°: completamente aperto
120°: semiaperto
180°: chiuso

ATTENZIONE
Non mettere le dita nella scatola per evitare di pizzicarsi!
Non bloccare lo sportello con qualcosa per evitare di danneggiare il servo!
Lo sportello è controllato da un servo.
Struttura interna:

① Segnale (S): Riceve il segnale di controllo dal microcontrollore.
② Potenziometro: la parte di feedback del Servo. Misura la posizione dell’albero di uscita.
③ Scheda incorporata (Controller interno): il cuore del Servo. Elabora il segnale di controllo esterno e il segnale di feedback della posizione e aziona il Servo.
④ Motore DC: la parte di esecuzione. Fornisce velocità, coppia e posizione.
⑤ Sistema di ingranaggi: Scala le uscite dal motore all’angolo di uscita finale secondo un certo rapporto di trasmissione.
Azionare il Servo:
Il segnale (S) riceve il PWM per controllare l’uscita del Servo, e la posizione dell’albero di uscita dipende direttamente dal duty cycle del PWM.
Per esempio:
A. Se inviamo un segnale con larghezza di impulso di 1.5ms al Servo, il suo albero (corno) ruoterà nella posizione centrale (90°);
B. Se la larghezza di impulso = 0.5ms, l’albero ruota al suo minimo (0°);
C. Se la larghezza di impulso = 2.5ms, l’albero ruota al suo massimo (180°).
NOTA: L’angolo massimo varia a seconda del tipo di Servo. Alcuni sono 170° mentre altri sono solo 90°. Nonostante ciò, i Servo di solito si muoveranno della metà (del massimo) se ricevono un segnale con larghezza di impulso di 1.5ms.
5.6.2 Sensore Ultrasonico


Aprire il codice 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");
}
Scegliere la scheda ESP32 Dev Module e la porta COM, quindi caricare il codice.

Risultato del test:
In questo kit, il raggio di rilevamento è compreso tra 3 e 8 cm.
Aprire il monitor seriale e impostare la velocità di trasmissione a 9600, il monitor seriale visualizzerà la distanza tra il modulo ultrasonico e l’ostacolo di fronte.

5.6.3 Sistema di Alimentazione Intelligente
Aprire il codice 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;
}
Scegliere la scheda ESP32 Dev Module e la porta COM, quindi caricare il codice.

Risultato del test:
Il sistema di alimentazione intelligente nutre il pollame domestico in modo efficiente grazie a un modulo a ultrasuoni e un servomotore. Il modulo rileva la distanza dagli animali, mentre il servomotore controlla l’apertura e la chiusura della mangiatoia. Quando viene rilevato un animale nelle vicinanze, il servomotore apre la mangiatoia per consentirne l’alimentazione.