Vai al contenuto

Alba-Tramonto cova


SPIKE666

Messaggi raccomandati

buon dì, dovrei realizzare un alba tramonto per simulare il fotoperiodo durante il periodo di cova dei canarini per mio padre:)

 

in rete ne ho trovati a non finire per acquari asd ma il problema è che non hanno la regolazione automatica giornaliera :S riporto la spiegazione che ho trovato su un sito " L'incremento e il decremento temporale nella durata delle giornate deve essere fatto in maniera graduale, così come avviene in natura quando le giornate, a partire dal solstizio d'inverno (22 dic.) cominciano ad allungarsi sino al solstizio d'estate (21-22 giu.) passando gradatamente dalla durata di ore 8,5-9,5 a quella di 14,5-15,5 per poi cominciare a decrescere in maniera esattamente inversa.

Ipotizzando di voler accoppiare alla metà del mese di febbraio e prevedendo un incremento medio di 15-20 minuti alla settimana, sarà opportuno iniziare ad allungare la durata delle giornate a partire dai primi-metà novembre, partendo con circa nove ore di luce. Per avere un'alta percentuale di uova feconde, i canarini devono essere accoppiati quando la durata della giornata non è inferiore alle tredici ore di luce (min. 12,5). I maschi saranno infatti per lo più fecondi."

 

il mio primo tentativo è stato realizzando un timer puro senza rampa ne di salita ne di discesa utilizzando come display il cavo composito collegato ad una tv da 5 pollici con la libreria <TVout.h> ma una volta terminata la parte grafica e di regolazione non avevo più spazio di memoria per la programmazione dei singoli giorni.

Ora mi è venuto in mente che potrei preparare un txt caricato su sd con 365 righe dove compaiono l'ora di inizio alba e inizio tramonto, ovviamente ogni riga corrisponderà al relativo giorno dell'anno ma non so come faccio a fargli caricare i due valori giorno per giorno a delle variabili.

 

Dimenticavo, ho un arduino UNO r3 e dovrei pilotare circa 10 metri di striscia a led monocolore quindi mi servirebbe anche un consiglio sul mosfet pensavo ad un IRF520N ma non so se basta

 

PS. Questo è il sito da dove ho copiato la spiegazione, è giusto citare la fonte http://canarini.lavoliera.com/index.php?page=appr&id_ap=2

Link al commento
Condividi su altri siti

per i led pui mettere in parallelo un paio di segmenti da 2 metri l'una cosi puoi usare transistor o mostef meno potenti se sai che assorbono meno di 4A puoi usare un bd679 con resistenza sulla base di 2.2k

per arduino potresti usare Real Time Clock con modulo RTC DS1307 tipo questo http://www.robotstore.it/product/86/Modulo-RTC-Real-Time-Clock-con-DS1307.html

quel modulo ti conteggia secondi, minuti ore giorni mesi e anni.

Spero di averti aiuto e se il link non e consentito toglietelo pure

Link al commento
Condividi su altri siti

usa un db per ognuna e vai sul sicuro anche credo che 10 metri difficilmente assorbano piu di 4 ampere,

programma tutto sullo stesso sketch se hai un incremento di di 20 minuti ogni settimana sei apposto

questo è un esempio dello sketck che potresti usare

 

#include <Wire.h>

#include <RTClib.h>

 

RTC_DS1307 RTC;

 

int ledPin = 2; // Set our LED pin

 

byte startHour = 20; // Set our start and end times

byte startMinute = 24; // Don't add leading zero to hour or minute - 7, not 07

byte endHour = 20; // Use 24h format for the hour, without leading zero

byte endMinute = 25;

 

byte validStart = 0; // Declare and set to 0 our start flag

byte poweredOn = 0; // Declare and set to 0 our current power flag

byte validEnd = 0; // Declare and set to 0 our end flag

 

void setup () {

pinMode(ledPin, OUTPUT); // Set our LED as an output pin

digitalWrite(ledPin, LOW); // Set the LED to LOW (off)

 

Wire.begin(); // Start our wire and real time clock

RTC.begin();

 

if (! RTC.isrunning()) { // Make sure RTC is running

Serial.println("RTC is NOT running!");

//RTC.adjust(DateTime(__DATE__, __TIME__)); // Uncomment to set the date and time

}

}

 

void loop () {

 

DateTime now = RTC.now(); // Read in what our current datestamp is from RTC

 

if (now.second() == 0) { // Only process if we have ticked over to new minute

if (poweredOn == 0) { // Check if lights currently powered on

checkStartTime(); // If they are not, check if it's time to turn them on

} else {

checkEndTime(); // Otherwise, check if it's time to turn them off

}

 

if (validStart == 1) { // If our timer is flagged to start, turn the lights on

turnLightsOn();

}

if (validEnd == 1) { // If our time is flagged to end, turn the lights off

turnLightsOff();

}

}

 

delay(1000);

}

 

