Pages: [1]   Go Down
Author Topic: Aiuto realizzazione progetto per accensione temporizzata plafoniera neon  (Read 1090 times)
0 Members and 1 Guest are viewing this topic.
Italia
Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao a tutti, vorrei chiedere un grande aiuto nella speranza che qualche buona anima possa indirizzarmi.
Prima di tutto una premessa, sono piuttosto ignorante nella materia ma ho grande Volonta!!

Il vostro aiuto mi serve per gestire una plafoniera per il mio acquario, che ho interamente disegnato e realizzato.
Vengo subito al sodo:

La plafoniera è interamente in acciaio inox e contiene 6 neon T5 da 54W cadauno

Il mio desisderio è di far accendere i neon ad orari prestabiliti e fare si che l'accensione avvenga in maniera graduale, ovvero 1 tubo ogni 5 minuti
L'illuminazione sarà di 7/8 ore giornaliere (deciderò in funzione dello sviluppo delle piante) e lo spegnimento dovrà seguire lo stesso ciclo, un tubo ogni 5 minuti, alla fine del ciclo dovrebbe partire il led notturno che rimarrà acceso fino alle 5 del mattino.

per l'accensione in sequenza dei neon pensavo di inserire 3 ballast ed agire, tramite arduino, sui singoli tubi con 6 relè posizionati dopo gli accenditori.
"nella mia mente ho pensato così:  1) all'orario prestabilito arduino eccita un relè che mette in tensione i 3 ballast - 2) dopo cinque minuti arduino accità il 1° relè ad accende il primo neon e così ogni 5 minuti per gli altri 5 relè - 3) all'orario notturno arduino esegue le funzione opposta ed in maniera sequanziale tira giù un neon alla volta - 4) alla fine del ciclo di spegnimento chiude l'alimentazione generale dei ballast ed accende il led di illuminazione notturna fino alle 5 del mattino - 5) poi bubio pesto fino all'orario di accensione giornaliero.
     

Per quanto riguarda l'eventuale esclusione di singoli neon pensavo di inserire anche 6 interrutori manuali da posizionare dopo i relè.

Infine la parte che proprio non saprei come affrontare è la possibilità di poter accendere manualmente i singoli neon durante le ore notturne (in caso di manutenzio straordinarie della vasca), A rigor di logica per controllare le accensioni in manuale dovrei collegare 7 interruttori su arduino, uno per eccitare il relè che comanda l'alimentazione dei ballast e successivamente gli altri 6 per decidere quali e quanti neon accendere.

Per quanto riguarda gli alloggiamenti pensavo di mettere tutto all'interno di due/tre scatole IP66 da posizionere sotto la vasca, una per la parte degli interrutori, una per Arduino e l'alimentatore, ed una per i ballast.

Non sò quanto sia attinente alla realtà la mia "pensata" ma codice a parte nella mia testa fuziona tutto perfettamente!!

