In dit voorbeeld regelen we de snelheid van een lineaire actuator met een Arduino en motordriver.
Opmerking: deze tutorial veronderstelt voorkennis met elektronische basisprincipes, Arduino-hardware en -software. Als dit de eerste keer is dat je Arduino gebruikt, raden we je aan om de basisprincipes te leren van een van de vele geweldige tutorials voor beginners die beschikbaar zijn via Google- en YouTube-zoekopdrachten. Houd er rekening mee dat we niet de middelen hebben om technische ondersteuning te bieden voor aangepaste toepassingen en we zullen geen fouten opsporen, bewerken, code of bedradingsschema's verstrekken buiten deze openbaar beschikbare tutorials.
Componenten
- 12V lineaire actuator
- 12V voeding
- Arduino
- Motor bestuurder
- Potentiometer (optioneel)
- Elektrische draden voor het maken van verbindingen en krimptang of soldeerbout
Bedrading
Hardware- en softwareoverzicht
De gelijkstroommotoren in lineaire actuatoren hebben een hoge stroomsterkte nodig (tot 5A), als we de lineaire actuator rechtstreeks op de Arduino zouden aansluiten, zou deze hoge stroomafname de digitale pennen van de Arduino vernietigen, aangezien ze slechts geschikt zijn voor 40 mA elk. Daarom gebruiken we een motordriver die een PWM (pulsbreedtemodulatie) -signaal met lage stroomsterkte van het Arduino-bord kan opnemen en een PWM-signaal met hoge stroom naar de lineaire actuator kan sturen.
De motordriver is verbonden met twee PWM digitale pinnen (pinnen 10 en 11 op de Arduino Uno). Door een van deze pinnen LAAG en de andere HOOG in te stellen (zie regel 18 en 19 in onderstaande code) kunnen we de actuator op maximale snelheid verlengen. Om de actuator te stoppen zetten we beide pinnen op LAAG (zie regel 21 en 22 in onderstaande code) en om de bewegingsrichting om te keren kunnen we de volgorde van de HOGE en LAGE pinnen omkeren (zie regel 24 en 25 in onderstaande code). We kunnen de snelheid ook aanpassen door de variabele "Snelheid" te veranderen in een waarde in het bereik [0, 255]; zie regel 17 in onderstaande code.
Code
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
}
Gevarieerde snelheidsregeling met een potentiometer
In bovenstaand voorbeeld stellen we handmatig de snelheid in regel 17 van de code in. Er kunnen zich echter situaties voordoen waarin we de snelheid van de actuator in de tijd willen variëren. De eenvoudigste methode om dit te bereiken, is door een potentiometer te gebruiken. EEN potentiometer iseen variabele weerstand met drie aansluitingen die als spanningsdeler kan werken. Door aan de knop van de potentiometer te draaien zal de uitgangsspanning variëren en kunnen we deze aansluiten op de analoge pin op een Arduino om een variabele snelheid in te stellen.
Bedrading
Hardware- en softwareoverzicht
Zoals hierboven vermeld, is een potentiometer een roterend apparaat dat de weerstand verandert wanneer de knop wordt gedraaid. Door de twee buitenste pinnen van de potentiometer te verbinden met 5V en GND, en de middelste pin met de analoge Arduino-pin, A0, ontstaat een spanningsdeler. Terwijl de knop wordt gedraaid, leest de Arduino analoge waarden van [0, 1023].
Voor waarden in het bereik [512, 1023] willen we dat de actuator uitschuift en voor waarden [0, 511] willen we dat de actuator intrekt, dit kan worden bereikt met een eenvoudige if () / else-instructie in regel 22 en 28 in de onderstaande code. Met behulp van de map () -functie (regel 23 en 29 in onderstaande code) kunnen we dit omzetten in een PWM-signaal dat zowel de snelheid als de richting van de actuator regelt.
Code
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);
}
}