Buongiorno ragazzi,
per lavoro mi è stato commissionato un progetto per un box di asciugatura pezzi in alluminio appena usciti dalla lavorazione CNC.
Ho pensato a una guida lineare con un motore passo passo nema 24.
Comandato da un driver tb6600 e scheda arduino.
La guida lineare con corsa 400mm avrà sopra fissato un generatore di barriera d'aria dal peso di circa 3 kg.
IL mio intento è di riuscire con il semplice premere di un bottone, far partire l'aria comandata da una elettrovalvola a 24V connessa con un relè ad arduino e nello stesso momento far partire la guida avanati e indietro (x) volte a una (Y) velocità.
Ho già disegnato con fritzing lo schema e ho già fatto diverse prove per gestire un piccolo nema 17 di prova.
Il pulsante che ho acquistato è questo
Sto rispolverando le mie basi di elettronica e sto iniziando ad usare arduino facendo i principali esercizi.
Potreste aiutarmi a fare uno sketch che faccia al mio caso?
Vi ringrazio tanto per la disponibilità!
Davidedade:
Potreste aiutarmi a fare uno sketch che faccia al mio caso?
come puoi aver letto nel regolamento, non si scrive programmi per conto terzi... ma bensì si da una mano a risolvere eventuali problemi di logica o funzionamento
perciò incomincia a tirare giù qualche linea di codice, postala con relativi problemi e/o errori
Ho già buttato giù qualche riga ma ho tutto salvato sul pc a casa.
Appena riesco posto quello che ho cominciato a fare.
Come collegamenti secondo te possono andare bene?
Davidedade:
Buongiorno ragazzi,
per lavoro mi è stato commissionato un progetto per un box di asciugatura pezzi in alluminio appena usciti dalla lavorazione CNC.
Sei al corrente vero che Arduino non è certificato per l'uso in ambito civile/industriale ma solo come prototipo? Visto che parli di progetto commissionato direi che sarà facile sfociare nella violazione del regolamento punto 15 ecc. quindi attenzione! Comunque ed in ogni caso non potrai usare Arduino tal quale nel progetto finito
Se non sai neanche come si può collegare un pulsante per poi leggerlo da qualche parte e quindi come usarlo per un input su Arduino, temo che tu debba partire prima dalle basi di Arduino (ma non sei diplomato in elettronica?)...
Inizia a farti un progettino semplice con un pulsante ed un LED, e fai un programmino che quando premi il pulsante accende o spegne il LED. Con questo puoi iniziare a capirci qualcosa e iniziare andando avanti con un altro progettino (separato dal primo) che quando premi il pulsante ti attiva un relè (per ora senza carico, basta vedere che si attiva e si disattiva) poi fai qualche esperimento con il driver per lo stepper (anche qui, un progetto dove fai SOLO questo).
E alla fine (SOLO alla fine!) quando questi 3 esperimenti iniziano a funzionare allora puoi pensare di mettere insieme l'esperienza in un unico programma e quindi proptotipo (Arduino lo puoi usare SOLO per prototipazione, per un uso in ambito civile o industriale tu DEVI fare un progetto completo e farlo certificare).
Scusatemi ma se mi sono rivolto a voi è perchè non sono competente, un bottone so ancora collegarlo dai, ma arduino fino qualche giorno fa non sapevo neanche cosa fosse.
Sono riuscito a buttare giù una bozza del programma e provarlo, ma volevo implementare con due finecorsa per aver la sicurezza di non andare a sbattere. Quali mi consigliate? Il problema è che saranno seggetti a schizzi d'acqua e turbolenze d'aria.
const int stepPin = 5;
const int dirPin = 3;
const int enPin = 8;
const int elettrovalvola = 2
int vel = 500;
int pulsante = 10;
int StatoPulsante = 0;
bool Runciclo = 0;
void setup() {
pinMode(pulsante, INPUT);
pinMode(stepPin,OUTPUT);
pinMode(dirPin,OUTPUT);
pinMode(enPin,OUTPUT);
pinMode(elettrovalvola,OUTPUT);
digitalWrite(enPin,LOW);
}
void loop() {
StatoPulsante = digitalRead(pulsante);
if (StatoPulsante == 1){
Runciclo = true;
}
if (Runciclo == 1){
digitalWrite(elettrovalvola,HIGH);
digitalWrite(dirPin,HIGH);
// 200 impulsi per un giro completo
for(int x = 0; x < 2000; x++) {
digitalWrite(stepPin,HIGH);
delayMicroseconds(vel);
digitalWrite(stepPin,LOW);
delayMicroseconds(vel);
}
delay(500);
digitalWrite(dirPin,LOW);
// 200 impulsi per un giro completo
for(int x = 0; x < 2000; x++) {
digitalWrite(stepPin,HIGH);
delayMicroseconds(vel);
digitalWrite(stepPin,LOW);
delayMicroseconds(vel);
}
Runciclo = false;
}
else { //Altrimenti:
digitalWrite(stepPin,LOW);
digitalWrite(dirPin,LOW);
digitalWrite(elettrovalvola,LOW);
}
}
il pulsante è mal gestito : ovvero non c'è nessun anti-rimbalzo nè via SW nè via HW --> in base al codice e schema che hai postato
momenti di non controllo : quando entra all'interno del for da 2000 cicli se è imppostata 500 us la pausa, il ciclo si conclude in 2 secondi, ma se la pausa fosse già da 1 ms , il ciclo totale dure 4 s .... e nel caso ci fosse un problema proprio mentre sta dentro il for, l'unica cosa che puoi fare è staccare l'alimentazione.
(2s in elettronica sono un'eternità... ne possono capitare di cose...)
Si può ovviare cambiando il metodo di gestione del motore, non con delay ma magari con la funzione millis(), e/o usare un pin interrupt per mettere un pseudo pulsante di stop lavorazione
Davidedade:
Scusatemi ma se mi sono rivolto a voi è perchè non sono competente, un bottone so ancora collegarlo dai, ma arduino fino qualche giorno fa non sapevo neanche cosa fosse.
Perfetto, e comprensibile. Però per me devi seguire i criteri "passo-passo" che ti ho indicato. Se pensi da zero di scrivere un programma stai solo perdendo tempo e demoralizzarti se non riesci a fargli fare le cose che vuoi.
Fai come ti ho consigliato, vedrai che diventerà tutto più semplice. Se invece vuoi fare altro, beh, non possiamo aiutarti se non scrivendoti noi il codice, cosa che non facciamo.
Il codice scritto è una bozza funzionante. Ovvero appena mi arriva la guida lineare aggiungerò x cicli e i passi non saranno 2000 ma in base alla mia corsa.
Non ho capito perchè il pulsante è mal gestito, perdonate la mia ignoranza!
Per la questione di un secondo pulsante di stop non è affatto una brutta idea grazie.