Проблема с исполнением кода

jevhid
Offline
Зарегистрирован: 15.06.2012

Доброго времени суток, единомышленики!

Столкунулся с проблемой: на ардуино загружаю код, все идет как по маслу(то есть как и заложено), но после отключения от усб и запитывания контроллера от бп все происходит хаотично. Дальше привожу сам код:

 

 #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);
}

Как вы уже догадались это некое подобие робота, коего я еще давно увидел на Хабре. При приближении объекта он начинает вертеть головой и махать руками. Но из-за этой проблеми не получается сделать его более автономным. Надеюсь на вашт ответы!

LEVV2006
LEVV2006 аватар
Offline
Зарегистрирован: 15.04.2011

Могу предположить что твой бп не даёт нужного напряжения. В любом случае померь напряжение. Ибо если оно менее 4,5 вольт то мк перезагружается. 

jevhid
Offline
Зарегистрирован: 15.06.2012

БП способен менять напряжение от 3 до 12 В, 800мА. Устанавливал на 9В, фактическое напряжение было 8.3В.Тоже сперва грешил именно на это, что еще может меняться при отключении USB провода? Вроде только напряжение. Еще заметил, что только при включенной програме IDE и открытым кодом робот работает.

Как должен работать робот - youtu.be/JFFaAvdppJQ

Как работает - http://youtu.be/rbCayNb3s34

LEVV2006
LEVV2006 аватар
Offline
Зарегистрирован: 15.04.2011

Ощущение такое что питания не хватает сервам рук. Ну будем рассуждать. Если робот работает от компа нормально то код написан правильно. Хотя «Еще заметил, что только при включенной программе IDE и открытым кодом робот работает.» вот это самое странное. Если ты используешь плату arduino как основу. То преобразователь напряжения расщипан где то на 30 вольт. Ты подаёшь на него 8 вольт – 2 вольта падения на преобразователе = 6 вольт. Вроде должно работать. Но надо ещё учитывать сервы….. На твоём месте я бы подал 12 вольт. Хотя дело твоё. А что за arduino? UNO? 

 

Да и попробуй поставить кондер перед преобразователем. Электролитический на 50 – 100 мкф не менее 16 вольт

 

«БП способен менять напряжение от 3 до 12 В, 800мА. Устанавливал на 9В, фактическое напряжение было 8.3В.» лучше всего мерить непосредственно у мк.

maksim
Offline
Зарегистрирован: 12.02.2012

Посмотрите мигает ли светодиод на 13 выводе, когда робот работает не правильно. Если мигает (что скорее всего) то дуина перезагружется в момент старта серв из-за просадки напряжения, а следовательно ваш (скорее всего китайский прикитайский) блок питания не тянет. Действительно проблему может решить конденсатор на питании, который будет гасить просадку напряжения или попробуйте другой блок питания.

maksim
Offline
Зарегистрирован: 12.02.2012

jevhid пишет:

Еще заметил, что только при включенной програме IDE и открытым кодом робот работает.
 

Это потому что когда все закрыто ваш пучеглазый робот не видит кода и не знает как себя вести... )

LEVV2006
LEVV2006 аватар
Offline
Зарегистрирован: 15.04.2011

maksim пишет:

jevhid пишет:

Еще заметил, что только при включенной програме IDE и открытым кодом робот работает.
 

Это потому что когда все закрыто ваш пучеглазый робот не видит кода и не знает как себя вести... )

Вот это я как то не очень понял. Мы же всё равно прошиваем мк этим кодом. Зачем ему ещё IDE с открытым кодом? (Я правда с сервами не работал)

jevhid
Offline
Зарегистрирован: 15.06.2012

Спасибо за ответы! Появится свободное время проверю ваши варианты и отпишусь. =)

ourlive
Offline
Зарегистрирован: 26.05.2012

если есть подозрение на просадку напряжения, пульсацию и т.п., то проблему нужно решать объективными методами: вольтметр и амперметр в цепь питания.

maksim
Offline
Зарегистрирован: 12.02.2012

LEVV2006 пишет:

maksim пишет:

jevhid пишет:

Еще заметил, что только при включенной програме IDE и открытым кодом робот работает.
 

Это потому что когда все закрыто ваш пучеглазый робот не видит кода и не знает как себя вести... )

Вот это я как то не очень понял. Мы же всё равно прошиваем мк этим кодом. Зачем ему ещё IDE с открытым кодом? (Я правда с сервами не работал)

Это была шутка.