#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);
unsigned long uidDec, uidDecTemp; // для храниения номера метки в десятичном формате
Servo servo;
void setup() {
Serial.begin(9600);
Serial.println(«Waiting for card…»);
SPI.begin(); // инициализация SPI / Init SPI bus.
mfrc522.PCD_Init(); // инициализация MFRC522 / Init MFRC522 card.
servo.attach(6);
servo.write(0); // устанавливаем серву в закрытое сосотояние
}
void loop() {
// Поиск новой метки
if (! mfrc522.PICC_IsNewCardPresent()) {
return;
}
// Выбор метки
if (! mfrc522.PICC_ReadCardSerial()) {
return;
}
uidDec = 0;
// Выдача серийного номера метки.
for (byte i = 0; i
Разберем скетч более детально:
Для того, что бы узнать UID карточки(Метки), необходимо записать данный скетч в arduino, собрать схему, изложенную выше, и открыть Консоль (Мониторинг последовательного порта). Когда вы поднесете метку к RFID, в консоли выведется номер
Полученный UID необходимо ввести в следующую строчку:
If (uidDec == 3763966293) // Сравниваем Uid метки, если он равен заданному то сервопривод открывает задвижку.
У каждой карточки данный идентификатор уникальный и не повторяется. Таком образом, когда вы поднесете карточку, идентификатор которой вы задали в программе, система откроет доступ с помощью сервопривода.
Видео:
На днях я пересматривал фильм «Новый Человек-Паук» и в одной сцене Питер Паркер дистанционно открывает и закрывает дверь со своего ноутбука. Как только я увидел это, то сразу же понял, что и мне нужен такой электронный замок на входную дверь.
Немного повозившись, я собрал действующую модель умного замка. В этой статье я расскажу вам, как я ее собрал.
Шаг 1: Список материалов
Для сборки электронного замка на Ардуино вам понадобятся следующие материалы:
Электроника:
- 5В настенный адаптер
Компоненты:
- 6 винтов для шпингалета
- картон
- провода
Инструменты:
- паяльник
- клеевой пистолет
- дрель
- сверло
- сверло для направляющего отверстия
- канцелярский нож
- компьютер с программой Arduino IDE
Шаг 2: Как действует замок
Задумка состоит в том, чтобы я мог открывать или закрывать дверь без ключа, и даже не подходя к ней. Но это лишь основная идея, ведь можно еще добавить датчик детонации, чтобы он реагировал на особый стук, или можно добавить систему распознавания голоса!
Рычаг сервопривода, соединенный со шпингалетом, будет закрывать его (на 0°) и открывать (на 60°), с помощью команд, получаемых через модуль Bluetooth.
Шаг 3: Схема монтажа проводов
Давайте сначала подключим сервопривод к плате Arduino (хочу заметить, что, хотя у меня использована плата Arduino Nano, в плате Uno расположение выводов точно такое же).
- коричневый провод сервопривода – заземляющий, его подключаем к земле на Arduino
- красный провод – плюс, его подключаем к разъему 5В на Arduino
- оранжевый провод – вывод истока сервопривода, его подключаем к 9-му выводу на Arduino
Я советую вам проверить работу сервопривода, прежде чем продолжить сборку. Для этого в программе Arduino IDE в примерах выбираете Sweep. Убедившись в том, что серво работает, можем подключать Bluetooth-модуль. Нужно соединить вывод rx модуля Bluetooth с tx выводом Arduino, и tx вывод модуля с rx выводом Arduino. Но пока не делайте этого! Когда эти соединения будут спаяны, вы уже не сможете загрузить никакие коды на Arduino, поэтому сначала загрузите все ваши коды и только после этого паяйте соединения.
Вот схема соединений модуля и микроконтроллера:
- Rx модуля – Tx платы Arduino
- Tx модуля – Rx платы
- Vcc (положительный вывод) модуля – 3,3v платы Arduino
- Ground соединяем с Ground (заземление с заземлением)
Если объяснение кажется вам непонятным, следуйте представленной схеме соединений проводов.
Шаг 4: Испытание
Теперь, когда у нас есть все действующие части, давайте удостоверимся в том, что сервопривод сможет двигать шпингалет. Прежде чем монтировать шпингалет на дверь, я собрал пробный образец, чтобы убедиться в том, что серво достаточно мощный. Сначала мне показалось, что мой серво слабоват и я добавил каплю масла в шпингалет, после этого он все заработало нормально. Это очень важно, чтобы механизм хорошо скользил, иначе вы рискуете оказаться запертым в своей комнате.
Шаг 5: Корпус для электрокомпонентов
Я решил поместить в корпус только контроллер и модуль Bluetooth, а сервопривод оставить снаружи. Для этого на куске картона обводим контур платы Arduino Nano и добавляем по 1 см пространства по периметру и вырезаем. После этого также вырезаем еще пять сторон корпуса. В передней стенке нужно будет прорезать отверстие под шнур питания контроллера.
Размеры сторон корпуса:
- Дно – 7,5х4 см
- Крышка – 7,5х4 см
- Левая боковая стенка – 7,5х4 см
- Правая боковая стенка – 7,5х4 см
- Передняя стенка – 4х4 см (с прорезью под шнур питания)
- Задняя стенка – 4х4 см
Шаг 6: Приложение
Для управления контроллером вам нужен гаджет на Android или Windows со встроенным Bluetooth-ом. У меня не было возможности проверить работу приложения на яблочных устройствах, может быть, будут нужны какие-нибудь драйвера.
Уверен, кое у кого из вас есть возможность проверить это. Для Андроида скачайте приложение Bluetooth Terminal, для Windows скачайте TeraTerm. Затем нужно подключить модуль к смартфону, имя должно быть linvor, пароль – 0000 или 1234. Как только сопряжение установится, откройте установленное приложение, войдите в опции и выберите «Установить соединение (небезопасное)». Теперь ваш смартфон – монитор последовательного интерфейса Arduino, то есть вы можете обмениваться данными с контроллером.
Если вы введете 0, дверь закроется, а на экране смартфона будет сообщение «Дверь закрыта».
Если вы введете 1, то увидите, как дверь открывается, а на экране будет сообщение «Дверь открыта».
На Windows процесс тот же самый, за исключением того, что установить нужно приложение TeraTerm.
Шаг 7: Монтируем шпингалет
Сначала вам нужно соединить сервопривод со шпингалетом. Для этого с монтажных отверстий корпуса привода нужно срезать заглушки. Если мы положим сервопривод, монтажные отверстия должны быть вровень со шпингалетом. Затем нужно поместить рычаг сервопривода в прорезь шпингалета, туда, где была ручка шпингалета. Проверьте, как ходит замок в корпусе. Если все нормально, закрепите рычаг сервопривода клеем.
Теперь нужно просверлить в двери направляющие отверстия для винтов. Для этого приложите шпингалет к двери и карандашом отметьте на полотне двери отверстия под винты. Просверлите в отмеченных местах отверстия под винты глубиной примерно 2,5 см. Приложите шпингалет и закрепите его винтами. Снова проверьте работу сервопривода.
Шаг 8: Питание
Чтобы завершить устройство, вам понадобятся источник питания, шнур и штекер мини-usb для соединения с Arduino.
Соедините вывод земли источника питания с выводом земли мини-порта usb, соедините красный провод с красным проводом мини-порта usb, потом протяните провод от замка до дверной петли, а от нее протяните до розетки.
Шаг 9: Код
#include
Servo myservo;
int pos = 0;
int state; int flag=0;
void setup()
{
myservo.attach(9);
Serial.begin(9600);
myservo.write(60);
delay(1000); }
void loop()
{
if(Serial.available() > 0)
{
state = Serial.read();
flag=0;
} // if the state is «0» the DC motor will turn off
if (state == «0»)
{
myservo.write(8);
delay(1000);
Serial.println(«Door Locked»);
}
else if (state == «1»)
{
myservo.write(55);
delay(1000);
Serial.println(«Door UnLocked»);
}
}
Шаг 10: Законченный замок на базе Arduino
Наслаждайтесь своим замком с дистанционным управлением, и не забудьте «случайно» запереть друзей в комнате.
Сегодня урок о том как использовать RFID-ридер с Arduino для создания простой системы блокировки, простыми словами — RFID-замок.
RFID (англ. Radio Frequency IDentification, радиочастотная идентификация) — способ автоматической идентификации объектов, в котором посредством радиосигналов считываются или записываются данные, хранящиеся в так называемых транспондерах, или RFID-метках. Любая RFID-система состоит из считывающего устройства (считыватель, ридер или интеррогатор) и транспондера (он же RFID-метка, иногда также применяется термин RFID-тег).
В уроке будет использоваться RFID-метка с Arduino. Устройство читает уникальный идентификатор (UID) каждого тега RFID, который мы размещается рядом со считывателем, и отображает его на OLED-дисплее. Если UID тега равен предопределенному значению, которое хранится в памяти Arduino, тогда на дисплее мы увидим сообщение «Unlocked» (англ., разблокировано). Если уникальный идентификатор не равен предопределенному значению, сообщение «Unlocked» не появится — см. фото ниже.
Замок закрыт
Замок открыт
Детали, необходимые для создания этого проекта:
- RFID-ридер RC522
- OLED-дисплей
- Макетная плата
- Провода
Дополнительные детали:
- Аккумулятор (powerbank)
Общая стоимость комплектующих проекта составила примерно 15 долларов.
Шаг 2: RFID-считыватель RC522
В каждой метке RFID есть небольшой чип (на фото белая карточка). Если направить фонарик на эту RFID-карту, можно увидеть маленький чип и катушку, которая его окружает. У этого чипа нет батареи для получения мощности. Он получает питание от считывателя беспроводным образом используя эту большую катушку. Можно прочитать RFID-карту, подобную этой, с расстояния до 20 мм.
Тот же чип существует и в тегах RFID-брелка.
Каждый тег RFID имеет уникальный номер, который идентифицирует его. Это UID, который показывается на OLED-дисплее. За исключением этого UID, каждый тег может хранить данные. В этом типе карт можно хранить до 1 тысячи данных. Впечатляет, не так ли? Эта функция не будет использована сегодня. Сегодня все, что интересует, — это идентификация конкретной карты по ее UID. Стоимость RFID-считывателя и этих двух карт RFID составляет около 4 долларов США.
Шаг 3: OLED-дисплей
В уроке используется OLED-монитор 0.96″ 128×64 I2C.
Это очень хороший дисплей для использования с Arduino. Это дисплей OLED и это означает, что он имеет низкое энергопотребление. Потребляемая мощность этого дисплея составляет около 10-20 мА, и это зависит от количества пикселей.
Дисплей имеет разрешение 128 на 64 пикселя и имеет крошечный размер. Существует два варианта отображения. Один из них монохромный, а другой, как тот, который использован в уроке, может отображать два цвета: желтый и синий. Верхняя часть экрана может быть только желтой, а нижняя часть — синей.
Этот OLED-дисплей очень яркий и у него отличная и очень приятная библиотека, которую разработала компания Adafruit для этого дисплея. В дополнение к этому дисплей использует интерфейс I2C, поэтому соединение с Arduino невероятно простое.
Вам нужно только подключить два провода, за исключением Vcc и GND. Если вы новичок в Arduino и хотите использовать недорогой и простой дисплей в вашим проекте, начните с этого.
Шаг 4: Соединяем все детали
Связь с платой Arduino Uno очень проста. Сначала подключим питание как считывателя, так и дисплея.
Будьте осторожны, считыватель RFID должен быть подключен к выходу 3,3 В от Arduino Uno или он будет испорчен.
Так как дисплей также может работать на 3,3 В, мы подключаем VCC от обоих модулей к положительной шине макета. Затем эта шина подключается к выходу 3,3 В от Arduino Uno. После чего соединяем обе земли (GND) с шиной заземления макета. Затем мы соединяем GND-шину макета с Arduino GND.
OLED-дисплей → Arduino
SCL → Аналоговый Pin 5
SDA → Аналоговый Pin 4
RFID-ридер → Arduino
RST → Цифровой Pin 9
IRQ → Не соединен
MISO → Цифровой Pin 12
MOSI → Цифровой Pin 11
SCK → Цифровой Pin 13
SDA → Цифровой Pin 10
Модуль RFID-считывателя использует интерфейс SPI для связи с Arduino. Поэтому мы собираемся использовать аппаратные штыри SPI от Arduino UNO.
Вывод RST поступает на цифровой контакт 9. Контакт IRQ остается несвязным. Контакт MISO подключается к цифровому выходу 12. Штырь MOSI идет на цифровой контакт 11. Контакт SCK переходит на цифровой контакт 13, и, наконец, вывод SDA идет на цифровой вывод 10. Вот и все.
Считыватель RFID подключен. Теперь нам нужно подключить OLED-дисплей к Arduino, используя интерфейс I2C. Таким образом, вывод SCL на дисплее переходит к аналоговому выводу Pin 5 и SDA на дисплее к аналоговому Pin 4. Если теперь мы включим проект и разместим RFID-карту рядом с ридером, мы увидим, что проект работает нормально.
Шаг 5: Код проекта
Чтобы код проекта был скомпилирован, нам нужно включить некоторые библиотеки. Прежде всего, нам нужна библиотека MFRC522 Rfid.
Чтобы установить её, перейдите в Sketch -> Include Libraries -> Manage libraries
(Управление библиотеками). Найдите MFRC522 и установите её.
Нам также нужна библиотека Adafruit SSD1306 и библиотека Adafruit GFX для отображения.
Установите обе библиотеки. Библиотека Adafruit SSD1306 нуждается в небольшой модификации. Перейдите в папку Arduino -> Libraries
, откройте папку Adafruit SSD1306 и отредактируйте библиотеку Adafruit_SSD1306.h
. Закомментируйте строку 70 и раскомментируйте строку 69, т.к. дисплей имеет разрешение 128×64.
Сначала мы объявляем значение метки RFID, которую должен распознать Arduino. Это массив целых чисел:
Int code = {69,141,8,136}; // UID
Затем мы инициализируем считыватель RFID и дисплей:
Rfid.PCD_Init();
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
После этого в функции цикла мы проверяем тег на считывателе каждые 100 мс.
Если на считывателе есть тег, мы читаем его UID и печатаем его на дисплее. Затем мы сравниваем UID тега, который мы только что прочитали, со значением, которое хранится в кодовой переменной. Если значения одинаковы, мы выводим сообщение UNLOCK, иначе мы не будем отображать это сообщение.
If(match)
{
Serial.println(«nI know this card!»);
printUnlockMessage();
}else
{
Serial.println(«nUnknown Card»);
}
Конечно, вы можете изменить этот код, чтобы сохранить более 1 значения UID, чтобы проект распознал больше RFID-меток. Это просто пример.
Код проекта:
#include
#include
#include
#include
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
#define SS_PIN 10
#define RST_PIN 9
MFRC522 rfid(SS_PIN, RST_PIN); // Instance of the class
MFRC522::MIFARE_Key key;
int code = {69,141,8,136}; //This is the stored UID
int codeRead = 0;
String uidString;
void setup() {
Serial.begin(9600);
SPI.begin(); // Init SPI bus
rfid.PCD_Init(); // Init MFRC522
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3D (for the 128×64)
// Clear the buffer.
display.clearDisplay();
display.display();
display.setTextColor(WHITE); // or BLACK);
display.setTextSize(2);
display.setCursor(10,0);
display.print(«RFID Lock»);
display.display();
}
void loop() {
if(rfid.PICC_IsNewCardPresent())
{
readRFID();
}
delay(100);
}
void readRFID()
{
rfid.PICC_ReadCardSerial();
Serial.print(F(«nPICC type: «));
MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
Serial.println(rfid.PICC_GetTypeName(piccType));
// Check is the PICC of Classic MIFARE type
if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&
piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
Serial.println(F(«Your tag is not of type MIFARE Classic.»));
return;
}
clearUID();
Serial.println(«Scanned PICC»s UID:»);
printDec(rfid.uid.uidByte, rfid.uid.size);
uidString = String(rfid.uid.uidByte)+» «+String(rfid.uid.uidByte)+» «+String(rfid.uid.uidByte)+ » «+String(rfid.uid.uidByte);
printUID();
int i = 0;
boolean match = true;
while(i
Шаг 6: Итоговый результат
Как видно из урока — за небольшие деньги можно добавить RFID-ридер в ваши проекты. Можно легко создать систему безопасности с помощью этого ридера или создать более интересные проекты, например, чтобы данные с USB-диска считывались только после разблокировки.
Так уж произошло, что решили мы на работе установить кодовый замок на свою дверь, потому, как постоянно вбегаем – выбегаем из кабинета, дверь в который должна быть закрыта постоянно в отсутствие обитателей. Ключи частенько оказываются забытыми внутри. Вобщем, решили, что кодовый замок это отличный выход.
Порывшись на китайских барахолках и ebay я ничего дешевого и более-менее серьезного не нашел и решил сделать его своими руками. Оговорюсь сразу, что платформа Arduino была выбрана за свою простоту, так-как опыта общения с микроконтроллерами не было вообще.
Идея
На двери с внешней стороны двери должна располагаться клавиатура, на которой вводится пароль, с внутренней стороны закреплена остальная конструкция. Для контроля полного закрытия двери используется геркон. Выходя из кабинета человек нажимает на клавиатуре «*» и не дожидаясь пока дверь закроется доводчиком идет по своим делам, когда дверь будет полностью закрыта, геркон замкнется и замок будет закрыт. Открывается дверь с помощью ввода 4х значного пароля и нажатием на «#».
Комплектующие
Arduino UNO = $18
Arduino protoshield + breadboard = $6
L293D = $1
Пучок проводов 30шт для бредборда = $4
2 розетки RJ45 = $4
2 вилки RJ45 = $0.5
актуатор центрального замка = 250 руб.
Геркон = бесплатно оторван от старого окна.
Шпингалет металлический гигантских размеров = бесплатно
Корпус от старого хаба D-LINK из полуторамиллиметрового железа = бесплатно
Блок питания от того же хаба D-LINK на 12 и 5в = тоже бесплатно
Куча винтов и гаечек для крепления всего этого добра к корпусу = 100руб.
Пульт управления от охранной сигнализации = бесплатно.
Итого:
$33,5 и 350руб.
Не так уж и мало, скажете вы, и будете, определенно правы, но ведь за удовольствие надо платить! А собрать, что-то своими руками всегда приятно. К тому-же конструкцию можно сильно удешевить, если использовать голый МК без Arduino.
Подготовка к сборке
Хочется несколько слов сказать о покупке ключевого элемента конструкции актуатора. В местном авто-магазине мне предложили актуаторы двух видов: «с двумя проводами и с пятью». Со слов продавщицы они были абсолютно одинаковыми и различие в количестве проводов не значило абсолютно ничего. Однако, как оказалось позже, это не так! Я выбрал девайс с двумя проводами, он питался от 12в. В конструкции с пятью проводами установлены концевые выключатели, что позволяет контролировать движение рычага. Понял, что купил не тот я только когда разобрал его и менять его было поздно. Ход рычага оказался слишком коротким, чтобы нормально задвинуть щеколду, поэтому, необходимо было немного его доработать, а именно удалить две резиновые шайбы укорачивающие ход рычага актуатора. Для этого корпус пришлось распилить вдоль обычной ножовкой, потому, что вторая шайба находилась внутри. Синяя изолента нам, как всегда помогла нам в дальнейшем при сборке его назад.
Для управления мотором актуатора был использован драйвер моторов L293D, который выдерживает пиковую нагрузку до 1200 мА, у нас при остановке двигателя актуатора пиковая нагрузка вырастала всего до 600 мА.
Из пульта управления от охранной сигнализации были выведены контакты с клавиатуры, динамика и двух светодиодов. Пульт и основное устройство предполагалось соединить с помощью витой пары и RJ45 разъемов
Программирование.
Так, как опыта программирования Arduino у меня не было до сих пор. Я воспользовался чужими наработками и статьями с сайта arduino.cc. Кому интересно, может поглядеть этот безобразный код 🙂
Фото и видео
Ардуино и актуатор
Блок питания
Клавиатурка
Шпингалет (соединен с актуатором металлической спицей и на которую надета термоусадка для красоты)
Видео процесса работы устройства:
Похожие статьи
Этот смарт-замок является безопасным, простым и легким в управлении для блокировки вашего дома.
Замок не нуждается в ключах и устанавливается внутри дома с обратной стороны двери, а управлять им вы можете из-за двери с помощью Bluetooth модуля Android.
Поскольку замок находится внутри двери, у воров нет возможности его взломать. Для открытия и закрытия требуется приложение Android, а как его сделать объясняется в последней части урока.
Пароль отправляется на замок с помощью этого приложения для Android и если пароль будет соответствовать вашему паролю с предустановленной блокировкой, тогда она будет снята, а на ваш телефон будет передано сообщение об открытии замка.
Шаг 4: Соединяем все детали
Связь с платой Arduino Uno очень проста. Сначала подключим питание как считывателя, так и дисплея.
Будьте осторожны, считыватель RFID должен быть подключен к выходу 3,3 В от Arduino Uno или он будет испорчен.
Так как дисплей также может работать на 3,3 В, мы подключаем VCC от обоих модулей к положительной шине макета. Затем эта шина подключается к выходу 3,3 В от Arduino Uno. После чего соединяем обе земли (GND) с шиной заземления макета. Затем мы соединяем GND-шину макета с Arduino GND.
OLED-дисплей → Arduino
VCC → 3.3V
GND → GND
SCL → Аналоговый Pin 5
SDA → Аналоговый Pin 4
RFID-ридер → Arduino
RST → Цифровой Pin 9
IRQ → Не соединен
MISO → Цифровой Pin 12
MOSI → Цифровой Pin 11
SCK → Цифровой Pin 13
SDA → Цифровой Pin 10
Модуль RFID-считывателя использует интерфейс SPI для связи с Arduino. Поэтому мы собираемся использовать аппаратные штыри SPI от Arduino UNO.
Вывод RST поступает на цифровой контакт 9. Контакт IRQ остается несвязным. Контакт MISO подключается к цифровому выходу 12. Штырь MOSI идет на цифровой контакт 11. Контакт SCK переходит на цифровой контакт 13, и, наконец, вывод SDA идет на цифровой вывод 10. Вот и все.
Считыватель RFID подключен. Теперь нам нужно подключить OLED-дисплей к Arduino, используя интерфейс I2C. Таким образом, вывод SCL на дисплее переходит к аналоговому выводу Pin 5 и SDA на дисплее к аналоговому Pin 4. Если теперь мы включим проект и разместим RFID-карту рядом с ридером, мы увидим, что проект работает нормально.
Каждый ключ имеет внутреннюю связь с домофонной дверью – этот номер и служит ключевым идентификатором. Этот номер интерком-ключа решает, нужный ли вы приложили ключ. Поэтому принцип работы дубликатора домофонных ключей на Arduino довольно прост: сначала нужно проверить «разрешенный» ключ, а затем присвоить тот же номер другому ключевому клону.
Проверяя номер из своей базы данных разрешенных скоростей передачи данных, он откроет дверь. Ключи для внутренней связи, которые мы будем подключать к Arduino дубликатору (иногда называемому iButton или Touch Memory), считываются и записываются в 1-проводной интерфейс. Поэтому схема подключения очень проста.
Шаг 4. Программа Arduino для управления замком защищенным паролем через Bluetooth
Код для управления умным замком через Bluetooth довольно прост. Я разработал приложение для Android, так что оно отправляет команду с паролем.
На самом деле я установил две команды: одна «OPEN =» (Открыть), а другая «CLOSE =» (Закрыть), пароль может содержать любую цифру, букву или символ или комбинацию из них по вашему усмотрению.
В приложении я использовал две кнопки — для открытия двери и для закрытия двери. Когда пароль вводится в нужное поле и нажимается кнопка «открыть» приложение соединяет команду «OPEN =» с паролем и отправляет его в Arduino.
Мы добавили знак ‘=’ с командой для того, чтобы разделить команду и пароль, используя ‘=’. После получения строки из телефонной программы Arduino отделяет команду и пароль от строки приема и сохраняет их в две отдельные переменные.
Затем сначала проверяет пароль, и если пароль совпадает с сохраненным паролем открывается дверь командой «ОТКРЫТЬ» и закрывается дверь командой «ЗАКРЫТЬ». «=» помогает отделить команду и пароль. Ниже приведен полный скетч (эскиз) для Ардуино.
Если Arduino получил неверный пароль, он отправит на телефон Android сообщение о том, что пароль неверен. Фактически Ардуино отправил строку «WRONG». Затем программа на Android показывает неправильное сообщение с паролем.
В нашем проекте релизовано дистанционное управление дверным замком с помощью отпечатка пальца.
Можете смело экспериментировать, модифицировать скетч и обвязку. Например, можно заменить дверной электронный замок на реле для управления питанием вашего 3D принтера, манипулятора или квадрокоптера…
Можно развивать ваш «умный дом». Например, удаленно активировать систему полива на Arduino или включать свет в комнате… При этом не забывайте, что вы одновременно можете активировать практически неограниченное количество устройств, используя Adafruit IO.
Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!
Шаг 7. Разработка приложения для Android
Я покажу вам, как разработать приложение Bluetooth на Aandroid с помощью приложения MIT App Inventor. Я использую App Inventor, потому что он не требует каких-либо навыков программирования и установки программного обеспечения. Вам нужна только учетная запись google. Перейдите по адресу http://ai2.appinventor.mit.edu/ и войдите в систему, используя учетную запись google.
Войдите в приложение Inventor с помощью gmail и выполните следующие действия.
| I | Принять условия | Картинка 1 |
| II | Нажмите «take survey later», а затем «продолжить», чтобы закрыть экран заставки | Картинка 2, 3 |
| III | Начните новый проект | Картинка 4 |
| IV | Назовите проект «BluetoothControlDoorLock» (без пробелов) | Картинка 5 |
Теперь вы находитесь в Дизайнере, где вы делаете «пользовательский интерфейс» вашего приложения (изображение 6). В окне конструктора вы найдете внешний вид вашего приложения и укажете, какие функции он должен иметь. Вы можете выбрать для пользовательского интерфейса кнопки, изображения, ярлыки, текстовые поля и функциональные возможности, такие как Text-to-Speech, Bluetooth, датчики и GPS.
Теперь, следуйте рисунку 7 и добавьте «List Picker» в программу просмотра. Переименуйте его в «Подключение к устройству Bluetooth» (рисунок 8). Добавьте одну метку, одно текстовое поле пароля и две кнопки, показанные на рисунке 10. Измените текстовые свойства компонентов как «Введите пароль», «Открыть дверь» и «Закрыть дверь» соответственно. Конечный пользовательский интерфейс должен выглядеть так, как показано на рисунке 11. Теперь добавьте клиент Bluetooth в программу просмотра. Это невидимый компонент, и он не имеет интерфейса. См. Изображение 12.
Переключитесь на редактор блоков
Пришло время сказать вашему приложению что делать! Нажмите «Блоки» (Blocks), чтобы перейти к редактору блоков (рис. 13). Подумайте о кнопках Designer и Blocks, таких как вкладки, — вы используете их для перемещения вперед и назад между двумя областями App Inventor. Редактор блоков — это программа, в которой вы программируете поведение своего приложения. Есть встроенный блок, который обрабатывает такие вещи, как математика, логика и текст. Ниже перечислены блоки, которые идут с каждым из компонентов вашего приложения. Чтобы заставить блоки для определенного компонента отображаться в редакторе блоков, сначала нужно добавить этот компонент в свое приложение через конструктор.
Давайте создадим блоки для List Picker. List Picker — это элемент пользовательского интерфейса при нажатии на него показывается список соответствующих элементов, здесь — это сопряженное устройство Bluetooth. Мы должны добавить два блока ListPicker.BeforePicking и ListPicker.AfterPicking (изображение 14). Законченные блоки показаны на рисунках 18 и 19.
Сделайте файл .apk
Наш дизайн завершен, теперь нам нужно собрать файл apk для нашего телефона Android. Нажмите, чтобы создать меню и выберите «Приложение (сохранить .apk на мой компьютер)». Подождите минуту. Файл apk загрузится в папку загрузки по умолчанию. Установите и используйте его.
Шаг 3: OLED-дисплей
В уроке используется OLED-монитор 0.96′ 128×64 I2C.
Это очень хороший дисплей для использования с Arduino. Это дисплей OLED и это означает, что он имеет низкое энергопотребление. Потребляемая мощность этого дисплея составляет около 10-20 мА, и это зависит от количества пикселей.
Дисплей имеет разрешение 128 на 64 пикселя и имеет крошечный размер. Существует два варианта отображения. Один из них монохромный, а другой, как тот, который использован в уроке, может отображать два цвета: желтый и синий. Верхняя часть экрана может быть только желтой, а нижняя часть — синей.
Этот OLED-дисплей очень яркий и у него отличная и очень приятная библиотека, которую разработала компания Adafruit для этого дисплея. В дополнение к этому дисплей использует интерфейс I2C, поэтому соединение с Arduino невероятно простое.
Вам нужно только подключить два провода, за исключением Vcc и GND. Если вы новичок в Arduino и хотите использовать недорогой и простой дисплей в вашим проекте, начните с этого.
Одна из разновидностей контактной сварки – конденсаторная. Такой метод сварки известен с первой половины прошлого века. Сварка происходит за счет расплавления заготовок в тех местах, где происходит короткое замыкание тока, которое получают из энергии разряда конденсаторов. Время процесса сварки составляет от 1 до 3 миллисекунд.
Технология конденсаторной сварки
В основе такого сварочного аппарата находится конденсаторная емкость, заряжаемая от источника постоянного напряжения.
По достижении потребного количества энергии в емкости, электроды смыкают в месте сварки. Ток, протекающий между заготовками, вызывает необходимый нагрев поверхности и в результате металл плавится и образуется шов высокого качества.
На практике применяют два вида аппаратов такого типа сварки. Первые обеспечивают разряд из накопителей энергии на поверхности деталей, вторые получают разряд от второй обмотки трансформатора. Первый метод применяют при проведении ударно-конденсаторной сварки, второй применяют тогда, когда речь идет о необходимости получения качественного шва.
Такая сварка отличается экономичностью и поэтому ее часто применяют в условиях домашней мастерской. На рынке можно встретить устройства с мощностью в 100 – 400 Вт, которые часто применяют для работы в небольших мастерских по ремонту автомобильных кузовов. Продолжительность нагрева и сила давления Режимы сварки определяют следующими характеристиками – силой тока, длительностью нагрева, силой сжатия, размерами рабочего конца электрода.
Шаг 5: Код проекта
Чтобы код проекта был скомпилирован, нам нужно включить некоторые библиотеки. Прежде всего, нам нужна библиотека MFRC522 Rfid.
Чтобы установить её, перейдите в Sketch -> Include Libraries -> Manage libraries (Управление библиотеками). Найдите MFRC522 и установите её.
Нам также нужна библиотека Adafruit SSD1306 и библиотека Adafruit GFX для отображения.
Установите обе библиотеки. Библиотека Adafruit SSD1306 нуждается в небольшой модификации. Перейдите в папку Arduino -> Libraries, откройте папку Adafruit SSD1306 и отредактируйте библиотеку Adafruit_SSD1306.h. Закомментируйте строку 70 и раскомментируйте строку 69, т.к. дисплей имеет разрешение 128×64.
Сначала мы объявляем значение метки RFID, которую должен распознать Arduino. Это массив целых чисел:
int code[] = {69,141,8,136}; // UID Затем мы инициализируем считыватель RFID и дисплей:
rfid.PCD_Init(); display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
После этого в функции цикла мы проверяем тег на считывателе каждые 100 мс.
Если на считывателе есть тег, мы читаем его UID и печатаем его на дисплее. Затем мы сравниваем UID тега, который мы только что прочитали, со значением, которое хранится в кодовой переменной. Если значения одинаковы, мы выводим сообщение UNLOCK, иначе мы не будем отображать это сообщение.
if(match)
{
Serial.println("nI know this card!");
printUnlockMessage();
}else
{
Serial.println("nUnknown Card");
} Конечно, вы можете изменить этот код, чтобы сохранить более 1 значения UID, чтобы проект распознал больше RFID-меток. Это просто пример.
Код проекта:
#include <MFRC522.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <SPI.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
#define SS_PIN 10
#define RST_PIN 9
MFRC522 rfid(SS_PIN, RST_PIN); // Instance of the class
MFRC522::MIFARE_Key key;
int code[] = {69,141,8,136}; //This is the stored UID
int codeRead = 0;
String uidString;
void setup() {
Serial.begin(9600);
SPI.begin(); // Init SPI bus
rfid.PCD_Init(); // Init MFRC522
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3D (for the 128x64)
// Clear the buffer.
display.clearDisplay();
display.display();
display.setTextColor(WHITE); // or BLACK);
display.setTextSize(2);
display.setCursor(10,0);
display.print("RFID Lock");
display.display();
}
void loop() {
if( rfid.PICC_IsNewCardPresent())
{
readRFID();
}
delay(100);
}
void readRFID()
{
rfid.PICC_ReadCardSerial();
Serial.print(F("nPICC type: "));
MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
Serial.println(rfid.PICC_GetTypeName(piccType));
// Check is the PICC of Classic MIFARE type
if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&
piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
Serial.println(F("Your tag is not of type MIFARE Classic."));
return;
}
clearUID();
Serial.println("Scanned PICC's UID:");
printDec(rfid.uid.uidByte, rfid.uid.size);
uidString = String(rfid.uid.uidByte)+" "+String(rfid.uid.uidByte)+" "+String(rfid.uid.uidByte)+ " "+String(rfid.uid.uidByte);
printUID();
int i = 0;
boolean match = true;
while(i<rfid.uid.size)
{
if(!(rfid.uid.uidByte == code))
{
match = false;
}
i++;
}
if(match)
{
Serial.println("nI know this card!");
printUnlockMessage();
}else
{
Serial.println("nUnknown Card");
}
// Halt PICC
rfid.PICC_HaltA();
// Stop encryption on PCD
rfid.PCD_StopCrypto1();
}
void printDec(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
Serial.print(buffer < 0x10 ? " 0" : " ");
Serial.print(buffer, DEC);
}
}
void clearUID()
{
display.setTextColor(BLACK); // or BLACK);
display.setTextSize(1);
display.setCursor(30,20);
display.print(uidString);
display.display();
}
void printUID()
{
display.setTextColor(WHITE); // or BLACK);
display.setTextSize(1);
display.setCursor(0,20);
display.print("UID: ");
display.setCursor(30,20);
display.print(uidString);
display.display();
}
void printUnlockMessage()
{
display.display();
display.setTextColor(BLACK); // or BLACK);
display.setTextSize(2);
display.setCursor(10,0);
display.print("RFID Lock");
display.display();
display.setTextColor(WHITE); // or BLACK);
display.setTextSize(2);
display.setCursor(10,0);
display.print("Unlocked");
display.display();
delay(2000);
display.setTextColor(BLACK); // or BLACK);
display.setTextSize(2);
display.setCursor(10,0);
display.print("Unlocked");
display.setTextColor(WHITE); // or BLACK);
display.setTextSize(2);
display.setCursor(10,0);
display.print("RFID Lock");
display.display();
} С помощью микроконтроллера Arduino можно копировать домофонный ключ, если случайно его потерял.
RFID – радиочастотная идентификация. Устройство выполняет ту же функцию, что и штрих-код или магнитная полоска на задней стороне кредитной карты. Он предоставляет уникальный идентификатор для этого объекта. И так же, как штрих-код или магнитная полоса, RFID должен быть отсканирован для получения информации.
RFID используется в этом проекте для чтения данных из RFID-меток и отправки информации в энергонезависимую память MCU.
Идентификатор, считываемый из тегов, сравнивается с хранимой информацией, и если он совпадает, то дверь открывается.
Плата Arduino Uno
Модуль клавиатуры (матричная клавишная панель)
Буззер (звонок)
ЖК дисплей 16х2
Резистор 1 кОм
Транзистор BC547
Макетная плата
Источник питания
Соединительные провода
В представленном проекте мы будем использовать технологию мультиплексирования для подключения клавиатуры (с помощью которой и будет вводиться пароль) к плате Arduino Uno. Мы будем использовать клавиатуру 4х4 которая содержит 16 кнопок (клавиш). В обычном режиме для подключения 16 кнопок к плате Arduino нам бы понадобилось 16 контактов, но с использованием технологии мультиплексирования нам будет достаточно 8 контактов для подключения 16 кнопок. Более подробно об этом можно прочитать в статье про подключение клавишной панели к Arduino.
Технология мультиплексирования является простым и эффективным способом уменьшения числа используемых контактов микроконтроллера при взаимодействии с большим числом кнопок (клавиш). В основном в этой технологии используется два простых приема: сначала сканируются строки, а потом сканируются столбцы. Но поскольку в Arduino мы используем специальную библиотеку для работы с клавиатурой, используя технологию мультиплексирования, нам нет необходимости писать специальный код для реализации этой технологии, по сравнению, например, с подключением клавишной панели к микроконтроллеру AVR.
ЖК-дисплей имеет 16 контактов, что слишком много для Arduino Nano домофона, поэтому важно иметь адаптер I2C. Это позволяет управлять дисплеем только из двух сигнальных штырей на Ардуино
Это полезно из-за небольшого числа контактов, которые нужно будет контролировать из MCU.
ЖК-контакты
ЖК-дисплеи имеют параллельный интерфейс, а это означает, что MCU должен одновременно управлять несколькими контактами интерфейса для управления дисплеем. В приведенной ниже таблице дается описание каждого из контактов на английском языке:
Спецификация контактов
Для начала сделаем связи между ЖК-дисплеем и I2C. Для этого нужен адаптер ЖК-дисплея I2C (LCD1602). Адаптер преобразует ЖК-дисплей формата 16 x 2 в серийный ЖК-дисплей I2C, которым можно управлять через Arduino всего посредством 2-х проводов.
Соединения между Arduino и LCD
Мы подключим клавиатуру для отображения номеров на ЖК-дисплее для Arduino и скопируем ключ, который вводим с клавиатуры.
Keypad.h – это библиотека, которая позволяет Arduino читать клавиатуру с матричным типом.
В этом проекте используется клавиатура 4 × 4.
В таблице показано соединение между платой Arduino и клавиатурой. Штыри клавиатуры подключены к цифровым выходным выводам Arduino. Pin D6 использовался для зуммера, потому что это был штырь ШИМ.
| Вывод клавиатуры | Контакт Arduino |
|---|---|
| 1 | D2 |
| 2 | D3 |
| 3 | D4 |
| 4 | D5 |
| 5 | A0 |
| 6 | D7 |
| 7 | D8 |
Соединение между Arduino, LCD и клавиатурой
ЖК-дисплей и клавиатура, подключенные к Arduino
Затем добавим RFID. В этом случае плата RFID использует протокол связи SPI, где Arduino будет действовать, как ведущий и считыватель RFID в качестве подчиненного. Считыватель карт и теги предназначены для связи с частотой, равной 13,56 МГц.
Это важный шаг, поскольку он помогает нам считывать данные с карты, и он будет решать, соответствует ли идентификатор информации, хранящейся в EEPROM. Если он соответствует, он даст нам доступ и отобразит «Unlocked». В противном случае на ЖК-дисплее отобразится «Заблокировано».
Соединение между Arduino, LCD и RFID
Домофон на Ардуино, LCD и RFID
Следующий шаг – добавить зуммер и 2 светодиода для имитации системы контролируемого доступа. Ознакомьтесь с приведенной ниже диаграммой. Зуммер установлен так, что он гудит всякий раз, когда мы получаем доступ (разблокирован). Красный светодиод всегда горит, когда он заблокирован, но зеленый светодиод загорается, когда он разблокирован.
Чтобы защитить модули, нужно использовать 3D-печать корпуса. Если у вас нет 3D-принтера, вы можете просто использовать пластиковый корпус, который позволяет вам вставлять все компоненты внутрь. Это очень полезно, потому что модули будут размещены внутри, а единственными частями вне коробки будут светодиоды, клавиатура и ЖК-дисплей.
Схема соединений, показывающая соединение между Nano, LCD, клавиатурой, RFID и звуковым сигналом
www.deviceplus.com/how-tos/arduino-guide/make-your-own-arduino-rfid-door-lock/
Теперь приступаем к тестированию! Перейдите в меню пользователя вашего Adafruit IO, в меню Feeds. Проверьте, созданы или нет каналы для отпечатка пальцев и замка (на принт-скрине ниже это строки fingerprint и lock):

Если их нет, то придется создать вручную.
Теперь нам надо обеспечить обмен данными между каналами fingerprint и lock. Канал lock должен принимать значение ‘1’, когда канал fingerprint принимает значение ‘1’ и наоборот.
Для этого используем очень мощный инструмент Adafruit IO: триггеры. Триггеры — это по-сути условия, которые вы можете применять к настроенным каналам. То есть, их можно использовать для взаимосвязи двух каналов.
Создаем новый reactive trigger из раздела Triggers в Adafruit IO. Это обеспечит возможность обмениваться данными между каналами датчика отпечатка пальцев и замка:

Вот как это должно выглядеть, когда оба триггера настроены:

Все! Теперь мы действительно можем тестить наш проект! Прикладываем палец к сенсору и видим как Arduino начал подмигивать светодиодом, который соответствует передаче данных. После этого должен начать мигать светодиод на модуле ESP8266. Это значит, что он начал получать данные через MQTT. Светодиод на монтажной плате в этот момент должен тоже включиться.
После задержки, которую вы установили в скетче (по умолчанию это значение равно 10 секундам), светодиод выключится. Поздравляем! Вы можете управлять светодиодом с помощью отпечатка пальца, находясь в любой точке мира!
«Строчные» линии R1-R4 подключены к выводам Arduino с 6-го по 9-й. Колоночне выводы C1-C4 подключены к выводам 10-10. Третий вывод настроен как выход, в цепь которого включена нагрузка, в нашем случае, для примера, это светодиод D1, последовательно к которому подключено сопротивление номиналом в 330 Ом. Оно необходимо для ограничения тока через светодиод. В настоящем кодовом замке подключатся электромагнит, управляющий положением защелки замка или реле. Если светодиод горит, то замок открыт.
Данная схема позволяет подключить к ней компьютер и просматривать состояние кодового замка через мониторинг последовательного порта среды разработки Arduino.
Скетч кодового замка:
int p; //array for storing the passwordint c; // array for storing the input codeint n;int a=0;int i=0;int lock=3;int r1=6;int r2=7;int r3=8;int r4=9;int c1=10;int c2=11;int c3=12;int c4=13;int colm1;int colm2;int colm3;int colm4;void setup(){ pinMode(r1,OUTPUT); pinMode(r2,OUTPUT); pinMode(r3,OUTPUT); pinMode(r4,OUTPUT); pinMode(c1,INPUT); pinMode(c2,INPUT); pinMode(c3,INPUT); pinMode(c4,INPUT); pinMode(lock,OUTPUT); Serial.begin(9600); //sets the baud rate at 9600 digitalWrite(c1,HIGH); digitalWrite(c2,HIGH); digitalWrite(c3,HIGH); digitalWrite(c4,HIGH); digitalWrite(lock,LOW); p=1; //sets 1st digit of the password p=2; // sets 2nd digit of the password p=3; // sets 3rd digit of the password p=4; // sets 4th digit of the password p=5; // sets 5th digit of the password p=6; // sets 6th digit of the password}void loop(){ digitalWrite(r1,LOW); digitalWrite(r2,HIGH); digitalWrite(r3,HIGH); digitalWrite(r4,HIGH); colm1=digitalRead(c1); colm2=digitalRead(c2); colm3=digitalRead(c3); colm4=digitalRead(c4); if(colm1==LOW) { n=1; a=1; Serial.println(«1»); delay(200);} else { if(colm2==LOW) { n=2; a=1; Serial.println(«2»); delay(200);} else { if(colm3==LOW) {Serial.println(«3»); n=3; a=1; delay(200);} else { if(colm4==LOW) {Serial.println(«LOCKED»); digitalWrite(lock,LOW); //locks i=0; delay(200);} }}} digitalWrite(r1,HIGH); digitalWrite(r2,LOW); digitalWrite(r3,HIGH); digitalWrite(r4,HIGH); colm1=digitalRead(c1); colm2=digitalRead(c2); colm3=digitalRead(c3); colm4=digitalRead(c4); if(colm1==LOW) {Serial.println(«4»); n=4; a=1; delay(200);} else { if(colm2==LOW) {Serial.println(«5»); n=5; a=1; delay(200);} else { if(colm3==LOW) {Serial.println(«6»); n=6; a=1; delay(200);} else { if(colm4==LOW) { if(c==p&&c==p&&c==p&&c==p&&c==p&&c==p) {digitalWrite(lock,HIGH); //unlocks Serial.println(«UNLOCKED»); c=9;} //corrupts the code in array c else {Serial.println(«WRONG PASSWORD»);} delay(200);} }}} if(a==1) // test whether a digit key is pressed { c=n; // saves the current digit pressed to array c i=i+1; a=0;} }
Как работает программа самодельного кодового замка
Наш пароль состоит из 6 цифр «123456», это значение хранится в массиве «p». Введенные нами значения последовательно записываются в массив «c». В коде программы происходит сравнение этих двух массивов, после того как будет нажата кнопка разблокировки. Если они совпадают, то посылаем на вывод 3 «положительный сигнал», а если не совпадают то «отрицательный».
Схема устройства представлена на следующем рисунке.

Как видим, она достаточно проста – достаточно только подсоединить Bluetooth модуль HC05 и одеть сверху на плату Arduino шилд (расширение) TFT ЖК дисплея (TFT LCD Shield). Этот шилд достаточно легко монтируется – достаточно только проследить чтобы контакты GND и Vcc шилда и платы Arduino совпадали. Также вы должны установить библиотеку для работы с данным TFT ЖК дисплеем, более подробно все эти процессы описаны в статье про подключение TFT ЖК дисплея к плате Arduino.
Bluetooth модуль HC05 запитывается от контакта Vcc Arduino, его земля подключена к контакту GND Arduino. Контакты TX и RX модуля HC05 соединены с контактами RX1 и TX1 платы Arduino. Один контакт буззера (звонка) подключен к контакту GND Arduino, а другой – к контакту 22 Arduino.
Для набора кода понадобится библиотека LiquidCrystal_I2C.h в Arduino IDE. Библиотека позволяет подключить ЖК-дисплей к Ардуино. Встроенная библиотека LiquidCrystal_I2C позволяет легко отображать символы на ЖК-дисплее.
Следуйте приведенным ниже инструкциям, чтобы установить новую библиотеку в свою среду разработки Arduino.
- Сначала загрузите файлы из Github.
- Извлеките из архивов каждую папку.
- Скопируйте ZIP-файлы в папку Ардуино.
- Откройте Ардуино и добавьте Keypad.zip:Меню эскиза -> Включить библиотеку -> Добавить ZIP-библиотеку
- Добавить библиотеку клавиатуры:Эскиз -> Включить библиотеку -> Клавиатура
No tags for this post.
Вы когда-нибудь хотели программировать микроконтроллеры как плату Arduino, не используя программатор? Или, может быть, просто собрать свою Arduino плату? Тогда в этой статье вы узнаете, как можно собрать Arduino-совместимый микроконтроллер, при этом обойтись без пайки и сделать это на макетной плате.
Я поведаю о самом простом варианте, не содержащем USB-порта, разъёма для питания, светодиодов для индикации, и состоящем лишь из самого микроконтроллера и минимальной необходимой обвязки. Разработчики (shrimping.it) дали этой схеме название “Shrimp”(Креветка). Она полностью копирует Arduino UNO (если использовать контроллер ATMEGA328P-PU).
Следует отметить, что для прошивки загрузчика в микроконтроллер понадобится плата Arduino. Однако, этот пункт можно опустить, если в ваш контроллер уже вшит загрузчик Arduino. Он нужен для того, чтобы прошивать контроллер можно было без использования программатора, применяя только последовательный порт. В платы Arduino его записывают ещё при производстве, а нам придётся делать это самостоятельно.
Итак, для сборки Shrimp нам понадобятся следующие компоненты:
- Микроконтроллер ATMEGA328P-PU. Поддерживаются и другие контроллеры: ATmega8, ATmega168, ATmega168P, ATmega168PB, ATmega328, ATmega328P, ATmega328PB;
- Тактовая (тактильная) кнопка;
- Внешний кварцевый резонатор на 16 мГц;
- Электролитический конденсатор ёмкостью от 10 до 100 мкФ;
- 2 керамических конденсатор на 22 пФ;
- 4 керамических конденсатора на 100 нФ;
- Резистор на 10 кОм;
- Макетная плата. Как вариант – спаять схему;
- Провода для макетной платы;
- USB-UART преобразователь;
Все компоненты вы можете приобрести в нашем магазине, по низким ценам и с быстрой доставкой:
- Микроконтроллер ATMEGA328P-PU
- Тактовая кнопка SWT 12×12-7.3
- Внешний кварцевый резонатор на 16 мГц;
- Набор электролитических конденсаторов – 12 номиналов по 10шт.
- Набор керамических конденсаторов – 25 номиналов по 10шт.
- Набор резисторов (100 шт.)
- Макетная плата на 400 точек
- Набор макетных проводов “папа-папа”
- USB-UART преобразователь CP2102
Если у вас микроконтроллер без прошитого загрузчика, придётся это исправить. Для начала скачиваем программу OptiLoader для платы Arduino, которая послужит программатором, с официального репозитория проекта на GitHub. Скачанную папку “OptiLoader-master” переименуем в “OptiLoader”. Загружаем скетч в Arduino, отключаем её от питания.
Теперь собираем на макетной плате приведённую схему:


Внимательно всё проверяем.
Подключаем Arduino к питанию. Сразу после загрузки программы OptiLoader начнётся прошивка загрузчика в микроконтроллер. На плате Arduino загорятся светодиоды “RX” и “TX”, индикация работы последовательного порта. Как только они прекратят работу прошивка закончится.
Открываем монитор порта в Arduino IDE и выставляем скорость 19200. OptiLoader ведёт лог своей работы, в случае успешной прошивки микроконтроллера вы увидите следующий отчёт:

Осталось разобраться с тем, как теперь загружать скетчи в почти готовый Shrimp. Для начала дополним схему, установив все конденсаторы, резистор (параллельно ему можно подключить диод) и тактовую кнопку:

USB-UART конвертер нужен для программирования, но можно использовать его в качестве источника питания. Обратите внимание на то, что пин TX конвертера подключается к RX микроконтроллера, а RX – к TX. Если не получается загрузить скетч в Shrimp – попробуйте поменять их местами.
Теперь, когда всё готово, загружаем стандартный скетч “Blink”. Подключаем светодиод на пин D13 (не забудьте про резистор сопротивлением около 220 Ом).
Светодиод будет моргать каждую секунду.

И ещё немного полезной информации о распиновке микроконтроллера ATMEGA328P-PU. “AIN”– аналоговые выводы, “D”– цифровые, выводы “PWM”поддерживают ШИМ (Широтно-импульсную модуляцию).
Не отмеченные ни одним из этих обозначений пины не программируются с помощью стандартных средств разработки Arduino.

Самые популярные материалы в блоге
Вольтик — это слаженная команда амбициозных и заядлых инженеров. Мы создали этот проект с целью вовлечения вас, талантливых и начинающих профессионалов, в увлекательный мир мейкерской микроэлектроники!





















