January 9, 2023
Description
Ciao a tutti. Mi sono permesso di fondere insieme questi due progetti , uno perché è comodo l'attacco a vite per bottiglie in PET e due perché quello mini faceva al caso mio per un piccolo acquario.
Hello everybody. I allowed myself to merge these two projects together, one because the screw connection for PET bottles is convenient and two because the mini one was right for me for a small aquarium.
https://www.thingiverse.com/thing:2761061 https://www.thingiverse.com/thing:3729421
Ho modificato anche la parte software aggiungendo un sensore di luminosità. Il timer interno di Arduino non è costante senza un modulo RTC, quindi ho collegato il sensore di luminosità vicino alla lampada, quando si accende attiva un timer arduino di 10 minuti e poi da da mangiare ai pesci. Un contatore verifica che succeda una sola volta al giorno fino al buio (giorno successivo).
I also modified the software part by adding a brightness sensor. Arduino's internal timer is not constant without an RTC module, so I connected the brightness sensor near the lamp, when it lights up it activates an arduino timer of 10 minutes and then to feed the fish. A counter checks that it happens only once a day until dark (next day).
// FISH FEEDER MINI BY FAU
// Caricato su mini fish feeder il 29 marzo 2020 durante la quarantena per Covid-19
// Versione definitiva e attiva
// 1 sola attivazione giornaliera data dalla luminosità della lampada accesa o spenta
// dopo 10 minuti circa dall'accensione si ativa il feeder
Servo myservo;
int count_of_terms = 0;
int count_of_doses = 2; // Numero di dosi
int ser_pos_feeder = 82; // posizione carico da serbatoio - riposo
int ser_pos_fishtank = 25; // posizione scarico in vasca - feed
int pos = 0;
int mangiato = 0; // controllo feed giornaliero
int ledverde = 4; // mangiato
int ledrosso = 5; // non ancora mangiato
int x = 0 ; // counter ciclo attesa
void setup() {
Serial.begin(9600);
pinMode(ledverde,OUTPUT);
pinMode(ledrosso,OUTPUT);
digitalWrite(ledrosso,HIGH); // non ancora mangiato
digitalWrite(ledverde,LOW);
}
void loop() {
int sensorValue = analogRead(A0); //Lettura luce accesa o spenta
Serial.println(sensorValue);
Serial.println(mangiato);
delay(1000);
if((sensorValue>=600) & (mangiato == 0)) {
Serial.println("ATTESA tempo di risveglio circa 10 minuti");
for (x = 0 ; x < 600; x++){
digitalWrite (ledrosso, HIGH); //accende il LED rosso e lammpeggia
delay (500) ;
Serial.println(x);
digitalWrite (ledrosso, LOW);
delay (500);
}
run_feeder();
}
if (sensorValue<=100) {
mangiato=0;
digitalWrite(ledrosso,HIGH);
digitalWrite(ledverde,LOW);
}
}
void Should_I_feed_them(String timestring){
for (int i = 0; i < count_of_terms; i++){
if(mangiato==0) {
Serial.println("------ ---------- ------");
Serial.println("------ Inizio ciclo ------");
run_feeder();
}
}
}
void run_feeder(){
myservo.attach(9);
int counter = 0;
for (counter ; counter < count_of_doses ; counter++ ) {
for (pos = ser_pos_feeder; pos >= ser_pos_fishtank ; pos -= 1) {
myservo.write(pos);
}
delay(500);
for (pos = ser_pos_fishtank; pos <= ser_pos_feeder; pos += 1) {
myservo.write(pos); }
delay(500);
Serial.print(counter);
Serial.println("------ Si mangia ------");
}
mangiato = 1;
digitalWrite(ledrosso,LOW);
digitalWrite(ledverde,HIGH);
myservo.detach();
}
Rafts:
No
Supports:
No
Resolution:
0.2
Infill:
30%
Filament: Dont know Petg Azzurro
Notes:
// FISH FEEDER MINI BY FAU
// Caricato su mini fish feeder il 29 marzo 2020 durante la quarantena per Covid-19
// Versione definitiva e attiva
// 1 sola attivazione giornaliera data dalla luminosità della lampada accesa o spenta
// dopo 10 minuti circa dall'accensione si ativa il feeder
Servo myservo;
int count_of_terms = 0;
int count_of_doses = 2; // Numero di dosi
int ser_pos_feeder = 82; // posizione carico da serbatoio - riposo
int ser_pos_fishtank = 25; // posizione scarico in vasca - feed
int pos = 0;
int mangiato = 0; // controllo feed giornaliero
int ledverde = 4; // mangiato
int ledrosso = 5; // non ancora mangiato
int x = 0 ; // counter ciclo attesa
void setup() {
Serial.begin(9600);
pinMode(ledverde,OUTPUT);
pinMode(ledrosso,OUTPUT);
digitalWrite(ledrosso,HIGH); // non ancora mangiato
digitalWrite(ledverde,LOW);
}
void loop() {
int sensorValue = analogRead(A0); //Lettura luce accesa o spenta
Serial.println(sensorValue);
Serial.println(mangiato);
delay(1000);
if((sensorValue>=600) & (mangiato == 0)) {
Serial.println("ATTESA tempo di risveglio circa 10 minuti");
for (x = 0 ; x < 600; x++){
digitalWrite (ledrosso, HIGH); //accende il LED rosso e lammpeggia
delay (500) ;
Serial.println(x);
digitalWrite (ledrosso, LOW);
delay (500);
}
run_feeder();
}
if (sensorValue<=100) {
mangiato=0;
digitalWrite(ledrosso,HIGH);
digitalWrite(ledverde,LOW);
}
}
void Should_I_feed_them(String timestring){
for (int i = 0; i < count_of_terms; i++){
if(mangiato==0) {
Serial.println("------ ---------- ------");
Serial.println("------ Inizio ciclo ------");
run_feeder();
}
}
}
void run_feeder(){
myservo.attach(9);
int counter = 0;
for (counter ; counter < count_of_doses ; counter++ ) {
for (pos = ser_pos_feeder; pos >= ser_pos_fishtank ; pos -= 1) {
myservo.write(pos);
}
delay(500);
for (pos = ser_pos_fishtank; pos <= ser_pos_feeder; pos += 1) {
myservo.write(pos); }
delay(500);
Serial.print(counter);
Serial.println("------ Si mangia ------");
}
mangiato = 1;
digitalWrite(ledrosso,LOW);
digitalWrite(ledverde,HIGH);
myservo.detach();
}
License:
Creative Commons — Attribution