P.S Quanto vorrei saper fare tutto!!.....Aiutooooo!

     
« Last Edit: December 04, 2012, 05:45:56 pm by rugush » Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21657
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Posso darti qualche suggerimento.
Io ti consiglierei di prendere un display LCD (meglio se seriale, costa di più ma consuma meno pin all'Arduino) ed aggiungere 3/4 pulsantini. In questo modo avresti un display con cui interagire in maniera più efficiente con l'Arduino. Così potresti non solo accendere/spengere i neon manualmente ma anche modificare gli orari di on/off dei tubi senza dover riprogrammare la scheda tutte le volte.

A programmazione come sei messo?
Logged


Italia
Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao, a programmazione sto messo malissimo, digiuno totale!!
inizialmente avevo pensato di inserire un display ma vedendo alcuni codici per gestirlo ho capito che non riuscirò, in tempi umani, a comprenderli e gestirli fino in fondo. obbiettivamente come l'ho pensato io occupa parecchie porte, ma credo sia decisamente più facile da programmare. Impostare o modificare gli orari tramite display è una funzione che mi piacerebbe tantissimo...ma avendo paura di non venirne fuori l'ho scartata.
In questo periodo, mentre cercavo di capire meglio Arduino ho iniziato a studiare un codice che esegue funzioni piuttosto simili alle mie esigenze e che posto qui sotto:
N.B da una prima lettura ho capito che alcuni riadattamenti potrebbero essere sufficienti alle mie esigenza e che un codice più spartano possa avvicinarmi meglio a comprenderlo e gestirlo nel tempo.

Code:
#include <Time.h>
#include <TimeAlarms.h>


// Define pin LIGHTS
#define PL 12
#define HQI1 11
#define HQI2 10

#define AREATOR 9

#define NIGHTPUMP 8

#define NIGHTLIGHT 7



// ****

#define BEGINHOURMOONLIGHT 9
#define BEGINMINUTEMOONLIGHT 30

#define BEGINHOURSUNSHINE 19
#define BEGINMINUTESUNSHINE 30

#define SLOWHOURSWAVE 21
#define SLOWMINUTEWAVE 30

#define AREATORDAY 15
#define AREATORNIGHT 15



#define DEBUG 1

#define DEBUGSUNSHINE 0

#define DEBUGNIGHTPUMP 0

#define REFRESH 10 * 1000 // imposta il tempo di refresh del programma

unsigned int seconds = 0;
unsigned int minutes = 0;
unsigned int hours = 0;

int ledPin = 13; // LED connected to digital pin 13
int prevmin = 99; // set the previous minute



void setup() {
blinkLED(ledPin, 4, 100); // lampeggia il led 13 all'inizio del programma per vedere se è tutto ok

// inizializza le uscite
pinMode(ledPin, OUTPUT);
pinMode(PL,OUTPUT);
pinMode(HQI1,OUTPUT);
pinMode(HQI2,OUTPUT);
pinMode(AREATOR,OUTPUT);
pinMode(NIGHTPUMP, OUTPUT);
pinMode(NIGHTLIGHT,OUTPUT);


if (DEBUG)
{
Serial.begin(9600);
Serial.println("Inizializzo ManageAquarium...");
}


// imposta l'ora di arduino.. cambiare con l'ora in cui si fa partire
setTime(18,49,11,11,2,2010);

hours=hour();;
minutes=minute();
seconds=second();


// imposta gli switch per il giorni
if (hours > BEGINHOURMOONLIGHT && hours < BEGINHOURSUNSHINE)
{
Serial.println("Accendo PL HQI1 NIGHTPUMP e HQI2 ");
SwitchON(PL);
delay(5000);
SwitchON(HQI1);
delay(5000);
SwitchON(HQI2);
delay (5000);
SwitchON(NIGHTPUMP);

Serial.println("Fatto..");
}
else
{
//set Night Stuff
Serial.println("Accendo NIGHTLIGHT e spengo NIGHTPUMP ");
SwitchON(NIGHTLIGHT);
delay(5000);
SwitchOFF(NIGHTPUMP);
Serial.println("Done..");
}
//************************************************** *************
// Set dubugging stuff
if (DEBUGSUNSHINE)
{
SwitchON(PL);
SwitchON(HQI1);
SwitchON(HQI2);
}

if (DEBUGNIGHTPUMP)
{

SwitchON(NIGHTPUMP);


}
//************************************************** *************
}


void loop() {

hours=hour();;
minutes=minute();
seconds=second();

if (DEBUG && minutes != prevmin)
{
// mostra l'ora
Serial.print(hour());
Serial.print(":");
Serial.print(minute());
Serial.print(":");
Serial.println(second());
prevmin = minutes;
}





delay(REFRESH);

// ************************************************** *****************
// MOONLIGHT
// ************************************************** *****************

if (hours == BEGINHOURMOONLIGHT && minutes == BEGINMINUTEMOONLIGHT )
{
SwitchON(PL);
SwitchOFF(NIGHTLIGHT);
SwitchON(NIGHTPUMP);


if (DEBUG) Serial.println(" PL Accese come NIGHTPUMP, NIGHTLIGHT spengo");
// attendi 1 minuteo
delay(60000);

}

if (hours == BEGINHOURMOONLIGHT && minutes == ( BEGINMINUTEMOONLIGHT + 15 ) )
{

SwitchON(HQI1);
if (DEBUG) Serial.println("Accendo HQI1");
// attendi 1 minuteo
delay(60000);
}

if (hours == BEGINHOURMOONLIGHT && minutes == ( BEGINMINUTEMOONLIGHT + 29 ) )
{

SwitchON(HQI2);
if (DEBUG) Serial.println("Accendo HQI2");
// attendi 1 minuteo
delay(60000);
}
// ************************************************** *****************


// ************************************************** *****************
// SUNSHINE
// ************************************************** *****************
if (hours == BEGINHOURSUNSHINE && minutes == BEGINMINUTESUNSHINE )
{
SwitchOFF(HQI1);
if (DEBUG) Serial.println("Spengo HQI1");

// attendi 1 minuteo
delay(60000);
}

if (hours == BEGINHOURSUNSHINE && minutes == ( BEGINMINUTESUNSHINE + 15 ) )
{
SwitchOFF(HQI2);
if (DEBUG) Serial.println("Spengo HQI2");

// attendi 1 minuteo
delay(60000);
}

if (hours == BEGINHOURSUNSHINE && minutes == ( BEGINMINUTESUNSHINE + 29 ) )
{
SwitchOFF(PL);
SwitchON(NIGHTLIGHT);
if (DEBUG) Serial.println("Spengo PL, accendo NIGHTLIGHT");

// attendi 1 minuteo
delay(60000);
}
// ************************************************** *****************

// ************************************************** *****************
// NIGHTPUMP - SLOW WAVE
// ************************************************** *****************
if (hours == SLOWHOURSWAVE && minutes == SLOWMINUTEWAVE )
{
SwitchOFF(NIGHTPUMP);
if (DEBUG) Serial.println("Spengo NIGHTPUMP");
// attendi 1 minuteo
delay(60000);
}

// ************************************************** *****************


// ************************************************** *****************
// AREATOR - "AREATORDAY" MINUTES EVERY HOUR
// ON DAYTIME AND "AREATORNIGHT"
// MINUTES EVERYHOUR ON NIGHTTIME
// ************************************************** *****************
if ( hours >= 0 && hours < BEGINHOURMOONLIGHT )
{

switch (minutes)
{
case 0:

if (DEBUG) Serial.println("Areator is switching ON..");
SwitchON(AREATOR);
// attendi 1 minuteo
delay(60000);

break;
case AREATORNIGHT:

if (DEBUG) Serial.println("Areator is switching OFF..");
SwitchOFF(AREATOR);
// attendi 1 minuteo
delay(60000);

break;
}
}
else // until midnight
{
switch (minutes)
{
case 0:
if (DEBUG) Serial.println("Accendo Areator..");
SwitchON(AREATOR);
// attendi 1 minuteo
delay(60000);
break;
case AREATORDAY:
if (DEBUG) Serial.println("Spengo Areator..");
SwitchOFF(AREATOR);
// attendi 1 minuteo
delay(60000);
break;
}
}

// ************************************************** *****************


}

// Switch on something
void SwitchON(int what)
{
digitalWrite(what, HIGH);
}

// Switch off something
void SwitchOFF(int what)
{
digitalWrite(what, LOW);
}


// this utility function blinks the an LED light as many times as requested
void blinkLED(byte targetPin, int numBlinks, int blinkRate) {
for (int i=0; i < numBlinks; i++) {
digitalWrite(targetPin, HIGH); // sets the LED on
delay(blinkRate); // waits for a blinkRate milliseconds
digitalWrite(targetPin, LOW); // sets the LED off
delay(blinkRate);
}
}

Eliminando tutta le parte non legata alle luci rimangono veramente poche righe di codice che, per quanto completamente inesperto, comprendo per una buona fetta...ma da questo punto in poi inizio a sentire tutto il peso dei miei limiti.
Purtroppo mi rendo perfettamente conto che per me Arduino è un desiderio ambizioso..!!
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21657
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Se a programmazione sei a zero, iniziare prendendo codici scritti da altri è il modo sbagliato. In questo modo non impari nulla, non capisci come funzionano le cose ma, soprattutto, sarai fisso qui a chiedere aiuto per risolvere semplici problemi. Problemi che, se parti a piccoli passi come abbiamo fatto tutti, sarai in grado di affrontare in tutta autonomia pian piano che progredirai.

Ora, il tuo problema lo suddividiamo in piccoli step.
1° step.
impara ad accendere/spengere un led con un pulsante via codice

2° step.
procurati un chip RTC (un orologio hardware, tipo il DS1307 o il PCF8563) e prova ad interfacciarti con lui ed a stampare sulla seriale l'ora letta dall'RTC

3° step.
prova a far accendere/spengere un led ad un orario prefissato leggendo l'orario dall'RTC

4° step.
all'interno suddetto step prova ad inserire l'attivazione/disattivazione del led tramite pulsante indipendentemente dall'impostazione data dall'orario

5° step.
aggiungi un display LCD e prova ad interagire con lui, visualizzando l'orario e, successivamente, crea un piccolo menu per poter scegliere di accendere il led manualmente

6° step.
aggiungi altri 4 led e fai tutto quello che facevi al 5° step con 1 solo led moltiplicato per i 5 led.

7° step.
lato sw saresti a posto, a questo punto puoi pensare a trasferire tutto al controllo dei neon
Logged


Italia
Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazieeee.... effettivamente ho preso come spunto quel codice per capire se sarei stato in grado di interpretarlo, e tutto sommato non mi è sembrato così incomprensible!!
In effetti il mio desiderio è proprio quello di riscrivermelo da zero, e proprio un questo avrò bisogno di aiuto. Comunque seguirò la tua scaletta per studiarmelo passo passo... spero di riuscire in tempi umani!!
 
Logged

Pages: [1]   Go Up
Jump to: