Сигнализация на ардуино. GSM-сигнализация на Arduino: как сделать охранную систему своими руками

Как сделать GSM-сигнализацию на Arduino. Какие компоненты нужны для сборки. Как подключить и запрограммировать устройство. Какие функции можно реализовать в самодельной сигнализации.

Содержание

Компоненты для сборки GSM-сигнализации на Arduino

Для создания простой но функциональной GSM-сигнализации на базе Arduino понадобятся следующие компоненты:

  • Плата Arduino (Nano, Uno или аналогичная)
  • GSM-модуль SIM800L
  • Понижающий преобразователь напряжения
  • Аккумулятор Li-ion 3.7В
  • Макетная плата
  • Резисторы 10 кОм — 5-7 шт
  • Выключатель питания
  • Провода для соединений
  • Корпус для устройства

Основными элементами являются Arduino и GSM-модуль SIM800L. Arduino выполняет роль микроконтроллера, а SIM800L обеспечивает связь по сотовой сети. Остальные компоненты нужны для питания, подключения датчиков и размещения устройства.

Схема подключения компонентов сигнализации

Схема подключения основных компонентов GSM-сигнализации выглядит следующим образом:


  • GSM-модуль SIM800L подключается к Arduino через резистор 10 кОм:
    • RX SIM800L -> D3 Arduino
    • TX SIM800L -> D2 Arduino
  • К пинам D4-D8 Arduino через резисторы 10 кОм подключаются охранные шлейфы
  • Питание 4.2В подается на Arduino и SIM800L через выключатель
  • Понижающий преобразователь питает схему от аккумулятора или внешнего источника

Такая схема позволяет подключить до 5 охранных шлейфов и обеспечивает автономную работу устройства при отключении внешнего питания.

Программирование Arduino для работы сигнализации

Для программирования Arduino потребуется выполнить следующие шаги:

  1. Установить библиотеку для работы с SIM800L
  2. Настроить параметры GSM-модуля (APN оператора, пин-код и др.)
  3. Задать номера телефонов для оповещения
  4. Прописать логику работы охранных шлейфов
  5. Реализовать отправку SMS и звонки при тревоге
  6. Добавить функции управления режимами охраны

В скетче Arduino необходимо реализовать инициализацию GSM-модуля, мониторинг состояния шлейфов, отправку уведомлений при тревоге и обработку входящих команд управления.


Функциональные возможности самодельной GSM-сигнализации

На базе Arduino и модуля SIM800L можно реализовать следующие функции охранной сигнализации:

  • Постановка/снятие с охраны по SMS или звонку
  • Оповещение о тревоге звонком и SMS на несколько номеров
  • Контроль до 5 охранных зон с указанием сработавшей
  • Автономная работа при отключении питания
  • Периодические тестовые SMS о состоянии системы
  • Удаленное управление подключенными устройствами
  • Запрос температуры и других параметров по SMS

Функционал можно расширять, добавляя новые датчики и исполнительные устройства. Главное преимущество — возможность гибкой настройки под конкретные задачи.

Советы по сборке и настройке GSM-сигнализации

При создании охранной системы на Arduino стоит учитывать следующие моменты:

  • Использовать качественный понижающий преобразователь для стабильного питания
  • Обеспечить резервное питание от аккумулятора на случай отключения сети
  • Настроить быстрый выход из спящего режима GSM-модуля для оперативной связи
  • Предусмотреть индикацию режимов работы с помощью светодиодов
  • Использовать внешнюю GSM-антенну для улучшения приема сигнала
  • Защитить входы Arduino от помех и наводок при подключении датчиков

Правильная настройка и монтаж компонентов позволят создать надежную и функциональную охранную систему своими руками.


Преимущества самодельной GSM-сигнализации на Arduino

Создание охранной системы на базе Arduino имеет ряд преимуществ по сравнению с готовыми решениями:

  • Низкая стоимость компонентов
  • Возможность гибкой настройки под свои задачи
  • Простота модернизации и добавления новых функций
  • Отсутствие абонентской платы за обслуживание
  • Независимость от сторонних сервисов и облачных систем
  • Возможность интеграции с умным домом на базе Arduino

При этом самодельная система по функционалу может не уступать коммерческим аналогам, а в чем-то даже превосходить их. Главное — правильно спроектировать и реализовать нужный функционал.

Возможные проблемы при создании GSM-сигнализации

При разработке охранной системы на Arduino могут возникнуть следующие сложности:

  • Нестабильная работа GSM-модуля из-за помех или слабого сигнала сети
  • Ложные срабатывания датчиков из-за наводок на длинных проводах
  • Быстрый разряд аккумулятора при частой отправке SMS
  • Зависание Arduino при сбоях в работе GSM-модуля
  • Сложности с удаленной диагностикой неисправностей системы

Большинство проблем решается правильным монтажом, экранированием проводов, использованием сторожевого таймера и оптимизацией энергопотребления. При серьезном подходе можно добиться стабильной работы самодельной сигнализации.


Заключение

Создание GSM-сигнализации на базе Arduino — интересный проект для радиолюбителей и практичное решение для охраны различных объектов. При наличии базовых навыков программирования и пайки можно собрать функциональное устройство с широкими возможностями. Главное — правильно спроектировать систему под конкретные задачи и обеспечить надежность всех компонентов.


GSM cигнализация на базе ардуино и SIM800L Arduino

Данный проект является охранной системой домашней сигнализации собранной на базе платы ардуино нано и GSM модуля SIM800L  .

Основные модули – GSM модуль SIM800L, Аrduino Nano (можно любой-Uno и т.п.), понижающая плата, аккумулятор от сотового телефона.


Рис. 1. Схема расположения модулей охранной сигнализации на Arduino

Комплектующие для сборки проекта с алиэкспресс :

Плата ардуино нано (но можно использовать и уно) http://ali.pub/3rayyc


Модуль  SIM800L  GSM  http://ali.pub/3raz5q 


Резисторы на 10кОм (дешевле взять сразу набором) http://ali.pub/3razi6 

Понижающий преобразователь LM2596  http://ali.pub/3razvs  


Либо такой понижающий (он компактнее ) http://ali.pub/3rb0fm


Процесс сборки 

Монтируем на макетную плату через колодки, что позволит при необходимости заменить модули. Включение сигнализации путем подачи питания 4,2 вольта через выключатель на SIM800L и Аrduino Nano.


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

Размещаем всю электронику в подходящем корпусе.


Если вам не нужно 5 шлейфов соедините контакт 5V Arduino c не нужными входами. GSM сигнализация на 5 шлейфов с аккумулятором, что позволит устройству продолжать работу в течении нескольких дней автономно, при отключении электроэнергии. Можно подключить к ним любые охранные контактные датчики, контакты реле и т.п.В результате получим простой, недорогой компактный охранный прибор для с передачей СМС и дозвоном на 2 номера. Применить его можно для охраны дачи, квартиры, гаража и т.д.

Geek каналы

➤ VK — https://vk.com/denis_geek


➤ VK — https://vk.com/club_arduino
➤ VK — https://vk.com/chinagreat
➤ VK — https://vk.com/solar_pover
➤ VK — https://vk.com/my_vedroid
➤ VK — https://vk.com/3dprintsumy 
➤ Youtube  — http://www.youtube.com/c/Denisgeek 

 

★ Моя партнёрка с Aliexpress ★

★ Получай 10.5% скидку с любой покупки на Aliexpress! ★

★ Полезное браузерное приложение для кэшбэка  ★

Охранная сигнализация или система оповещения на Arduino – РАЗУМ

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

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

 

Ну а для тех, кто больше любит читать, продолжим.. 🙂

Итак, перед тем как начать созидать нечто подобное, вам необходимо учесть дальность расположения от места управления, внутренний климат и другие характеристики охраняемого вами помещения.

В моей системе необходимо было обеспечить возможность управления сигнализацией удалённо, то есть из дома, поэтому у меня было два пути решения этой проблемы:

1. Организовать беспроводное соединение между двумя Arduino.

2. Либо же обойтись одной Arduino и в гараж вывести лишь длинный провод с датчиками.

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

Я решил идти по второму пути — с проводом и одной Arduino, и вот почему: во-первых расстояние до моего гаража составляет примерно 50 метров, что не так много для ощутимого затухания сигнала в линии и вполне реализуемо по затратам кабеля, а во вторых, из-за неотапливаемости помещения зимой, температура в нем может опускаться до -30-35 градусов, что пагубно скажется на Arduino без дополнительного обогрева. Да и перебои с электричеством у нас частые, поэтому пришлось бы лепить дополнительный аккумулятор, что бы поддерживать обогрев и работоспособность.

В итоге я решил просто проложить витую пару и на ее конце навешать датчики. Ну а аккумулятор для резервного питания добавлю как-нибудь попозже.

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

Теперь немного подробнее о получившейся системе, если ее так можно назвать 🙂

Всю её можно разбить на три части: это та, что стоит дома (пульт управления), та, что стоит в охраняемом помещении (датчик Холла и пр), и та, что связывает эти части (витая пара).

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

Из корпуса выходит витая пара на 8 жил, на обратном конце которой расположены датчик температуры и влажности, датчик Холла и пьезо-пищалка с кнопкой:

Схема подключения всей системы получилась довольно простой и выглядит как-то так:

Датчик температуры и влажности я добавил чтобы не только знать о текущем климате внутри помещения, но и на основании датчика температуры уведомлять о возможном возгорании, т.к. при пожаре температура в помещении очень резко поднимается до больших значений свыше 100 градусов по Цельсию.

