Управление сервой через фоторезистор.Угол зависит от освещения
- Войдите на сайт для отправки комментариев
Пнд, 03/12/2012 - 00:43
Это мой второй опыт программирования за сегодняшний день(я полный гуманитарий). Может кому пригодится. Сделано чисто в исследовательских целях. Угол поворота сервы зависит от фоторезистора, вместо него может быть любой аналоговый сигнал, например датчик температуры, а серва будет крутить вентиль на батарее.
/*Управляем сервой в зависимости от освещенности Используем фотосопротивление, может быть любой аналоговый сенсор */ #include <Servo.h> //Подключаем библиотеку Servo Servo motor; int sensePin = 0;//Обьявляем 0 аналоговый пин void setup() { analogReference(DEFAULT); //Объявляем диапазон чтения с аналогового порта.Необязательное /* Будем смотреть вывод на сериальном мониторе с Ардуино, для чего его инициализируем Заодно можно посмотреть диапазон работы датчика чтобы в этом диапазоне поворачивать серву*/ Serial.begin(9600); motor.attach(10); // Подключаем серву на 10 пин } void loop() { // Печатаем на монитор Serial.println(analogRead(sensePin)); int val = analogRead(sensePin);// Создаем переменную val для чтения analogRead val= constrain(val,230 ,699);// Ограничиваем диапазон работы датчика посмотрев его на мониторе int motorAngl = map(val,699, 230, 180,0);//Преобразуем диапазон выдаваемый датчиком в диапазон углов сервы motor.write(motorAngl);// Устанавливаем серву на угол который получаем через преобразование }
Спасибо, очень интересный для начинающего опыт. Скажите, а какой датчик и какой резистор использовали в проекте?
100k А фоторезистор какой-то обычный главное подобрать диапазон Можно вместо него поставить потенциометр и при его повороте будет поворачиваться серва
Если "в учебных", то можно еще покопатся/поигратся с такой темой как ПИД-регулятор
Любые вещи где у нас есть "управляющий сигнал" (желаемая температура), объект регулирования (вентиль батареи), обратная связь (датчик температуры) и внешние возмущение (кто-то открыл/закрыл форточку, на улице похолодало) - это именно его область применения.
Кстати даже ваш код - это частный случай ПИД-регулятора (где интегральная и дифференциальная составляющая обнулены).
В большинстве случаев такой "лобовой" подход через маппинг работает и действительно больше ничего не нужно, но, иногда начинается либо "сильно много крутим сервой на "пару градусов"", либо система начала расскачиваться "как качели" (жарко - включили охлаждение, проскочили комфорт, включили нагрев, опять проскочили, охлаждение, снова мимо, но уже больше....)
В вике немного "страшно", для гуманитария описанно что это такое. Можно еще глянуть объяснение "что это такое" более простым языком на примере бака с водой (бачка унитаза :)
Опять-таки, в учебных - можно самому этот ПИД попытатся реализовать, а можно попытатся поигратся готовой библиотекой для этого http://playground.arduino.cc/Code/PIDLibrary
Папа .. Ты о каких Пидах сейчас разговаривал :-)
Папа .. Ты о каких Пидах сейчас разговаривал :-)
Не переживайте, не о политиках :)
Я про тех ПИД-ы, которые Пропорционально-Интегрально-Дифференциальный регулятор.
Тут самое главное не пугатся "страшных слов", суть не такая уж и сложная :)
А понадобится они могут, как только вы от "сервка крутится на столе", перейдете к реальным датчикам, батареям отопления и проч.
Когда выяснится, что "датчик шумит", серва "все время дрожит", дуина питается от аккумулятора (и значит ее желательно выключать вермя от времени для экономии или что бы не шумела ночью), комната имеет "температурную инерцию", и вообще у сервы не хватает сил повернуть вентиль, поэтому будет DC-движок который умеет только "полностью открыть" или полностью "закрыть".
Вот тогда и понадобится ПИД. Можно конечно обойтись и без него. Без чтения "страшных слов". Обыкновенным здравым смыслом и рассуждениями. Только скорее всего, вы сами того не зная, в итоге все равно какой-то подвид ПИД-да реализуете. Только чуть более "корявый" или просто "дольше к этому идти будете" :)
Вообщем IMHO это полезный "теоретический фон". Хотите - читайте, хотите - нет :)
Лично мне он был интересен (область применения ПИД-дов довольно обширна, я с ним столкнулся при "удержании лодки на курсе по GPS". Когда нужно было "подруливать аккуратно").
А теперь по серве вопросик. Какой ток идет через серву и ее управление(10 пин)? Не лучше ли серву к Vin прикрутить а не к 5V?
Даже хуже. Сервы, как правило, 5 вольтовые. Но чтобы избежать глюков, вполне можно запитать серву от отдельного источника 5 Вольт.
А через управляющий пин ток идет мизерный, значительно меньше допустимой нагрузки на пин.
Спасибо, я это и имел в виду.
Ну и еще тогда пара вопросов. Сколько может прогнать через себя ардуина на 5V выходе без последствий?
Даже при внешнем БП, земля должна быть общая. Есть ли смысл эту землю через кондей какой прилепливать?
Ограничение не более 40 мА на пин. в идеале если хочется ограничить ток через пин и не думать о нагрузке можно подавать сигнал через сопротивление 200-250 Ом.
Ограничение не более 40 мА на пин. в идеале если хочется ограничить ток через пин и не думать о нагрузке можно подавать сигнал через сопротивление 200-250 Ом.
эт то понятно... Там есь пин 5в. Так понимаю после понижения от входного сигнала, но еще до проца. У меня на нем висит радио(nrf24l01 с усилком), жпс(neo 6m), экран(lcd shield). Не задофига?
Если пин не перегревается то не дофига, пока блок питания "тянет" проблемы нет. сам по себе пин и пару ампер выдержит без проблем, даже значительно больше... Все эти устройства кушают очень не много, можно и не суетиться.
кто потскажет как потключить к ОРДУИНО вот такой моторчик
Motor Size: 2858
RPM/V: 2630kv
Max Load: 38A
Max volts: 14.8v 2~4s
Max Watts: 700w
Resistance: 0.0222
Diameter: 28mm
Front Mounting Hole Distance: 16mm or 19mm
Front Mount Thread Size: 16mm M2.5 / 19mm M3.0
Shaft Diameter: 3.17mm
Shaft Length: 14mm
Can Size: 380
Plug type: 3mm Bullet-connector
Weight: 180g
кто потскажет как потключить к ОРДУИНО вот такой моторчик
Вам бы, для начала, надо научиться писать слова без ошибок, и понять разницу между сервой и мотором... А дальше - будет уже проще: поищете в гугле по ключевым словам "ардуино управление мощной нагрузкой постоянного тока" - и найдете все, что требуется.
Увы без ошибок никак...язык не родно. я так думаю что по нидерлански вы писать вообще не сможите... поэтому не спешите судить :-) А за ответ огромное спосибо ;-)
Увы без ошибок никак...язык не родно. я так думаю что по нидерлански вы писать вообще не сможите... поэтому не спешите судить :-) А за ответ огромное спосибо ;-)
BRAVO
Можно показать ссылку на моторчик?
И для выше ... Серва необязательна, я пользовал обычный коллекторный мотор с редуктором, используя для калибровки начала и стопа концевики, а для положения метод энкодера, отлавливая броски тока на коллекторе компаратором - три импульса = один оборот. При этом главная проблема - вовремя остановиться, тк ротор имеет приличную инерцию, потому упреждение на остановку надо считать специально.
кто потскажет как потключить к ОРДУИНО вот такой моторчик
Motor Size: 2858
RPM/V: 2630kv
Max Load: 38A
Max volts: 14.8v 2~4s
Max Watts: 700w
Resistance: 0.0222
Diameter: 28mm
Front Mounting Hole Distance: 16mm or 19mm
Front Mount Thread Size: 16mm M2.5 / 19mm M3.0
Shaft Diameter: 3.17mm
Shaft Length: 14mm
Can Size: 380
Plug type: 3mm Bullet-connector
Weight: 180g
Судя по описанию это вот такой безколлекторный двигатель он "трехфазный" и для его работы обязательно нужен любой регулятор скорости, или ESC(Electronic Speed Controler) например любой их этих, как это работает хорошо описано тут.
При выборе контроллера, рекомендую выбрать как минимум с двойным запасом по току, те 80-100А. Заявлено что у этого мотора обмотка держит до 38А, но при ее сопротивлении всего 0.0222(плюс сопротивление ключей в регуляторе), все равно при максимуме питания 14.8В, ток КЗ через обмотку может оказаться 500-600А.
Ардуино подключается к ESC аналогично любому сервомеханизму, для управления самый простой вариант использовать библиотеку "Servo"(вместо угла поворота, будет задаваться скорость вращения). Некоторыми ESC возможно управлять без всяких библиотек, напрямую ШИМ выходом Ардуины.
кто потскажет как потключить к ОРДУИНО вот такой моторчик
Motor Size: 2858
RPM/V: 2630kv
Max Load: 38A
Max volts: 14.8v 2~4s
Max Watts: 700w
Resistance: 0.0222
Diameter: 28mm
Front Mounting Hole Distance: 16mm or 19mm
Front Mount Thread Size: 16mm M2.5 / 19mm M3.0
Shaft Diameter: 3.17mm
Shaft Length: 14mm
Can Size: 380
Plug type: 3mm Bullet-connector
Weight: 180g
Судя по описанию это вот такой безколлекторный двигатель он "трехфазный" и для его работы обязательно нужен любой регулятор скорости, или ESC(Electronic Speed Controler) например любой их этих, как это работает хорошо описано тут.
При выборе контроллера, рекомендую выбрать как минимум с двойным запасом по току, те 80-100А. Заявлено что у этого мотора обмотка держит до 38А, но при ее сопротивлении всего 0.0222(плюс сопротивление ключей в регуляторе), все равно при максимуме питания 14.8В, ток КЗ через обмотку может оказаться 500-600А.
Ардуино подключается к ESC аналогично любому сервомеханизму, для управления самый простой вариант использовать библиотеку "Servo"(вместо угла поворота, будет задаваться скорость вращения). Некоторыми ESC возможно управлять без всяких библиотек, напрямую ШИМ выходом Ардуины.
огромное спасибо за столь объёмный комент.... ( для меня как новичка в этом деле просто золото :-)
Вы просили ссылку : http://hobbyking.com/hobbyking/store/__15190__S2858_2630_Brushless_Inrunner_2630kv_.html
Кому надо, совместил скетчи цифрового датчика DS18B20 и этого скетча
Делал для детской комнаты, поэтому диапазон измерений такой узкий
И вновь доброго времени суток.
Хочю обратиться к вам за помошью. Проблемма такая : Есть два безколекторных двигателя ну и платы регулировки скорости конечно. потключить к ардуине у меня получяеться. Но тут стал вопрос как их синхронезировать. Тоесть ( управление джойстиком на основе двух потенциометров, Скажем один потенциометр ось Y второй ось X при подаче рычага джойстика в перёд показатели меняються с потенциометра Y при этом мне нужно чтоб оба двигателя кторые потключены на разные пины синхронно раскручивались в (скажем перёд) когда Y находиться в своём верхнем положении и оба двигателя работают на 100% Уважу рычаг джойстика в лево при этом показания Х будут расти а Y остаёться в том же диопозоне. В этом случае один двигатель должен плавно затухать а второй оставаться работать в соотвецтвии с положением Y Дайте хоть какойто пример на основе которого я мог бы продолжить..
заранее блогодарен
Кораблик строишь?
Как вариант, взять готовый адаптер V-Tail )) для авиамоделей. тогда с джойстика(пульта ДУ) можно просто подавать Газ и направление... эта штука их прекрасно месит, резльтат именно тот что ты хочешь. Вариант реализации программной сейчас поищем, было...
А вот и пример, вот еще, и еще, и совсем короткий скетчик
целиком стянуто отсюда.
Попробуйте
упс, не внимательно прочитал - мотор то не кол-ный, пардон
Спосибки огромное
Однако если через регулятор скорости рулить, то совершенно ни какой разницы нет какой там будет двигатель. разница только конструкции самого регулятора.
В твоем примере судя по всему управление коллекторником производится вообще без регулятора, два пина отвечают за направление - переключение моста из ключей, и два за скорость вращения-шим.
Для модельных регулей, что коллекторных, что безколлекторных нужно только один выход - ШИМ ))
Да это так....
может примерчик поткините ?
Да это так....
может примерчик поткините ?
Выходы
Серво 1(Пин9) это будет мотор 1
Серво 2 (Пин 10) будет мотор 2
Входы
Пин 3 Это вход от потенциометра "ГАЗ"
Пин 4 будет Вход от потенциометра руля.
Используем библиотеку Servo сигнал управления сервами или регулями двигателей совершенно одинаковый стандарт сигнал ШИМ (PWM)
Для управления тебе нужно будет определиться с нейтральной позицией руля. - прямо это середина всего диаппазона. просто для вычисления желаемого результата, можно для начала сделать совсем по простому алгоритму, считал оба потенциометра Газ и Руль и дальше отправляешь моторам
для первого М1=Газ+К*Руль,
для второго М2=Газ-К*Руль
а коэффициэнтом пересчета К регулируешь чувствительность всего микса к шевелению рулем...
Да это так....
может примерчик поткините ?
Выходы
Серво 1(Пин9) это будет мотор 1
Серво 2 (Пин 10) будет мотор 2
Входы
Пин 3 Это вход от потенциометра "ГАЗ"
Пин 4 будет Вход от потенциометра руля.
Используем библиотеку Servo сигнал управления сервами или регулями двигателей совершенно одинаковый стандарт сигнал ШИМ (PWM)
Для управления тебе нужно будет определиться с нейтральной позицией руля. - прямо это середина всего диаппазона. просто для вычисления желаемого результата, можно для начала сделать совсем по простому алгоритму, считал оба потенциометра Газ и Руль и дальше отправляешь моторам
для первого М1=Газ+К*Руль,
для второго М2=Газ-К*Руль
а коэффициэнтом пересчета К регулируешь чувствительность всего микса к шевелению рулем...
Вот спасибо! Это уже похоже! На выходных попробую и отпишусь.
мда..... как всё....................................
В общем никак... сам никак нужна всётаки помощь.попробую описать что к чему.
к АРДУНИНЕ МЕГА на аналоговые пины 0 и 1 потключены потенциометры джойстика.
к pwm пинам 9 и 10 потключены моторы.(точнее говоря их регуляторы скорости.) Заострю внимание что моторы реверсные(тоесть:когда потенциометры находиться в диопозоне от 124 до132 ( а диопазон от 0-255) тоесть по центру то оба мотора молчат.)
И так имеем мы две оси Y (движение джойстика в перёдм шим ростёт от 128 -255) и (назад, шим падает от 128-0)
X (движение джойстика в лево шим падает от 128-0 и вправо шим ростёт от 128-255).
Идея такова: хочиться миксовать сигналы шим, тоесть : при подаче джойстика в перёд тоесть по оси Y ( оба pwm пина выдают рост шим импульса от128-255 ну и назад конечно от 128-0)
при подаче джойстика в лево тоесть по оси Х(при этом ось Y находиться в среднем положении около 128) левый мотор (pwm пин 9) шим импульс падаетот 128-0 а правый мотоор (pwm пин 10) шим импульс ростёт от 128-255.
при подаче джойстика в право всё наоборот.
Теперь самое интерестное :-) Говорю сразу в этом деле я делетант поэтому сильно не смейтесь :-)
Вот что у меня покачто получилось:
Ребята, доброго времени суток.
спешу всем Вам выразить огромную благодарность за поддержку начинающих " програмистов". Без Вас нам было бы крайне сложно прогрызать тугой гранит данной науки)). да да. данное заявление выводит меня на чистую воду- я в данной теме полный профан(. Но с самого детства стремился и тихой сапой шел к этому делу, вот по случаю и приобрел " дуинку уно.
Теперь перейду к сути вопроса; у меня есть старенькая ваз 2109 (2001 г.в.), так вот: как многим известно, данный вид россавтопрома крайне плохо заводится без подсоса в холодное время года. цель- вместо тросика подсоса- серва; на корбюраторе.
коррекция оборотов по заданному алгоритму посредством термодатчика(штатный с подтяжкой через 10 к резистор к плюсу авто) и датчика холла(на маховике).
исходя из выше сказанного делаем вывод: обороты регулируются в определенном инетрвале гистерезис около 150об\м( дабы серва не находилась в постоянном напряжении и тем самым демпфировать разнос всей системы)
имеется прямая и линейная зависимость проворота сервы от температуры и оборотов,.
кратко опишу принцип работы . при повороте ключа зажигания подается через стабилизатор притание 5 вольт на всю схему, дуинка опрашивает датчик темперетуры, если температура больше или равна 70 град С , то никаких действий не предпринимает, если меньше , то прикрывает заслонку линейно чем выше темп тем меньше она закрывается.
после того как двигатель заведен датчик холла отслеживает обороты и приводит в движение ту же самую серву для коррекции оборотов на уровне 2500об\м на 2 секунды, после чего приоткрывая заслонку устанавливает обороты на уровне 1500об\м.
при прогреве двигателя до температуры 60С система приоткрывает заслонку еще больше приводя обороты в 1000об\м .
при температуре 70С заслонка полностью открывается и дуинка переходит в дежурный режим , опять таки дабы чрезмерно не нагружать серву.
Вот в принципе и вся тема. так вот ребята, мре нужна ваша помощь в совмещении двух разносигнальных датчиков( цифра и аналог) холл - цифра. и самое главное- всего скорее в данной теме без тех самы страшных ПИДов не обойтись, поскольку нужно по максимуму исключить рыскание сервы и всей системы в целом. заранее всем спасибо, жду ваших отзывав здесь и в личке gav707090@yandex.ru буду рад любой помощи, и ценному совету и готовому скетчу поскольку обучение мне дается крайне туго, даже джереми блюм утер пот со своего лба пытаясь меня научить крутить шаговый)))
Pnewmoslon, создайте свою тему - будет больший эффект.
Жёваный крот..
спасибо vvadim за ценный совет, но думаю мало кому будет интересно сидеть в форуме на котором кроме моих просьб о помощи не будет ничего толкового.
спасибо vvadim за ценный совет, но думаю мало кому будет интересно сидеть в форуме на котором кроме моих просьб о помощи не будет ничего толкового.
Считаете свою просьбу толковой? Нюню
Puhlyaviy вы желаете это оспорить?
спасибо vvadim за ценный совет, но думаю мало кому будет интересно сидеть в форуме на котором кроме моих просьб о помощи не будет ничего толкового.
Ну здесь каждый может найти для себя толковые ответы, получить помощь или дать толковый ответ, кто что умеет и знает.
А если хочется получить помощь, то однозначно надо создать свою темы, в чужой тебя не видно.
Но хозяин барин.
И ещё - на форуме есть десяток спецов, которые оказывают БЕЗВОЗМЕЗДНО РЕАЛЬНУЮ помощь. Поэтому задавая вопросы лучше ни с кем не грызться.
Возможно мои слова показались кому то грубыми, но смею Вас уверить- грызться , я не желаю ни с кем. тем более с теми у кого прошу помощи)) и все же спасибо, как Вы уже , я думаю увидели новую тему созданную мной. это совет принятый ко вниманию)
Возможно мои слова показались кому то грубыми, но смею Вас уверить- грызться , я не желаю ни с кем. тем более с теми у кого прошу помощи)) и все же спасибо, как Вы уже , я думаю увидели новую тему созданную мной. это совет принятый ко вниманию)
Да игнорят не из-за того что тема "старая/новая". А из-за того что (обычные причины, не обязательно все к вам относятся):
1. Не внятно описано что хочу, что получается... вообщем "телепаты нужны"
2. Куча "хочу" и никаких попыток что-то сделать и разобраться самому (вообщем "сделайте за меня" замаскированное под "помогите новичку").
3. Попытка сразу строить "космический аппарат" не освоив азов. Не разбирая большу задачи на мелкие "подзадачки" (которым кстати найти решение в прошлых обсуждениях гораздо вероятней).
4. Вопрос поднимается раз в неделю. И уже 15-ть раз обгрызен со всех сторон. Уже тупо никому не интерестно.
5. Топик-стартер не трудиться нормально назвать тему, нормально оформить код.... (вот скажем сообщение #30 - я такое проматываю не глядя, кому оно нужней? мне или вопрошающему? "у нас не принято что-бы хлеб за брюхом ходил").
что касается моих попыток разобраться самому, не совсем верно. все или почти все что предлагает примерная база дуино, пробовал писать и заливать. но все же есть некоторые нюансы в которых я реально запутался (привязка сервы к двум датчикам цифра и аналог), я тупо не знаю как это делается. и нигде я не нашёл подобного примера. от того я и забрел на ваш форум в поисках подсказки , но никак не для того чтоб скушать чей либо хлебушек.
ООО!!!! Приятно что так о сообщении №30 отзываетесь. И скажу так: после этого сообщения со мной связался один человек. Который оказал мне огромную услугу и помогал мне в процессе написании всего скетча. Под мой телеуправляемый подводный аппарат или (ROOV)Управление всё готово работаю над железом (тут уже сам кому хочш помочь могу) так что снимаю шляпу перед такими как он. И как видите не все пролистывают сообщения не прочитывая их.
И всё таки я думаю что вам стоит пересмотреть ваше отношение к другим… Уверен что Вы тоже не можете находить решения во всех областях конструирования или программирования.. так что за помощью так или иначе приходиться обращаться.
на то они и умники чтоб умничать,даже и спрашивать не хчу ни чего чтоб не услышать в ответ гугл рулит +хамство в скрытой форме .только читаю и анализирую
Доброго времени суток всем.
Подскажите пожалуйста как изменить код что бы от такого датчика света
запускать серву Servo SG90.
Суть такова есть помещение и нужно с заходом солнца включить серву на несколько оборотов ( открывает форточку) с восходом наоборот (закрывает). У Вас почти такая схема помогите с кодом. По отдельности работает а связать в кучю не выходит. Ардуина уно, питание будет отдельное у сервы.
Доброго времени суток всем.
Подскажите пожалуйста как изменить код что бы от такого датчика света
запускать серву Servo SG90.
Суть такова есть помещение и нужно с заходом солнца включить серву на несколько оборотов ( открывает форточку) с восходом наоборот (закрывает). У Вас почти такая схема помогите с кодом. По отдельности работает а связать в кучю не выходит. Ардуина уно, питание будет отдельное у сервы.
Вам с таким вопросом в раздел "ищу исполнителя".
Dikon какая библиотека здесь использована? Просто я попробываль ваш скетч, серво толко дребежит и все. Зарание спс за ответ
не проходит проверку скетч с 18В20
Приветствую гуру программирования! Искал и нашёл то, что надо )) Спасибо автору сообщения и скетча. Даже видео записал на радостях как работает :) Получилось практически с первого раза запустить сервочку. Но возник вопрос... Может не по адресу... Можно ли этот скетч как-то залить в нечто менее громоздкое в смысле ресурсов нежели ардуино? Как? Может есть смысл попытаться создать свою ардуино (купил когда-то атмегу 8) и туда залить или не стОит городить огород?
Самопроизвольное подёргивание можно как-то убрать?
Спасибо. Извиняйте если что не туда и не так.
Самопроизвольное подёргивание можно как-то убрать?
Видите ли, разработчики библиотеки считают, что самопроизвольное подергивание - это фича, а не бага.
В принципе, подергивание можно существенно уменьшить, а то и совсем избавиться, если применить высококачественные дорогостоящие сервы.
Другой вариант - вообще избавиться от библиотеки и самому подавать команды на серво. Подергиваний не будет, но не будет и удержания серв в установленных позициях. Собственно, подергтвания - прямое следствие попытки удержания сервы на месте при невысокой точности позиционирования.
Я понял. Спасибо. В общем было довольно приличное дёргание, но оно практически пропало, когда я занизил "крайние границы" срабатывания фоторезистора. Ещё здесь тему нашел, но пока не понял сути, там в скетче идёт после выполнения команда отключения сервы (там она myservog.detach(); а "у нас" вероятно motor.detach();), тогда она не дёргается. Возможно попробую имплантировать этот кусочек кода, если пойму или методом тыка подберу место для этой строки.
Единственно, пока не понял (т.к. первый раз вообще столкнулся), как правильно старт сервы прописать, чтобы она при включении питания не ехала "туда/сюда". В общем поле для экспериментов не паханное ))
Доброго времени суток всем.
Подскажите пожалуйста как изменить код что бы от такого датчика света....
запускать серву Servo SG90.
Суть такова есть помещение и нужно с заходом солнца включить серву на несколько оборотов ( открывает форточку) с восходом наоборот (закрывает). У Вас почти такая схема помогите с кодом. По отдельности работает а связать в кучю не выходит. Ардуина уно, питание будет отдельное у сервы.
Попробуй вот это...