byte checkStartTime() {

DateTime now = RTC.now(); // Read in what our current datestamp is from RTC

 

if (now.hour() == startHour && now.minute() == startMinute) {

validStart = 1; // If our start hour and minute match the current time, set 'on' flags

poweredOn = 1;

} else {

validStart = 0; // Otherwise we don't need to power up the lights yet

}

 

return validStart; // Return the status for powering up

}

 

byte checkEndTime() {

DateTime now = RTC.now(); // Read in what our current datestamp is from RTC

 

if (now.hour() == endHour && now.minute() == endMinute) {

validEnd = 1; // If our end hour and minute match the current time, set the 'off' flags

poweredOn = 0;

} else {

validEnd = 0; // Otherwise we don't need to power off the lights yet

}

 

return validEnd; // Return the status for powering off

}

 

void turnLightsOn() {

digitalWrite(ledPin, HIGH); // Turn on the LED

}

 

void turnLightsOff() {

digitalWrite(ledPin, LOW); // Turn off the LED

}

Modificato da tizio45
Link al commento
Condividi su altri siti

  • 1 mese dopo...

rieccomi....

il progetto ha subito mille modifiche, alla fine lo vorrei usare senza rtc visto che ho un algoritmo che mi calcola i cicli del fotoperiodo ora mi sorge qualche dubbio ecco il mio programma...

 

#include <math.h>

#define led1 9 // assegnazione pin striscia a led

 

 

 

long secondi=0; // limite di long 2'147'483'647

int giorno, tempo,valoreFade,a1,a2;

float declinazione, latitudine, orizzonte, alba, tramonto;

 

 

void setup()

{

 

pinMode(led1, OUTPUT); //assegnata uscita striscia led

 

}

 

 

void loop() {

latitudine=45,929722; //assegnazione latitudine fissa

valoreFade=0;

 

 

delay (1000); //tempo "secondi 1000"

secondi++;

 

if(secondi==86401)//controllo secondi in un giorno

{

giorno++;

secondi=0;

}

 

if(giorno==366)// giorni in un anno

{

giorno=1;

}

 

 

declinazione=(23,45*(sin(360/(365*(giorno*284))))); //formula declinazione =23,45°*sen(360°/365*(n*284)) n= numoro del giorno dell'anno

 

orizzonte=asin(tan(latitudine)*tan(declinazione)); // formula angolo orizzonte sinA=tanB*tanC A=angolo orizzonte, B=latitudine, C=declinazione

 

tempo=(orizzonte*4)*60; //tempo di differeza in secondi alba e tramonto rispetto al giorno civile

 

alba=(21600-tempo); //ora alba dalle 6:00 va sottratto il tempo calcolato dall'angolo di orizzonte

tramonto=(64800+tempo); //ora tramonto dalle 18:00 va sommato il tempo calcolato dall'angolo di orizzonte

 

if(secondi == alba)

{

a2=0;

a1=1;

}

 

if(a1==1)//accensione

{

for (valoreFade = 0 ; valoreFade < 255; valoreFade++)

{

analogWrite(led1, valoreFade); //imposta la luminosità del LED

delay(2000); //tempo variazione accensione

}

}

 

if(secondi==tramonto)

{

a1=0;

a2=1;

}

 

 

if(a2==1)//spegnimento

{

for(valoreFade = 255 ; valoreFade > 0; valoreFade--)

{

analogWrite(led1, valoreFade); //imposta la luminosità del LED

delay(2000); //tempo variazione spegnimento

}

}

 

 

}

 

ora, non uccidetemi per i mille if è una tra le poche cose che conosco.

 

Se non si è capito io utilizzo una variabile come conta secondi giornaliera ed una per i giorni dell'anno il resto si calcola da solo.

Solo che non sono sicuro se si può calcolare così in maniera rapida e diretta mi riferisco a declinazione e orizzonte.

Il progetto non dovrà più essere sviluppato su un arduino uno r3 ma su un arduino nano, e non lo conosco ancora bene.

Per regisrare le variabili tipo secondi o giorni pensavo ad un paio di pulsantini che facessero tipo secondi++ e giorno++ per non diventare matto, e poi una interfaccia video, io con i display non ho affatto dimestichezza, ho per le mani un display di un nokia 3310 si può usare? se si come ho visto mille immagini su google ma non so il valore delle resistenze da mettere.

Modificato da SPIKE666
Link al commento
Condividi su altri siti

aggiornamento del programma

 

#include <TVout.h>

#include <math.h>

#define led1 3 // assegnazione pin striscia a led

#define puls1 4 // assegnazione pin pulsante

#define puls2 5 // assegnazione pin pulsante

#define puls3 6 // assegnazione pin pulsante

 

 

TVout TV;

 

long secondi=0; // limite di long 2'147'483'647

int giorno, tempo,valoreFade,x1,x2;

float declinazione, latitudine, orizzonte, alba, tramonto;

char a1=48,a2=48,b1=48,b2=48,c1=48,c2=48,g1=48,g2=48,g3=49;

 

void setup()

