Neste exemplo, controlaremos a direção de um atuador linear com um Arduino e duas chaves momentâneas. Este tutorial se baseia nos princípios discutidos no tutorial “Controle de velocidade do driver do motor com um Arduino”, Aconselhamos revisar esse tutorial antes de continuar.
Este tutorial é dividido em duas seções: botões atuando no modo momentâneo (ou seja, os atuadores param de se mover quando o botão é liberado) e botões atuando no modo de sustentação (ou seja, os atuadores continuam se movendo mesmo quando o botão é liberado).
Nota: Este tutorial pressupõe conhecimento prévio com princípios eletrônicos básicos, hardware e software Arduino. Se esta é a primeira vez que usa o Arduino, sugerimos aprender o básico de um dos muitos excelentes tutoriais para iniciantes disponíveis nas pesquisas do Google e do YouTube. Esteja ciente de que não temos os recursos para fornecer suporte técnico para aplicativos personalizados e não depuraremos, editaremos, forneceremos código ou diagramas de fiação fora desses tutoriais disponíveis publicamente.
Componentes
- 12V Linear Atuador
- Fonte de alimentação 12V
- Arduino
- Motorista
- Dois botões momentâneos (opcionalmente um terceiro botão para controle de travamento)
- Fios elétricos para fazer conexões e ferramenta de crimpagem ou ferro de solda
Fiação
Visão geral de hardware e software para controle momentâneo
Os interruptores momentâneos são usados quando você deseja que o atuador apenas se mova enquanto o botão é pressionado. O atuador irá parar automaticamente de se mover quando o botão for liberado. Faça upload do código abaixo.
Código para controle momentâneo
https://gist.github.com/Will-Firgelli/aeee209bda6b2246359eed70ec353eb8
/* Firgelli Automations
* Limited or no support: we do not have the resources for Arduino code support
*
* Program enables momentary direction control of actuator using push button
*/
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 downPin = 12;
int upPin = 13;
int Speed = 255; //choose any speed in the range [0, 255]
void setup() {
pinMode(RPWM, OUTPUT);
pinMode(LPWM, OUTPUT);
pinMode(downPin, INPUT_PULLUP);
pinMode(upPin, INPUT_PULLUP);
}
void loop() {
if(digitalRead(upPin)==LOW){ //check if extension button is pressed
analogWrite(RPWM, 0);
analogWrite(LPWM, Speed);
}
else if(digitalRead(downPin)==LOW){ //check if retraction button is pressed
analogWrite(RPWM, Speed);
analogWrite(LPWM, 0);
}
else{ //if no button is pushed, remain stationary
analogWrite(RPWM, 0);
analogWrite(LPWM, 0);
}
}
Visão geral de hardware e software para manter o controle
Como alternativa, às vezes você pode querer usar um botão de travamento; faça com que o atuador se mova ao apertar um botão e, em seguida, continue em movimento quando você soltar o botão. Para conseguir isso, você precisará adicionar mais uma chave, conectada ao pino 8 e GND, e então carregar o programa abaixo. Uma vez que o atuador não para de se mover quando o botão é liberado, este novo interruptor atuará como um botão de "parar".
Código para manter o controle
https://gist.github.com/Will-Firgelli/2b96dce14c0cee7a0009e61e47cc5f67/* Firgelli Automations
* Limited or no support: we do not have the resources for Arduino code support
*
* Program enables latching direction control of actuator using push button
*/
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 stopPin = 8;
int downPin = 12;
int upPin = 13;
int Speed = 255; //choose any speed in the range [0, 255]
void setup() {
pinMode(RPWM, OUTPUT);
pinMode(LPWM, OUTPUT);
pinMode(stopPin, INPUT_PULLUP);
pinMode(downPin, INPUT_PULLUP);
pinMode(upPin, INPUT_PULLUP);
}
void loop() {
if(digitalRead(upPin)==LOW){ //check if extension button is pressed
analogWrite(RPWM, 0);
analogWrite(LPWM, Speed);
}
else if(digitalRead(downPin)==LOW){ //check if retraction button is pressed
analogWrite(RPWM, Speed);
analogWrite(LPWM, 0);
}
else if(digitalRead(stopPin)==LOW){ //check if retraction button is pressed
analogWrite(RPWM, 0);
analogWrite(LPWM, 0);
}
}