В нашем самодельном Arduino микроконтроллер ATmega328P-PU работает на частоте 16 МГц, есть USB интерфейс, кнопка сброса и схема сброса в начале загрузки скетчей. И самое главное, в микроконтроллер зашит bootloader (загрузчик) Arduino Uno.

Таким образом, наш самодельный Arduino максимально совместим с Arduino UNO, но благодаря тому, что наш Arduino собран на макетной плате Breadboard Half (BREADBOARD - 456 HOLES) размером 82х59 мм., он получился более удобным в эксплуатации.

Самодельный Arduino, Uno совместимый, собранный на макетной плате с USB-DATA кабелем в качестве USB-UART интерфейса

Основное преимущество самодельного Arduino, собранного на макетной плате в том, что его размер может не превышать размеров аналогичных моделей, собранных промышленным способом на печатных платах. В то же время, на макетной плате еще остается много места для создания своих устройств на базе Arduino. Например, этот самодельный Arduino можно успешно использовать для программирования микроконтроллеров в DIP-8, DIP-14, DIP-16, DIP-20 и DIP-24 корпусах. Если удалить схему сброса и сместить микроконтроллер ATmega328P-PU к краю макетной платы, можно будет программировать и микроконтроллеры в DIP-28 корпусах, и тиражировать Arduino. Схему самодельного Arduino можно повторить на значительно большей макетной плате и использовать для всестороннего тестирования своих устройств и программ.

Кроме того, цена комплекта для самодельного Arduino, Uno совместимого, существенно ниже чем у готовых моделей.

Ниже приводим монтажную схему самодельного Arduino, UNO совместимого, на микроконтроллере ATmega328P-PU.

Монтажная схема самодельного Arduino, UNO совместимого, на микроконтроллере ATmega328P-PU с USB-DATA (USB-UART) кабелем

Принципиальная схема самодельного Arduino, UNO совместимого, на микроконтроллере ATmega328P-PU:

Обратите внимание, в цепи DTR установлен конденсатор емкостью 2 мкФ. На линии DTR со стороны преобразователя USB-UART (микросхема CP2101 и т.п.) на время передачи устанавливается сигнал низкого уровня. В момент отрицательного перепада сигнала на линии DTR, RC цепочкой (10 кОм и 2 мкФ) на 1 ножке микроконтроллера формируется короткий отрицательный импульс RESET. Это позволяет по инициативе IDE ARDUNO сбрасывать микроконтроллер и запускать на нем, программу bootloader (загрузчик) перед передачей скетчей (прошивок).

Замечание,  когда Вы будете использовать Ваш Arduino в качестве ISP программатора других микроконтроллеров, разрывайте цепь DTR, вынимая конденсатор 2 мкФ. Это предотвратит запуск на Вашем Arduino программы bootloader. Ваш Arduino должен работать в качестве ISP программатора под управлением скетча ArduinoISP из примеров к программе Arduino IDE.

Принципиальная схема  самодельного Arduino, UNO совместимого, на микроконтроллере ATmega328P-PU

Микроконтроллер ATmega328 имеет

  • 14 входов/выходов 6 из которых могут использоваться как выходы ШИМ (с широтно импульсной модуляцией);
  • 6 аналоговых входов.

Каждый из 14 цифровых входов/выходов Arduino может быть настроен как вход или выход, используя функции pinMode(), digitalWrite() и digitalRead() на языке C в программе Arduino IDE. Цифровые входы/выходы работают при напряжении 5 В.

На принципиальной электрической  схеме самодельного Arduino синим цветом нанесены надписи в точности повторяющие маркировку на разъемах оригинального Arduino UNO R3.

Reset Низкий уровень сигнала на выводе перезагружает микроконтроллер.

0 ... 13 Входы/выходы. Из них:

~3, ~5, ~6, ~9, ~10, и ~11. Выходы с ШИМ с разрешением 8 бит. Управление скважностью сигнала на выходе при помощи функции analogWrite().

A0 ... A5 Аналоговые входы каждый разрешением 10 бит. Диапазон измеряемых напряжений 0 ... 5 В.

