Buongiorno,
Mi chiamo Luca e scrivo dalla provincia di Forlì Cesena. Sono nuovo del forum, anzi di tutti i forum in quanto non mi sono mai registrati a nessuno.
Sono un ingegnere meccanico e non conosco nulla o quasi di programmazione in C. Scrivo perché avrei bisogno di programmare il mio Arduino Mega per un'applicazione meccanica che ho già costruito ma che devo gestire in modo abbastanza lineare.
Sinceramente non me la sento e non ho grande tempo libero per imparare a programmare in modo affinato, e perciò mi chiedevo se qualcuno volesse aiutarmi (con compenso chiaramente) nello scrivere le righe del testo per ciò che devo fare.
Si tratta di in potenziometro di Input (0-5 kOhm) da me azionato che funge da ingresso analogico A0. In retroazione ho un altro potenziometro di Output (sempre 0-5 kOhm) come ingresso analogico A1. Quest'ultimo potenziometro è azionato da un cilindro oleodinamico. Il cilindro è comandato da una elettrovalvola proporzionale a 24 V che varia la portata di olio in base alla corrente di alimentazione del solenoide interno (da 0 a 2 A). E' una valvola con doppio solenoide (a destra e sinistra) per permettere all'olio di invertire il flusso e quindi azionare il cilindro avanti ed indietro (cilindro doppio effetto).
Per avere la potenza necessaria in modo da alimentare la valvola proporzionale ho installato il driver L298N.
L298N è alimentato a 24V ed è collegato come segue:
-
ENA pin digitale tramite il quale inviare un segnale di tipo PWM al modulo (output 10)
-
IN1 pin digitale per determinare gli stati logici da inviare al modulo (output 30)
-
IN2 pin digitale per determinare gli stati logici da inviare al modulo (output 32)
-
ENB pin digitale tramite il quale inviare un segnale di tipo PWM al modulo (output 11)
-
IN3 pin digitale per determinare gli stati logici da inviare al modulo (output 34)
-
IN4 pin digitale per determinare gli stati logici da inviare al modulo (output 36)
Io vorrei eseguire un controllo PID (Proporzionale Integrale e Derivativo), o comunque qualcosa di simile, in modo che l'errore (A0-A1) tenda sempre a 0, ovvero, quando muovo il potenziometro A0 il meccanismo con cilindro oleodinamico dovrebbe muoversi in modo lineare in modo che A1 "copi" i valori di A0.
Al momento sono solo riuscito ad inviare al driver L298N un segnale in PWM con la seguente formula:
potenza = map(abs(errore), 0, 1024, 0, 255);
Il tutto però è molto poco lineare.
Grazie e Saluti,
Luca