Алгоритм работы сигнализации достаточно прост и представить его можно вот такой упрощенной блок-схемой:

Что касается кода, то объяснять его, я думаю, нет особого смысла, так как там все разбито по функциям и хорошо закомментировано. Скажу лишь только что код, конечно же, можно оптимизировать и внести в него изменения на своё усмотрение, он далек от идеала, но протестирован на живом примере и стабильно работает. Так же, если вам лень разбираться в коде и хочется просто собрать все по схеме, я специально оставил в самом верху листинга две переменные: первая отвечает за временную задержку на включение сигнализации после нажатия кнопки (я поставил 3 минуты), а вторая отвечает за включение оповещения об открытии двери, то есть то время, когда вы открыли дверь и еще не выключили сигнализацию — по умолчанию на это дается 30 секунд:

#define DELAY_CLOSE 180000
#define DELAY_OPEN 30000

В результате получилась довольно простая и надежная система оповещения, вполне справляющаяся со своей основной обязанностью.

Программный код и схемы вы найдете здесь: GitHub

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

 

Простая сигнализация лающая собака с датчиком движения

Сегодня будем делать сигнализацию. И не простую, а лающую на всех проходящих. И ещё её можно использовать как элемент присутствия в квартире или на даче большого злого пёсика. Вот придёт грабитель, услышит, что дома собака Баскервилей, испугается, и не будет ничего брать.
Для такой сигнализации мы будем использовать MP3 плеер DFPlayer Mini, датчик движения HC SR501, и Ардуино, куда же без неё.
Давайте посмотрим небольшой кусочек что должно получиться.

Для начала нам надо установить библиотеку. Скачивать её будет с githab.
А это, кто не знает мой канал, на нём больше сотни видео на разные темы. Кто ещё не подписан, то сейчас самое время это сделать.
Переходим вот по этой ссылке https://github.com/DFRobot/DFRobotDFPlayerMini Если не забуду, то ссылка будет в описании.
Эта библиотека специально разработана для модуля MP3 который мы будем использовать. В ней есть примеры как с ней работать. Нажимаем скачать zip архив.
Теперь переходим в Arduino IDE ко вкладке Скетч и выбираем добавить zip библиотеку.
Идём в то место куда вы скачали библиотеку и выбираем архив. Нажимаем Open, ну или что там у вас. Всё готов, библиотека установилась практически моментально.
Заходим в примеры и смотрим какие примеры установились с библиотекой.
Мы будем использовать полный функционал. Поэтому открываем FULL FUNCTION.

Прошиваем скетч в Ардуино и смотрим всё ли в порядке. Видим, что инициализация модуля прошла успешно и плеер в Онлайне.
Теперь пробежимся по коду. Здесь почти 200 строк кода. Не, нам столько не надо. Я сейчас удалю всё лишнее и снова включусь.

Ну всё, код я почистил от всего лишнего. Теперь нам надо сделать что-нибудь полезное. Для нашего видео надо чтобы плеер воспроизводил звуковые файлы в случайном порядке. А то если они всегда будут идти друг за другом, то можно заподозрить не ладное.
В библиотеке для этого есть функция random, и всё вроде должно быть в порядке, но или я чего не понял или работает она как-то не так. В общем проблемы с ней. Поиск по инету не помог. Поэтому пришлось выходить из ситуации Ардуиновскими функциями.

Я записал на флэшку 12 файлов с кукушкиным кукованием. Благо у меня было видео про часы с кукушкой. Посмотреть можно здесь. Сколько кук, такое название файла.
Чтобы видеть какой файл играет, я вывел его название в монитор порта. Для определения конца проигрываемого файла я сделал проверку на 512. Это конец проигрываемого файла. Теперь смотрим и считаем куки.


Ну в общем всё работает и можно приступать к подключению датчика движения.
Посмотрим схему подключения.

Ну и наконец  давайте посмотрим скетч сигнализации. Сначала идут 3 библиотеки.

  • Первая библиотека, Ардуино, подключена для совместимости с предыдущими версиями.
  • Затем библиотека SoftwareSerial для работы с программным серийным портом и работающего на скорости до 115200 бод. В отличии от аппаратного,( пины 0 и 1), вы можете указать почти любые свободные цифровые пины.  
  • Библиотка DFRobot DFPlayer Mini  для работы с MP3 плеером.


Здесь указываем к каким пинам подключен плеер. Обычно это 10 и 11. RX модуля подключён к TX Ардуино через резистор 1 кОм.
Работать будем на скорости 115200 бод. Поэтому в мониторе порта не забудьте установить эту скорость.
Это проверка на подключение плеера и SD карты. Если что-то не так, дальше код не будет работать и надо проверить наличие карты и подключение модуля.
Если всё работает, то увидите текст «Всё работает!!!».
Так как для инициализации датчика движения требуется время, примерно 1 минута, и в это время он может менять своё состояние с 0 на 1 я сделал паузу в 40 секунд, а затем идёт приветственный звуковой файл, говорящий, что сигнализация готова к работе. У меня это файл 4.

Здесь можно менять громкость. Она может быть от 0 до 30.
В переменную state записываем текущее значение с выхода датчика движения и если это 1, то проваливаемся в это условие.
Статус 512 – это статус окончания звукового файла. И пока он не равен 512 будет играть файл.
Сначала я сделал скетч чтобы он выбирал случайный трек и воспроизводил его, но потом отказался от этого. Во первых я не нашёл хороших, злых рычаний собак, а во вторых понял что это не нужно. Достаточно и одного. Этим я упростил скетч. После окончания я сделал паузу 5 секунд чтобы был небольшой разрыв.
В архиве будет лежать скетч с рандомным воспроизведением. Он рабочий, но я особо его не тестил, поэтому могут быть косяки.
Ну и в конце идут распечатки служебных команд и ошибок плеера.
Теперь давайте посмотрим что получилось.
Кстати здесь показан скетч со случайным воспроизведением файлов. На карте записано 4 файла. В 4 файле записано приветствие и сообщение о готовности.

После подачи питания включается задержка на 40 секунд, а затем идёт приветственный файл. Мы ждать 40 секунд не будем, а сразу к делу. Я зачем-то наложил эхо. Думал будет прикольно, а получилось не очень. Но переделывать уже не стал.

На этом заканчивается моё видео. Спасибо за то, что посмотрели. Что дальше делать вы и так сами знаете. Если понравилось, то ставьте лайк, а если нет, то обоснуйте. До встречи в следующем видео. Оно тоже будет со звуком, и надеюсь что вам понравится.

 

Сигнализация на sim800l arduino

Как сделать простую GSM сигнализацию на SIM800L и Ардуино. Делаем своими руками на основе готовых модулей с Алиэкспресс. Основные модули – GSM модуль SIM800L, Аrduino Nano(можно любой-Uno и т.п.), понижающая плата, аккумулятор от сотового телефона.

Монтируем на макетную плату через колодки, что позволит при необходимости заменить модули. Включение сигнализации путем подачи питания 4,2вольта через выключатель на SIM800L и Аrduino Nano.

При срабатывании первого шлейфа система сначала отзванивается на первый номер, затем сбрасывает звонок и отзванивается на второй номер. Второй номер добавлен на всякий случай если вдруг первый будет отключен и т.д.При срабатывании второй, третий, четвертой, и пятой шлейфа, отсылаются СМС с номером сработавшей зоны, также на два номера. Схема и скетч кому интересно в описании под видео.
Размещаем всю электронику в подходящем корпусе.GSM сигнализация на 5 шлейфов с аккумулятором, что позволит устройству продолжать работу в течении нескольких дней автономно, при отключении электроэнергии. Если вам не нужно 5 шлейфов соедините контакт 5V Arduino c не нужными входами.Можно подключить к входам любые охранные контактные датчики, контакты реле и т.п. В результате получим простой, недорогой компактный охранный прибор для с передачей СМС и дозвоном на 2 номера. Применить его можно для охраны дачи, квартиры, гаража и т.д.

Подробнее в видео.

Как сделать простую GSM сигнализацию на SIM800L и Ардуино. Делаем своими руками на основе готовых модулей с Алиэкспресс. Основные модули – GSM модуль SIM800L, Аrduino Nano(можно любой-Uno и т.п.), понижающая плата, аккумулятор от сотового телефона.

Монтируем на макетную плату через колодки, что позволит при необходимости заменить модули. Включение сигнализации путем подачи питания 4,2вольта через выключатель на SIM800L и Аrduino Nano.

При срабатывании первого шлейфа система сначала отзванивается на первый номер, затем сбрасывает звонок и отзванивается на второй номер. Второй номер добавлен на всякий случай если вдруг первый будет отключен и т.д.При срабатывании второй, третий, четвертой, и пятой шлейфа, отсылаются СМС с номером сработавшей зоны, также на два номера. Схема и скетч кому интересно в описании под видео.
Размещаем всю электронику в подходящем корпусе.GSM сигнализация на 5 шлейфов с аккумулятором, что позволит устройству продолжать работу в течении нескольких дней автономно, при отключении электроэнергии. Если вам не нужно 5 шлейфов соедините контакт 5V Arduino c не нужными входами.Можно подключить к входам любые охранные контактные датчики, контакты реле и т.п. В результате получим простой, недорогой компактный охранный прибор для с передачей СМС и дозвоном на 2 номера. Применить его можно для охраны дачи, квартиры, гаража и т.д.

Подробнее в видео.

