18+
  Войти, или Зарегистрироваться (Что мне это даст?)

Arduino

Обвязка Arduino

21 Января 2012, 15:44
В этой статье расскажу из чего состоит обвязка Arduino. Обвязка содержит:

— систему автоматической перезагрузки для стабильного запуска модуля Ethernet Shield.
— элементы фильтра помех
— нагрузочный резистор датчика температуры

Схема обвязки:



Теперь по порядку.

Система автоматической перезагрузки при включении построена на элементах C3, R4, R5 и транзисторе. Действует она так: при подаче питания конденсатор C3 начинает заряжаться, пропуская при этом ток, который открывает транзистор. Открытый транзистор замыкает вывод Arduino RESET на землю GND, в результате чего происходит перезагрузка. По мере зарядки конденсатора (а время зарядки зависит от постоянной времени интегрирующей цепочки C3R4) транзистор закрывается, разрывая цепь RESET GND. В некоторый момент времени (почти тогда, когда транзистор полностью закрывается) RESET оказывается отключенным от GND и Arduino начинает загружаться.

Вся эта система понадобилась потому, что после подключения модуля Ethernet был обнаружен неприятный эффект. При подаче питания модуль не хотел нормально включаться без нажатия на кнопочку ручной перезагрузки. Понятно, что после каждого пропадания электроэнергии приходилось бы вручную делать перезагрузку, чего ужасно не хотелось :-)

Идем дальше. Конденсатор C1 нужен для подавления помех в цепи питания, которые «вешают» микроконтроллер когда, например, включаешь/выключаешь свет в комнате или сосед врубает сварочный аппарат. Включение в схему этого конденсатора избавило от этой проблемы.

Элементы R1 и C2 нужны для уменьшения сопротивления линии, идущей от опропары и исключения появления паразитных сигналов в этой линии, которые могут внести погрешность в вычисление уровня радиации. Такими помехами могут быть электрические наводки в линии. Например, стоило взяться за провод руками, как Arduino начинал бешено считать импульсы, которые являлись следствием электрических наводок от рук. Вообще можно было использовать экранированный провод к оптопаре и уменьшить его длину, но все же лучше дополнительно использовать вышеуказанные элементы. Для большей так сказать надежности.

Резистор R4 необходим для работы температурного датчика. Более подробной информации на счет этого резистора у меня нет. Без него не работало. А вот R3 добавил специально для подстраховки. На тот случай, если где-то в линии к датчику плюсовой провод замкнет на GND, может выгореть Arduino. Резистор же создаст сопротивление и уменьшит протекающий ток, что спасет (наверное) от немедленного выхода из строя.

Загрузка бутлоадера в Arduino

16 Января 2012, 01:45
В Arduino есть отличная функция — сторожевой таймер. Это такая штуковина, которая автоматически перезагружает микроконтроллер, если он зависнет. Использование этой функции очень полезно для повышения автоматизации системы. А зависнуть контроллер может по разным причинам — от ошибок в прошивке, до электрических помех, поступающих извне. Таким образом, в случае зависания, через несколько секунд последует автоматическая перезагрузка и все начнет работать. Иначе пришлось бы ручками нажимать кнопку перезагрузки.

Но сторожевой таймер напрочь отказался работать с текущим бутлоадером. Значит надо было залить новый. Ниже расскажу как я это делал.

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

Итак, для загрузки бутлоадера понадобилось:

1. Прошивка бутлоадера.
2. Прошивальщик.
3. Специальный прошивочный кабель.

Единственной прошивкой, которая подошла, оказалась ADABootLoader. В моем случае мне подошел файл ADABoot_328.hex, так как Arduino у меня собрана на микросхеме ATMega328p.

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

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



Разъемы соединили. Запускаем программу avrdude-GUI, вводим настройки. В моем случае получилось вот так:



Особое внимание надо обратить на правильную установку Fuse и Lock битов, иначе последствия могут быть непредсказуемыми. Например, может получиться так, что в микроконтроллер не будет загружаться сектч — выполняемая программа. Подробнее про Fuse биты написано тут.

Следует так же отметить, что бутлоадер нормально прошился только с помощью кнопки «Erase — Write — Verify».

Вот, собственно, и все. Прошивка прошла удачно, после чего сторожевой таймер заработал.

Ниже ссылки, на источники очень важной информации, без которой нифига не получилось бы:

http://www.geocities.jp/arduino_diecimila/bootloader/index_en.html
http://www.compcar.ru/forum/showthread.php?t=4675&highlight=bit-bang
http://robocraft.ru/blog/arduino/51.html
http://www.geocities.jp/arduino_diecimila/bootloader/bitbang_w_ide_en.html
http://www.milesburton.com/Dallas_Temperature_Control_Library#Download

Ну и на всякий случай я сохранил копии этих крайне важных страниц, на случай, если с источниками что-нибудь случится.

Совершенствование службы радиационного мониторинга

14 Января 2012, 23:58
После месяца работы и тестирования наша радиационная служба показала отличные результаты. При первоначальном проектировании одним из её звеньев являлся комп, на котором все рассчитывалось и отправлялось в интернет. Но с самого начала меня посещала мысль создать более высокотехнологичный прибор, не требующий круглосуточно работающего компьютера. То есть некое устройство, которое можно просто соединить с помощью кабеля с модемом и «забыть».

Осуществить идею помог один из клонов Arduino и Ethetnet модуль к нему. Arduino представляет собой аппаратную платформу (микрокомпьютер), на основе которой можно собирать разные уникальные гаджеты. Вот так она выглядит:

ArduinoМодуль Ethernet Shield

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

Температурный датчик Осознав всю красоту данного решения, мы подумали вот о чем — почему бы на основе этой платформы не сделать еще и он-лайн термометр? Тем более, что необходимые температурные датчики есть в продаже. Актуальность он-лайн термометра обусловлена тем, что частота обновления прогноза погоды на сайте — 1 раз в 4 часа, чего не всегда достаточно, так как текущая температура на улице может меняться быстрее. Поэтому система была дополнена температурным датчиком. Измерение температуры производится 1 раз в минуту. Показания видно в блоке Погода. Большая цифра — и есть текущая температура на улице.

Получилось вот так:



Вся система схематически:

СГ (Счетчик Гейгера) и t — это датчики, радиации и температуры соответственно. Обвязка СГ содержит схемы, необходимые для работы Счетчика Гейгера. Обвязка Arduino — схему автоматической перезагрузки при включении для стабильного старта модуля Ethernet Shield, фильтры помех и некоторые другие элементы.

Вся система, включая модем, запитана от источника бесперебойного питания.



Для повышения надежности так же было сделано следующее: в случае зависания Arduino введена система автоматической перезагрузки. Сделано это с помощью встроенного «сторожевого таймера». Это такая штуковина, которая автоматически делает рестарт микрокомпьютера в случае зависания. Однако, со стандартным бутлоадером сторожевой таймер не работал. Пришлось заливать новый бутлоадер.

Было так же обнаружено, что периодически Arduino зависает напрочь. Не помогает даже сторожевой таймер. Проведя несколько экспериментов источник зависаний удалось найти — это помехи, проникающие по цепи питания. Создавать их может любой электроприбор, включаемый в сеть неподалеку. Подключив параллельно контактам +5V и GND конденсатор 100n, проблема разрешилась (подробнее об этом здесь).