SPIKE666 Inviato 17 Agosto 2014 Condividi Inviato 17 Agosto 2014 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 Altre opzioni di condivisione...
tizio45 Inviato 17 Agosto 2014 Condividi Inviato 17 Agosto 2014 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 Altre opzioni di condivisione...
SPIKE666 Inviato 17 Agosto 2014 Autore Condividi Inviato 17 Agosto 2014 ... OK diciamo che questo modulo mi risparmio un 25/30 righe di codice, il mio problema è che non so acquisire da sd, per la striscia, in realtà sono 5 da 2 metri ho detto dieci per stare meno Link al commento Condividi su altri siti Altre opzioni di condivisione...
tizio45 Inviato 17 Agosto 2014 Condividi Inviato 17 Agosto 2014 (modificato) 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 17 Agosto 2014 da tizio45 Link al commento Condividi su altri siti Altre opzioni di condivisione...
SPIKE666 Inviato 17 Agosto 2014 Autore Condividi Inviato 17 Agosto 2014 Il programma è un po da modificare ma è una ottima base, ora ordino un rtc Link al commento Condividi su altri siti Altre opzioni di condivisione...
tizio45 Inviato 17 Agosto 2014 Condividi Inviato 17 Agosto 2014 se vuoi in privato ti passo il sito dove ho trovato la guida nno ho mai provato a fare una cosa del genere anche perchè a parte il tuo lavoro non ha molte altre utilità a parte funzionare come timer per mangiatoie o altro Link al commento Condividi su altri siti Altre opzioni di condivisione...
SPIKE666 Inviato 17 Agosto 2014 Autore Condividi Inviato 17 Agosto 2014 Grazie Link al commento Condividi su altri siti Altre opzioni di condivisione...
SPIKE666 Inviato 26 Settembre 2014 Autore Condividi Inviato 26 Settembre 2014 (modificato) 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 26 Settembre 2014 da SPIKE666 Link al commento Condividi su altri siti Altre opzioni di condivisione...
SPIKE666 Inviato 30 Settembre 2014 Autore Condividi Inviato 30 Settembre 2014 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 Altre opzioni di condivisione...
Georgeser Inviato 13 Gennaio 2017 Condividi Inviato 13 Gennaio 2017 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 Altre opzioni di condivisione...
Messaggi raccomandati
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 accountAccedi
Sei già registrato? Accedi qui.
Accedi Ora