http://wiki.linuxformat.ru/wiki/index.php?title=LXF100-101:Arduino&feed=atom&action=historyLXF100-101:Arduino - История изменений2024-03-28T17:52:04ZИстория изменений этой страницы в викиMediaWiki 1.19.20+dfsg-0+deb7u3http://wiki.linuxformat.ru/wiki/index.php?title=LXF100-101:Arduino&diff=7858&oldid=prevCrazy Rebel в 09:31, 7 мая 20092009-05-07T09:31:50Z<p></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr valign='top'>
<td colspan='2' style="background-color: white; color:black;">← Предыдущая</td>
<td colspan='2' style="background-color: white; color:black;">Версия 09:31, 7 мая 2009</td>
</tr><tr><td colspan="2" class="diff-lineno">Строка 2:</td>
<td colspan="2" class="diff-lineno">Строка 2:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>== Программировать оборудование? Легко! ==</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>== Программировать оборудование? Легко! ==</div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">{{Цикл/Arduino}}</ins></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>: Все бывалые линуксоиды умеют писать софт, но чтобы программировать «железо», нужна большая любовь к компьютеру. Мы покажем, с чего начать...</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>: Все бывалые линуксоиды умеют писать софт, но чтобы программировать «железо», нужна большая любовь к компьютеру. Мы покажем, с чего начать...</div></td></tr>
</table>Crazy Rebelhttp://wiki.linuxformat.ru/wiki/index.php?title=LXF100-101:Arduino&diff=7856&oldid=prevCrazy Rebel: викификация2009-05-07T07:56:19Z<p>викификация</p>
<p><b>Новая страница</b></p><div>: Свободная электроника<br />
<br />
== Программировать оборудование? Легко! ==<br />
<br />
: Все бывалые линуксоиды умеют писать софт, но чтобы программировать «железо», нужна большая любовь к компьютеру. Мы покажем, с чего начать...<br />
<br />
Arduino крут. Крут, поскольку это миниатюрное устройство — примерно три на два дюйма [7x5 см] — имеет порт USB и программируемый чип. Он крут, потому что его можно запрограммировать, используя очень простой<br />
язык под названием ''Wiring''. Но главное, вся документация производителя доступна по лицензии Creative Commons, и вы можете собрать<br />
устройство сами, если захотите. Правда, для большинства людей это,<br />
вероятно, все-таки экстрим, и поэтому продаются также готовые платы Arduino — причем по очень низкой цене. IDE для программирования<br />
Arduino доступна по лицензии GPL для множества платформ, и единственное, что стоит между вами и любезным вашему сердцу «железным» проектом — это плата Arduino, клевая идея и кое-какие мелкие детали, аккуратно втыкаемые в Arduino, чтобы сделать его гораздо<br />
более интересным.<br />
<br />
{{Врезка|Заголовок=Электроника и безопасность|Содержание=Пожалуйста, учтите, что электронные компоненты очень чувствительны: статическое электричество может быть смертельно для вашего Arduino и других крошечных компьютерных частей, так что не шаркайте ногами и носите антистатический браслет. А также помните, что электронные компоненты могут, в свою очередь, быть опасны для вас — они часто содержат свинец, поэтому тщательно мойте руки после работы с вашим прибором!|Ширина=200px}}<br />
<br />
===Приступим к установке===<br />
<br />
Платы Arduino доступны в нескольких вариантах, но основные три – Arduino NG (“next generation” – «новое поколение»), Arduino NG Plus<br />
и Arduino Diecimila. Это не платы-конкуренты – NG появилась первой,<br />
потом ее сменила NG Plus, а за ней вышла Diecimila. Мы пользуемся<br />
NG, потому что купили ее давно, но сейчас при попытке приобрести ее<br />
вы обнаружите только Diecimila. В принципе, различия между этими<br />
платами минимальны: на NG Plus установлен процессор Atmega168, на<br />
NG – ATmega8, а Diecimila незначительно улучшена для более простой<br />
загрузки программ. Чипы ATmega8 и ATmega168 очень похожи; основное отличие в том, что в 168 больше места для программ, но для целей<br />
нашего урока это не станет проблемой – подойдет любая из трех.<br />
<br />
Где взять плату Arduino? Рекомендуем PCB Europe (http://pcb-europe.net) – у них есть в продаже Diecimila за 22 евро (на момент написания статьи), и они с радостью ответят на вопросы, если вы не знаете точно, что вы хотите. ['''А в России вы можете заказать Arduino например здесь:''' http://www.linuxcenter.ru/shop/embedded/arduino/]<br />
<br />
Теперь перейдем к вопросам посложнее: что втыкать в ваш Arduino? Сама плата имеет 14 цифровых разъемов и 6 аналоговых, а<br />
также встроенный светодиод и кнопку сброса, и нужно докупить дополнительные детали, чтобы что-то создать. Если вы из США, то, возможно, недалеко от вас есть магазин Radio Shack, где имеются наготове залежи прикольных штучек – просто подойдите к одному из продавцов,<br />
объясните ему, что вы пытаетесь сделать свой первый электронный проект, и уйдете с полной корзиной товаров долларов этак на 30. Если<br />
вы из Великобритании, то лучшее место разместить заказ на нужные детали – www.maplin.co.uk; также рекомендую прихватить у них один<br />
из чудесных наборов Lucky Bags. Поразительно, сколько идей может<br />
подсказать случайная смесь деталей! Вне США и Великобритании,<br />
либо поищите хороший магазин электроники в вашей стране (говоря<br />
«электроника», мы не имеем в виду «продажа iPod»!), либо обрати-<br />
тесь в PCB Europe и купите один из комплектов деталей к Arduino.<br />
<br />
{{Врезка|Содержание=[[Изображение:LXF100-101_55_1.jpg|300px]] Кабель USB с разъемами типа 2 (слева) и 1 (справа) нужен для соединения Arduino с вашим ПК. |Ширина=300px}}<br />
<br />
Так или иначе, вот необходимый минимум деталей для нашего урока про Arduino:<br />
* Макетная плата для сборки без пайки. Обычно это прямоугольник из белого пластика, со множеством отверстий, позволяющих прикрепить детали и соединить их электрически.<br />
* Несколько проводков-перемычек. Можно накупить их разной длины, или нарезать самим – без разницы.<br />
* USB-кабель Type A — Type B. Говоря по-человечески, это обычный соединительный кабель USB: на одном конце плоский, на другом почти квадратный.<br />
* Несколько светодиодов. Лучше – разных цветов!<br />
* Резисторы разных номиналов. Сопротивления более 10 кОм не понадобятся, но стоят они копейки, поэтому можете набрать всяких.<br />
* Потенциометр.<br />
* Фоторезистор.<br />
<br />
Вы уложитесь при покупке вышеперечисленного в сумму менее 500 рублей, и даже еще останется, так что не бойтесь набрать лишнего – потом пригодится!<br />
<br />
===Мигалка===<br />
<br />
Первое, что делают в любом программистском проекте – аппаратном или каком еще – обычно нечто вроде “hello world”: программу заставляют выдать во внешний мир простое сообщение, чтобы убедиться в правильности конфигурации.<br />
<br />
В Arduino встроено несколько светодиодов – есть, например, TX- и RX-светодиоды, мигающие при передаче и приеме данных. Мы воспользуемся специальными тестовыми светодиодами: они покажут, что плата нормально работает. Заставить Arduino работать под Linux придется хитростью, потому что она требует ''Java'' – причем официальной ''Java'' от Sun, клонов она не признает. Если у вас Ubuntu, подключитесь к репозиторию Multiverse, затем установите пакеты ''un-java5-jre'', ''gcc-avr'' и ''avr-libc''. Многие пользователи имеют проблемы из-за конфликта Arduino с поддержкой на клавиатуре системы Брайля; если она вам не нужна, сперва удалите пакет ''brltty'' – а если вы вставили плату Arduino при установленном ''brltty'', выньте ее и воткните уже после удаления пакета. Установив программное обеспечение, запустите ''sudo update-alternatives --config java'' и выберите номер официальной ''Java'' от Sun. Этого должно быть достаточно, чтобы все заработало.<br />
<br />
{{Врезка|Содержание=[[Изображение:LXF100-101_55_2.jpg|300px]] ''IDE Arduino'' очень проста: предлагает подсветку кода, сохранение и загрузку и ничего более — зато вы можете загрузить все на вашу плату прямо отсюда.|Ширина=300px}}<br />
<br />
Если у вас не Ubuntu и не другая система на базе Debian, то вам опять же потребуются ''Java'' от Sun, ''gcc-avr'' и ''avr-libc'', но зато<br />
в таких дистрибутивах, скорее всего, не придется беспокоиться об '''update-alternatives'''.<br />
<br />
Мы включили ''IDE Arduino'' на DVD этого месяца – распакуйте ее на<br />
ваш рабочий стол и запустите команду ''arduino''. При наличии проблем<br />
попробуйте запустить ее из терминала и посмотреть сообщения об<br />
ошибках. Запуская IDE впервые, вы должны будете ответить на вопрос<br />
о месте сохранения ваших программ – поддиректория в вашем домашнем каталоге вполне подойдет.<br />
<br />
Итак, ПО для Arduino установлено; теперь подключим Arduino к<br />
компьютеру через USB-кабель. Если плата работает нормально, светодиод PWR (power, питание) будет гореть, а тестовый диод – мигать,<br />
показывая, что на плате все в порядке.<br />
<br />
В редакторе Arduino зайдите в '''File > New''' для ввода нового кода.<br />
Файлы кода в Ардуинии называются “'''sketches'''” («наброски»), и с ними<br />
очень легко начать работать. Начнем мы с простого проекта: будем<br />
переключать светодиод из ВКЛ в ВЫКЛ, и я хочу показать вам код и<br />
убедиться, что он работает, а потом разобраться, как он работает.<br />
<br />
Вот этот «набросок»:<br />
<br />
int ledPin = 13;<br />
void setup()<br />
{<br />
pinMode(ledPin, OUTPUT);<br />
}<br />
void loop()<br />
{<br />
digitalWrite(ledPin, HIGH);<br />
delay(300);<br />
digitalWrite(ledPin, LOW);<br />
delay(100);<br />
}<br />
<br />
{{Врезка|Содержание=[[Изображение:LXF100-101_56_1.jpg|300px]] Соедините светодиод с цифровыми контактами 13/GND, да присмотритесь к длине его ножек, чтобы не перепутать полярность!|Ширина=300px}}<br />
<br />
Теперь идем в '''Tools > Microcontroller''' и выбираем либо '''atmega8'''<br />
(если у вас ArduinoNG), либо '''atmega168''' (если у вас Diecimila). Если вы<br />
этого толком не знаете, пропустите данный шаг – Arduino определит<br />
процессор при подключении и выдаст ошибку, если обнаружит неправильный. Получив сообщение об ошибке, просто смените опцию! Когда<br />
процессор сконфигурируется, зайдите в '''Tools > Serial Port'''; вы увидите список возможных USB-устройств. В Linux, вероятно, надо будет<br />
выбрать '''/dev/ttyUSB0'''.<br />
<br />
ОК, настройка закончена – пора выгружать ваш «набросок» на плату! В панели меню IDE, вы можете увидеть иконку со стрелкой<br />
вправо – это кнопка '''Upload''' [Выгрузка]. Для Diecimila вам достаточно<br />
нажать на кнопку прямо сейчас, и программа будет выгружена. В противном случае сперва нужно нажать на маленькую кнопку сброса на<br />
плате Arduino, подготовив ее к принятию нового «наброска», а затем<br />
нажать кнопку выгрузки. Светодиоды TX и RX секунду поморгают,<br />
затем секунд пять ничего не будет происходить (Arduino ждет, не поступят ли дальнейшие инструкции), и наконец ваш тестовый диод должен начать мигать. Заработало!<br />
<br />
С этим маленьким проектом вы можете шагнуть дальше. Возьмите<br />
из набора светодиод и подключите его к цифровому контакту '''13'''. Если<br />
вы раньше со светодиодами не работали, хорошенько рассмотрите<br />
его перед установкой: у него две ножки, причем разной длины, и одна<br />
сторона цветного пластикового ободка плоская. Таким образом указывается полярность: ножка покороче и плоский обод – это «минус».<br />
Подключая ваш светодиод к плате Arduino, убедитесь, что плюсовая<br />
ножка подключена к контакту '''13''', а минусовая – к '''Gnd'''<br />
(ground, земля), и если все будет нормально, вы<br />
увидите, как он мигает в такт тестовому светодиоду.<br />
Ошиблись – ничего страшного, просто побыстрее<br />
выдерните светодиод!<br />
<br />
===Как работает код===<br />
<br />
Теперь, когда плата Arduino работает правильно, объясню вам, как работает код, чтобы вы сами могли его модифицировать:<br />
<br />
* '''int ledPin = 13''' описывает переменную '''ledPin''' типа '''integer'' (целое число – ну, то есть, не вида 3,1) и присваивает ей начальное значение 13.<br />
* '''setup()''' – функция по умолчанию в Arduino. Она вызывается при запуске вашей программы, чтобы вы могли задать начальную конфигурацию.<br />
* '''pinMode(ledPin, OUTPUT)''' сообщает Arduino, что вы хотите посылать данные на контакт 13, а не считывать их.<br />
* '''loop()''' – еще одна функция по умолчанию Arduino: она вызвается всякий раз, когда процессор ищет, что бы ему еще сделать.<br />
* '''digitalWrite(ledPin, HIGH)''' означает «послать значение '''HIGH''' на контакт '''13'''»; '''HIGH''' – эквивалент двоичной единицы против двоичного 0, оно же – «ВКЛ», в отличие от «ВЫКЛ». Это включает светодиод.<br />
* '''delay(300)''' заставляет процессор сделать паузу в 300 миллисекунд, т..е. примерно на треть секунды.<br />
* '''digitalWrite(ledPin, LOW)''' выключает светодиод.<br />
* '''delay(100)''' заставляет процессор ждать одну десятую секунды. <br />
<br />
Вот и все! Функция '''loop()''' вызывается с частотой, равной частоте работы процессора, а вызовы '''delay()''' вставлены, чтоб разрешить процессору периодически перевести дух – иначе светодиод будет мигать так часто, что глазу не уследить, и покажется, что он всегда включен! Помните, что на большинство светодиодов насажена маленькая линза, фокусирующая их свет – ярче всего такой светодиод выглядит, если взглянуть на него сверху.<br />
<br />
===Использование макетной платы===<br />
<br />
{{Врезка|Содержание=[[Изображение:LXF100-101_55_3.jpg|300px]] В моей макетной плате ряды обозначаются цифрами, а колонки — буквами. Я так на них и ссылаюсь, чтобы вы смогли в точности скопировать мою схему.|Ширина=300px}}<br />
<br />
Макетная плата имеет металлические дорожки, спрятанные под<br />
отверстиями и соединяющие ряды контактов в электрическую цепь.<br />
Колонки не соединены, поэтому горизонтальных контактов нет – есть<br />
только вертикальные. Если у вас полномерная макетная плата типа<br />
нашей, то на ней между рядов имеется просвет. Ряды по краям просвета тоже не соединены между собой. Рассмотрим на примере, как это<br />
работает: модифицируем простую светодиодную систему введением<br />
макетной платы и двух проводов. В моей плате колонки пронумерованы с 1 до 60, а ряды обозначены буквами от A до J, как показано на<br />
фото на стр. 56, и я воспользуюсь этими обозначениями для указания, куда втыкать провода. Если у вас таких обозначений нет, мои все<br />
равно вам помогут, подсказав, где ряд, а где колонка, а больше нам ничего и не надо.<br />
<br />
Итак, для перенесения проекта «мигалки» на макетную плату, соедините проводом '''Gnd''' с '''J33''', а другим проводом – '''Digital 13''' c '''J32'''.<br />
Это подводит ток к контактам '''I33''' и '''I32''', '''H33''' и '''H32''', '''G33''' и '''G32''', '''F33''' и '''F32'''. Моя плата имеет просвет между рядами '''F''' и '''E''', поэтому '''E32''' и '''E33''' не входят в схему. Теперь<br />
вам осталось только поместить ваш светодиод на правильное место,<br />
чтобы замкнуть цепь; по-вашему, это куда?<br />
<br />
Если вы не страдаете схемобоязнью, можете просто тыкать в контакты, пока светодиод не загорится – «методом тыка» вы много чего<br />
изучите, и это очень забавно, поверьте! В данном примере, светодиод<br />
загорится в позиции '''F33''' (минус, короткая ножка) и '''F32''' (плюс, длинная<br />
ножка); то же произойдет при помещении его в колонки '''G''', '''H''' или '''I'''.<br />
<br />
Попробуем сделать что-нибудь еще: с другой стороны платы Arduino находятся аналоговые входные контакты '''Analog In''', а также<br />
несколько помеченных как '''Power'''. Ток в них будет побольше – заметили на одном из них отметку '''5V''', а на втором '''9V'''? Это, между прочим,<br />
вольты; при таком напряжении нужна осторожность – подав на светодиод слишком много, вы его спалите. Если вы приволокли мешок<br />
светодиодов, беда невелика; но вдруг у вас их только три-четыре, и<br />
они последние! К слову, вполне безопасно подсоединить их на пару<br />
секунд, просто чтобы убедиться, что они работают. Пожалуйста, сделайте это сейчас: отключите Arduino от питания, затем соедините '''5V''' с<br />
'''J33''', а '''Gnd''' рядом с '''5V''' – с '''J32'''. Потом на секунду включите плату: ваш<br />
светодиод ярко засветится (а заодно и нагреется!). Убедившись, что он<br />
работает, отключите USB-кабель, чтобы светодиод погас.<br />
<br />
Перейдем к более сложной задаче: я хочу познакомить вас с резистором. Сия маленькая деталь задает падение напряжения, в зависимости от своего номинала сопротивления. Номинал изображен маленькими цветными полосками на корпусе резистора, но простым смертным<br />
тут ловить нечего – лучше держать под рукой шпаргалку, разъясняющую, что какие полоски означают. Теперь соедините '''5V''' с '''J38''' – так,<br />
чтобы светодиод не был подключен к питанию. Для замыкания цепи<br />
соедините резистором '''I38''' и '''J33''', и вы снова увидите свечение светодиода – но чуть тусклее. Если цветные коды резисторов для вас китайская грамота, попробуйте поочередно вставлять разные резисторы и<br />
рассортируйте их по яркости свечения светодиода!<br />
<br />
===Чтение ввода===<br />
<br />
В фирменном комплекте деталей имеется фотоэлемент – датчик, возвращающий различные значения в зависимости от падающего на него<br />
света. Потребуется чуть больше проводов, дополнительный вызов<br />
функции, а также условный оператор, но на самом деле не так все<br />
сложно – и стоит затраченных усилий: ведь вы напишете код, благодаря которому Arduino сможет ориентироваться в своей среде! Моя<br />
макетная плата снабжена двумя специальными дорожками, помещенными ради удобства подвода питания, но я ими пользоваться не буду,<br />
потому что платы поменьше не всегда обладают подобной роскошью.<br />
<br />
Сперва поместите ваш фотоэлемент на макетную плату. Я воткнул<br />
его в '''F34''' и '''F37'''. Поместите мощный резистор в '''G34''' и соедините его с<br />
'''I29''', затем соедините проводом '''J29''' и '''5V''' – это подаст питание на фотоэлемент. Необходимо также соединить проводом '''G37''' и контакт '''Gnd''' рядом с '''5V''', для замыкания электрической цепи. Чтобы считать данные<br />
с фотоэлемента, соедините другим проводом '''H34''' с '''Analog 0''', и ваша<br />
система готова для программирования!<br />
<br />
«Набросок» для чтения данных с аналогового входа в Arduino очень<br />
прост: вам необходимо указать, с какого контакта вы будете брать<br />
данные фотоэлемента, а также сохранить эти данные. Тут пригодится<br />
функция '''analogRead()''', возвращающая значение, которое вы можете<br />
использовать для работы. В виде «наброска» это выглядит так:<br />
<br />
int ledPin = 13;<br />
int lgtPin = 0;<br />
int lgtVal = 0;<br />
void setup()<br />
{<br />
pinMode(ledPin, OUTPUT);<br />
}<br />
void loop()<br />
{<br />
lgtVal = analogRead(lgtPin);<br />
digitalWrite(ledPin, HIGH);<br />
delay(lgtVal);<br />
digitalWrite(ledPin, LOW);<br />
delay(lgtVal);<br />
}<br />
<br />
Как вы думаете, что этот «набросок» должен делать? Если вы не<br />
уверены, попробуйте разобраться, загрузив его в вашу плату и прикрывая/открывая фотоэлемент!<br />
<br />
===Дерзать дальше...===<br />
<br />
Если вы раздобыли потенциометр, то заставить ваш фотоэлемент<br />
работать будет особенно легко: ваш провод от '''Analog 0''' необходимо<br />
соединить со средней ножкой потенциометра; провод от '''Ground''' – с<br />
левой ножкой; а провод к питанию (через резистор) – с правой ножкой. Убедитесь, что потенциометр плотно вставлен в макетную плату – ножки у них обычно более толстые, так что придется на него поднажать!<br />
<br />
Конечно, это только беглый обзор возможностей Arduino, и все<br />
потому, что настоящая магия заключается в программах, которые вы<br />
напишете. Мы показали вам, как собрать схему для чтения и записи<br />
данных, и следующий вопрос такой: что вы будете с ней делать? '''LXF'''</div>Crazy Rebel