С наступлением дачного сезона возникла необходимость охраны дачного домика. Хотелось сделать простенькую но надежную охранную сигнализацию с передачей сигнала на сотовый телефон. Решено было собрать устройство с передачей тревоги на сотовый телефон на базе электронных плат приобретенных на Алиэкспресс. Как говорится дешево но сердито. Основными элементами данной конструкции являются модуль GSM SIM800L и плата Aрдуино(можно применить любую- Nano ,Uno,Pro Mini и тому подобные).

Устройство на пять тревожных входов для контактных датчиков. К каждому входу можно подключить один или несколько датчиков последовательно соединенных В скетче присвоить каждому охранному шлейфу свое название (например-входная дверь, окно 1, окно 2 и так далее). Охранное устройство работает так: при разрыве электрической цепи первого шлейфа блок сперва дает вызов на первый телефон абонента, следом прекращает звонок и также на №2. №2 нужен в виду того что если вдруг первый абонент не в сети или подсел аккумулятор и прочие неприятности). Если срабатывают шлейфа следующие за первым, тогда происходит отсылка СМС сообщения с названием сработавшего шлейфа, в том же случае на оба номера абонентов.

Перечень инструментов и материалов.
-литий –ионный аккумулятор от старого телефона 3,7В1600мА-1шт
-соединительные провода;
-паяльник;
-тестер;
-прозрачная пластмассовая коробка -1шт;
-плата Arduino Nano -1 шт;
-резисторы 10кОм-7шт;
– макетная плата из фольгированного текстолита;
– выключатель питания-1шт;
-модуль SIM800L -1шт;
-понижающая плата 1-2А -1шт;
-клеммные разъемы.

Шаг первый. Сборка схемы охранного GSM устройства.
Фото схемы.

На макетную плату припаиваем разъемные колодки для GSM модуль SIM800L и модуль Arduino это упрощает монтаж и позволяет при необходимости легко заменять модули. Распаиваем резисторы и остальные соединения. Резисторы от контакта RX модуля SIM800L подключаются к цифровому входу D3 Arduino для согласования по напряжению входов обоих модулей. Входы Arduino D4-D8 подтягиваются через резисторы. Выключатель монтируется в разрыв питания GSM модуля SIM800 и платы Ардуино для постановки на охрану всей системы. Применение аккумулятора, что позволит устройству функционировать два три дня при отсутствии сети 220 В. Преобразователь напряжения в моем случае из напряжения 12 В выдает напряжение 4,2 В и заодно заряжает аккумулятор(можно применить другую плату, например ТР4056 с защитой).

Шаг второй. Программирование устройства.
В СИМ карте должны быть удалены пинкоды и все ненужные функции. Еще предварительно нужно настроить сам модуль SIM800L-в сети есть много видео по этой теме, ничего сложного в этом нет. В скетче указываем ваши номера телефонов, корректируем названия охранных зон, можно установить время контроля системы (если прибор работает нормально через заданное время придет контрольная СМС). Заливаем скетч в Arduino и проверяем работу устройства.

Шаг третий. Проверка работоспособности устройства.

При подаче напряжения питания пока загружаются модуль SIM800L и плата Arduino у вас есть примерно 20 секунд чтобы покинуть охраняемое помещение. На модуле SIM800L светодиод указывает на работу в сети- часто мигает это поиск сети, раз в пять секунд- работа в сети. Когда прибор найдет сеть разорвите соответствующие охранные входы, после этого произойдет дозвон или присылка СМС. Значит прибор работает нормально.

Фото СМС. К этому прибору можно будет включить любые охранные извещатели с выходами в виде контактов, реле от исполнительных устройств, только в соответствие с вашими потребностями и фантазией. В целом мы изготовили несложный, охранный прибор. Такой самодельный сторож можно сделать для организации охраны любых объектов. Чтобы включить прибор сигнализации нужно через выключатель на SIM800 и Аrduino подать 4,2 Вольта. При первого входа пройдет звонок на абонента №1, после переключится на №2. Дополнительный №2 предусмотрен для дублирования. Обрыв шлейфа №2,3,4,5 делает выдачу SMS с конкретным названием нарушенного шлейфа, соответственно на оба телефона. Все платы поместим в любом в подходящем корпусе. В общем я думаю это неплохой интересный приборчик который можно в дальнейшем развить далее-добавить функции GSM розетки, управление по DMTF и многое другое.

Подробнее можно посмотреть в видео

Страница не найдена — Стальная колея

Как построить дачную железную дорогу своими руками

Видеоканал ДачЖелДор

Карта посещаемости

Карта блога

Рубрики

Выберите рубрикуДепо Шушары  (1)Летопись ДачЖелДора.  (340)   ОВЖД  (180)   ОВЖД (Переславль-Залесский)  (2)   ДМ ПАУМКЖТ  (3)   МЖД ЛО №6  (1)   ВТЖД  (24)   ЛБЖД  (18)   УЖД Калашниковых  (20)   КРУЖД  (24)   ПЗ УЖД  (14)   ММЖД  (26)   ДУЖД  (4)   ОПДЧ  (4)   УЖД им. П. К. Фролова  (2)   КМЖД  (5)   ПУЖД  (6)   СЖД «Лунный свет»  (6)   ЧЖДМ  (3)Подвижной состав ДачЖелДора.  (32)   Мастерская ОВЖД  (8)      АГД «Пчёлка» М.Орехова  (7)      Ручная дрезина «Мушка» М. Орехова  (1)   Трамвайная мастерская А.Васильева  (13)      Дачный трамвай А.Васильева  (10)      Электровоз А.Васильева  (1)   ГЭТ-2 А. Матюкова  (1)   Подвижной состав В. Попова  (10)Депо ДачЖелДора  (73)   Кирпичики  (39)   Мастерим сами  (30)   Обустраиваем дорогу  (4)Зарубежный опыт  (16)   Дороги зарубежных энтузиастов.  (7)   Опыт западных коллег  (9)Прочие материалы.  (92)   Новости  (55)   Аудио приложения / подкасты  (6)      Аудио журнал «Чугунка»  (3)      Аудио приложение «Дачжелдорстрой»  (3)   Участие в праздниках и фестивалях  (19)      День Железнодорожника с ЦМЖТ РФ  (3)      Вторая Ударная армия — Забытый подвиг 2017  (4)      Забытый подвиг Вторая ударная 2016  (6)      Киндерфест 2015  (6)   Неформат  (4)   Прочие дороги и подвижной состав.  (10)

Дополнительные площадки.

Поиск по блогу

Архив

Архив Выберите месяц Сентябрь 2021  (7) Август 2021  (5) Июль 2021  (7) Июнь 2021  (2) Май 2021  (3) Апрель 2021  (5) Март 2021  (4) Февраль 2021  (2) Январь 2021  (6) Декабрь 2020  (5) Ноябрь 2020  (8) Октябрь 2020  (5) Сентябрь 2020  (7) Август 2020  (5) Июль 2020  (6) Июнь 2020  (10) Май 2020  (9) Апрель 2020  (10) Март 2020  (10) Февраль 2020  (6) Январь 2020  (12) Декабрь 2019  (7) Ноябрь 2019  (5) Октябрь 2019  (8) Сентябрь 2019  (7) Август 2019  (5) Июль 2019  (2) Июнь 2019  (3) Май 2019  (3) Апрель 2019  (5) Март 2019  (6) Февраль 2019  (3) Январь 2019  (4) Декабрь 2018  (5) Ноябрь 2018  (5) Октябрь 2018  (3) Сентябрь 2018  (4) Август 2018  (2) Июль 2018  (3) Июнь 2018  (5) Май 2018  (3) Апрель 2018  (5) Март 2018  (6) Февраль 2018  (6) Январь 2018  (5) Декабрь 2017  (5) Ноябрь 2017  (5) Октябрь 2017  (5) Сентябрь 2017  (6) Август 2017  (4) Июль 2017  (7) Июнь 2017  (4) Май 2017  (3) Апрель 2017  (6) Март 2017  (7) Февраль 2017  (5) Январь 2017  (5) Декабрь 2016  (7) Ноябрь 2016  (7) Октябрь 2016  (4) Сентябрь 2016  (4) Август 2016  (5) Июль 2016  (2) Июнь 2016  (7) Май 2016  (5) Апрель 2016  (8) Март 2016  (5) Февраль 2016  (9) Январь 2016  (6) Декабрь 2015  (3) Ноябрь 2015  (8) Октябрь 2015  (4) Сентябрь 2015  (4) Август 2015  (5) Июль 2015  (10) Июнь 2015  (7) Май 2015  (6) Апрель 2015  (5) Март 2015  (7) Февраль 2015  (2) Январь 2015  (2) Декабрь 2014  (6) Ноябрь 2014  (7) Октябрь 2014  (5) Сентябрь 2014  (4) Август 2014  (4) Июль 2014  (5) Июнь 2014  (4) Май 2014  (5) Апрель 2014  (5) Март 2014  (6) Февраль 2014  (4) Январь 2014  (10) Декабрь 2013  (4) Ноябрь 2013  (5) Октябрь 2013  (3) Сентябрь 2013  (4) Август 2013  (3) Июль 2013  (5) Июнь 2013  (6) Май 2013  (5) Апрель 2013  (11)

Управление блогом

Свежие комментарии

Система сигнализации Arduino — Arduino Project Hub

 //www.elegoo.com
//2016.12.08

