В этом примере мы будем управлять направлением линейного привода с Arduino и двумя сиюминутными переключателями. Этот учебник основывается на принципах, обсуждаемых в учебнике "Управление скоростью водителя с Arduino", мы советуем пересмотреть этот учебник, прежде чем продолжить.
Этот учебник разбит на два раздела: кнопки нажатия, действующие в сиюминутном режиме (т.е. приводы перестают двигаться при освобождении кнопки) и кнопки, действующие в режиме поддержания (т.е. приводы продолжают двигаться даже при освобождении кнопки).
Примечание: Этот учебник предполагает предварительные знания с основными электронными принципами, arduino аппаратного и программного обеспечения. Если это ваш первый раз с помощью Arduino мы предлагаем узнать основы от одного из многих великих начинающих учебники доступны через Google и YouTube поисков. Пожалуйста, имейте в виду, что у нас нет ресурсов для предоставления технической поддержки пользовательских приложений и не будет отладки, редактирования, предоставления кода или проводки диаграммы за пределами этих общедоступных учебников.
Компоненты
- 12V Линейный привод
- 12V электроснабжение
- Arduino
- Водитель двигателя
- Две сиюминутные кнопки (по желанию третья кнопка для управления защелками)
- Электрические провода для подключения и обжимного инструмента или припоя железа
Проводки
Обзор оборудования и программного обеспечения для сиюминутного управления
Моментные переключатели используются только тогда, когда вы хотите, чтобы привод двигался во время нажатия кнопки, привод автоматически перестанет двигаться, когда кнопка будет выпущена. Загрузите код ниже.
Код для сиюминутного контроля
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);
}
}
Обзор оборудования и программного обеспечения для поддержания контроля
Кроме того, иногда вы можете использовать кнопку защелки; иметь привод двигаться, когда вы нажимаете кнопку, а затем продолжать двигаться, когда вы отпустите кнопку. Для этого вам нужно будет добавить еще один переключатель, подключенный к пин-коду 8 и GND, а затем загрузить программу ниже. Так как привод не перестанет двигаться, когда кнопка будет выпуск, этот новый переключатель будет действовать кнопкой "стоп".
Кодекс для поддержания контроля
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);
}
}