Проблема отладки с использованием сервы

wladimir90
Offline
Зарегистрирован: 08.04.2012

Доброго дня!

При использовании типового примера Knob (единственное добавил Serial.println(val);) при открытии монитора порта начинают вываливаться ошибки:

Error inside Serial.serialEvent()
java.io.IOException: Bad file descriptor in nativeavailable
at gnu.io.RXTXPort.nativeavailable(Native Method)
at gnu.io.RXTXPort$SerialInputStream.available(RXTXPort.java:1532)
at processing.app.Serial.serialEvent(Serial.java:215)
at gnu.io.RXTXPort.sendEvent(RXTXPort.java:732)
at gnu.io.RXTXPort.eventLoop(Native Method)
at gnu.io.RXTXPort$MonitorThread.run(RXTXPort.java:1575)
 

На самом деле по проблеме видел две ветки форума - английского и русского, но все что мог вытащить это что может быть замыкается земля с портом на 3 вольта. Как такое возможно для меня вне понимания.

Вообще если крутить потенциоментр, серва слушается, но сам факт вываливающихся ошибок и невозможности отладки пугает. Так же если контакт с потенциометром теряется, серва начинает сама крутится - сразу до упора в одну сторону, в другую до упора рывками.

Схему подключения использовал ту же что и на офф сайте: http://arduino.cc/it/Tutorial/Knob

Ах да, у меня freeduino 2009 (328 контролер) - аналог Arduino Duemilanove. 

Как я подключаю (Слева фридуино, справа макетная плата с установленой на ней потенциометром, сверху серва):

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

А вы точно ничего не подключайте к цифровым 0(RX) и 1(TX) выводам?

Первый обзац последнее предложение: arduino.ru/Reference/Serial
 

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

А из стпндартных примеров AnalogReadSerial работает?

Mastino
Offline
Зарегистрирован: 03.12.2011

питания на серво отключите, когда sketch заливаете

wladimir90
Offline
Зарегистрирован: 08.04.2012

Те порты что помечены как TX и RX я точно не использую, собственно все как на нарисованой мною схеме. Единственное чего не нарисовал - воткнутый USB. 

Вообще в других ситуациях все нормально - к примеру писал код что бы потенциометр влиял на яркость светодиода и выводил в монитор - все выходило. Использовал тот же аналоговый порт 0 что и в примере AnalogReadSerial

 

wladimir90
Offline
Зарегистрирован: 08.04.2012

Mastino пишет:

питания на серво отключите, когда sketch заливаете

Перед заливкой выдергивал из макетной платы провод на + к серве , после "Доне уплоад" втыкал - тоже самое. Кстати без подключенной сервы ошибок нет но и в мониторе пусто. 

На текущий момент использую такой код (в ходе попыток исправления ошибки правил типовой):

 

#include <Servo.h>

Servo myservo; // Создаем объект серво

int potpin = 0; // Порт потенциометра (крутилка)

void setup()
{
myservo.attach(9); // Добавляем серву на 9 порт
}

// ГЛАВНЫЙ ЦИКЛ
void loop()
{
int val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
val = map(val, 0, 1023, 0, 179); // scale it to use it with the servo (value between 0 and 180)
myservo.write(val);
Serial.println(myservo.read());
//myservo.write(val); // sets the servo position according to the scaled value
delay(100); // waits for the servo to get there
}

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

Добавьте в функцию void setup() строку Serial.begin(9600);

void setup() 
{ 
  Serial.begin(9600);
  myservo.attach(9); // Добавляем серву на 9 порт
} 

 

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

А с такой задержкой "delay(100);" серва случайно не дергается?

wladimir90
Offline
Зарегистрирован: 08.04.2012

 Большое спасибо Максим! Действительно  Serial.begin(9600); помог. Но как только потенциометр теряет контакт (к сожалению часто - к макетной его приходится с силой прижимать, не садится в нее), сразу повторяется ошибка как в посте 0, и далее только резет. Но это наверное уже норма. Подозреваю что запитка потенциометра от внешнего источника может решить проблему.

 

Нет, не дергается. Вернее дергается но малозаметно. Я специально ставлю такую задержку что бы легче отлаживать было.

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

Нет, запитка сервы от более мощного источника должна помочь, но никак не потенциометра. Скорее всего когда отваливается потециометр, серва пытается резко дернуться и сажает общее питание.

wladimir90
Offline
Зарегистрирован: 08.04.2012

Спасибо - не знал этого. Батарейки кстати на 1.5 v , а серве нужно 5. Т.е. нужно искать спец. акк. на 5v?

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

Нет, не нужно, сервы работают в среднем от минимального напряжения 3в - 4,8в и до максимального 6в - 7,2в, возьмите 4 батарейки по 1,5в, соедените их последовательно и тогда у вас будет 6в.

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

И обязательно соедените минус сервы с минусом(GND) дуины.