Добрый день. Возможно кто-либо сталкивался с данным вопросом.
Имеется мотор редуктор 12в 0.3А примерно в нагрузке(нужен взамен китайского сервопривода). Внутри редуктора есть плата и потенциометр для обратной связи,на шестерне контакты, на плате дорожки, аналогично, как в мультиметре.(данный мотор управляет климатконтролем на микрухе тошиба(других обозначений нет на ней,да и не нужна она) и ручкой аля газовая плита "САРАТОВ".
Суть в том чтоб ручку заменить двумя кнопками.
Итак,дано:
Моторредуктор с обратной связью в виде потенциометра внутри корпуса.
Шилд L293D.
2 тактовых NO кнопки.
Ардуино уно от дядюшки Мадэинчина.
Все в принципе работает, но хочу уйти от delay, что немаловажно, после motor1.run(RELEASE) на клеммах шилда , куда подключен мотор напруга пропадает(как и положено).
Пытаюсь использовать val для установки значения при котором происходит событие motor1.run(RELEASE), но все бестолку. Либо вообще отказывается работать, либо поворачивается от крайнего до крайнего положения (29 и 234) и напруга не отключается.
При работе с обычной сервой добился еще некоего промежуточного(центрального положения). То есть нажал на BUT1серва повернулась с 0 до 90, нажал еще раз и повернулась с 90 до 180, вторая кнопка делает все тоже самое, но в обратную сторону. С данным моторредуктором такое вряд ли проканает(Если это возможно, подскажите как).
Второй вопрос связан с таким же моторредуктором, но уже с 4 кнопками, каждая из которых отвечает за определенный угол и поворачивает его на этот угол , независимо от того, в каком положении сейчас находится. С обычной сервой все организовалось легко и просто. Как тут управлять, используя переменную - не понимаю.
Пытался приростить от старой китайской сервы начинку на этот мотор, худо бедно он стронулся с места от 5вольт, но плата управления сервой нагрелась так, что на второй эксперимент не рискнул.
Возможно ли использовать данные моторредукторы с тем функционалом , который описан в скетче ниже для обычных китайских серв? Если да, то подскажите как именно.
Код с нормальными сервами ардуино:
Если данный пост противоречит правилам форума, прошу удалить его. За ранее спасибо, всем ответившим. Скажу сразу, с ардуино я не то , чтоб на " Вы", а скажем так, на "Ваше величество". Очень прошу в ответах не использовать сленг , абривиатуры и оскорбления с посыланием в гугл. Буду безмерно признателен за развернутые ответы.
Имеется мотор редуктор 12в 0.3А примерно в нагрузке(нужен взамен китайского сервопривода). Внутри редуктора есть плата и потенциометр для обратной связи,на шестерне контакты, на плате дорожки, аналогично, как в мультиметре.(данный мотор управляет климатконтролем на микрухе тошиба(других обозначений нет на ней,да и не нужна она) и ручкой аля газовая плита "САРАТОВ".
Суть в том чтоб ручку заменить двумя кнопками.
Итак,дано:
Моторредуктор с обратной связью в виде потенциометра внутри корпуса.
Шилд L293D.
2 тактовых NO кнопки.
Ардуино уно от дядюшки Мадэинчина.
Код:
#include <AFMotor.h> // подключаем библиотеку для шилда
AF_DCMotor motor1(1); // подключаем мотор к клеммникам M1
#define POT A0 //центральный провод встроенного потенциометра, крайние подключены на GND и 5v
#include <GyverButton.h> // библиотека кнопок
GButton BUT1(5);
GButton BUT2(6); // назначение пинов кнопок
//при нажатии BUT1 в сериал выводится значение от 234 до 29
//при нажатии BUT2 в сериал выводится значение от 29 до 234
int val = 0; // переменная потенциометра
void setup()
{
motor1.setSpeed(255); // задаем максимальную скорость мотора
motor1.run(RELEASE); // останавливаем мотор
Serial.begin(9600);
}
void loop()
{
BUT1.tick();
BUT2.tick();
val = analogRead(POT); // Читаем значения с потенциометра
val = map(val, 0, 1023, 0, 255); // диапазон значений от 0 до 255
Serial.println(val); // вывод значений в порт
if (BUT1.isPress())
{
motor1.run(FORWARD); // задаем движение вперед
motor1.setSpeed(255); // задаем скорость движения
delay (6000); // 6 секунд от крайнего до крайнего положения при 10в на моторе
motor1.run(RELEASE); // остановка мотора
}
if (BUT2.isPress())
{
motor1.run(BACKWARD); // задаем движение вперед
motor1.setSpeed(255); // задаем скорость движения
delay (6000); // 6 секунд от крайнего до крайнего положения при 10в на моторе
motor1.run(RELEASE); // остановка мотора
}
}
Пытаюсь использовать val для установки значения при котором происходит событие motor1.run(RELEASE), но все бестолку. Либо вообще отказывается работать, либо поворачивается от крайнего до крайнего положения (29 и 234) и напруга не отключается.
При работе с обычной сервой добился еще некоего промежуточного(центрального положения). То есть нажал на BUT1серва повернулась с 0 до 90, нажал еще раз и повернулась с 90 до 180, вторая кнопка делает все тоже самое, но в обратную сторону. С данным моторредуктором такое вряд ли проканает(Если это возможно, подскажите как).
Второй вопрос связан с таким же моторредуктором, но уже с 4 кнопками, каждая из которых отвечает за определенный угол и поворачивает его на этот угол , независимо от того, в каком положении сейчас находится. С обычной сервой все организовалось легко и просто. Как тут управлять, используя переменную - не понимаю.
Пытался приростить от старой китайской сервы начинку на этот мотор, худо бедно он стронулся с места от 5вольт, но плата управления сервой нагрелась так, что на второй эксперимент не рискнул.
Возможно ли использовать данные моторредукторы с тем функционалом , который описан в скетче ниже для обычных китайских серв? Если да, то подскажите как именно.
Код с нормальными сервами ардуино:
Код 2:
#define PIN 0 // кнопка подключена сюда (PIN --- КНОПКА --- GND)
#define PIN 1 // кнопка подключена сюда (PIN --- КНОПКА --- GND)
#define PIN 7 // кнопка подключена сюда (PIN --- КНОПКА --- GND)
#define PIN 6 // кнопка подключена сюда (PIN --- КНОПКА --- GND)
#define PIN 14 // кнопка подключена сюда (PIN --- КНОПКА --- GND)
#define PIN 15 // кнопка подключена сюда (PIN --- КНОПКА --- GND)
#define PIN 16 // кнопка подключена сюда (PIN --- КНОПКА --- GND)
#define PIN 17 // кнопка подключена сюда (PIN --- КНОПКА --- GND)
#define MODE_AM 5 // количество режимов (от 0 до указанного)
#include <GyverButton.h> //библиотека кнопок
#include <Servo.h> //библиотека серво
Servo servo1;
Servo servo2; //добавляем сервы
GButton button1(14);
GButton button2(15);
GButton button3(16);
GButton button4(17);// кнопки серво 1 (А0-А3)
GButton button5(0);
GButton button6(1); // кнопки серво2
GButton button7(6);
GButton button8(7); // кнопки переключения реле
int relay1 = 2;
int relay2 = 3;
int relay3 = 5;
int relay4 = 4; // пины реле
byte Mode = 0; // переменная положения серво2
byte rel = 0; // переменная режима реле
void setup()
{
servo1.attach(9);
servo1.write(45);
servo2.attach(8);
servo2.write(45); // определение пинов серво1 и серво2, указание начального угла
pinMode(relay1, OUTPUT);
pinMode(relay2, OUTPUT);
pinMode(relay3, OUTPUT);
pinMode(relay4, OUTPUT); // определение пинов реле, как выход
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(5, HIGH);
digitalWrite(4, HIGH); // стартовое состояние реле. NO контакты разомкнуты
}
void loop()
{
button1.tick();
button2.tick();
button3.tick();
button4.tick();
button5.tick();
button6.tick();
button7.tick();
button8.tick();// опрос кнопок постоянный
//нажатие кнопки 1
if (button1.isPress())
{
servo1.write(120); // поворот серво1 на 120
}
//нажатие кнопки 2
if (button2.isPress())
{
servo1.write(0); // поворот серво1 на 0
}
//нажатие кнопки 3
if (button3.isPress())
{
servo1.write(30); // поворот серво1 на 30
}
//нажатие кнопки 4
if (button4.isPress())
{
servo1.write(60); // поворот серво1 на 60
}
//нажатие кнопки 5
if (button5.isPress())
{
Mode++;
if (Mode > 2) Mode = 2; // поворот серво 2 в одном направлении на 2 шага
servo2.write(Mode * 45); // угол поворота серво2 при нажатии кнопки
}
//нажатие кнопки 6
if (button6.isPress())
{
Mode--;
if (Mode > 2) Mode = 0;// поворот серво 2 в обратном направлении на 2 шага
servo2.write(Mode * 45); // угол поворота серво2 при нажатии кнопки
}
//нажатие кнопки 7
if (button7.isPress()) //кнопка выбора режима реле
{
if (--rel >= MODE_AM) rel = 0; //декремент режима
switchTask(); //переключение
}
//нажатие кнопки 8
if (button8.isPress()) //кнопка выбора режима реле
{
if (++rel >= MODE_AM) rel = 5; //инкремент режима , количество режимов =5 , включая режим all off
switchTask();
}
}
void switchTask()
{
switch (rel)
{
case 0: task_0();
break;
case 1: task_1();
break;
case 2: task_2();
break;
case 3: task_3();
break;
case 4: task_4();
break;
}
}
// Переключение реле
void task_0()
{
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(5, HIGH);
digitalWrite(4, HIGH);
}
void task_1()
{
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(5, HIGH);
digitalWrite(4, HIGH);
}
void task_2()
{
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(5, HIGH);
digitalWrite(4, HIGH);
}
void task_3()
{
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(5, LOW);
digitalWrite(4, HIGH);
}
void task_4()
{
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(5, HIGH);
digitalWrite(4, LOW);
}
Если данный пост противоречит правилам форума, прошу удалить его. За ранее спасибо, всем ответившим. Скажу сразу, с ардуино я не то , чтоб на " Вы", а скажем так, на "Ваше величество". Очень прошу в ответах не использовать сленг , абривиатуры и оскорбления с посыланием в гугл. Буду безмерно признателен за развернутые ответы.
Изменено: