Официальный сайт компании Arduino по адресу arduino.cc
Считывание положения сервопривода
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Чт, 16/05/2013 - 22:56
Простой вопрос, код корявый поэтому проще сказать на словах. Есть серва которой периодически задаются углы поворота. Нужно чтобы при определенном угле поворота включался светодиод. К управлению сервы подключен только один кабель.
#include <Servo.h> #define SRV 7 #define LED 2 Servo myservo; int val=0; void setup() { myservo.attach(10); pinMode (SRV, OUTPUT); pinMode (LED,OUTPUT); pinMode (SRV,INPUT); } void loop() { digitalWrite(SRV,HIGH); myservo.write(90); myservo.read(); val=myservo.read(); delay(1000); myservo.write(0); delay(1000); myservo.write(180); delay(1000); digitalWrite(SRV,LOW); delay(8000); } if(val==90) { digitalWrite(LED,HIGH); } else { digitalWrite(LED,LOW); }
После IF выдает ошибку. Как записать чтобы при повороте на 90гр подаалось питание на LED.
О извините ,выделил строчки жирным и курсивом но он код не проглатил, а редактировать нельзя
Поправил
myservo.read(); не покажет вам в каком положении находится серва, так как эта функция всего лишь возвращает текущее значение сигнала подаваемого на серву. А вот если бы ввели в поиске по сайту "серво с обратной связью" ,то первая же найденная тема http://arduino.ru/forum/programmirovanie/vozmozhno-li-kak-realizovat-obratnuyu-svyaz-dlya-servoprivoda. А ругается у вас компилятор на то что вы условие вне функции написали.
Так нельзя:
а вот так можно:
Да зачем вам val вообще читать? Зачем IF? Вы же сами знаете куда серву повернули. Повернули, включили светикик, да и все.
а вдруг злодей серву руками повернул?
или у сервы силенок нехватило?
а вдруг злодей серву руками повернул?
А вдруг он ее молотком жахнул?
Если серва исправна, то после того как ее отпустит злодей она все равно должна вернутся в положение которое задается управляющим сигналом.
Если "силенок не хватило" - значит серва другая нужна. Нечего это в код загонять. Все равно она быстро сломается если не соотвествует задаче.
Ну а если хочется,в сетаки знать "где же она счас стоит", то доп. датчики нужны: энкодер или переменник.
Переменник нужно либо снаружи монстрячить, либо расковыривать серву и подключатся к тому который у нее внутри.
Да, вы правы. Я думал это будет просто, и решил в самообучающих целях написать. Тут конечно правильно включать светодиод после нужного угла, а затем выключать.
П.с. Никто не разбирается в советских бензиновых двигателях для авиамоделей?
Ну так это и есть не сложно :) По крайней мере если не лезть в "кто-то снаружи повернул"
А вот тут не ошиблись. Это действительно довольно удачный пример для обучения (если смотреть на него как вы изначального его формулировали, без внешних воздействий).
Тот пример что я показал - можно еще улучшать/учится.
Я бы "дальше" его двигал в таком направление:
1. Вынес установку сервы в отдельную функцию. Что-то типа setServo(int newPos) написал, а уж в ней...
2. Включал/выключал светики в зависимсти от newPos (вначале через if, потом бы взял несколько светиков и конструкцию switch поизучал)
3. Сделал запоминание в какую-то глобальную переменную "текущего положения" (что-бы знать где серва стоит).
4. Исходя из прошлого пункта - можно будет время delay(НУЖНО_ДЛЯ_ПОВОРОТА) не жестко кодить, а вычислять (согласитесь что повернутся на 10 градусов, и на 130 - разное время занимает)
5. Делал-бы замену delay на использование millis() - что-бы скетч не блокировался и можно было сделать какое-то подобие "одновременности".
Советские авиамодельные двигатели работали на эфире, а не бензине.
спирт, эфир, касторка
Давайте в отдельную тему, сегодня попробую с фотографиями после работы. Заодно посмотрю, может там маркировка есть.
http://arduino.ru/forum/obshchii/dvigatel-dlya-bespilotnika
Ну так это и есть не сложно :) По крайней мере если не лезть в "кто-то снаружи повернул"
А вот тут не ошиблись. Это действительно довольно удачный пример для обучения (если смотреть на него как вы изначального его формулировали, без внешних воздействий).
По этому поводу у меня случился приступ графомании
Леший в мире Ардуины: Умная Серва. Часть 1
Предупреждаю "многа букф" :)
Если лень продиратся через промежуточные результаты и смотреть "как мы к этому пришли", то вот сразу итого:
Надеюсь, что запала хватит и на продолжение :)
Только что на SG90 ёто реализовал - ВСЕ РАБОТАЕТ !!!
https://habrahabr.ru/company/amperka/blog/127773/