Истина где-то рядом...

Пришла ардуинка (duemilanove) за номером 185-спасибо за посылку. Играюсь с паяльником уже второй день :)
Но тут встал вопрос какую нагрузку ардуина может выдержать по току? наверное правильнее считать пределом-УСБ порт, точнее источник питания(тогда сколько УСБ держит)?
Второй вопрос, надумал крутить куллер от компа, но дуинка дает только 5V, надо усилить до 12V-какой транзистор ставить?
И третий вопрос: хочу сделать прогу с интерфейсом-двигаешь ползунок-больше напруга или меньше… Пишем прогу которая на КОМ порт кидает переменные, а в зависимости от них ардуинка пляшет. Только так?
  • 0
  • 11 октября 2010, 20:26
  • Alek

Комментарии (12)

RSS свернуть / развернуть
+
0
второй вопрос отвалился. нашел более грамотное решение.
avatar

Alek

  • 11 октября 2010, 21:12
+
0
какую нагрузку ардуина может выдержать по току?

обратите внимание, что ток через один пин не должен превышать 40 mA.
Т.е. можно подключить светодиод (через токоограничительный резистор), а что-то помощнее нужно подключать через промежуточный «драйвер» — транзистор, оптопару и т.д.
Так, например, управление моторчиком возможно через L293
Пишем прогу которая на КОМ порт кидает переменные, а в зависимости от них ардуинка пляшет. Только так?

Да. Проще всего это реализуется через уже готовый протокол Firmata.
avatar

noonv

  • 11 октября 2010, 21:45
+
0
Спасибо, учтем :)
avatar

Alek

  • 12 октября 2010, 07:44
+
0
Ага! Задумка воплотилась в жизнь, радуя обладателя дуинки двумя ожогами и наконец-то абсолютно холодным транзистором(первый раз неправильно запаял-догадался тыкнуть пальцем).
Но новый затык с библиотекой SerialGate:
в самой программе код выглядит так:
if(m_13)
{
sg.Send(«255»,3);
}
else
{
sg.Send(«000»,3);
}

А на дуине такой код:
void loop ()
{
val = Serial.read(); // read the port
pinMode(11,OUTPUT);
analogWrite(11, val);
}

Диод почему-то всегда горит, притом переключая его в ноль по ШИМу -он горит, но в полсилы. Не могу сообразить, что не так?
avatar

Alek

  • 23 октября 2010, 21:59
+
0
:) выше я уже советовал использовать готовый протокол Firmata ;)
Разумеется всегда хочется изобрести что-то своё, но тогда посмотрите на эту простейшую реализацию. Там как раз используется SerialGate. Если внимательно прочитаете, то сразу же поймёте свой недочёт:
вы пишете в порт просто строчку символов («000» или «255»), которую ардуина считывает побайтово ('0','0','0' или '2','5','5').
Т.о. значение, которое вы устанавливаете на 11 порту вовсе не 0 или 255, а '0' или '2'.
avatar

noonv

  • 24 октября 2010, 14:23
+
0
мне показалось что значение то она правильно принимает, но оно обнуляется-так как сигнал в адуинку то я один раз шлю. хотя у вас опыта больше)
по этому скетчу как раз и делал-мне просто необходимо ШИМ значение передавать.
А с фирматой что-то туго. Что в Ардуинку то написать чтобы запустить скетч? А то ArduinoFirmataVB ругается что порт невозможно открыть(не КОМ, а дуиновский)

п.с. заранее спасибо. Ардуинка радует своей реалистичностью-написал код и сразу видишь что-то материальное… Но опыта программирования микроконтроллеров нету-поэтому шишки, но с улыбкой)
avatar

Alek

  • 25 октября 2010, 21:00
+
0
обычно заливают в Arduino стандатный Firmat-овский скетч:
Examples -> Firmata -> StandardFirmata
, который позволяет полностью управлять портами ардуины с компа.

avatar

admin

  • 25 октября 2010, 21:55
+
0
Видимо незаметил или недокачал. Завтра после работы опробую, спасибо за совет
avatar

Alek

  • 26 октября 2010, 20:56
+
0
что-то никак. помогайте, в ардуине такой код:

int ledPin = 9;

void setup()
{
// begin the serial communication
Serial.begin(1200);
pinMode(ledPin, OUTPUT);
}

void loop()
{
byte val;
int k;
// check if data has been sent from the computer
if (Serial.available()) {
// read the most recent byte (which will be from 0 to 255)
val = Serial.read();
k=val;
if( val == ' ' || val == ' ' )
{
analogWrite(ledPin, 255);
delay(30);
analogWrite(ledPin, 0);
delay(30);
analogWrite(ledPin, 255);
}
else
{
analogWrite(ledPin, k);
// set the brightness of the LED
//analogWrite(ledPin, val);
}
}
}

Шлю на ком порт символы(чтобы передавать значения от 0 до 255), мардуинка должна переводить символ в число и зажигать диод ШИМом…

программный код такой:
procedure TForm1.Button1Click(Sender: TObject);
var
Str: String;
begin
Str := inttostr(TrackBar1.Position);
if NewLine_CB.Checked then
Str := Str + #13#10;
if not ComPort.Connected then ComPort.Open;
if ComPort.Connected then
ComPort.WriteStr(Str);
end;

Все работает-но не так как задуманно. При любом сигнале ардуина зажигает диод(на одинаковый уровень ШИМ).
притом имеется весьма интересный баг-если изменить скорость порта на 9600 диод горит еле заметно, при 1200 горит на полную.
avatar

Alek

  • 31 октября 2010, 22:14
+
0
чтобы развеять сомнения, кои у меня были:
включаем прогу шлем 100, диод горит, шлем 255-диод горит также… может быть переменная не обновляется? закрываем прогу, открываем снова-шлем 255, диод горит также как и при 100.
avatar

Alek

  • 31 октября 2010, 22:29
+
0
вставьте в скетч отладочные сообщения, которые будут писать в порт переданное значение. После этого воспользуйтесь стандартным монитором COM-порта, который есть в Arduino IDE.
Ещё раз перечитайте мой предыдущий комментарий.
avatar

noonv

  • 1 ноября 2010, 10:17
+
0
УРА!!! Заработало, но как-то через файрвол, так сказать. Без вот этого не работает: «вставьте в скетч отладочные сообщения, которые будут писать в порт переданное значение», поэтому в мониторе КОМ порта куча лишнего муссора. Раздражает, но пока так, может попозже напишу статейки по Ардуине+Делфи, если на работе разгребу завалы
avatar

Alek

  • 5 ноября 2010, 23:11

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.