Ciao tutti,
Provo a spiegarle il mio problema..
Le colle poliuretaniche che uso per lavoro, catalizzano meglio e molto più velocemente in presenza di umidità...
Ma entro certi livelli... ne troppa... ne poca.
Per questo motivo volevo creare una stanza apposita in cui ricreare determinate condizioni.
Ho con molta fatica creato un piccolo sketch che attiva un relè quando l'umidità scende sotto il 60% e un altro relè che aziona un estrattore quando supera l'80%.
Fin qui tutto bene..
Mi arriva l'umidificatore... e scopro che non posso assolutamente accenderlo e spegnerlo con un relè, questo perchè e' presente un pulsante... che, se premuto per un istante accende l'umidificatore.. se premuto per 5 secondi attiva una sorta di illuminazione a led rgb.
Se collego i piedini dell'interruttore al relè... accende solo l'illuminazione... (il rele resta attivo fino al modificarsi della percentuale di umidità) ma non lo fa partire..quindi non ci sarà nessuna variazione nella percentuale di umidità...
Mi servirebbe che il relè scattasse solo per 1 secondo e poi si disattivasse, in modo da attivare l'umidificatore e non le luci..
Ho cercato ovunque, ma purtroppo non ho trovato nulla di simile.
Qualche consiglio ?
Vista la tua presentazione e le tue, bonariamente consentimi, praticamente nulle conoscenze di Arduino, prima di tutto puoi cominciare con studiare QUESTO proseguire con QUESTO e acquistare qualche buon libro (es. QUESTO)
Presa confidenza con l'ambiente e DOPO aver studiato quei documenti (e magari provato piccoli esempi sui vari argomenti), quando ti sentirai pronto, potrai affrontare il passo successivo ... la "terribile" funzione millis() che ti servirà per fare, appunto, quanto chiedi ...
Dovrai studiare bene prima QUI, poi QUI, QUI e QUI e tutti gli articoli che sono in QUESTA pagina ...
... alla fine di tutta questa fatica e di tutto questo "studiare" vedrai che ti sarà molto più chiara sia la programmazione di Arduino che ... la soluzione del tuo problema
Guglielmo
P.S.: nota che ho usato il verbo "studiare" e NON "leggere" dato che l'argomento NON permette la semplice lettura, ma richiede studio e tante prove pratiche sui singoli argomenti
Hai ragione Guglielmo, purtroppo però ho un lavoro che mi impegna per la maggior parte della giornata..
non avendo le basi, sono costretto a chiedere aiuto.
Se qualcuno qui mi chiedesse "come incollo un tranciato di ebano con dell'alluminio?" cercherei di spiegarglielo nel modo più semplice in modo da essergli d'aiuto, non credo che gli direi di studiarsi la chimica (per imparare tutti i tipi di collanti esistenti), di studiare metallurgia (per capire quante e quali leghe di alluminio esistono e quale è la loro struttura molecolare) e di approfondire riguardo le tipologie di legnami (per capire se l'ebano è la miglior scelta da incollare all'alluminio) :o)
Semplicemente gli direi.. "usa sull'alluminio un primer per colle viniliche bi-componente, ed una volta indurito usa una colla vinilica bi-componente :o)
Purtroppo ho preso la mia strada professionalmente parlando, non credo diventerò mai un "professore" in questo settore, devo solo risolvere un problema, speranzoso che qualcuno possa aiutarmi.
E questo non è sintomo di poca voglia di imparare.. prova ne è che lo sketck che ho postato funziona.. o meglio funzionerebbe con un umidificatore che preveda semplicemente un on/off... e non un colorato sistema di illuminazione attivabile dallo stesso pulsante :o)
In qualsiasi caso, seguirò il tuo consiglio e quando ne avrò il tempo, cercherò di approfondire utilizzando i link da te postati !
Grazie ancora !
:o)
1. in conformità al regolamento, punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).
In pratica, tutto il tuo codice dovrà trovarsi racchiuso tra due tag: [code] _il _tuo_ codice_ [/code] così da non venire interpretato e non dare adito alla formazione di caratteri indesiderati o cattiva formattazione del testo.
2. Prova a rileggere il punto 16.1 e, principalmente, 16.13 del REGOLAMENTO e capirai il senso della mia risposta ...
Guglielmo visto che l'utente non è interessato a imparare l'uso di arduino ma solo a risolvere un problema,
si può proporre una soluzione.
Forse basta una variabile stato e un delay(1000).
La variabile stato assume valori 1 e 0, a 1 esegue a zero no.
byte stato=1;
void setup(){
}
void loop(){
if(condizione attiva rele==vera && stato==1){
stato=0;// Esegue un unica volta, da solo un impulso al rele
digitalWrite(rele,HIGH);
deley(1000);
digitalWrite(rele,LOW);
}
if(condizione attiva rele==falsa)// Ad esempio cambio di umidità
stato=1; // Predispongo per nuovo processo
}
Buongiorno torn24,
Intanto grazie per l'aiuto !
Non ho mai detto di non voler imparare, anzi...
Ti faccio un esempio.. il tuo codice, dubito che potrò usarlo con un semplice copia e incolla nel mio... Sarò obbligato ad imparare per poterlo usare, dovrò adattarlo, capirlo ecc ecc.
Il tuo aiuto, mi porterà inevitabilmente ad imparare qualcosa
Non vorrei assolutamente passare per uno scansafatiche che vuole la pappa pronta... Forse mi sono espresso male nel messaggio precedente.
Se mi faccio male ad una gamba e chiedo un aiuto per fare le scale.. ciò non esclude che io non faccia anche riabilitazione per poi tornare a farle da solo !
Quindi .. ti ringrazio !! E fra poco... Mi metterò a studiarlo..
Torn24, questa soluzione la avevo già provata, purtroppo (probabilmente sbaglio io con "stato") crea un loop che continua a far scattare il relè ogni secondo.
Al cambio di stato (al raggiungimento dell'umidità desiderata) si disattiva correttamente (ma con il 50% di possibilità che si disattivi lasciando l'umidificatore in funzione).Puoi ripostare il codice che usava millis ? anche se più complicato vorrei studiarmi anche quello :o)
Ho cancellato quel codice Ma avrebbe avuto lo stesso problema e adesso ti spiego!
Abbiamo una condizione che da un impulso di un secondo al relé, che lo fai con delay() o con millis() possiamo considerarlo indifferente. Adesso se la condizione che attiva il relé è sempre vera all'ora ripeterà
l'impulso in continuazione.
Per questo ti ho mostrato un esempio con variabile stato, io eseguo l'impulso e variabile stato vale zero, per cui la condizione non è più vera e esegue un unico impulso.
Poi a un certo punto del processo stato deve ritornare a 1, sei tu a sapere quando.
Credo che sia la strada giusta da seguire
Ok… sarebbe la strada giusta se non ci fosse l'incognita di quando disattiva l'umidificatore… purtroppo, come dicevo.. ci sono il 50% delle possibilità che, il "loop" di attacca e stacca della durata di un secondo, si verifichi quando l'umidificatore è in funzione. In questo caso, lui, continuando a funzionare saturerebbe l'ambiente. anche inserendo un "controllo, in cui se viene superata una certa percentuale di umidità, lui ripete l'azione, avrei sempre quel famoso 50% di possibilità che si ripeta il problema.
a questo punto, la soluzione più logica è.... trovare un umidificatore che si attivi con un semplice on/off…. in questo caso andrebbe bene anche il codice che avevo già creato…
Credo che anche i più bravi qui, non possano risolvere il problema.. abbiamo a che fare con le probabilità, non con la semplice programmazione... sarebbe come fare un qualcosa che predica l'uscita del solo rosso alla roulette..
Ma forse…. mi sbaglio...
Ma perché questo? Non esiste una condizione al verificarsi della quale l'umidificatore deve spegnersi? E non sarebbe sufficiente esplicitarla? Ma in primo luogo come lo spengo?
Il problema non è come spegnerlo….
Se l'umidificatore avesse un semplice on/off sarebbe semplice, basterebbe usare questo codice per accenderlo e spegnerlo..
Ma, se rileggi sopra… non è cosi'. per accenderlo serve che, quando
if (h <= 85 )
digitalWrite (11, HIGH);// Accende umidificatore
Lo stato HIGH duri solamente per un secondo… altrimenti l'umidificatore, non si accende… ma passa alla configurazione delle inutili variazioni di colore ottenute attivando la sua inutile illuminazione interna a led rgb...
Beh, ma il problema più grande é proprio sapere come si spegne. É simile all'accensione? É diverso? Ci penserà il programma poi a farlo, ma prima di tutto va capito come si fa.
Ho pensato ad un codice del tipo
if (condizionediaccensione==vera)
{
digitalWrite (rele, 1);
delay (1000);
digitalWrite (rele, 0);
//e così si accende, da tua premessa "serve che per accenderlo lo stato HIGH duri 1 secondo. Qui ve ne saranno tanti che durano un secondo ciascuno
}
if (condizionedispegnimento==vera)
{
//inserire qui modo per spegnere umidificatore
}
Come vedi i problemi sono:
in quale condizione si feve spegnere?
vome si spegne quel dannato coso?
Se invece servisse la macchina a stati basterebbe mettere
if (condizionediaccensione==vera && stato==sideveaccendere)
{
//parte (nota) di accensione
stato=sidevespegnere
}
if (condizionedispegnimento==vera && stato==sidevespegnere)
{
//parte per spegnerlo
stato==sideveaccendere;
}
Grazie Silente,
Dopo pranzo do un occhiata ai codici, comunque si deve spegnere una volta superato l'85% di umidità e per spegnerlo, come per l'accensione, basta che il rele' scatti per un secondo.
In pratica, scatta per un sec e lo accende, scatta per un sec e lo spegne..
un po come gli interruttori con rele' passo passo che si usano sulle scale...