/ *
  Библиотека LiquidCrystal - Привет, мир

  Демонстрирует использование ЖК-дисплея 16x2. Жидкий кристалл
  библиотека работает со всеми ЖК-дисплеями, совместимыми с
  Драйвер Hitachi HD44780. Их там много, а ты
  Обычно их можно узнать по 16-контактному интерфейсу.

  На этом скетче печатается надпись "Hello World!" к ЖК-дисплею
  и показывает время.

  Схема:
   Вывод ЖК-дисплея RS на цифровой вывод 7
   Вывод ЖК-дисплея на цифровой вывод 8
   Вывод ЖК-дисплея D4 на цифровой вывод 9
   Вывод ЖК-дисплея D5 на цифровой вывод 10
   Вывод ЖК-дисплея D6 на цифровой вывод 11
   Вывод ЖК-дисплея D7 на цифровой вывод 12
   LCD R / W контакт к земле
   Вывод VSS ЖК-дисплея на массу
   Вывод VCC ЖК-дисплея на 5 В
   Резистор 10К:
   заканчивается на + 5В и земля
   стеклоочиститель к контакту VO ЖК-дисплея (контакт 3)

  Библиотека изначально добавлена ​​18 апреля 2008 г.
  Дэвид А.Меллис
  Библиотека изменена 5 июля 2009 г.
  Лимор Фрид (http://www.ladyada.net)
  Пример добавлен 9 июля 2009 г.
  Том Igoe
  Изменено 22 ноября 2010 г.
  Том Igoe

  Этот пример кода находится в общественном достоянии.

  http://www.arduino.cc/en/Tutorial/LiquidCrystal
* /

#include 
// инициализируем библиотеку номерами контактов интерфейса
// LiquidCrystal lcd (7, 8, 9, 10, 11, 12);
ЖК-дисплей LiquidCrystal (A0, A1, A2, A3, A4, A5);
bool doInitilizeLCD = true;

// - ЗАПУСК КЛАВИШИ ------------------------------------------- ---------
/ * @ файл CustomKeypad.pde
  || @ версия 1.0
  || @author Александр Бревиг
  || @contact [email protected]
  ||
  || @описание
  || | Демонстрирует изменение размера клавиатуры и ключевых значений.
  || #
* /
#include 

const byte ROWS = 4; // четыре строки
константный байт COLS = 4; // четыре столбца
// определяем символы на кнопках клавиатур
char hexaKeys [ROWS] [COLS] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};
byte rowPins [ROWS] = {9, 8, 7, 6}; // подключаемся к выводам ряда клавиатуры
byte colPins [COLS] = {5, 4, 3, 2}; // подключаемся к распиновке колонки клавиатуры

// инициализируем экземпляр класса NewKeypad
CustomKeypad клавиатуры = Клавиатура (makeKeymap (hexaKeys), rowPins, colPins, ROWS, COLS);
char customKey;
char accessCode [] = "1111";
char keyPadInput [] = "zzzz";
беззнаковый символ inputCounter = 0;
беззнаковый символ inputMaxCount = 4;
// - КОНЕЦ КЛАВИАТУРЫ ------------------------------------------- -----------

int ledPin = 11; // Светодиод на выводе 11, загорается, когда PIR активен
int powerledPin = 13; // Светодиод на контакте 13, показывает, что питание включено, всегда ВЫСОКИЙ

int pirPin = 10; // Ввод для HC-S501
int pirValue; // Место для хранения прочитанного значения PIR

// - Активный зуммер START ------------------------------------------- ---
int buzzer = 12; // вывод активного зуммера
логическое shouldBeAlerting = false;
// - Активный зуммер КОНЕЦ ------------------------------------------- -----------

enum ArmedStates {ARMED, DISARMED};
ArmedStates armedState = DISARMED;
короткий ArmsTimerInterval = 5;
беззнаковый длинный вооруженный таймер = миллис ();

bool debug = false;

void setup () {
  Серийный.begin (9600);
  в то время как (! серийный); // ждем, пока Serial подключится
  Serial.println («готово»);

  pinMode (зуммер, ВЫХОД); // устанавливаем вывод как выход

  pinMode (ledPin, ВЫХОД); // устанавливаем вывод как выход

  pinMode (powerledPin, ВЫХОД); // устанавливаем вывод как вывод

  pinMode (pirPin, ВХОД); // устанавливаем контакт как вход

  lcd.begin (16, 2); // настраиваем и регистрируем ЖК

}

void loop () {
  digitalWrite (powerledPin, HIGH);

  initilizeLCD ();

  handleKeyPadInput ();

  handlePIR ();

  тревога();

}

const char * getStateString (enum ArmedStates weaponState) {
  переключатель (состояние готовности)
  {
    case ARMED: вернуть «ARMED»;
    case DISARMED: вернуть «DISARMED»;
  }
}

//
void initilizeLCD () {
  if (doInitilizeLCD) {

    doInitilizeLCD = false;
    ЖКЧисто();
    Строка a = getStateString (вооруженное состояние);

    если (отладка) {
      Serial.println ("вооруженное состояние:" + а);
    }

    lcd.setCursor (0, 0);
    lcd.print (а);
    lcd.setCursor (0, 1);
    lcd.print («НАЖМИТЕ * В ОХРАНУ.»);
  }
}

void handleLCD (bool shouldClearLCD) {
  if (shouldClearLCD) {
    lcd.clear ();
  }

  Строка a = getStateString (вооруженное состояние);

  если (отладка) {
    Serial.println ("вооруженное состояние:" + а);
  }

  lcd.setCursor (0, 0);
  lcd.print (а);
  lcd.setCursor (0, 1);


  lcd.print ("КЛЮЧ РАЗОСТАНОВИТЬ:");
  uint8_t cursorStart = 11;
  ЖКsetCursor (cursorStart, 1);
  lcd.cursor ();

  // заменяет позиции ЖК-экрана пустым пространством или вводом с клавиатуры
  for (int i = 0; i <4; i ++) {
    if (keyPadInput [i] == 'z') {
      lcd.setCursor (cursorStart + i, 1);
      lcd.print ("");
    } еще {
      lcd.setCursor (cursorStart + i, 1);
      lcd.print (keyPadInput [i]);
    }
  }
}

void handleKeyPadInput () {
  customKey = customKeypad.getKey ();
  if (customKey) {

    Serial.print ("customKey:");
    Serial.println (customKey);

    if (connectedState == DISARMED) {
      if (customKey == '*') {
        armState = ARMED;
        handleLCD (истина);
      }
    } еще {
      if (customKey == '*') {
        resetCodeInput ();
      } else if (customKey == '#') {
        if (strcmp (keyPadInput, accessCode) == 0) {
          Серийный.println («Ввод с клавиатуры соответствует коду доступа»);
          // Снимаем систему с охраны
          resetCodeInput ();
          armState = DISARMED;
          doInitilizeLCD = true;
          initilizeLCD ();
        } еще {
          resetCodeInput ();
        }
      } еще {
        if (inputCounter <= 3) {
          keyPadInput [inputCounter] = customKey;
          inputCounter ++;
          handleLCD (истина);
        } еще {
          // ничего не делать
        }
      }
    }
  }
}


void resetCodeInput () {
  Серийный.println ("сброс keyPadInput");
  for (int i = 0; i <4; i ++) {
    keyPadInput [я] = 'z';
  }
  inputCounter = 0;
  handleLCD (истина);
}

void handlePIR () {
  pirValue = digitalRead (pirPin);
}

void alert () {
  if (pirValue> 0 && weaponState == ARMED) {
    shouldBeAlerting = true;
  } еще {
    shouldBeAlerting = false;
  }

  if (shouldBeAlerting) {
    Serial.println ("shouldBeAlerting");
  }

  handleLed ();

  handleBuzz ();

}

void handleLed () {
  // обрабатываем светодиод аварийной сигнализации
  if (shouldBeAlerting) {
    Серийный.println ("установка ВЫСОКОГО СВЕТОДИОДА");
    digitalWrite (ledPin, HIGH);
  } еще {
    // Serial.println ("установка светодиода LOW");
    digitalWrite (ledPin, LOW);
  }
}

void handleBuzz () {
  if (shouldBeAlerting) {
    беззнаковый символ i;
    для (я = 0; я <10; я ++)
    {
      digitalWrite (зуммер, ВЫСОКИЙ);
      delay (1); // ждем 1 мс
      digitalWrite (зуммер, НИЗКИЙ);
      delay (1); // ждем 1 мс
    }
    // вывод другой частоты
    для (я = 0; я <20; я ++)
    {
      digitalWrite (зуммер, ВЫСОКИЙ);
      delay (2); // ждем 2 мс
      digitalWrite (зуммер, НИЗКИЙ);
      delay (2); // ждем 2 мс
    }
  }
}
 

Система охранной сигнализации Arduino - Хакстер.io

 const int trigPin = 11; // Пин для отправки звуковой волны
const int echoPin = 10; // Закрепить, чтобы прослушать возвращающуюся звуковую волну

int ledPin = 5; // Пин для включения светодиода
int buttonApin = 9; // Пин для включения будильника
int buttonBpin = 8; // Пин для снятия тревоги
int value_A; // Значение пина A
int value_B; // Значение пина B


int buzzer = 6; // вывод активного зуммера
int delayTime1 = 250;
int delayTime2 = 250;

большая продолжительность; // Время в пути, полученное от датчика
int расстояние; // вычисленное расстояние, на котором находится объект

