In questo esempio controlleremo la velocità di un attuatore lineare con un Arduino e un driver del motore.
Nota: questo tutorial presuppone una conoscenza preliminare dei principi elettronici di base, dell'hardware e del software Arduino. Se è la prima volta che utilizzi Arduino, ti suggeriamo di apprendere le basi da uno dei tanti fantastici tutorial per principianti disponibili tramite le ricerche su Google e YouTube. Tieni presente che non abbiamo le risorse per fornire supporto tecnico per applicazioni personalizzate e non eseguiremo il debug, la modifica, la fornitura di codice o schemi elettrici al di fuori di questi tutorial disponibili pubblicamente.
Componenti
- Attuatore lineare 12V
- Alimentazione 12V
- Arduino
- Driver del motore
- Potenziometro (opzionale)
- Cavi elettrici per effettuare collegamenti e pinza o saldatore
Cablaggio
Panoramica hardware e software
I motori CC negli attuatori lineari richiedono una corrente elevata (fino a 5 A), se dovessimo collegare l'attuatore lineare direttamente ad Arduino questo elevato assorbimento di corrente distruggerebbe i pin digitali di Arduino poiché sono classificati solo per 40 mA ciascuno. Pertanto utilizziamo un driver del motore che può ricevere un segnale PWM (modulazione di larghezza di impulso) a bassa corrente dalla scheda Arduino e inviare un segnale PWM ad alta corrente all'attuatore lineare.
Il driver del motore è collegato a due pin digitali PWM (pin 10 e 11 su Arduino Uno). Impostando uno di questi pin su BASSO e l'altro su ALTO (vedi riga 18 e 19 nel codice sottostante) possiamo estendere l'attuatore alla massima velocità. Per fermare l'attuatore, impostiamo entrambi i pin su LOW (vedere le righe 21 e 22 nel codice sotto) e per invertire la direzione del movimento possiamo invertire l'ordine dei pin HIGH e LOW (vedere le righe 24 e 25 nel codice sotto). Possiamo anche regolare la velocità cambiando la variabile "Speed" su qualsiasi valore compreso nell'intervallo [0, 255]; vedere la riga 17 nel codice sottostante.
Codice
https://gist.github.com/Will-Firgelli/c0ef0871dc1946d75257e0c29dccae2a
/* Firgelli Automations
* Limited or no support: we do not have the resources for Arduino code support
*
* Program demos how a motor driver controls direction & speed of a linear actuator
*/
int RPWM = 10; //connect Arduino pin 10 to IBT-2 pin RPWM
int LPWM = 11; //connect Arduino pin 11 to IBT-2 pin LPWM
int Speed;
void setup() {
pinMode(RPWM, OUTPUT);
pinMode(LPWM, OUTPUT);
}
void loop() {
Speed = 255; //choose any speed in the range [0,255]
analogWrite(RPWM, 0);
analogWrite(LPWM, Speed);
delay(1000); //extend at given speed for one second
analogWrite(RPWM, 0);
analogWrite(LPWM, 0);
delay(500); //stop for half a second
analogWrite(RPWM, Speed);
analogWrite(LPWM, 0);
delay(1000); //retract at maximum speed for one second
}
Controllo della velocità variabile con un potenziometro
Nell'esempio sopra abbiamo impostato manualmente la velocità nella riga 17 del codice. Tuttavia possono verificarsi situazioni in cui si desidera variare la velocità dell'attuatore nel tempo. Il metodo più semplice per ottenere ciò è utilizzare un potenziometro. UN il potenziometro èun resistore variabile a tre terminali che può fungere da partitore di tensione. Ruotando la manopola del potenziometro varierà la tensione di uscita e possiamo collegarla al pin analogico su un Arduino per impostare una velocità variabile.
Cablaggio
Panoramica hardware e software
Come accennato in precedenza, un potenziometro è un dispositivo rotante che cambia la resistenza quando la manopola viene ruotata. Collegando i due pin esterni del potenziometro a 5V e GND e il pin centrale al pin analogico di Arduino, A0, viene creato un partitore di tensione. Quando la manopola viene ruotata, Arduino leggerà letture analogiche comprese tra [0, 1023].
Per i valori nell'intervallo [512, 1023] vogliamo che l'attuatore si estenda e per i valori [0, 511] vogliamo che l'attuatore si ritiri, ciò può essere ottenuto con una semplice istruzione if () / else nelle righe 22 e 28 in il codice di seguito. Quindi utilizzando la funzione map () (riga 23 e 29 nel codice sotto) possiamo convertirlo in un segnale PWM che controllerà sia la velocità che la direzione dell'attuatore.
Codice
https://gist.github.com/Will-Firgelli/d2cdf69edc829974885984b3fb8e4856
/* Firgelli Automations
* Limited or no support: we do not have the resources for Arduino code support
*
* This progam controls the speed of a linear actuator via a potentiometer input
*/
int RPWM = 10; //connect Arduino pin 10 to IBT-2 pin RPWM
int LPWM = 11; //connect Arduino pin 11 to IBT-2 pin LPWM
int potPin = A0; //analog pin that connects to centre potentiometer pin
int Speed, sensorVal;
void setup() {
pinMode(RPWM, OUTPUT);
pinMode(LPWM, OUTPUT);
pinMode(potPin, INPUT);
}
void loop() {
sensorVal = analogRead(potPin); //read user input from the potentiometer
if(sensorVal >= 512){ //extension
Speed = map(sensorVal, 512, 1023, 0, 255);
analogWrite(RPWM, 0);
analogWrite(LPWM, Speed);
}
else{ //retraction
Speed = map(sensorVal, 0, 511, 255, 0);
analogWrite(RPWM, Speed);
analogWrite(LPWM, 0);
}
}