DR HACK

Davide Rosa Hack

132473
OggiOggi10
IeriIeri26
Questa settimanaQuesta settimana78
Questo MeseQuesto Mese130
TuttoTutto132473
Utenti 0
Visitatori 2

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 :

Save
Cookies user preferences
We use cookies to ensure you to get the best experience on our website. If you decline the use of cookies, this website may not function as expected.
Accept all
Decline all
visit counter
visit counter
visit counter
visit counter
Accept
Decline