Проблема: Срабатывание концевого выключателя для остановки двигателя постоянного тока.
Я хочу создать проект по управлению автоматическими воротами и гаражными воротами через приложение Android и подключение через модуль Bluetooth HC-05. Каждые ворота и гаражные ворота оснащены двумя концевыми выключателями (расположенными на каждом конце хода) для остановки двигателя постоянного тока.
Я написал код и провожу исследования, но двигатель постоянного тока останавливается только тогда, когда я нажимаю на него, если я отпускаю его снова, он автоматически запускается. Я хочу, чтобы он останавливался, пока модуль Bluetooth снова не отправит код. Я подключил понижающий резистор к концевому выключателю.
Кто-нибудь может мне помочь?
Вот мой текущий код, спасибо
// Двигатель для ворот (MotorA)
int IN1 = 2;
int IN2 = 3;
int EnableMotorA = 9;
// Мотор для гаражных ворот (MotorB)
int IN3 = 4;
int IN4 = 5;
int EnableMotorB = 10;
const int LimitSwitch1 = A1;
const int LimitSwitch2 = A2;
const int LimitSwitch3 = A3;
const int LimitSwitch4 = A4;
int state;
void setup(){
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
pinMode(EnableMotorA,OUTPUT);
pinMode(IN3,OUTPUT);
pinMode(IN4,OUTPUT);
pinMode(EnableMotorB,OUTPUT);
pinMode(LimitSwitch1, INPUT);
pinMode(LimitSwitch2, INPUT);
pinMode(LimitSwitch3, INPUT);
pinMode(LimitSwitch4, INPUT);
digitalWrite(LimitSwitch1, LOW);
digitalWrite(LimitSwitch2, LOW);
digitalWrite(LimitSwitch3, LOW);
digitalWrite(LimitSwitch4, LOW);
Serial.begin(9600);
}
void loop(){
if(Serial.available() > 0){
state = Serial.read();
}
if(state == 'A') {
OpenGate();
if(digitalRead(LimitSwitch2) == HIGH){
StopMotorA();
}
}
else if(state == 'B') {
CloseGate();
if(digitalRead(LimitSwitch1) == HIGH){
StopMotorA();
}
}
else if(state == 'C') {
OpenGarageDoor();
if(digitalRead(LimitSwitch4) == HIGH){
StopMotorB();
}
}
else if(state == 'D') {
CloseGarageDoor();
if(digitalRead(LimitSwitch3) == HIGH){
StopMotorB();
}
}
}
//******************** Управление двигателем А *******************
void OpenGate(){
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
analogWrite(EnableMotorA, 250);
}
void CloseGate(){
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
analogWrite(EnableMotorA, 250);
}
void StopMotorA(){
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
analogWrite(EnableMotorA, 0);
}
//******************** Управление двигателем B *******************
void OpenGarageDoor(){
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
analogWrite(EnableMotorB, 250);
}
void CloseGarageDoor(){
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(EnableMotorB, 250);
}
void StopMotorB(){
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
analogWrite(EnableMotorB, 0);
}
//*********************************************************
0
Смотрите также:
- Управление двигателем Arduino Uno с помощью 2 реле, 2 концевых выключателей и Bluetooth. Вперед Назад Стоп
- Заменить механический переключатель электрическим переключателем или реле.
- Arduino сбрасывается или зависает во время работы, только когда подключены двигатели постоянного тока
- Можно ли объединить модуль Bluetooth h HC-05 и уменьшенную плату Arduino ATtiny45/85 для управления двигателем, светодиодами или другими компонентами?
- Как управлять коммутатором (proteus) с помощью Bluetooth-карты (HC-05) и arduino?
- Энкодер соединен с валом двигателя. Энкодер выдает более высокие значения, чем ожидалось.
- Можно ли измерить скорость акселерометром? Насколько точно?
- Управление скоростью вентилятора с помощью библиотеки Arduino PID