Problema con programmazione software

Ciao a tutti, sono nuovo del forum. Ho scoperto da pochi mesi dell'esistenza di Arduino e devo dire che mi ha aperto un mondo, anche se sono ignorante in materia. Vi spiego subito la mia situazione, ho una stanza di coltivazione indoor con una sola lampada anche se ce ne vorrebbero due ma per i costi di corrente e il limite dei kwh del contatore ne posso avere solo una. Però se riuscissi a far muovere avanti ed indietro la lampada potrei coprire la superficie di due lampade, vabbè non mi dilungo su questo era sol per farvi capire un po di che si tratta, ho costruito un attuatore lineare con un motore dc da 12 volt guardando questo video Attuatore Elettrico con Finecorsa - YouTube

ora vorrei collegarlo ad Arduino nano come in quest'altro video

poi ho preso un binario con una carrucola in modo da appendere la lampada alla carrucola che porta avanti e indietro la lampada legata all' attuatore, il movimento che dovrebbe fare deve essere 1 minuto marcia avanti 30 sec fermo e un minuto marcia indietro 30 sec fermo e ripartire e così via tutto questo per 18 ore consecutive su 24 e poi 6 ore fermo. avevo pensato di collegare un timer all'alimentatore da 12 v che andrà alimentare il tutto così che dia corrente per 18 ore e far fare ad Arduino i movimenti chiesti e 6 ore non dia corrente e si fermi tutto l'apparato. Detto questo il mio problema principale è la programmazione di Arduino tramite il software in quanto non ci capisco niente, qualcuno di buon cuore potrebbe aiutarmi a farmi capire come impostare le automazioni tramite software?
grazie in anticipo

Buongiorno,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie. :slight_smile:

Guglielmo

mi scusi per la mancanza, cmq ho fatto, la ringrazio

Ciao, quello che vuoi fare non è molto complicato. Presumo che per gestire una lampada non ti serva un esattezza estrema nel conteggio del tempo, se ad esempio le 18 ore fossero 17,30 o 18,30, in questo caso potresti usare dei contatori di tempo realizzati tramite funzione millis(), se invece vuoi essere preciso con il tempo ti necessita un componente RTC.

Detto questo, nella tua presentazione dici di essere proprio a zero in programmazione, visto che in nessun forum troverai qualcuno che ti scriva il programma da zero, ma quello che puoi trovare è un aiuto e consigli su codice che hai scritto tu. Dovresti, prima di realizzare il tuo progetto acquisire le conoscenze base sulla programmazione arduino. Esistono guide in formato .pdf e innumerevoli esempi online.
Puoi focalizzare l'attenzione su "come realizzare un contatore di tempo con arduino", il tuo problema si risolve utilizzando più conteggi di tempo, uno per 18 ore, uno per 6 ore, e per 1 minuto.
Magari utilizzando anche una macchina a stati finiti, ossia primo stato conto 18 ore, secondo stato conto 6 ore ecc...

Quindi ti consiglio di acquisire le nozioni base, e porre la tua attenzione su come realizzare un conteggio di tempo e una macchina a stati finiti.

grazie per la risposta, allora avevo sviluppato questo codice per il software ma mi da parecchi errori

//motore a
int enA = 10;
int in1 = 9;
int in2 = 8;
//motore b
int in3 = 7;
int in4 = 6;
int enB = 5;

void setup() {
//imposta i motori come output
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
}

void loop() {
// accende il motore a
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
// imposta la velocità a 100 (0~255)
analogWrite(enA, 100);

// accende il motore b
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
// imposta la velocità a 100 (0~255)
analogWrite(enB, 100);

delay(60000);

// spegne tutti i motori
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);  
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);

delay(30000);

// cambia la direzione dei motori
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);  
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH); 

delay(6000);

// spegne tutti i motori
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);  
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);

delay(30000);
}

naturalmente con i collegamenti non ho problemi, mi puoi dire almeno dove sbaglio? perché mi da questi errori volevo postare il blog degli errori ma non posso più di 900 caratteri, se serve tra 5 minuti posso postare di nuovo, grazie

Non ho guardato i video che hai postato quindi non so che motore usi e come sono collegati.
Nel programma che hai postato non sembra ci siano errori di programmazione, non dovrebbe darti errori.
Poi che il programma risolva il tuo problema è un altro discorso, ma non esistono errori nel codice.