void setup () {

  pinMode (trigPin, ВЫХОД);
  pinMode (echoPin, ВХОД);
  
  pinMode (ledPin, ВЫХОД);
  pinMode (buttonApin, INPUT_PULLUP);
  pinMode (buttonBpin, INPUT_PULLUP);

  pinMode (зуммер, ВЫХОД);
  
  pinMode (12, ВХОД);
  
  Серийный.begin (9600);

  

}

void loop () {

  // Проверяем состояние кнопок A и B
  value_A = digitalRead (buttonApin);
  value_B = digitalRead (buttonBpin);
  
  задержка (500);

  
   if (value_A == LOW)
  {
    // Если тревога поставлена ​​на охрану, включаем светодиод
    digitalWrite (ledPin, HIGH);
    в то время как (ledPin, HIGH)
    {
      // Отправляем звуковую волну и вычисляем, как далеко до нее находится ближайший объект.
      digitalWrite (trigPin, LOW);
      delayMicroseconds (2);
    
      digitalWrite (trigPin, HIGH);
      delayMicroseconds (10);
      digitalWrite (trigPin, LOW);
    
      duration = pulseIn (echoPin, HIGH);
      расстояние = продолжительность * 0.034/2;
    
      Serial.print ("Расстояние:");
      Serial.println (расстояние);

      в то время как (расстояние <98)
      {
        // Если расстояние меньше 98 см, то включим тревогу и заставим светодиод мигать
           
            digitalWrite (зуммер, ВЫСОКИЙ);
            digitalWrite (ledPin, HIGH);
            delay (delayTime1); // ждем 1 мс
            digitalWrite (зуммер, НИЗКИЙ);
            digitalWrite (ledPin, LOW);
            delay (delayTime1); // ждем 1 мс

 
                digitalWrite (зуммер, ВЫСОКИЙ);
                digitalWrite (ledPin, HIGH);
                delay (delayTime2); // ждем 2 мс
                digitalWrite (зуммер, НИЗКИЙ);
                digitalWrite (ledPin, LOW);
                delay (delayTime2); // ждем 2 мс

             // Если кнопка B нажата, выключить сигнализацию и снять ее с охраны
             если (digitalRead (buttonBpin) == НИЗКИЙ)
              {
                перерыв;
                }
      
          
      }
    
      задержка (100);

      // Если кнопка b нажата, снимаем тревогу
      если (digitalRead (buttonBpin) == НИЗКИЙ)
      {
        перерыв;
      }
      

      }

      
  }
  // Если сигнализация снята с охраны, выключить светодиод
  если (значение_B == LOW)
  {
    digitalWrite (ledPin, LOW);
  }

 
  
  
 
}

 
 

Будильник Arduino

В этом проекте мы разработали часы реального времени с будильником на базе Arduino.Часы реального времени или RTC - это часы с батарейным питанием, которые измеряют время даже при отсутствии внешнего питания или перепрограммировании микроконтроллера.

RTC отображает часы и календарь со всеми функциями хронометража. Батарея, которая подключается к RTC, является отдельной, не связана с основным источником питания и не подключена к нему.

Когда питание восстановлено, часы реального времени показывают реальное время независимо от продолжительности отключения питания. Такие часы реального времени обычно используются в компьютерах и часто называются просто CMOS (Complementary Metal Oxide Semiconductor).

Большинство микроконтроллеров и микропроцессоров имеют встроенные таймеры для отсчета времени. Но они работают только тогда, когда микроконтроллер подключен к источнику питания.

При включении питания внутренние таймеры сбрасываются на 0. Следовательно, в такие приложения, как регистраторы данных, включена отдельная микросхема RTC, которая не сбрасывается на 0 при выключении или сбросе питания.

Часы реального времени

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

Одна из часто используемых микросхем RTC DS1307 используется в этом проекте вместе с Arduino. Схема, конструкция и работа описаны в следующих разделах.

Принципиальная схема

Необходимые компоненты

  • Arduino UNO - 1 [Купить]
  • Модуль
  • DS 1307 RTC - 1
  • Кнопки - 3
  • ЖК-дисплей 16X2 - 1 [Купить здесь]
  • Зуммер - 1
  • 10 кОм - 2
  • POT 10 кОм - 1

Описание компонента

DS1307

DS1307 - это часто используемая микросхема часов реального времени (RTC) для часов и календаря.Функция часов показывает секунды, минуты и часы, а функция календаря показывает значения дня, даты, месяца и года.

Часы могут работать в 12-часовом формате с индикацией AM / PM или в 24-часовом формате. Резервная батарея на 3 В должна быть подключена к RTC, чтобы ИС могла автоматически переключаться на резервное питание в случае сбоя питания. A

Кристалл

32,768 кГц подключен к выводу генератора DS1307 для колебаний 1 Гц.

Схемотехника

Связь между микроконтроллером и RTC IC DS1307 осуществляется по последовательной двунаправленной шине I2C.Протокол I2C - это метод связи между более быстрым устройством (в данном случае микроконтроллером или Arduino) в ведущем режиме и более медленным устройством (RTC) в ведомом режиме.

На Arduino есть два контакта для связи I2C. Аналоговые контакты 4 и 5 будут действовать как SDA (последовательные данные) и SCL (последовательные часы).

Они подключены к соответствующим контактам SDA и SCL RTC. Оба этих вывода RTC подтянуты высоко с помощью резисторов 10 кОм.

ЖК-дисплей используется для отображения часов. 6 контактов ЖК-дисплея должны быть подключены к Arduino.RS, E, D4, D5, D6 и D7 (контакты 4, 6, 11, 12, 13 и 14) ЖК-дисплея подключены к контактам 2, 3, 4, 5, 6 и 7 Arduino.

Три кнопки используются для установки будильника. Эти кнопки подключены к контактам 8, 9 и 10 Arduino. К выводу 11 Arduino подключен зуммер, который действует как сигнал тревоги.

рабочий

Целью этого проекта является создание часов реального времени с функцией будильника. Ниже поясняется принцип работы проекта.

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

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

Поскольку часы имеют 24-часовой формат, часы будут увеличиваться от 0 до 23. После того, как часы будильника установлены, мы должны нажать следующую кнопку, чтобы перейти на вкладку минут.

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

Значения, введенные как сигнал тревоги, сохраняются в EEPROM Arduino. Эти значения постоянно сравниваются с настоящим временем.

Когда сохраненные значения и текущее значение совпадают, срабатывает зуммер для тревоги. Чтобы выключить будильник, нажимается следующая кнопка.

Выходное видео

Код

ПРИМЕЧАНИЕ

  • Простые часы реального времени, которые имеют функцию будильника, разработаны в этом проекте с использованием Arduino и RTC IC.
  • Время и будильник будут продолжать работать, поскольку есть резервное питание для RTC, а аварийный сигнал сохраняется во внутренней EEPROM Arduino.
  • Функции, такие как отложенный сигнал и несколько сигналов тревоги, могут быть добавлены путем изменения кода Arduino.

Домашняя охранная сигнализация с использованием Arduino на базе GSM

О проекте

Современные домашние системы безопасности включают в себя сложные функции, такие как огонь, температура, дым и т. Д. Такие сложные системы могут быть дорогими и не всегда доступными по цене.

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

Вот пошаговая процедура для того же.

1. Работа системы домашней безопасности Arduino GSM

Датчик

PIR отслеживает движение, определяя разницу в уровнях инфракрасного или лучистого тепла, излучаемого окружающими объектами.

Выходной сигнал датчика PIR становится высоким, когда он замечает любое движение. Нормальный диапазон типичного датчика PIR составляет около 6 метров или около 30 футов.

У ИК-датчика есть время установления, в течение которого он калибрует свой датчик в соответствии с окружающей средой и стабилизирует инфракрасный датчик. Для правильной работы ИК-датчика требуется время прогрева от 20 до 60 секунд.

В промежутке между этим временем движение не должно быть очень незначительным по сравнению с отсутствием движения. Если датчику не предоставлено достаточно времени для калибровки, выходной сигнал датчика PIR может быть неточным.

Когда датчик PIR обнаруживает любое движение, выходной сигнал будет высоким.Это обнаруживает Arduino. Затем Arduino связывается с модулем GSM через последовательную связь, чтобы позвонить на соответствующий номер мобильного телефона, который уже был предварительно запрограммирован.

Выходной сигнал датчика становится низким, даже когда есть движение, которое может дезинформировать микроконтроллер, полагая, что движения нет.

2. Схемотехника

Поскольку проект основан на Arduino, подключение осуществляется легко. Модуль датчика движения PIR имеет цифровой выходной контакт.Он подключен к любому из цифровых контактов ввода / вывода Arduino.

Последовательный интерфейс модуля GSM с микроконтроллером. На самой плате есть контакты Rx и Tx. Эти контакты связаны с контактами Tx и Rx Arduino.

Важно отметить, что при загрузке программы в Arduino модуль GSM должен быть отключен, так как это может помешать последовательной связи с Arduino IDE.

MP3-будильник с использованием Arduino и DFplayer

Обзор:

В этом проекте мы увидим, как создать будильник с использованием Arduino, который воспроизводит ваш любимый MP3-трек в качестве сигнала будильника.Предлагаемый проект оснащен ЖК-дисплеем размером 16 x 2, который отображает время, дату и различные настройки, доступ к которым можно получить с помощью пяти предоставленных кнопок, и вы можете установить до 5 сигналов тревоги.

Цель этого удивительного будильника - мирно разбудить вас утром (или в любое время) под сладкую музыку по вашему выбору, вместо гневного голоса мужа или звукового сигнала будильника, который может раздражать вас каждый раз. утро.

Принципиальная схема:

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

Описание схемы:

