Benvenuto in Moddingstudio.com.

  1. #1
    SPIKE666 è offline
    • Registrato da Dec 2009
    • Messaggi: 199
    • Ha ringraziato: 0
      Grazie ricevuti: 0

    Alba-Tramonto cova

    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 ma il problema è che non hanno la regolazione automatica giornaliera 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 [Solo gli utenti registrati e attivati possono vedere i link ]

  2. # ADS
    Circuit advertisement


     

  3. #2
    tizio45 è offline
    • Registrato da Dec 2011
    • Messaggi: 1,130
    • Ha ringraziato: 0
      Grazie Ricevuti
    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 [Solo gli utenti registrati e attivati possono vedere i link ]
    quel modulo ti conteggia secondi, minuti ore giorni mesi e anni.
    Spero di averti aiuto e se il link non e consentito toglietelo pure

    Non ho nulla contro Dio.. E' il suo fanclub che mi fa paura!!

  4. #3
    SPIKE666 è offline
    • Registrato da Dec 2009
    • Messaggi: 199
    • Ha ringraziato: 0
      Grazie ricevuti: 0

    ... 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

  5. #4
    tizio45 è offline
    • Registrato da Dec 2011
    • Messaggi: 1,130
    • Ha ringraziato: 0
      Grazie Ricevuti
    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
    }
    Ultima modifica di tizio45; 17-08-2014 alle 18:49
    Non ho nulla contro Dio.. E' il suo fanclub che mi fa paura!!

  6. #5
    SPIKE666 è offline
    • Registrato da Dec 2009
    • Messaggi: 199
    • Ha ringraziato: 0
      Grazie ricevuti: 0

    Il programma è un po da modificare ma è una ottima base, ora ordino un rtc

  7. #6
    tizio45 è offline
    • Registrato da Dec 2011
    • Messaggi: 1,130
    • Ha ringraziato: 0
      Grazie Ricevuti
    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
    Non ho nulla contro Dio.. E' il suo fanclub che mi fa paura!!

  8. #7
    SPIKE666 è offline
    • Registrato da Dec 2009
    • Messaggi: 199
    • Ha ringraziato: 0
      Grazie ricevuti: 0

    Grazie

  9. #8
    SPIKE666 è offline
    • Registrato da Dec 2009
    • Messaggi: 199
    • Ha ringraziato: 0
      Grazie ricevuti: 0

    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.
    Ultima modifica di SPIKE666; 26-09-2014 alle 20:21

  10. #9
    SPIKE666 è offline
    • Registrato da Dec 2009
    • Messaggi: 199
    • Ha ringraziato: 0
      Grazie ricevuti: 0

    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???

  11. #10
    Georgeser è offline
    • Registrato da Jan 2017
    • Messaggi: 1
    • Ha ringraziato: 0
      Grazie ricevuti: 0

    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?

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •  
Torna a inizio pagina
Moddingstudio.com - Powered by vBulletin
Copyright (c) 2011 vBulletin Solutions, Inc. All rights reserved.
Brown Editore S.r.l. - Capitale Sociale 1.087.500€ I.V. - P.Iva: 12899320159 - Viale Sarca, 336 Edificio 16 - 20126 Milano
Tutti gli orari sono GMT +1. Adesso sono le 08:47.