Изменение положения Серво по нажатию кнопки.
- Войдите на сайт для отправки комментариев
Втр, 13/01/2015 - 23:11
Всем доброго времени суток.
Знакомлюсь с Arduino. Пробую сделать двежение серовпривода по нажатию кнопки.
Использую для этого Arduino nano (ATmega328), Micro Servo (9g) и обычную аналоговую тактовую кнопку.
Подключил серов к 5V, GND и D10
Кнопку к GND и A2
Удалось как то сдвигать серво, но по какой то причние при запуске Ардуино он поднимается в исходное положение и постепенно опускается сам по себе.
В чем может быть причина, подскажите пожалуйста, только знакомлюсь с такого рода девайсами)
Вот мой код:
int sensorPin = A2; int ServoPin = 10; int sensorValue = 0; void setup() { pinMode(ServoPin, OUTPUT); } void loop() { sensorValue = analogRead(sensorPin); digitalWrite(ServoPin, HIGH); delay(sensorValue); digitalWrite(ServoPin, LOW); delay(sensorValue); }
Извиняюсь, не то скопировал.
Вы как то переделали код из примера knob, и он естественно не работает.
Сначала надо разобраться с кнопками .
Почитайте http://arduino.ru/forum/programmirovanie/rabota-s-knopkami-v-pomoshch-novichku
Переделаете код - будем помогать.
Что в итоге надо получить, с подробностями?
По нажатию кнопки серво должно двигатся. Планирую сделать две кнопки, на одну опускается, на другую поднимается.
По нажатию конпку серво должно двигатся. Планирую сделать две кнопки, на одну опускается, на другую поднимается.
Хм, под рукой нету ардуины, примерно накину.
Теоретически должно заработать. :)
"Стягивающий резистор":
Спасибо, вечером попробую. )
Хочу сразу уточнить, в коде используется digitalRead, значет надо будет подключить кнопку к цифровому выходу? В данном случае к 4 и GND.
Спасибо, вечером попробую. )
Хочу сразу уточнить, в коде используется digitalRead, значет надо будет подключить кнопку к цифровому выходу? В данном случае к 4 и 5-му.
Можете к любому, который умеет делать digitalRead, но в #define BUT_№ смените цифру пина.
Аналогично и шаг в градусах.
можно использовать внутренние подтягивающие резисторы - экономия будет, пин просто на землю через кнопку....
#include <Servo.h> #define ServoPin 9 //пин сервы #define BUT_1 4 //BUT_1 и BUT_2 - кнопки управления сервой (тут пин 4) #define BUT_2 5 //BUT_1 и BUT_2 - кнопки управления сервой (тут пин 5) #define SHAG 1 //шаг поворота сервы, в градусах Servo myServo; int angle = 0; //начальный угол void setup() { myServo.attach(ServoPin); myServo.write(angle); //состояние после включения pinMode(BUT_1, INPUT); //для считывания состояний кнопок digitalWrite( BUT_1 , HIGH ); pinMode(BUT_2, INPUT); //для считывания состояний кнопок
digitalWrite( BUT_2 , HIGH );
// кнопки соединены с ардуиной стягивающим резистором! (т.е. когда не нажато 0 В)
}
void loop()
{
if ( ! digitalRead(BUT_1)) angle = angle + SHAG; //если первая кнопка увеличим угол // инверсия !!!!!!!!
if ( ! digitalRead(BUT_2)) angle = angle - SHAG;//если вторая уменьшим // инверсия !!!!!!!!
if (angle > 180) angle = 180; //ограничим угол сервы 0..180
if (angle < 0) angle = 0;
myServo.write(angle); //задаем получившийся угол
delay(300); // подождем перед следующим опросом
}
не правильно скопировал :( ..... вот так....
"... Хочу сразу уточнить, в коде используется digitalRead, значет надо будет подключить кнопку к цифровому выходу? В данном случае к 4 и GND. ..."
.....подключить кнопку к цифровому ВХОДУ !!!!
Извеняюсь, имел ввиду к входу) Спасибо большое за помощь, вечером попробую на своем ардуино
"вывод" ножки из МК может быть и входом и выходом.... как определили его в сетапе - так дальше и называйте :) , чобы не было ошибок....
в коде нет защиты от "дребезга контактов" кнопки.... хотя - строка 28 в этом варианте и спасёт от этой напасти....
в коде нет защиты от "дребезга контактов" кнопки.... хотя - строка 28 в этом варианте и спасёт от этой напасти....
Задержка в 0.3 сек, да еще и малый шаг сводят негативный эффект дребезга к нулю.
Добрый вечер.
В продолжение управления сервоприводом кнопкой (фиксированной), образовалась проблема устаканивания начального положения сервопривода после включения МК. При подачи питания сервопривод делает резкие движения и только потом останавливается взаданном положении, а для меня это кретично. Есть ли решение, чтобы сервопривод оставался в томже положении при котором его выключели?
писал в другой теме. возможно если не включать питание сервы до формирования сигнала управления, то теоретически должен остаться на месте. надо проверять
Я проверил ,если снимать питание, то действительно проблемма уходит, но у меня этот вариант не подходит. нужно отключать начальные движения программно.
програмно не получится.
при подаче питания на серву до формирования управляющего сигнал она по любому бежит в нулевую позицию.
только задержка подачи питания на серву.
сам долго мучился с этой темой, задолбал гугль, ничего не нашёл.
через релюху всё гуд.
а как ты отключишь программно? бутлоадер не дает основной программе запустится сразу
ну или затереть бутлоадер и программировать через icsp. тогда возможно решится
Загрузчик трогать-себе дороже. У меня на Меге загрузчик соскочил, теперь программы заливаю только через USB tinyISP. Буду огород городить с релюшками. Всем спасибо.
загрузчик залить вообще не проблема, нужен только программатор или вторая ардуина
Затирать не кошерно, лучше отключить фьюзом.
Еще один пин+транзистор потратить на управление питанием сервы.
он не хочет. программно хочет исправить
Залил скетч от SU-27-16 замечательно заработало ! Как раз я такое искал . Но возникла проблема как подключить 2 сервы с таким управлением. Не могу понять как указать ,что кнопки 1,2 управляют сервой 1, а 3,4- второй. И вот эту строчку победить не могу (
int
angle = 0;) Надо же 2 угла и соответственно дальше по тексту.Топикстартера прошу извинить если влез не туда. Ардуиной первый месяц занимаюсь сильно не пинайте
Залил скетч от SU-27-16 замечательно заработало ! Как раз я такое искал . Но возникла проблема как подключить 2 сервы с таким управлением. Не могу понять как указать ,что кнопки 1,2 управляют сервой 1, а 3,4- второй. И вот эту строчку победить не могу (
int
angle = 0;) Надо же 2 угла и соответственно дальше по тексту.Топикстартера прошу извинить если влез не туда. Ардуиной первый месяц занимаюсь сильно не пинайте
дык, создай новую тему ! со ссылкой в этой теме на новую и типа, всем тут спасибо - ушёл туда-то :)
а в новой теме ссылку - откуда ноги растут :)
Залил скетч от SU-27-16 замечательно заработало ! Как раз я такое искал
.....нано писать свой код ! а не баловство от SU-27-16
Свой код писать мне еще рано - не все же сразу, а пользовать ардуинки хочется .Создал свою тему вопросы те же- кто может помогите деду
Свой код писать мне еще рано - не все же сразу, а пользовать ардуинки хочется .Создал свою тему вопросы те же- кто может помогите деду
а ссылку на новую тему ?
Да новая тема "Изменение положения двух сервоприводов по нажатию кнопок"
http://arduino.ru/forum/programmirovanie/izmenenie-polozheniya-dvukh-servoprivodov-po-nazhatiyu-knopok