Схема состоит из четырех основных частей:

  • DFplayer mini.
  • Arduino Nano (или любые другие платы Arduino).
  • RTC: DS3231 / DS1307.
  • ЖК-дисплей 16 x 2.

Давайте посмотрим каждую по порядку.

DFplayer Mini:

DFplayer mini - это небольшой недорогой модуль, способный воспроизводить файлы MP3 и WMV с SD-карты с хорошим качеством звука и громкостью.Несмотря на свой размер и стоимость, он имеет очень приличные характеристики для музыкального плеера:

  • Он имеет встроенный 3-ваттный усилитель, поэтому вам не нужно подключать внешний аудиоусилитель для питания динамика, равного или меньше чем 3 ватт. Если вы хотите подключить внешний усилитель, у него есть специальные контакты, оптимизированные для внешних усилителей.
  • Он поддерживает SD-карту до 32 ГБ и файловые системы FAT16 и FAT32.
  • Он имеет 30 уровней регулировки громкости, с помощью которых вы можете установить комфортную громкость для вашей музыки / песен.
  • Имеет 10 уровней управления звуковым эквалайзером; однако в этом проекте мы будем использовать только нормальный режим.
  • Он имеет 24-битный ЦАП, который выводит звук хорошего качества с поддерживаемой частотой дискретизации до 48 кГц.
  • Он может работать от 3,2 В до 5 В постоянного тока, что делает его пригодным для схем логического уровня TTL и CMOS.
  • Он поддерживает протокол последовательной связи, который обычно присутствует в большинстве микроконтроллеров, с помощью которого вы можете управлять этим модулем.

Схема выводов DFplayer:

Давайте рассмотрим следующие выводы на этом модуле, поскольку мы будем использовать только эти выводы: Vcc, GND, TX, RX, SPK1, SPK2, DAC_R, DAC_L и занято.

Vcc и GND - контакты входа питания. Выводы TX и RX используются для отправки и получения данных для управления этим модулем соответственно, вывод RX должен быть подключен к резистору 1 кОм, поскольку последовательный выход Arduino находится на уровне 5 В, а вывод RX DFplayer НЕ допускает 5 В.

Контакты SPK1 и SPK2 являются выходными контактами динамика, вы можете подключить динамики мощностью до 3 Вт максимум с сопротивлением катушки 4 Ом или выше. Вы можете подключить монофонические или стереодинамики, в случае монофонического (одиночного) динамика подключите динамик через SPK1 и SPK2; в случае стерео (двух) динамиков подключите один из динамиков к SPK1 и GND, а другой к SPK2 и GND.Если вы хотите подключить внешние усилители, используйте выводы DAC_R и DAC_L.

Вывод «занято» становится НИЗКИМ, когда дорожка воспроизводится, и ВЫСОКИМ, когда дорожка не воспроизводится.

Модуль RTC / часов реального времени:

Модуль RTC - это тот модуль, который точно отслеживает время даже при отключении питания от главной цепи. Модуль RTC имеет собственную резервную батарею (литиевый элемент), срок службы которой обычно составляет 2 года и более.

Мы используем модуль DS3231 RTC, который проиллюстрирован на изображении выше, однако вы также можете использовать DS1307 RTC, но точность отслеживания времени будет намного меньше, при нашем тестировании с несколькими модулями DS1307 он дрейфовал на несколько минут в первую неделю использования (что плохо), но при использовании DS3231 мы не заметили существенного смещения времени, поэтому мы рекомендуем вам использовать DS3231.

ЖК-дисплей:

Здесь мы используем стандартный ЖК-дисплей 16 x 2 (синий / желтый) для отображения информации. Мы используем этот ЖК-дисплей в 4-битном режиме, и здесь не используется дисплейный модуль I2C. Вы можете отрегулировать контрастность ЖК-дисплея с помощью прилагаемого потенциометра 10K.

Arduino:

Arduino - это мозг этого проекта, который управляет дисплеем, DFplayer, получает точное время от RTC, а также тот, который принимает ввод от пользователя с помощью кнопок и сохраняет во встроенной памяти EEPROM, которая энергонезависимо.

Вы можете выбрать любую плату Arduino по вашему выбору, мы рекомендуем Arduino Nano, чтобы ее можно было собрать компактно, а создание прототипа на макетной плате было намного проще.

Источник питания:

Для питания этой схемы вам понадобится сетевой адаптер от 9 В до 12 В (минимум 500 мА), батареи не будут использоваться (кроме RTC). Мы использовали стабилизатор напряжения 7805, который выдает постоянное напряжение 5 В на Arduino, а также на другие периферийные устройства.

Программный код

Прототип цифрового будильника в формате MP3:

Как установить правильное время на машине:

1) Дважды нажмите кнопку настройки, и вы увидите следующий экран:

2) Нажмите Enter, чтобы перейти к этому параметру.

3) Вам будет предложено установить часы, используйте кнопки INC (увеличение) или DEC (уменьшение), чтобы установить правильный час, и нажмите Enter, чтобы перейти к настройке минут.

4) Аналогичным образом используйте кнопки INC и DEC для установки правильной минуты и нажмите ввод (если вы хотите вернуться к настройке часов, нажмите кнопку «Назад» один раз).

5) После того, как вы установите минуты и нажмете «Ввод», время будет сохранено в RTC, и на ЖК-дисплее появится сообщение «ВРЕМЯ СОХРАНЕНО».

6) Дисплей вернется к начальному экрану / экрану ожидания.

Как установить дату на машине:

1) Трижды нажмите кнопку настройки, и вы увидите следующий экран

2) Нажмите Enter, и вам будет предложено установить день, используйте кнопки INC и DEC для установите правильный день и нажмите клавишу ВВОД, чтобы перейти к настройке следующей даты.

3) Теперь на экране вас попросят установить дату от 1 до 31, установить правильную дату с помощью кнопок INC и DEC и нажать Enter.

4) Затем на экране появится запрос на установку месяца, с помощью кнопок INC и DEC установите правильный месяц и нажмите Enter.

5) Наконец, на экране будет предложено установить годы, с помощью кнопок INC и DEC выберите текущий год и нажмите ввод, дата будет сохранена в RTC, а на экране появится надпись «ДАТА СОХРАНЕНА» и вернется к домашнему экрану.

6) Обратите внимание, что вы можете нажать кнопку «Назад», чтобы переместиться на один или несколько шагов назад (до того, как вы нажмете «Сохранить») и исправить неправильную настройку.

Как установить будильник:

Примечание: Вам необходимо установить правильную дату и время, прежде чем устанавливать будильник.

1) Нажмите кнопку настройки один раз, и вы увидите следующий экран:

2) Нажмите Enter, чтобы перейти в эту настройку.

3) Вы увидите следующий экран:

В левом верхнем углу вы увидите номер будильника от 1 до 5, в правом верхнем углу вы увидите установленное время будильника (первоначально вы увидите 00: 00). В левом нижнем углу вы увидите номер дорожки, который вы установили для этого будильника (скажем, 01), а в правом нижнем углу вы увидите состояние этого будильника, независимо от того, включен ли этот номер сигнала или нет.

4) Вы можете нажать кнопку INC, чтобы перейти к настройке будильника номер 02 (до будильника № 05) и увидеть его пользовательские настройки, как показано выше, или вы можете нажать кнопку ввода, чтобы изменить настройки показанного выше будильника номер 01.

5) После того, как вы нажмете Enter на любом экране будильника (от 1 до 5), он попросит включить / выключить этот конкретный будильник. Нажмите INC для ON и DEC для OFF и нажмите Enter. Если вы выберете ВЫКЛ, будильник будет выключен (без влияния на другие будильники) и перейдет на главный экран. Если вы выберете ВКЛЮЧИТЬ будильник, остальные настройки будут развернуты.

6) Затем он попросит вас установить номер трека с SD-карты, нажмите INC / DEC, чтобы выбрать номер трека, и нажмите Enter.

7) Затем вам будет предложено установить уровень громкости для воспроизведения только что выбранной вами дорожки. Вы можете установить комфортную громкость для будильника от 1 до 30 (уровень громкости). Используйте INC / DEC для выбора громкости и нажмите Enter.

8) Затем он попросит вас установить время будильника (час), используйте INC / DEC, чтобы установить час будильника, и нажмите ввод.

9) Наконец, экран попросит вас установить минуты, используйте INC / DEC, чтобы выбрать минуты для будильника, и нажмите Enter.Настройки будильника будут сохранены в EEPROM Arduino, и на экране появится надпись «ТРЕВОГА СОХРАНЕНА», и появится главный экран. Теперь, когда установленное время будильника совпадает с текущим временем, он будет воспроизводить всю дорожку MP3 с установленной вами громкостью. Если вы хотите остановить воспроизведение звуковой дорожки, нажмите одновременно кнопки INC и DEC.

При воспроизведении дорожки будильника вы увидите следующий экран:

10) Обратите внимание, что на любом этапе установки будильника (перед нажатием кнопки «Сохранить») вы можете нажать кнопку «Назад», чтобы переместиться на шаг или несколько шагов назад и внесите какие-либо изменения в настройку будильника.

Примечание. Содержание и изображения в этой статье предоставлены автором. Мнения, выраженные участниками, являются их собственными, а не мнениями PCBWay. Если есть какое-либо нарушение прав на контент или изображения, пожалуйста, свяжитесь с нашим редактором ([email protected]) для удаления.

Написано

Часы реального времени Arduino с будильником и монитором температуры с использованием DS3231

