Utente:Caldaia fotonica/Dispenser per mangime pesci con Arduino
Questa risorsa è stata scritta dagli studenti dell'Istituto ITIS "Enrico Mattei" di Urbino, della classe 3B/EN nell'a.s. 2021/2022, all'interno del corso di Sistemi Elettronici 1.
Per favore, prima di apportare modifiche, attendi sino alla fine dell'anno scolastico (termina il 30 giugno 2022) oppure contatta il docente di riferimento Giacomo Alessandroni nel caso venissero rilevati contenuti non in linea con le linee guida della comunità. Se leggi questo avviso ad anno scolastico concluso puoi rimuoverlo. |
Dispenser per mangime pesci, questo progetto ha il fine di accendere e dare da mangiare ai pesci nel acquario ad un determinato orario ed di misurare la temperatura in esso.
Sensori e attuatori
[modifica]in questo progetto ho utilizzato: un modulo RTC che fornisce informazioni su data e orario otre a mesi, giorni e anni; il sensore di temperatura LM35; un servomotore e un relè.
Codice
[modifica]
#include <Servo.h> //includo la libreria per il servo
#include <DS3231.h> //includo la libreria per il modulo RTC
DS3231 rtc(SDA, SCL);
Time t;
Servo myservo;
float temp;
int tempPin = 0;
int pos = 0; //definisco la posizione (pos) con 0 gradi
int giù = 5000; //definisco il tempo in cui il servo deve mantenere la posizione
int servo = 12; //definisco il pin del servo
int Relay = 10; //definisco il pin del relè
const int OnHour = 13; //setto le ore in cui svolgere un azione (ore e secondi)
const int OnMin = 30;
const int OffHour = 23; //setto le ore in cui finisce un azione (ore e secondi)
const int OffMin = 00;
void setup() {
Serial.begin(9600);
myservo.attach(servo);
rtc.begin();
pinMode(Relay, OUTPUT); //metto il pin del relè come output
digitalWrite(Relay, LOW); //spengo il relè
}
void loop() {
temp = analogRead(tempPin); //leggo i dati
temp = temp * 0.48828125; //prendo i dati e li moltiplico così da ottenre la temperatura
Serial.print("temperatura:");
Serial.print(temp); //scrivo la temperatura sul monitor seriale
delay(1000);
t = rtc.getTime(); //ricavo il tempo dal modulo
Serial.print(t.hour); // scrivo ore e minuti sul MONITOR SERIALE
Serial.print(" hour(s), ");
Serial.print(t.min);
Serial.print(" minute(s)");
Serial.println(" ");
delay (1000);
if(t.hour == OnHour && t.min == OnMin){ //se le ore e minuti corrispondo con la sveglia esegue lazione
for (pos = 0; pos <= 180; pos += 1) { //movimento del servomotore
myservo.write(pos);
delay (giù);
for (pos = 180; pos >= 0; pos -= 1)//movimento contrario al primo
myservo.write(pos);
}
digitalWrite(Relay,HIGH); //relè acceso
Serial.println("Sa"); //scrivo servo acceso
Serial.println("La"); //scrivo luce acceso
}
else if(t.hour == OffHour && t.min == OffMin){ //invece se minuti ed ore corrispondono a quelle di fini azione spengono tutto
digitalWrite(Relay,LOW); //relè spento
Serial.println("Ls"); //scrivo luce spento
}
}
Espansioni suggerite
[modifica]Prossimamente andrò ad inserire un display così da visualizzare i dati, come temperatura e ora.