{

TV.start_render();

pinMode(led1, OUTPUT); //assegnata uscita striscia led

pinMode(puls1 , INPUT); //assegna ingresso pulsante ora

pinMode(puls2 , INPUT); //assegna ingresso pulsante minuti

pinMode(puls3 , INPUT); //assegna ingresso pulsante giorno

 

digitalWrite(puls1, HIGH); //Abilita res. pull-up

digitalWrite(puls2, HIGH); //Abilita res. pull-up

digitalWrite(puls3, HIGH); //Abilita res. pull-up

 

}

 

 

void loop() {

latitudine=45,929722; //assegnazione latitudine fissa

valoreFade=0;

 

if (digitalRead(puls1) == LOW) // Pulsante 1 premuto

{

a2++;

secondi= secondi + 3600;

delay (1000);

}

if (digitalRead(puls2) == LOW) // Pulsante 2 premuto

{

b2++;

secondi= secondi + 60;

delay (1000);

}

if (digitalRead(puls2) == LOW) // Pulsante 3 premuto

{

giorno++;

g3++;

delay (1000);

}

 

 

 

 

delay (1000); //tempo "secondi 1000"

secondi++;

c2++;

 

if(c2==58) //secondi tv

{

c2=48;

c1++;}

if(c1==54) //1 minuto tv

{

c1=48;

b2++;}

if(b2==58) //minuti tv

{

b2=48;

b1++;}

if(b1==54) //1 ora tv

{

b1=48;

a2++;}

if(a2==58) //ore tv

{

a2=48;

a1++;}

if(a1==55||a2==52) //24 ore tv

{

a1=48;

a2=48;

g3++;

}

 

if(g3==58) //giorni tv

{

g3=48;

g2++;}

if(g2==58) //giorni tv

{

g2=48;

g1++;}

if(g1==51||g2==54||g3==54) //365 giorni tv

{

a1=48;

a2=48;

g3=49;

}

 

 

 

 

if(secondi==86401)//controllo secondi in un giorno

{

giorno++;

secondi=0;

}

 

if(giorno==366)// giorni in un anno

{

giorno=1;

}

 

 

declinazione=(23,45*(sin(360/(365*(giorno*284))))); //formula declinazione =23,45°*sen(360°/365*(n*284)) n= numoro del giorno dell'anno

 

orizzonte=asin(tan(latitudine)*tan(declinazione)); // formula angolo orizzonte sinA=tanB*tanC A=angolo orizzonte, B=latitudine, C=declinazione

 

tempo=(orizzonte*4)*60; //tempo di differeza in secondi alba e tramonto rispetto al giorno civile

 

alba=(21600-tempo); //ora alba dalle 6:00 va sottratto il tempo calcolato dall'angolo di orizzonte

tramonto=(64800+tempo); //ora tramonto dalle 18:00 va sommato il tempo calcolato dall'angolo di orizzonte

 

if(secondi == alba)

{

x2=0;

x1=1;

}

 

if(x1==1)//accensione

{

for (valoreFade = 0 ; valoreFade < 255; valoreFade++)

{

analogWrite(led1, valoreFade); //imposta la luminosità del LED

delay(2000); //tempo variazione accensione

TV.print_str(0,56," Accensione");

}

}

 

if(secondi==tramonto)

{

x1=0;

x2=1;

}

 

 

if(x2==1)//spegnimento

{

for(valoreFade = 255 ; valoreFade > 0; valoreFade--)

{

analogWrite(led1, valoreFade); //imposta la luminosità del LED

delay(2000); //tempo variazione spegnimento

TV.print_str(0,56," Spegnimento");

}

}

 

TV.print_str(0,0," Alba tramonto V.0.1");

TV.print_str(0,16,"---------------------");

TV.print_str(0,24," giorno");

 

TV.print_char(64,24, g1);

TV.print_char(72,24, g2);

TV.print_char(72,24, g3);

 

TV.print_str(0,32," Ora");

 

TV.print_char(40,32, a1);

TV.print_char(48,32, a2);

 

TV.print_str(56,32,":");

 

TV.print_char(64,32, b1);

TV.print_char(72,32, b2);

 

TV.print_str(80,32,":");

 

TV.print_char(88,32, c1);

TV.print_char(96,32, c2);

 

TV.print_str(0,40,"---------------------");

 

}

 

 

 

ci sono???

Link al commento
Condividi su altri siti

  • 2 anni dopo...

Alba Tramonto cova

 

Salve a tutti, da oggi come ho scritto in un altro topic allevo allinterno, e temendo che per le cove la luce sia poca avevo deciso di costruirmi un apparecchiatura alba-tramonto leggendo altri topic su questo forum attraverso due timer?Ce qualcuno che lo ha fatto?

Link al commento
Condividi su altri siti

Crea un account o accedi per lasciare un commento

Devi essere un membro per lasciare un commento

Crea un account

Iscriviti per un nuovo account nella nostra community. È facile!

Registra un nuovo account

Accedi

Sei già registrato? Accedi qui.

Accedi Ora

Giochi in Uscita



  • Community Hive Community Hive

    Community Hive allows you to follow your favorite communities all in one place.

    Follow on Community Hive
  • Utenti

    Non ci sono membri da mostrare

×
×
  • Crea Nuovo...