/ * Часы и календарь реального времени Arduino с 2 функциями будильника и монитором температуры с использованием DS3231

Прочтите техническое описание DS3231 RTC, чтобы понять код

Параметры времени и даты можно установить с помощью двух кнопок, подключенных к контактам 9 (B1) и 10 (B2).

Alarm1 и alarm2 можно установить с помощью двух кнопок, подключенных к 11 (B3) и 10 (B2).

Контакт 12 становится высоким при возникновении аварийного сигнала, а кнопка B2 возвращает его на низкий уровень, а

выключает возникший аварийный сигнал.

Вывод прерывания DS3231 подключен к внешнему выводу прерывания Arduino 2.

* /

// включить код библиотеки ЖК-дисплея

#include

// включить код библиотеки Wire (требуется для протокола I2C устройств)

#include

// Подключение ЖК-модуля (RS, E, D4, D5, D6, D7)

LiquidCrystal lcd (3, 4, 5, 6, 7, 8);

const int button1 = 9; // номер вывода кнопки button1

const int button2 = 10; // номер вывода кнопки button1

const int button3 = 11; // номер пина кнопки1

const int alarm_pin = 12; // Номер пина сигнала тревоги

void setup () {

pinMode (9, INPUT_PULLUP);

pinMode (10, INPUT_PULLUP);

pinMode (11, INPUT_PULLUP);

pinMode (12, ВЫХОД);

digitalWrite (alarm_pin, LOW);

// настраиваем количество столбцов и строк ЖК-дисплея

lcd.begin (20, 4);

Wire.begin (); // Присоединяемся к шине i2c

attachInterrupt (digitalPinToInterrupt (2), Alarm, FALLING);

}

// Объявление переменных

bool alarm1_status, alarm2_status;

char Time [] = "::",

calendar [] = "/ / 20",

alarm1 [] = "A1::: 00", alarm2 [] = "A2::: 00",

температура [] = "T:. C";

байт i, секунда, минута, час, день, число, месяц, год,

alarm1_minute, alarm1_hour, alarm2_minute, alarm2_hour,

status_reg;

void Alarm () {

digitalWrite (alarm_pin, HIGH);

}

void DS3231_read () {// Функция для чтения данных времени и календаря

Wire.beginTransmission (0x68); // Запуск протокола I2C с адресом DS3231

Wire.write (0); // Отправляем адрес регистра

Wire.endTransmission (false); // перезапуск I2C

Wire.requestFrom (0x68, 7); // Запрос 7 байт от DS3231 и освобождение шины I2C в конце чтения

second = Wire.read (); // Считываем секунды из регистра 0

minute = Wire.read (); // Считываем минуты из регистра 1

час = Wire.читать(); // Считываем час из регистра 2

day = Wire.read (); // Считываем день из регистра 3

date = Wire.read (); // Считываем дату из регистра 4

month = Wire.read (); // Считываем месяц из регистра 5

year = Wire.read (); // Считать год из регистра 6

}

void alarms_read_display () {// Функция для чтения и отображения данных Alarm1, Alarm2 и температуры

byte control_reg, temperature_lsb;

char temperature_msb;

Проволока.beginTransmission (0x68); // Запуск протокола I2C с адресом DS3231

Wire.write (0x08); // Отправляем адрес регистра

Wire.endTransmission (false); // перезапуск I2C

Wire.requestFrom (0x68, 11); // Запросить 11 байтов от DS3231 и освободить шину I2C в конце чтения

alarm1_minute = Wire.read (); // Чтение Alarm1 минут

alarm1_hour = Wire.read (); // Чтение будильника 1 час

Wire.читать(); // Пропускаем регистр дня / даты alarm1

alarm2_minute = Wire.read (); // Чтение тревоги 2 минуты

alarm2_hour = Wire.read (); // Чтение будильника 2 часа

Wire.read (); // Пропустить регистр дня / даты alarm2

control_reg = Wire.read (); // Чтение регистра управления DS3231

status_reg = Wire.read (); // Чтение регистра состояния DS3231

Wire.читать(); // Пропустить регистр смещения старения

temperature_msb = Wire.read (); // Считываем MSB температуры

temperature_lsb = Wire.read (); // Считать младший бит температуры

// Преобразовать двоично-десятичный код в десятичный

alarm1_minute = (alarm1_minute >> 4) * 10 + (alarm1_minute & 0x0F);

alarm1_hour = (alarm1_hour >> 4) * 10 + (alarm1_hour & 0x0F);

тревога2_минут = (тревога2_минут >> 4) * 10 + (тревога2_минут & 0x0F);

alarm2_hour = (alarm2_hour >> 4) * 10 + (alarm2_hour & 0x0F);

// Завершить преобразование

alarm1 [8] = alarm1_minute% 10 + 48;

аварийный сигнал1 [7] = аварийный сигнал1_минут / 10 + 48;

alarm1 [5] = alarm1_hour% 10 + 48;

тревога1 [4] = тревога1_час / 10 + 48;

авария2 [8] = авария2_минут% 10 + 48;

аварийный сигнал2 [7] = аварийный сигнал2_минут / 10 + 48;

alarm2 [5] = alarm2_hour% 10 + 48;

тревога2 [4] = тревога2_час / 10 + 48;

alarm1_status = bitRead (control_reg, 0); // Чтение бита разрешения прерывания тревоги 1 (A1IE) из регистра управления DS3231

alarm2_status = bitRead (control_reg, 1); // Чтение бита разрешения прерывания сигнала тревоги 2 (A2IE) из регистра управления DS3231

if (temperature_msb <0) {

temperature_msb = abs (temperature_msb);

температура [2] = '-';

}

еще

температура [2] = '';

temperature_lsb >> = 6;

температура [4] = temperature_msb% 10 + 48;

температура [3] = temperature_msb / 10 + 48;

if (temperature_lsb == 0 || temperature_lsb == 2) {

temperature [7] = '0';

если (temperature_lsb == 0) temperature [6] = '0';

else temperature [6] = '5';

}

if (temperature_lsb == 1 || temperature_lsb == 3) {

температура [7] = '5';

если (temperature_lsb == 1) temperature [6] = '2';

else temperature [6] = '7';

}

температура [8] = 223; // Ставим символ градуса

lcd.setCursor (10, 0);

lcd.print (температура); // Отображение температуры

lcd.setCursor (0, 2);

lcd.print (alarm1); // Отображение сигнала тревоги1

lcd.setCursor (17, 2);

if (alarm1_status) lcd.print ("ВКЛ"); // Если A1IE = 1 print 'ON'

else lcd.print ("OFF"); // Если A1IE = 0, вывести 'OFF'

lcd.setCursor (0, 3);

lcd.print (alarm2); // Отображение сигнала тревоги2

lcd.setCursor (17, 3);

if (alarm2_status) lcd.print ("ВКЛ"); // Если A2IE = 1 print 'ON'

else lcd.print ("OFF"); // Если A2IE = 0 print 'OFF'

}

void calendar_display () {// Функция для отображения календаря

переключение (день) {

case 1: strcpy (calendar, "Sun / / 20"); перерыв;

case 2: strcpy (календарь, «Пн / / 20»); перерыв;

case 3: strcpy (календарь, "Вт / / 20"); перерыв;

case 4: strcpy (календарь, "среда / / 20"); перерыв;

case 5: strcpy (календарь, «чт / / 20»); перерыв;

case 6: strcpy (календарь, «Пт / / 20»); перерыв;

case 7: strcpy (календарь, «Сб / / 20»); перерыв;

по умолчанию: strcpy (календарь, «Сб / / 20»);

}

календарь [13] = год% 10 + 48;

календарь [12] = год / 10 + 48;

календарь [8] = месяц% 10 + 48;

календарь [7] = месяц / 10 + 48;

календарь [5] = дата% 10 + 48;

календарь [4] = дата / 10 + 48;

ЖК.setCursor (0, 1);

lcd.print (календарь); // Отображение календаря

}

void DS3231_display () {

// Преобразование двоично-десятичного числа в десятичное

секунда = (секунда >> 4) * 10 + (секунда & 0x0F);

минута = (минута >> 4) * 10 + (минута & 0x0F);

час = (час >> 4) * 10 + (час & 0x0F);

дата = (дата >> 4) * 10 + (дата & 0x0F);

месяц = ​​(месяц >> 4) * 10 + (месяц & 0x0F);

год = (год >> 4) * 10 + (год & 0x0F);

// Завершить преобразование

Время [7] = секунда% 10 + 48;

Время [6] = секунда / 10 + 48;

Время [4] = минута% 10 + 48;

Время [3] = минута / 10 + 48;

Время [1] = час% 10 + 48;

Время [0] = час / 10 + 48;

calendar_display (); // Вызов функции отображения календаря

lcd.setCursor (0, 0);

lcd.print (Время); // Отображение времени

}

void Blink () {

byte j = 0;

while (j <10 && (digitalRead (button1) || i> = 5) && digitalRead (button2) && (digitalRead (button3) || i <5)) {

j ++;

задержка (25);

}

}

