Firgelli arduino control è il primo progetto realizzato per il controllo degli attuatori lineari prodotti da firgelli un’azienda canadese.
Faccio un passo indietro per comprendere meglio come sono arrivato a questa azienda e come mai ho deciso di acquistare i suoi attuatori lineari:
Se leggi il mio blog da qualche tempo sai della collaborazione con Federico Ciccarese che ha dato vita a tanti progetti interessanti e innovativi come:
quando le idee sono così innovative è necessario ricercare e testare strade nuove per realizzarle.
Ecco che un giorno Federico mi ha contattato parlandomi del progetto youbionic.com, ho intuito che stava iniziando una nuova avventura e che sarebbe stato necessaria una ricerca di elementi di uso comune da impiegare e controllare in modo differente per realizzare il nostro progetto.
Federico aveva già individuato in Firgelli il produttore degli attuatori lineari utili al progetto ed abbiamo provveduto ad acquistarne uno da testare.
Il firgelli arduino control è il test che ci permette di comprendere sia il funzionamento di questi attuatori sia la possibilità di controllarli mediante arduino.
Perché firgelli arduino control
Il produttore degli attuatori vende un proprio controller, che abbiamo acquistato per eseguire dei test, ma che non si è rivelato adatto allo scopo.
In particolare il controlle ( LAC ) fornito ha una risposta alquanto elevata riducendo l’efficenza dell’attuatore stesso.
Inoltre il controllo mediante cavo RC ( simile al funzionamento di un servo ) è molto discordante dalla linearità attesa.
Ho deciso quindi di realizzare il mio personale firgelli arduino control usando:
- n. 1 arduino uno
- n. 1 arduino motor shield
- n. 1 batteria LiPo 11,1v
- n. 1 attuatore lineare
- n. 1 adattatore per cavo da 3$
- n. 7 cavetti per breadboard
Collegamenti
Procurati i componenti necessari per la realizzazione del primo test del firgelli arduino control puoi collegarle la motor shield arduino su arduino ed i cavi per breadboard in questo modo:
collega il cavo verde è collegato all’A0 e sarà connesso al terminale P da cui leggere il valore del potenziometro presente nell’attuatore del firgelli arduino control.
Gli altri collegamenti sono quelli soliti della motor shield.
Lato attuatore puoi usare l’adattatore venduto dal produttore:
i contatti targati “P” si riferiscono al potenziometro e devono essere collegati come segue:
- P+ al +5v di arduino
- P- al Gnd arduino
- P al pin A0 arduino
- M+ al polo + del Ch A della motor shield
- M- al polo – del Ch A della motor shield
In questo modo controllerai il motore attraverso i pin M+ ed M- e userai P per leggere il valore proveniente dal potenziometro del attuatore ( feedback ).
Lo sketch del progetto
#define motorApwm 3 // ChA #define motorAdir 12 // ChA #define pinCallBack A0 int limiteInf = 34; int limiteSup = 1010; int direzione = HIGH; int lettura = 0; void setup() { Serial.begin(9600); pinMode(motorApwm, OUTPUT); pinMode(motorAdir, OUTPUT); analogWrite( motorApwm,0 ); } void loop() { lettura = analogRead( pinCallBack ); Serial.print ("lettura: "); Serial.println(lettura); if ( lettura >= limiteSup ) { direzione = LOW; } // limite superiore if ( lettura <= limiteInf ) { direzione = HIGH; } // limite inferiore analogWrite( motorApwm,255 ); digitalWrite( motorAdir,direzione ); delay( 10 ); }
linee 01-03: definisci i pin di controllo della motor shield, canale A, ed il pin da cui leggerai il feedback.
linee 05-06: imposta due variabili di tipo integer relative al limite superiore ed inferiore restituito dal potenziometro ( feedback ) del firgelli arduino control
linea 07: imposta la direzione di default, HIGH inidica di procedere estendendo il perno dell’attuatore lineare;
linea 09: imposta una variabile di tipo integer in cui memorizzerai il valore letto dal potenziometro ad ogni loop();
linea 12: imposta la comunicazione con il monitor seriale per poter leggere i valori provenienti dal pin A0 e visualizzarli sul monitor seriale;
linee 13-14: imposta a OUTPUT la modalità di funzionamento dei pin relativi a direzione e Pwm di arduino;
linea 16: imposta a 0 la velocità di movimento dell’attuatore in fase di setup();
linea 21: leggi il valore presente sul pin A0;
linee 22-23: scrivi sul monitor seriale il valore letto;
linea 25: confronta il valore raggiunto dal feedback e riportato nella variabile lettura e se supera il limite superiore impostato inverte la direzione;
linea 26: si comporta allo stesso modo della linea 25 ma confrontando il valore letto con il limite inferiore ed invertendo nuovamente la direzione;
linee 28-29: esegue i comandi sul firgelli arduino control impostando la velocità di movimento al massimo e la direzione definita dalle linee 25 e 26;
linea 31: in questo primo test ho voluto impostare a 10 millisecondi il tempo di attesa tra un ciclo loop() ed il successivo per verificare solo che il firgelli arduino control eseguisse il controllo dell’attuatore dall’inizio della sua corsa fino alla fine del movimento possibile.
Il video del firgelli arduino control
Ecco l’effetto dello sketch firgelli arduino control nel video:
13 commenti
1 ping
Vai al modulo dei commenti
Ciao Mauro, grazie per l’articolo.. ho una domanda:
è possibile bloccare il motore in una posizione?
Assunto il motore sul canale A, il pin digitale 9 è dichiarato come brake quindi è il freno del motore;
dopo aver letto un certo valore io lo stoppo
digitalWrite(BRAKE_A, HIGH); // raise the brak
ma continua la sua corsa fine alla fine.
Come mai?
sketch
[[ codice rimosso in automatico ]]
Autore
Ciao Luigi,
innazitutto, come avrai letto in fondo all’articolo, non è possibile incollare codice nei commenti, viene rimosso in automatico.
Perdonami ma non comprendo dove tu abbia dedotto, in questo sketch, il discorso brake.
Ciao Mauro, scusami per aver postato lo sketch, mea culpa.
Non ho dedotto da nessuna parte nel tuo sketch la possibilità del brake, la mia era una domanda portata dal fatto che il pin 9 è utilizzato per permettere il brake del motore e chiedevo appunto se lavorando sui motori avevi mai provato questa funzione 🙂
Autore
Ciao Luigi,
purtroppo non ho mai provato ad usare questa funzione della shield in quanto preferisco il metodo analogWrite( pin,0 ) per fermare i motori e di solito applico anche una funzione di decellerazione, solitamente, per correggere eventuali effetti inierziali.
In ogni caso se non ricordo male il brake della motor shield arduino devi abilitandolo anche saldando le piazzole in prossimità di tale pin.
Ciao Mauro,
mi potresti linkare il sito da cui hai comprato l attuatore lineare? Ne cerco uno che abbia abbastanza coppia da sollevare 10 kg ma che sia piccolo e veloce il più possibile…. anche non necessariamente low budget.
Mi sai dare qualche informazione in più sull’adattatore?
Ti ringrazio per tutto, seguo sempre i tuoi post con grande interesse e non sai quante volte mi hai risolto problemi!
Grazie,
Cecili
Autore
Ciao Cecili,
il sito lo trovi cercando in google “Firgelli”.
Non penso che questo tipo di attuatori siano adatti al tuo scopo, sono poco potenti e lenti, inoltre ho notato una non linearità tra il posizionamento ed il feedback.
Mauro,
I really thank you for all of this interesting information. I have a problem which is related to this circuit. It’s my graduation project and sadly I’m new to this arduino programming.
I have a PQ12 Firgelli actuator, just like the one you’re demonstrating here. But I don’t have an arduino shield. My arduino is a MEGA 2560, and I just need to use my actuator to extend and retract to cut an infrared circuit.
according to the data sheet of the PQ12:
The
desired actuator position is input to the actuator on lead 1 as
a positive 5 Volt pulse width signal. A 2.0 ms pulse commands
the controller to fully retract the actuator, and a 1.0 ms pulse
signals it to fully extend.
So, which type of sketch should I work with? An analouge PWM or a sweep?
I did find couple of sketches, but none of them worked, even though now I kinda understand the logic behind some of them.
Please help me, (by the way, I’ve used a google page translator to read this article)
Best regards,
Hussain
Autore
Hi Hussain,
PQ-12 not accept the command in ms directly.
Are you sure that you have a correct datasheet?
Donwload datasheet on firgelli site.
Mauro,
Thank you for your reply. Since the last time I wrote this, I managed to learn how to program a little bit and play with some sketch parameters I found based on my recent understanding.
I did manage to control the Firgelli PQ-12 actuator, but never via a width pulse as it’s mentioned in their data sheet. They mention that if you want to use it as a normal linear servo, you only have to connect 3 pins: Control, Vcc and ground. By giving it a 1.0 ms pulse, the actuator will extend, by giving it a 2.0 ms pulse, you will retract it.
None of this worked, though I did use (analogeWrite) with the assigned pin and a value of 255, followed by a delay of (10) and tried even (1000), but nothing happened.
The only way I managed to extend and retract the actuator, was to give it a HIGH and LOW pins digitalWrite OUTPUT and if I wanted to retract it I will simply reverse the polarity. Strange though that they say in the data sheet that reversing polarities might cause damage.
Here is the PQ12 data sheet:
http://www.robotshop.com/media/files/pdf/pq12-datasheet.pdf
To make things clear, I want to control 4 actuators of the same model via a tilt sensor or joystick (of course both of them will need an analogeRead) . This means that I need to connect my 4 actuators to a separate battery pack, with the arduino mega only feeding power to the joystick or tilt sensor.
In logical terms, we have to convert the AnalogRead values to an output for the actuator by using “if” statements I think. Once we do this, an output signal should be written as digitalWrite or analogWrite pulses.
I do have a sketch I did, but it’s not really working, and you said that we shouldn’t post it here.
I wish if you could help me, Mauro. I’m also thinking of posting this problem on the arduino forums.
I’m thinking of using your codes here and play with the parameters. Since I don’t have a motor shield, I will just assign one channel to a digital PWM pin, and the other one as ground, and see what happens.
Grazie!
Hussain
Autore
Hi Hussain,
the Firgelli PQ-12 only it controlled by ths method:
“The only way I managed to extend and retract the actuator, was to give it a HIGH and LOW pins digitalWrite OUTPUT and if I wanted to retract it I will simply reverse the polarity. “
Hello Mauro,
Well then you’re probably right, I just don’t see why there is a note or warning on their data sheet that reversing polarities might get it damaged. This means that my work was correct.
I have a final question, since you did not comment on how to create a code that will read an analog signal and then use it to extend or retract the actuator using HIGH and LOW, could you please tell me how can I control my actuator if I’m not powering it from my arduino micro-controller?
See, if I’m feeding the actuator power from a separate battery pack, once I connect it to the Firgelli actuator, it will immediately actuate it! so how can I control the battery pack then? I know that the battery pack ground should be common with my micro-controller, but of course that’s not enough to control my actuator.
Thanks a lot Mauro!
Autore
Hi Hussain, can you read my post on free base course arduino on-line on this blog to learning how to read a simple analog read signal.
Only the Gnd pin is connected from external battery pack and micro controller.
By the way, my 7.2 battery pack does come with 2 different output wires:
A two red and back wire (+ -), in which you can take these two as an input to your breadboard, if I used thsi directly, it will directly activate my actuator.
The second output, has three wires, much like the servo wires. A red, black and white one. I’m assuming that the white one could be used as a control wire, but I’m not sure how can I use it.
I would appreciate it if you have some information about this, because it’s my first time using these.
Thank you.
[…] qualche giorno fa hai letto il test dell’attuatore lineare della firgelli scelto per questo […]