e come mai secondo te mi da questi errori? io faccio semplicemente verifica e basta, non l'ho collegato ancora ad Arduino, perché proprio leggendo come mi hai consigliato una delle prime cose che ho letto dice di verificare prima di collegarlo, forse col mio computer non va bene il software? poi per quanto riguarda il problema dei conteggi, a me non serve proprio la precisione in quanto la lampada la accendo con un timer, mi serve solo il movimento che l'attuatore lineare deve fare per spingere la lampada avanti ed indietro, perciò avevo messo i Delay di 60000 in movimento e 30000 fermo, poi se non sono precisissimi non mi interessa, e avevo pensato di mettere un timer all'alimentatore in modo che si accenda per 18 ore e Arduino comandi i movimenti in loop fino a che il timer non leva l'alimentazione all'alimentatore.
poi ho usato due motori da 6 v con L298N per collegare 2 motori che vadano più o meno all'unisono.
Scusa ancora tor ma quindi non sai come mai mi da questi errori quando verifico il codice?
grazie ancora dell'attenzione

@arivoluzion intanto però modifica il tuo post #4 e racchiudi il codice dentro ai tag "code" (vai in modifica, seleziona tutto il tuo codice e premi il pulsantino in alto a sinistra "</>").

docdoc:
@arivoluzion intanto però modifica il tuo post #4 e racchiudi il codice dentro ai tag "code" (vai in modifica, seleziona tutto il tuo codice e premi il pulsantino in alto a sinistra "</>").

fatto! :wink:

arivoluzion:
ho una stanza di coltivazione indoor con una sola lampada anche se ce ne vorrebbero due ma per i costi di corrente e il limite dei kwh del contatore ne posso avere solo una. Però se riuscissi a far muovere avanti ed indietro la lampada potrei coprire la superficie di due lampade

Scusa, ma di fatto ripartendo tra due zone l'irraggiamento, ogni zona riceve esattamente la metà di quello che avrebbe con una lampada fissa!

Quindi tutto questo giro che stai facendo è esattamente equivalente ad usare due lampade di metà potenza ma fisse. Ne vale la pena?

arivoluzion:
e come mai secondo te mi da questi errori?

Quali errori?

docdoc:
Scusa, ma di fatto ripartendo tra due zone l'irraggiamento, ogni zona riceve esattamente la metà di quello che avrebbe con una lampada fissa!

Quindi tutto questo giro che stai facendo è esattamente equivalente ad usare due lampade di metà potenza ma fisse. Ne vale la pena?

Quali errori?

per quanto riguarda le lampade è vero quello che dici però è molto importante non avere zone d'ombra, anche se la potenza non è massima, che poi diciamo non è la potenza che perdo, ma il tempo in cui una zona viene illuminata, però con questo sistema non ho zone d'ombra e quindi ho più omogeneità nel raccolto e nella crescita delle piante, infatti si vendono dei binari già fatti (ma costano un botto) per quanto riguarda gli errori ho riscritto il codice nel software e mi da questo errore:

"enB was not declared in this scope" e mi evidenzia la stringa dove si accende il motore b dove sta scritto analogwrite(enB, 100); per caso tu doc sai perché mi dice così? ho sbagliato a scrivere qualcosa? perché poi l' enA 100 me lo da per buono e non mi sembra ci siano differenza tra il motore a e il motore b, grazie per la risp comunque :wink:

Comunque ho risolto doc, l'errore non me lo da più, avevo sbagliato avevo messo una b piccola e non maiuscola, quindi ho risolto, vi ringrazio a tutti per l'aiuto, ora se mi dite che posso cancello il post, o se deve rimanere rimango così, fatemi sapere , grazie

arivoluzion:
Comunque ho risolto doc, l'errore non me lo da più, avevo sbagliato avevo messo una b piccola

Bene, meglio così, ma continuo ad avere dubbi circa l'utilità di una cosa del genere: 2 lampade fisse di metà potenza non danno ombre di nessun tipo, mentre una di potenza doppia ma che si muove si, anche se le ombre si muovono anche queste, per cui mi pare che la fatica di fare e gestire questo carrellino sia fatica sprecata (se non per "divertirsi" con Arduino, cosa legittima, ma non è propriamente lo scopo principale visto che non lo hai scritto :wink: ).

che poi diciamo non è la potenza che perdo, ma il tempo in cui una zona viene illuminata

Infatti non ho parlato di potenza, ma di irraggiamento totale (che si può calcolare con l'integrale nel tempo della potenza istantanea). Potenza doppia per metà tempo è identica a potenza singola nel doppio del tempo. Questo in termini di illuminazione totale ricevuta dalle piante, nel tuo caso l'aspetto termico che è equivalente in infrarossi.
Ma contento te... :wink: