синхронизация 3 сервоприводов + аудио модуль wtv020sd-16p через ардуино
- Войдите на сайт для отправки комментариев
Всем привет! Оочень нужна помощь опытных ардуинщиков с большим срочным проектом - взялись за гуж, да оказались не дюж((
Делаем интерактивную инсталляцию. Суть в следующем: в обычном состоянии конструкция через wtv020sd-16p издает мелодию №1. Когда человек нажимает на датчик давления, запускается мелодия №2, и одновременно с этим 2 сервопривода неполного вращения (к ним прикручен некоторый вес). Если человек нажал на площадку с датчиком только 1 раз, то через пару секунд сервоприводы перестают работать и мелодия №2 меняется на мелодию №1 - магия не происходит. Если человек нажимает на площадку 10 раз, то с момента первого нажатия до 10го играет мелодия №2, работают 2 сервопривода. а после 10го нажатия 2 серва отключаются, запускается сервопривод 3. Потом конструкция возвращается в исходное состояние - играет мелодия №1 и ничего не происходит. Ждет след взаимодействия.
Проблема в том, что по отдельности прописали код для каждого элемента - все работает ок, а вот собираем в общий код - начинается хаос( условия игнорируются, происходят сразу все действия, питания не хватает. а для музыки вообще не ясно пока как прописать синхронизацию..
Пожалуйста ХЕЛП!! только начинаем врубаться в ардуино, поэтому не закидывайте какашками сразу)
#define SENSOR_PIN A5 #include "Servo.h" Servo servoMain; Servo servoLeftHand; Servo servoRightHand; int counter = 0; void setup() { Serial.begin(9600); servoMain.attach(11); servoLeftHand.attach(10); servoRightHand.attach(9); servoMain.write(20); } void loop() { int val = analogRead(SENSOR_PIN); if(val < 900){ counter = counter+1; } if(counter<=10&&counter>=1){ hands(); } Serial.println(val); Serial.println(counter); delay(500); if(counter == 10){ servo(); counter = 0; } } void servo(){ servoMain.write(180); delay(2000); servoMain.write(20); delay(2000); } void hands(){ servoLeftHand.write(90); servoRightHand.write(0); delay(200); servoLeftHand.write(0); servoRightHand.write(90); delay (200); }
алгоритм-схема нужна - короче и яснее :) а не как в постановке вопроса :(
а с блок-схемой понятнее?)
![](/sites/default/files/u10917/10937829_10206090715093187_250331304_n.jpg)
пока - нет ! датчик давления = кнопка или тензодатчик ?
сорри)
резистор давления http://amperka.ru/product/force-resistor-6mm
2 сервопривода http://amperka.ru/product/servo-fs5109m
и серв один такой http://amperka.ru/product/servo-fs5106b
недостаточно информации? а в каком виде лучше представлять задачу, чтоб понятнее было?
очень нужна помощь, плизз ;(
зачем резистор давления ? при каком давлении на него считать, что произошло нажатие ?
чем не устраивает нефиксируемая ( тактовая ) кнопка ?
конструкцией (на нее будет вставать до 100 человек) и погодными условиями (уличная инсталляция при - температуре).
в общем-то все детали в любом случае уже куплены)
осталось свести все это в единый рабочий код
#24 и #31 - при 10 выполнятся обе строки
тогда всё снова опишите...
при чём здесь колво нажатий ? вы хотите знать сколько примерно челов на конструкции находится ?
нам нужно, чтоб человек 10 раз нажал на датчик прежде чем выполнится основное условие (запуск серво 3 и мелодии 3)
кнопка :
количество нажатий суммируется , время между нажатиями не более 2 сек ?
состояние 1 - нет нажатий , что-то_1 происходит непрерывно
состояние 2 - нажали 1 раз -> что-то_2 происходит 2 секунды, затем всё в исходное положение, колво нажатий обнуляется
состояние 3 - нажали 1 раз , через 0,5 сек - ещё нажатие , через 1,5 сек - ещё нажатие , через 1,5 сек - ещё нажатие , через 2,5 сек - ещё нажатие...... от первого нажатия происходит что-то_2 на время 0,5+1,5+1,5+2,0 , нажатий 4 ( пятое не прошло ) , затем всё в исходное положение, колво нажатий обнуляется
состояние 4 - нажатий получилось 10 , происходит что-то_3 , затем всё в исходное положение, колво нажатий обнуляется
так ?
да, все верно)
ждите....
нет платки с собой... проверьте сами - в сериале должно быть постоянно =0 , а при нажатиях 1, 2, 3, 4, ..... 9, 10, 11, .... если каждое последущее нажатие не позже от преднажатия на 2 сек , больше двух секунд - опять нули...
могу и ошибаться - я тоже учЮсь ещё :)
вот так ближе к теме....
крайняя версия...
а кто или что будет мешать человеку нажимать датчик ? развлекуха для корпаратива ? :)
wtv020sd-16p - с этой штукой я не общался :(
это http://arduino.ru/forum/apparatnye-voprosy/vosproizvedenie-muzyki-i-zvukov-cherez-pleer#comment-32340 читать....
с музыкой понятно - файл0 - играет постоянно , файл1 - играет 2 сек, 4 сек, ....... 20 сек , файл2 - играет как только пройдёт 10 нажатий - а сколько времени играет ( далее ВРЕМЯ10 )?
а теперь поточнее про сервы...
запускаются сервы, перестают работать сервы ? это как ?
1 нажатие - сервы рук меняют положение и через 2 сек возвращаются в иходное положение ? или 2 сек машут руками ?
нажатий 2........9 - сервы рук меняют положение и через 2 сек после 9-го нажатия возвращаются в иходное положение ? или 18 сек машут руками ?
нажатий 10 - сервы рук возвращаются в исходное, главная серва меняет положение на ВРЕМЯ10 и затем возвращается в исходное ? или она ходит туду-сюда ВРЕМЯ10 ?
сервы на руки - ясно, а чё ворочает главная серва ?
оке, спасибо! код проверить получится только завтра( отпишусь по результату!
а наш чем был плох?
свой проще написать , чем разбираться в чужом :) - заработает, дык переделаете по своему :)
щас попробуем)
дык, код ещё голый - может только заиграть музычку и в сериал выводить колво нажатий по алгоритму :(
кататак....
#103 - лишняя
спасибо огромное за помощь! добавили в своем коде одну строчку, запитали сервоприводы как следует - и пошло поехало
код-то покажете ? и wtv020sd-16p заработал ?