Проблема с исполнением кода
- Войдите на сайт для отправки комментариев
Пт, 15/06/2012 - 21:00
Доброго времени суток, единомышленики!
Столкунулся с проблемой: на ардуино загружаю код, все идет как по маслу(то есть как и заложено), но после отключения от усб и запитывания контроллера от бп все происходит хаотично. Дальше привожу сам код:
#include <Servo.h> #include <Ultrasonic.h> #define RIGHT_HAND_PIN 2 #define LEFT_HAND_PIN 3 #define HEAD_PIN 4 #define TRIGGER_PIN 7 #define ECHO_PIN 6 Servo rightHand; Servo leftHand; Servo head; int pos = 90; Ultrasonic ultrasonic(TRIGGER_PIN, ECHO_PIN); void setup() { pinMode(TRIGGER_PIN, OUTPUT); pinMode(ECHO_PIN, INPUT); rightHand.attach(RIGHT_HAND_PIN); leftHand.attach(LEFT_HAND_PIN); head.attach(HEAD_PIN); } void loop() { unsigned long duration, cm; digitalWrite(TRIGGER_PIN, HIGH); delayMicroseconds(1000); digitalWrite(TRIGGER_PIN, LOW); duration = pulseIn(ECHO_PIN, HIGH); cm = (duration/2) / 29.1; if (cm<=15){ for (pos = 90; pos < 180; pos+=1) { head.write(pos); delay(5); } for (pos = 180; pos>1; pos-=1) { head.write(pos); delay(5); } for (pos = 0; pos < 90; pos+=1) { head.write(pos); delay(5); } for(pos = 0; pos < 180; pos +=1) { leftHand.write(pos); delay(3); rightHand.write(pos); delay(3); } for (pos = 180; pos>=1; pos-=1) { leftHand.write(pos); delay(3); rightHand.write(pos); delay(3); } } delay(1000); }
Как вы уже догадались это некое подобие робота, коего я еще давно увидел на Хабре. При приближении объекта он начинает вертеть головой и махать руками. Но из-за этой проблеми не получается сделать его более автономным. Надеюсь на вашт ответы!
Могу предположить что твой бп не даёт нужного напряжения. В любом случае померь напряжение. Ибо если оно менее 4,5 вольт то мк перезагружается.
БП способен менять напряжение от 3 до 12 В, 800мА. Устанавливал на 9В, фактическое напряжение было 8.3В.Тоже сперва грешил именно на это, что еще может меняться при отключении USB провода? Вроде только напряжение. Еще заметил, что только при включенной програме IDE и открытым кодом робот работает.
Как должен работать робот - youtu.be/JFFaAvdppJQ
Как работает - http://youtu.be/rbCayNb3s34
Ощущение такое что питания не хватает сервам рук. Ну будем рассуждать. Если робот работает от компа нормально то код написан правильно. Хотя «Еще заметил, что только при включенной программе IDE и открытым кодом робот работает.» вот это самое странное. Если ты используешь плату arduino как основу. То преобразователь напряжения расщипан где то на 30 вольт. Ты подаёшь на него 8 вольт – 2 вольта падения на преобразователе = 6 вольт. Вроде должно работать. Но надо ещё учитывать сервы….. На твоём месте я бы подал 12 вольт. Хотя дело твоё. А что за arduino? UNO?
Да и попробуй поставить кондер перед преобразователем. Электролитический на 50 – 100 мкф не менее 16 вольт
«БП способен менять напряжение от 3 до 12 В, 800мА. Устанавливал на 9В, фактическое напряжение было 8.3В.» лучше всего мерить непосредственно у мк.
Посмотрите мигает ли светодиод на 13 выводе, когда робот работает не правильно. Если мигает (что скорее всего) то дуина перезагружется в момент старта серв из-за просадки напряжения, а следовательно ваш (скорее всего китайский прикитайский) блок питания не тянет. Действительно проблему может решить конденсатор на питании, который будет гасить просадку напряжения или попробуйте другой блок питания.
Еще заметил, что только при включенной програме IDE и открытым кодом робот работает.
Это потому что когда все закрыто ваш пучеглазый робот не видит кода и не знает как себя вести... )
Еще заметил, что только при включенной програме IDE и открытым кодом робот работает.
Это потому что когда все закрыто ваш пучеглазый робот не видит кода и не знает как себя вести... )
Вот это я как то не очень понял. Мы же всё равно прошиваем мк этим кодом. Зачем ему ещё IDE с открытым кодом? (Я правда с сервами не работал)
Спасибо за ответы! Появится свободное время проверю ваши варианты и отпишусь. =)
если есть подозрение на просадку напряжения, пульсацию и т.п., то проблему нужно решать объективными методами: вольтметр и амперметр в цепь питания.
Еще заметил, что только при включенной програме IDE и открытым кодом робот работает.
Это потому что когда все закрыто ваш пучеглазый робот не видит кода и не знает как себя вести... )
Вот это я как то не очень понял. Мы же всё равно прошиваем мк этим кодом. Зачем ему ещё IDE с открытым кодом? (Я правда с сервами не работал)
Это была шутка.