DR HACK

itafsqarhyazeubebgcazh-CNzh-TWhrcsdanlenettlfifrglkadeelhtiwhihuisidgajakolvltmkmsmtnofaplptrorusrskslesswsvthtrukurvicyyi

Giorno virtuale per presepe

Ho creato questo circuito per simulare il ciclo giorno e notte nel presepe di casa..

gv101

L'idea è molto semplice, con un'Arduino mini ho creato un programma che controlla un Mosfet in PWM e grazie alla gestione di 3 pulsanti è possibile variare il periodo del ciclo giorno notte. Il Mosfet controlla la corrente che alimenta una barra di led.

Sketch Arduino :

#include <TimerOne.h>

#define switchPin A0
#define led 7
#define incre 1000 // 500 centesimi = 5 sec | 6000 centesimi = 60 sec = 1 min
#define timertick 20000 // 250000 = 25 centesimi = 0.25 sec 
#define inccen 2 // = timertick / 10000
#define fine 3 // minimo 2

volatile unsigned long mise = 0; // centesimi di secondo
byte duti = 0; // da 0 a 255
boolean onof = false;
boolean btst = false;
boolean hilo = false;

#define sole 11
#define stagione 255 //da 1 a 255
long luce = 0;

void setup() {

  pinMode(switchPin, INPUT);
  pinMode(led, OUTPUT);
  
  pinMode(sole, OUTPUT);

  Timer1.initialize(timertick);
  Timer1.attachInterrupt(Tick);
}

void Tick(){

  mise = mise + inccen;

  if (onof == true) {
    if (duti == 0) {
      digitalWrite(led, HIGH);
      digitalWrite(sole, HIGH);
    } else {
      if ((mise % (incre * (unsigned long)duti)) == 0 ) {
        hilo = !hilo;
        mise = 0;
      }
      if (hilo == true) {
        digitalWrite(led, HIGH);

        long x = ((incre * (unsigned long)duti)/fine);

        if (mise < x) {luce = (mise * stagione) / x;}
        if ((mise > x) && (mise < (x*(fine-1)))) {luce = stagione;}
        if (mise > (x*(fine-1))) {luce = (((x*fine)-mise) * stagione) / x;}

        if (luce < 0) {luce = 0;} 
        if (luce > stagione) {luce = stagione;}

        Serial.println(luce);
        analogWrite(sole, (int)luce);
        
      } else {
        digitalWrite(led, LOW);
        digitalWrite(sole, LOW);
      }
    }
  } else {
    digitalWrite(led, LOW);
    digitalWrite(sole, LOW);
  }
  
}

void loop() {
  
  switch(int(analogRead(switchPin)/10)){
    case (101):
      if (btst == false) {
        btst = true;
        mise = 0;
        hilo = true;
        duti++;
      }
    break;
    case (100):
      if (btst == false) {
        btst = true;
        onof = !onof;
        mise = 0;
        hilo = true;
        duti = 0;
      }
    break;
    case (99):
      if (btst == false) {
        btst = true;
        mise = 0;
        hilo = true;
        duti--;
      }
    break;
    case (0):
      btst = false;
    break;
  }

}

Schema Elettrico :

Galleria :

Commenti  

 
0 #1 rsodvd79 2014-12-09 22:01
Basterebbe aggiungere un'altro MOSFET con il suo condensatore e collegarlo ad un altro pin PWN , in teoria si potrebbero controllare fino a 6 serie di luci.
Citazione
 

Aggiungi commento


Codice di sicurezza
Aggiorna

We use cookies to improve our website and your experience when using it. Cookies used for the essential operation of the site have already been set. To find out more about the cookies we use and how to delete them, see our privacy policy.

I accept cookies from this site.

EU Cookie Directive Module Information