вторник, 24 декабря 2013 г.

Знакомство с Arduino

Сегодня забрал с почты такой набор Arduino Uno. Заказывал его одной посылкой у одного и того-же продавца вместе с этим блоком питания и платой Raspbery Pi. Всё хорошо. Ну разве что продавец постарался уместить всё в одну посылку и, видимо, по причине своей китайской скупости забыл положить туда USB кабель, который должен был идти в комплекте, и Raspbery не стал класть в стильный розовый корпус, а положил просто в коробочку с набором. Буду иметь ввиду такие хитрости и заказывать посылки по-очереди :)
Далее - несколько фото набора, попытка включить Arduino и поиграть в этот чудный конструктор для пупсиков.

Забегая вперёд, вот, что получилось в первый раз:



В коробке набор выглядит так:

Открываем коробчёнку:

А там двойное дно:

Вытащил из коробки всё, что было:

Я никогда не имел дело с проводками. Просто увидел, что тут куча разных датчиков, кнопочек, лампочек и решил не открывать пакеты до тех пор, пока мне реально что-то из этого набора не понадобится для забав.

Уже почти полночь, можно до сна успеть подключить Arduino к кому и посмотреть что из этого выйдет.
У меня Ubuntu 12.04. Поэтому, как советуют тут, поставил с консоли IDE.

$ sudo apt-get update && sudo apt-get install arduino arduino-core

Пробую запустить из меню - всё ок.
??????? 24.12.2013 ? 00:01:57

Что дальше. Ну, наверное, надо подключить игрушку к компу. Так как меня обделили USB кабелем, то я позаимствовал кабель у принтера. Arduino от радости загорелась зелёным огоньком и замигала оранжевым. Я надеялся, что она определится как флешка и я увижу, куда можно записать код для исполнения, но нет. Придется почитать документацию.

В IDE, как оказалось, есть готовые примеры. Иду в File/Examples/1.Basics/AnalogReadSerial. Вот текст примера. 

/*
  AnalogReadSerial
 Reads an analog input on pin 0, prints the result to the serial monitor 
 
 This example code is in the public domain.
 */

void setup() {
  Serial.begin(9600);
}

void loop() {
  int sensorValue = analogRead(A0);
  Serial.println(sensorValue);
}

Что делает пример, разберусь потом. Сейчас попробую записать его в контроллер. Нажимаю на Upload. Получаю ошибку. 
Serial port 'COM1' not found.  Did you select the right one from the Tools > Serial Port menu?
Пытаюсь следовать совету, то пункт меню "Tools/Serial port" не активен.
Пока искал причину, нашел, в чём суть этого примера с быстренько собрал схему (см. первое фото, выше). Значит, будем смотреть изменение напряжения на A0.

Вот что. Тут говорят, что надо ставить ещё и драйвер отсюда. Не помогло.
Ура! Мне помог Робот присутствия. Сделал как он, только не перезагружался:
$ dmesg | grep cdc_acm
[153228.248468] cdc_acm 3-1:1.0: ttyACM0: USB ACM device
[153228.254473] usbcore: registered new interface driver cdc_acm
[153228.254491] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
$ sudo chmod a+rw /dev/ttyACM0
$ sudo usermod -aG dialout <Ваш пользователь>

Снова делаю Upload. Сперва IDE сказала, что Serial port COM1 not found. Нажал OK, чтобы повторить попытку и это... помогло :) Done uploading
Теперь пример залит на Arduino. Оранжевая лампа наконец-то перестала мигать и просто горит не мигая. Даже 2 лампочки.

Хорошо. Кручу переменное сопротивление, но ничего не происходит. А что должно происходить? Где посмотреть, как меняется сопротивление? В примере говорят, что смотреть надо в Serial Monitor. Ок, открыл "Tools/Serial Monitor" и вот оно!!! Работает!

Первый пшик занял у меня аж 2 часа. Надеюсь, дальше дело пойдёт побыстрее. А теперь можно спать))