AREF Опорное напряжение для аналоговых входов. Позволяет изменить верхний предел измеряемого напряжения на входах A0 ... A5. Используется с функцией analogReference(). Внешнее напряжение рекомендуется подключать к выводу AREF через резистор 5 кОм.

С программным обеспечением некоторые выводы имеют специальное назначение:

0 (RX) и 1 (TX) для передачи данных по UART (порт последовательной передачи данных). Используется программой bootloader.

2 и 3 Инициализация внешнего прерывания. Используется с функцией attachInterrupt().

10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK) Для обмена данными по протоколу SPI, для чего используется библиотека SPI.

4 (SDA) и 5 (SCL) Для осуществления связи по протоколу I2C (TWI). Используется библиотека Wire.

Подбор USB-DATA кабеля вместо USB-UART модуля для самодельного Arduino.

В современных сотовых телефонах микросхема USB-UART встроена в телефон и кабель от них нам не подходит. В старых телефонах, для связи телефона с компьютером по USB интерфейсу использовался USB-DATA кабель, в который была встроена микросхема USB-UART, такой кабель нам и нужен.

Убедиться, что мы нашли или купили подходящий кабель можно следующим образом:

  • Под Windows, при подключении кабеля к USB интерфейсу компьютера, в операционной системе появится новое устройство.
  • Под Linux, необходимо подключить USB кабель к компьютеру и выполнить команду lsusb
lsusb
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 003: ID 046d:c52f Logitech, Inc. Wireless Mouse M305
Bus 001 Device 003: ID 10ab:10c5 USI Co., Ltd Sony-Ericsson / Samsung DataCable

Обратите внимание на последнюю строку. В системе появился Sony-Ericsson / Samsung DataCable. Отличная новость! Но, чтобы развеять сомнения, запустим программу Arduino. Под Windows, возможно, предварительно необходимо будет установить драйвер для кабеля.

В программе Arduino установите Сервис / Последовательный порт / порт на который подключился Ваш USB-DATA кабель. Запустите Сервис / Монитор порта. Соедините на кабеле провода RXD с TXD. В моем кабеле оказалось 5 проводов. Два провода питание 5В вычислить легко с помощью тестера, или светодиода с резистором. Так же сразу определите полярность питания.  Три оставшихся провода RXD, TXD и DTR. DTR полезен, но не обязателен. Из них RXD и TXD можно вычислить с помощью Монитора порта, поочередно соединяя по 2 провода из трех (3 комбинации).

В Мониторе порта в верхней строке наберите какое нибудь сообщение и нажмите кнопку послать:

Монитор COM порта - запрос

Сообщение вернулось, значит мы нашли провода RXD и TXD:

Монитор COM порта - ответ

С USB-DATA кабеля срежьте разъем "К телефону". Припаяйте к проводам кабеля коннекторы. Я, например, взял соединительные провода папа-папа, разрезал их пополам и припаял к проводам USB-DATA кабеля.

USB-DATA кабель от телефона Sony-Ericsson

Переходник USB-UART сделанный из USB-DATA кабеля от телефона Sony-Ericsson.

Еще один USB-DATA кабель подходит на роль USB-UART интерфейса:

lsusb
Bus 001 Device 005: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP210x Composite Device

Это кабель китайского производства для телефона Nokia. По середине кабеля установлена пластмассовая коробочка с микросхемой CP2101 на маленькой плате.

CP2101 USB-UART интерфейс

К этой плате я и припаял выводы +5V GND RXD TXD и DTR.

USB-DATA кабель от телефона Nokia

Переходник USB-UART сделанный из USB-DATA кабеля от телефона Nokia.

Конечно же, можно воспользоваться и готовым интерфейсом USB-UART, например, на микросхеме CP2102.

Интерфейс USB-UART на микросхеме CP2102

Но у него свои недостатки - не распаяна линия DTR и вместе с кабелями, он более громоздкий, +2 лишних разъемных соединения. Но есть и + 3 светодиода на борту (сомнительный +).