Эта статья – иллюстрированное руководство по воссозданию функционала платы Arduino на макетной плате. Эта версия копирует Arduino Serial, но с небольшими изменениями. Как видно по схеме, некоторые компоненты были убраны, а один был добавлен. Вместо транзисторного блока для линий RX и TX в цепь был добавлен 7404N, модуль из шести инверторов. Так удобнее инвертировать последовательный сигнал, идущий от программирующего компьютера на ATmega8.
Вам понадобится рисунок, показывающий распиновку между контактами Arduino и портами ATmega8. Вот он.
Программирующий гребешок на этой схеме не указан
Примечание:В этой схеме 3 ошибки. Во-первых, контакты 2 и 1 на 7404 (IC1) нужно поменять местами. Во-вторых, S1 (кнопка сброса) подключена между GND и контактом 1 на IC2 (это ATmega8). И в-третьих, контакт 5 на X1 (последовательный порт) подключен к «земле».
Здесь можно найти список компонентов, необходимых для этого проекта.
Вначале, чтобы записать загрузчик на микроконтроллер, вам понадобится программатор от Atmel. На картинке ниже программирующий кабель нужно подключать к месту, что находится слева сверху от микроконтроллера.
Чтобы подключить AVRISP-программатор, я сделал программирующий гребешок-коннектор, припаяв прямоугольные гребешковые контакты к прямым гребешковым контактам. Кабель подключается лицом к правой стороне платы.
Чтобы записать загрузчик, вам понадобятся соответствующие файлы. В Arduino-0001 загрузчик в интерфейс не встроен, поэтому вам придется проделать немного дополнительной работы. Соответствующие инструкции можно найти тут.
Когда загрузчик записан на чип, его можно подключать к IDE Arduino. Чтобы упростить плату, я убрал программирующий гребешок и соединяющие провода, а также добавил кнопку сброса (выше микроконтроллера). Ниже – конечный результат. Он соответствует схеме, за исключением 220-омового резистора, подключенного к светодиоду.
Последовательный порт подключен к «земле», но на фото выше этого не видно, потому что загораживается самим коннектором. Поэтому ниже еще одно фото, но без коннектора – чтобы были видны провода:
К последовательному порту припаяны прямые штырьковые контакты, что позволяет подключить его к макетной плате:
Просто подключите последовательный кабель к компьютеру, источник питания (9-15 вольт постоянного тока) – к плате, и плату можно программировать.
Calibration - Определение максимума и минимума для данных от аналогового датчика.
Fading - Использование выходного аналогового контакта (ШИМ) для затухания/загорания светодиода.
Smoothing - Сглаживание серии данных, считанных с входного аналогового контакта.
Связь
ReadASCIIString - Анализ строки, состоящей из разделенных запятыми int-значений, и их последующее использование для управления RGB-светодиодом.
ASCII Table - Демонстрирует продвинутые способы вывода данных на Serial Monitor.
Dimmer - Изменение яркости светодиода при помощи движения мышкой.
Graph - Отправка данных на компьютер и их графическое отображение в скетче Processing.
Physical Pixel - Включение/выключение светодиода путем отправки данных со скетча Processing (или Max/MSP) на Arduino.
Virtual Color Mixer - Отправка с Arduino на компьютер сразу нескольких значений, а затем их считывание при помощи скетча для Processing или Max/MSP.
Serial Call Response - Многобайтная передача данных при помощи метода вызова и ответа (метода «рукопожатия»).
Serial Call Response ASCII - Многобайтная передача данных при помощи метода вызова и ответа (метода «рукопожатия»). До передачи данные зашифровываются в ASCII.
SerialEvent - Демонстрирует использование SerialEvent().
MIDI - Передача через последовательный порт сообщений с MIDI-нотами.
MultiSerialMega - Использование двух последовательных портов на Arduino Mega.
Управляющие структуры
If Statement - Как использовать оператор «if» для создания условий, опирающихся на входные аналоговые данные, при которых светодиод будет либо включаться, либо оставаться выключенным.
For Loop - Управление несколькими светодиодами, чтобы они мигали, как LED-полоска у автомобиля Китт из сериала «Рыцарь дорог».
Array - Вариация примера «For Loop», но с использованием массива.
While Loop - Использование цикла while() для калибровки датчика. Калибровка включается при нажатии на кнопку.
Switch Case - Как совершать какие-либо действия в зависимости от значений, полученных от датчика. Эквивалент примера «If Statement», но если бы условий было не два, а четыре. Этот пример демонстрирует, как дробить диапазон данных от датчика на четыре «суб-диапазона», а затем в зависимости от полученных результатов совершать одно из четырех действий.
Switch Case 2 - Второй пример, демонстрирующий использование оператора switch. Показывает, как совершать различные действия в зависимости от определенных символов, полученных через последовательный порт.
Датчики
ADXL3xx - Считывание данных с акселерометра ADXL3xx.
Knock - Определение стука при помощи пьезоэлемента.
Memsic2125 - Считывание данных с 2-осевого акселерометра Memsic2125.
Ping - Определение объектов при помощи ультразвукового дальномера.