DR HACK

Davide Rosa Hack

124721
OggiOggi8
IeriIeri67
Questa settimanaQuesta settimana171
Questo MeseQuesto Mese939
TuttoTutto124721
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