редактирование байта (байт x, байт y, параметр байта) {

char text [3];

while (! DigitalRead (button1) ||! DigitalRead (button3)); // Ждем, пока кнопка B1 не будет отпущена

while (true) {

while (! DigitalRead (button2)) {// Если кнопка B2 нажата

parameter ++;

if (((i == 0) || (i == 5)) && parameter> 23) // Если часы> 23 ==> hours = 0

parameter = 0;

if (((i == 1) || (i == 6)) && parameter> 59) // Если минуты> 59 ==> minutes = 0

parameter = 0;

if (i == 2 && parameter> 31) // Если date> 31 ==> date = 1

parameter = 1;

if (i == 3 && parameter> 12) // Если месяц> 12 ==> month = 1

parameter = 1;

if (i == 4 && параметр> 99) // Если год> 99 ==> год = 0

параметр = 0;

if (i == 7 && параметр> 1) // Для аварийных сигналов ВКЛ или ВЫКЛ (1: аварийный сигнал включен, 0: аварийный сигнал отключен)

parameter = 0;

ЖК.setCursor (x, y);

if (i == 7) {// Для включения и выключения сигналов тревоги

if (параметр == 1) lcd.print ("ON");

else lcd.print ("ВЫКЛ");

}

else {

sprintf (текст, "% 02u", параметр);

жк. Печать (текст);

}

if (i> = 5) {

DS3231_read (); // Считываем данные из DS3231

DS3231_display (); // Отображение времени и календаря DS3231

}

delay (200); // Ждем 200 мс

}

lcd.setCursor (x, y);

lcd.print (""); // Вывести два пробела

if (i == 7) lcd.print (""); // Распечатать пробел (для включения и выключения сигналов тревоги)

Blink (); // Вызов функции мигания

lcd.setCursor (x, y);

if (i == 7) {// Для включения и выключения сигналов тревоги

if (параметр == 1) lcd.print ("ON");

остальное ЖК.печать ("ВЫКЛ");

}

else {

sprintf (текст, "% 02u", параметр);

жк. Печать (текст);

}

Blink ();

, если (i> = 5) {

DS3231_read ();

DS3231_display ();}

if ((! DigitalRead (button1) && i <5) || (! DigitalRead (button3) && i> = 5)) {

i ++; // Увеличиваем i для следующего параметра

return parameter; // Возвращаем значение параметра и выходим.

}

}

}

void loop () {

if (! DigitalRead (button1)) {// Если кнопка B1 нажата

i = 0;

час = редактировать (0, 0, час);

минута = редактировать (3, 0, минута);

при этом (! DigitalRead (button1)); // Ждем, пока кнопка B1 не отпустит

while (true) {

while (! DigitalRead (button2)) {// Если кнопка B2 нажата кнопка

day ++; // Увеличиваем день

if (day> 7) day = 1;

calendar_display (); // Вызов функции display_calendar

lcd.setCursor (0, 1);

жк. Печать (календарь); // Отображение календаря

delay (200);

}

lcd.setCursor (0, 1);

lcd.print (""); // Вывести 3 пробела

Blink ();

lcd.setCursor (0, 1);

жк. Печать (календарь); // Распечатать календарь

Blink (); // Вызов функции Blink

if (! DigitalRead (button1)) // Если кнопка B1 нажата

break;

}

дата = редактировать (4, 1, дата); // Редактировать дату

month = edit (7, 1, month); // Редактировать месяц

year = edit (12, 1, year); // Редактировать год

// Преобразовать десятичное число в двоично-десятичный

минута = ((минута / 10) << 4) + (минута% 10);

час = ((час / 10) << 4) + (час% 10);

дата = ((дата / 10) << 4) + (дата% 10);

месяц = ​​((месяц / 10) << 4) + (месяц% 10);

год = ((год / 10) << 4) + (год% 10);

// Завершить преобразование

// Записать данные времени и календаря в DS3231 RTC

Wire.beginTransmission (0x68); // Запуск протокола I2C с адресом DS3231

Wire.write (0); // Отправляем адрес регистра

Wire.write (0); // Сбрасываем сезоны и запускаем генератор

Wire.write (minute); // Запись минут

Wire.write (час); // Записываем час

Wire.write (день); // Записываем день

Wire.написать (дата); // Записываем дату

Wire.write (месяц); // Записываем месяц

Wire.write (год); // Записываем год

Wire.endTransmission (); // Остановка передачи и освобождение шины I2C

delay (200);

}

if (! DigitalRead (button3)) {// Если нажата кнопка B3

while (! DigitalRead (button3)); // Ждем, пока кнопка B3 не будет отпущена

i = 5;

alarm1_hour = редактировать (4, 2, alarm1_hour);

alarm1_minute = редактировать (7, 2, alarm1_minute);

alarm1_status = редактировать (17, 2, alarm1_status);

i = 5;

alarm2_hour = редактировать (4, 3, alarm2_hour);

alarm2_minute = редактировать (7, 3, alarm2_minute);

alarm2_status = редактировать (17, 3, alarm2_status);

alarm1_minute = ((alarm1_minute / 10) << 4) + (alarm1_minute% 10);

alarm1_hour = ((alarm1_hour / 10) << 4) + (alarm1_hour% 10);

alarm2_minute = ((alarm2_minute / 10) << 4) + (alarm2_minute% 10);

alarm2_hour = ((alarm2_hour / 10) << 4) + (alarm2_hour% 10);

// Запись данных сигналов тревоги в DS3231

Wire.beginTransmission (0x68); // Запуск протокола I2C с адресом DS3231

Wire.write (7); // Отправляем адрес регистра (тревога1 секунда)

Wire.write (0); // Записываем 0 в alarm1 секунд

Wire.write (alarm1_minute); // Записываем значение минут тревоги 1 в DS3231

Wire.write (alarm1_hour); // Записываем значение часов сигнала тревоги 1 в провод DS3231

.написать (0x80); // Alarm1, когда часы, минуты и секунды совпадают

Wire.write (alarm2_minute); // Записываем значение минут тревоги 2 в DS3231

Wire.write (alarm2_hour); // Записываем значение будильника 2 часа в DS3231

Wire.write (0x80); // Тревога 2 при совпадении часов и минут

Wire.write (4 | alarm1_status | (alarm2_status << 1)); // Записать данные в регистр управления DS3231 (разрешить прерывание при тревоге)

Wire.написать (0); // Очистить биты флага тревоги

Wire.endTransmission (); // Остановка передачи и освобождение шины I2C

delay (200); // Ждем 200 мс

}

if (! DigitalRead (button2) && digitalRead (alarm_pin)) {// Когда кнопка B2 нажата с тревогой (сбросить и выключить тревогу)

digitalWrite (alarm_pin, LOW); // Выключаем индикатор тревоги

Wire.beginTransmission (0x68); // Запуск протокола I2C с адресом DS3231

Wire.write (0x0E); // Отправка адреса регистра (контрольный регистр)

// Запись данных в контрольный регистр (ВЫКЛЮЧИТЕ возникшую тревогу и оставьте другую как есть)

Wire.write (4 | (! BitRead (status_reg, 0) & alarm1_status ) | ((! bitRead (status_reg, 1) & alarm2_status) << 1));

Wire.write (0); // Очистить биты флага аварийного сигнала

Wire.endTransmission (); // Остановка передачи и освобождение шины I2C

}

DS3231_read (); // Считываем параметры времени и календаря из DS3231 RTC

alarms_read_display (); // Считываем и отображаем параметры аварийных сигналов

DS3231_display (); // Отображение времени и календаря

delay (50); // Подождите 50 мс

}

// Конец кода

Будильник Arduino с использованием часов реального времени и ЖК-экрана

Группа инженеров по обучению

Команда опытных инженеров, делящихся знаниями со всем миром

Образовательные Команда инженеров - ведущая команда в индустрии микроконтроллеров с более чем 13 лет опыта в обучении и выполнении практических проектов.

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

Эти реальные знания позволяют вам легко усваивать знания, и вы можете сразу же применять их в своей жизни и проектах.

Группа инженеров по обучению занимается программированием и микроконтроллерами с 2007 года .Мы участвовали во многих проектах. За эти годы мы получили хорошее представление о потребностях студентов и преподавателей. Мы стремимся делиться с вами всеми нашими коллективными знаниями. По состоянию на 2018 год мы уже обучили более 250 тысяч студентов, из них .

В настоящее время у нас более 100 курсов по Udemy

Педагог и автор «Образовательной инженерии».

Ашраф - педагог, инженер мехатроники, любитель электроники и программирования, производитель .Он создает онлайн-видеокурсы на канале EduEng на YouTube (более 4 миллионов просмотров, более 20 тысяч подписчиков) и автор четырех книг о микроконтроллерах.

В качестве главного инженера по вопросам образования с 2007 года в компании Educational Engineering Team, которую он основал, миссия Ашрафа заключается в изучении новых тенденций и технологий, а также в обучении мира и улучшении его положения.

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

Эта команда также работает в качестве инженеров-фрилансеров, помогая многим студентам в их дипломных проектах и ​​предоставляя рекомендации и консультации многим студентам на протяжении многих лет, чтобы помочь им начать свою карьеру.

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

Его страсть к микроконтроллерам и программированию и, в частности, к миру Arduino, микроконтроллеров PIC, Rasberry Pi руководил своим личным развитием и своей работой через образовательную инженерию.

Онлайн-курсы Ashraf помогли более 250 000 человек со всего мира стать лучше и сделать отличную карьеру в отрасли.

Группа инженеров по обучению предлагает курс по

Проектирование схем, моделирование и изготовление печатных плат

Arduino, микроконтроллер PIC и Raspberry Pi

Программирование на C, Python и других языках программирования

Промышленное программирование и автоматизация ПЛК

Трехмерное проектирование и моделирование

Мир ESP и IoT

Для получения дополнительной информации используйте ссылки на странице профиля, чтобы следить за работой группы инженеров по обучению и последними инновациями Ashraf.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *