Arduino и ЧПУ на Portal-PK.ru http://portal-pk.ru/ Arduino проекты, уроки, а также самоделки и самодельные ЧПУ станки на Portal-PK.ru ru #36. GSM-модуль SIM800L. AT команды и отправка СМС http://portal-pk.ru/news/319-gsm-modul-sim800l-at-komandy-i-otpravka-sms.html Константин Portal-PK 2021-09-15T04:09:09+03:00 Сегодня в уроке рассмотрим Модуль GSM GPRS SIM800L V2.0 MicroSIM с антенной. Посмотрим в чем его преимущества и недостатки. Разберемся, как управлять данным модулем с помощью AT команд и оправим CMC сообщение.

 Модуль GSM GPRS SIM800L V2.0 MicroSIM с антенной.

Модуль GSM GPRS SIM800L V2.0 обладает минимальным функционалом — обмен данными с GSM-модулем по UART. Плата имеет слот для установки внешней SIM-карты.
SIM800L V2.0 GSM/GPRS - это четырех диапазонный GSM/GPRS модуль, совместимый с Arduino. Модуль используется для реализации функций GSM и GPRS. Преимуществом этого модуля является возможность напрямую подключать его к Arduino или другому микроконтроллеру с напряжением питания 5В.

Общие характеристики SIM800L V2.0 GSM/GPRS

Общие характеристики SIM800L V2.0 GSM/GPRS:

  • Модель : SIMCOM SIM800L;
  • Напряжение питания : от 3,7В до 5В;
  • Поддержка сети: четыре диапазона–850/900/1800/1900 МГц, способные осуществлять звонки, SMS и передачу данных со значительно уменьшенным расходом заряда;
  • Управление посредством AT-команд;
  • TTL совместимый по уровню с Arduino;
  • Низкая потребляемая мощность;
  • Штекер подключения антенны;
  • Наличие антенны;
  • Размеры: 40мм х 28мм х 3мм;
  • Диапазон рабочих температур: от -40°C до +85°C.

Распиновка GSM-модуля SIM800L

Распиновка GSM-модуля SIM800L:

  • RxD (Receiver) — Вывод последовательной связи.
  • TxD (Transmitter) — Вывод последовательной связи.
  • GND — Вывод заземления, должен быть подключен к выводу GND на Arduino.
  • VCC — Питание модуля, от 3,7 В до 5 вольт.
  • DTR — этот пин отвечает за выход из спящего режима модуля.
  • RST (Reset) — Вывод сброса модуля.

Схема подключения GSM GPRS SIM800L V2.0 MicroSIM к Arduino UNO.

Схема подключения GSM GPRS SIM800L V2.0 MicroSIM к Arduino.

Схема подключения SIM800L V2.0 к Arduino NANO.

Схема подключения SIM800L V2.0 к Arduino NANO.

Так как модуль GSM GPRS SIM800L V2.0 MicroSIM может общаться только по UART и не имеет звукового интерфейса. Схема подключения будет очень простая, всего по двум проводам + питание.

Тестирование AT-команд SIM800L.

Для отправки AT-команд и связи с модулем SIM800L будем использовать окно «Монитора порта». Копируем приведенный скетч ниже и загружаем его в Arduino.

#include <SoftwareSerial.h>
SoftwareSerial SIM800(8, 9);        // 8 - RX Arduino (TX SIM800L), 9 - TX Arduino (RX SIM800L)
void setup() {
  Serial.begin(9600);               // Скорость обмена данными с компьютером
  Serial.println("Start!");
  SIM800.begin(9600);               // Скорость обмена данными с модемом
  SIM800.println("AT");
}
void loop() {
  if (SIM800.available())           // Ожидаем прихода данных (ответа) от модема...
    Serial.write(SIM800.read());    // ...и выводим их в Serial
  if (Serial.available())           // Ожидаем команды по Serial...
    SIM800.write(Serial.read());    // ...и отправляем полученную команду модему
}

Открываем окно «Монитора порта», устанавливаем скорость «9600» и «NL (Новая строка)».

В коде используем библиотеку SoftwareSerial.h, которую нужно подключить. Библиотеку можно скачать внизу статьи в разделе «Файлы для скачивания».

Для проверки работоспособности будем использовать команды:

  • AT — это самая основная команда AT. Если все работает, в ответ получаем, символ AT, а затем ОК, сообщая, что все в порядке.
  • AT+CSQ — проверка уровня сигнала в дБ, должно быть выше 5.
  • AT+CCID — получение номера SIM-карты.
  • AT+CREG? — проверка регистрации в сети.

В мониторе порта увидим следующую информацию.

Для проверки работоспособности будем использовать команды

Также можно проверить:

  • ATI — получить название модуля и ревизию
  • AT+COPS? — проверка регистрации в сети (Bee Line)
  • AT+COPS=? — список операторов в сети.
  • AT+CBC — команда показывает состояние батареи

AT+CBC — команда показывает состояние батареи

Подробный список AT команд приведен в таблице ниже.

Описание Команда Структура ответа Пример ответа
Готовность модуля к работе AT OK
OK
Запрос информации об устройстве ATI <info>
OK

<info> — модель и версия модуля
SIM800 R14.18

OK
Запрос версии установленного ПО AT+CGMR <revision>
OK

<revision> — модель и версия ПО
Revision:1418B04SIM800L24

OK
Готовность модуля совершать звонки AT+CCALR? +CCALR: <mode>
OK

<mode> — идентификатор готовности:

0 — модуль не готов совершать звонки
1 — модуль готов совершать звонки

+CCALR: 1

OK
Запрос качества связи AT+CSQ +CSQ: <rssi>,<ber>
OK

<rssi> — качество сигнала (от 10 и выше — нормальное):

0 -115 дБм и меньше
1 -111 дБм
2...30 -110... -54 дБм
31 -52 дБм и больше
99 определить невозможно

<ber> — RXQUAL (мера качества сигнала), значение из таблицы GSM 05.08 — ETSI:

0...7 — коэффициент битовых ошибок (меньше — лучше)
99 определить невозможно

+CSQ: 8,0

OK
Запрос IMEI-модуля AT+GSN <sn>
OK

<sn> — IMEI модуля
864713035030892

OK
Запрос идентификационной информации модуля AT+GSV Текстовая информация о модуле SIMCOM_Ltd
SIMCOM_SIM800L
Revision:1418B04SIM800L24

OK
Напряжение питания AT+CBC +CBC: <bcs>,<bcl>,<voltage>
OK

<bcs> — статус зарядки

0 — зарядки нет
1 — зарядка идет
2 — зарядка завершена

<bcl> — объем оставшегося заряда в процентах (1...100)
<voltage> — напряжение питания модуля, в милливольтах
+CBC: 0,73,3988

OK
Тип регистрации в сети AT+CREG? +CREG: <n>,<stat>
OK

<n> — параметр ответа

0 — незапрашиваемый код регистрации в сети отключен
1 — незапрашиваемый код регистрации в сети включен
2 — незапрашиваемый код регистрации в сети включен с информацией о местоположении

<stat> — статус

0 — незарегистрирован, не ищет нового оператора для регистрации
1 — зарегистрирован в домашней сети
2 — незарегистрирован, но в поиске нового оператора для регистрации
3 — регистрация запрещена
4 — неизвестно
5 — зарегистрирован, в роуминге

+CREG: 0,1

OK
Информация об операторе AT+COPS? +COPS: <mode>,[<format>,<oper>]
OK

<mode> — режим регистрации
<format> — формат отображения
<oper> — наименование оператора в заданном формате
+COPS: 0,0,"MegaFon"

OK
Получение списка всех операторов AT+COPN +COPN: <numeric1>,<alpha1>
[<CR><LF>+COPN: <numeric2>,<alpha2> […]]

OK
<numeric n> — цифровой код оператора
<alpha n> — текстовый код оператора
...
+COPN: "24008","vodafone"
+COPN: "24010","Swefour AB"
+COPN: "24201","TELENOR"
+COPN: "24202","NetCom"
+COPN: "24403","FINNET"
+COPN: "24405","Elisa Corporation"
+COPN: "24409","FINNET"
...

OK
Статус телефона GSM-модуля AT+CPAS +CPAS: <pas>
OK

<pas> — статус

0 — готов к выполнению команд из терминала
2 — неизвестно (исполнение команд не гарантируется)
3 — входящий вызов, но модуль готов к выполнению команд
4 — исходящий вызов, но модуль готов к выполнению команд

+CPAS: 4

OK

Отправка СМС с помощью модуля GSM GPRS SIM800L V2.0 и Arduino.

Для отправки СМС также будем использовать AT команды:

  • AT + CMGF = 1 — выбирает формат SMS-сообщения в виде текста. Формат по умолчанию PDU.
  • AT + CMGS = +7xxxxxxxxxxотправляет SMS на указанный номер телефона.

Внимание! Прежде чем загрузить пример, необходимо ввести номер телефона. Найдите строку +7xxxxxxxxxx и замените его на необходимый номер телефона, на который будет оправлено сообщение.

Скетч отправки СМС сообщения с помощью Arduino и модуля SIM800L.

Скетч отправки СМС сообщений будет следующим.

#include <SoftwareSerial.h>
SoftwareSerial sim800l(8, 9); // 8 - RX Arduino (TX SIM800L), 9 - TX Arduino (RX SIM800L)

void SendSMS()
{
  Serial.println("Sending SMS...");                // Печать текста
  sim800l.print("AT+CMGF=1\r");                   // Выбирает формат SMS
  delay(100);
  sim800l.print("AT+CMGS=\"+7xxxxxxxxxx\"\r");  // Отправка СМС на указанный номер +792100000000"
  delay(300);
  sim800l.print("A letter from the site: arduino-tex.ru");       // Тест сообщения
  delay(300);
  sim800l.print((char)26);// (требуется в соответствии с таблицей данных)
  delay(300);
  sim800l.println();
  Serial.println("Text Sent.");
  delay(500);
}

void setup()
{
  sim800l.begin(9600);   //Инициализация последовательной связи с Arduino и SIM800L
  Serial.begin(9600);   // Инициализация последовательной связи с Arduino и Arduino IDE (Serial Monitor)
  delay(1000);          // Пауза 1 с
  SendSMS();
}

void loop()
{
  delay(500);                            // Пауза 500 мс
  if (sim800l.available()) {           // Переадресация с последовательного порта SIM800L на последовательный порт Arduino IDE
    Serial.write(sim800l.read());
  }
}

В мониторе порта увидим подтверждение отправки сообщения, а также номер, на который было отправлено сообщение.

В мониторе порта увидим подтверждение отправки сообщения, а также номер, на который было отправлено сообщение.

На телефоне, на который было отправлено сообщение, увидим следующую информацию. СМС сообщение, которое мы отправляли.

На телефоне, на который было отправлено сообщение, увидим следующую информацию. СМС сообщение, которое мы отправляли.

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

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

С помощью модуля GSM GPRS SIM800L V2.0 MicroSIM можно получать СМС,управляя устройствами. Отправлять данные про GPRS на сайт. Также считывать команды сайта и производить управление домашней электроникой. Более подробнее данные функции рассмотрим в следующих уроках.

С помощью модуля GSM GPRS SIM800L V2.0 MicroSIM можно получать СМС,управляя устройствами. Отправлять данные про GPRS на сайт.

Появились вопросы или предложения, не стесняйся, пиши в комментарии!

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке.

]]>
Использование сдвигового регистра в проектах на Arduino, Esp8266. http://portal-pk.ru/news/318-ispolzovanie-sdvigovogo-registra-v-proektah-na-arduino.html Константин Portal-PK 2021-09-07T09:08:32+03:00 При разработке проектов на Arduino часто встаёт вопрос нехватки пинов для подключения периферийных устройств. В случае использовании ESP8266 нехватка пинов возникает гораздо чаще, так как у данного микроконтроллера гораздо меньше пинов которые можно использовать для подключения внешних устройств. Для увеличения количества пинов можно использовать сдвиговый регистр. Например, восьмибитный 74HC595.

Где найти информацию о подключении74HC595 к Arduino, Esp8266?

Где найти информацию о подключении74HC595 к Arduino, Esp8266?

С методами расширения пинов плат Arduino и ESP8266 определились. Сейчас осталось понять, как подключить сдвиговый регистр к Arduino.

Подключить сдвиговый регистр 74HC595 к Arduino можно по схеме.

Схема подключения сдвигового регистра к плате Arduino UNOБолее подробный урок по подключению сдвигового регистра к Arduino читайте тут.

Также у меня есть очень подробный урок по подключению сдвигового регистра к ESP8266. Который вы можете посмотреть на моем втором сайте про Ардуино.

Схема подключения 74HC595 к ESP8266 будет следующая.

Схема подключения сдвигового регистра 74HC595 к NodeMCU.

Понравилась новость Использование сдвигового регистра в проектах на Arduino, Esp8266? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Сложности в проектировании ЧПУ станков http://portal-pk.ru/news/317-slozhnosti-v-proektirovanii-chpu-stankov.html Константин Portal-PK 2021-09-01T14:04:01+03:00 При разработке ЧПУ станков в домашних условиях нужно учесть большое количество различных моментов. Что сделать практически нереально при сборке ЧПУ станка своими руками. Поэтому приходится методом проб и ошибок подбирать оптимальные варианты реализации различных узлов станка. Сегодня расскажу о том, как я столкнулся с проблемой неравномерной подачи ЧПУ плоттера.

Доработка CNC плоттера.

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

Доработка CNC плоттера

Второй вариант. Это надеть резинки на вал. Более интересный и приемлемый. Но тут тоже есть небольшие проблемы. При частом перемещении вперед и назад лист начинает поворачиваться. И рисунок наносится со смещением. Причиной чего могут быть 2 причины. Либо резинки не одинаковой толщины или проблема с валом. Хотя с наждачной бумагой работал гораздо лучше. Про вариант с использованием наждачной бумаги рассказывал в статье про сборку ЧПУ плоттера.

Про вариант с использованием наждачной бумаги рассказывал в статье про сборку ЧПУ плоттера.

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

Понравилась новость Сложности в проектировании ЧПУ станков? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Первые шаги к беспроводной системе управления умным домом. http://portal-pk.ru/news/316-pervye-shagi-k-besprovodnoi-sisteme-upravleniya-umnym.html Константин Portal-PK 2021-08-29T15:22:46+03:00 Для беспроводного управления достаточно большое количество различных каналов: wifi, bluetooth, радио связь. Сегодня речь пойдет о радио связи как с её помощи можно реализовать проект беспроводной системы управления умным домом.

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

Радио связи имеет ряд преимуществ перед wifi, bluetooth. Это автономность в сравнении с wifi. И больший радиус действия, и большое количество подключаемых устройств по сравнению с bluetooth. Благодаря чему можно сделать небольшую систему автоматизации умного дома, например на даче, где нет возможности постоянной работы wifi или удалённое расположение объектов управления, например надворные постройки, такие как баня, гараж, беседка. Поэтому радиосвязь тут более приемлемое решение.

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

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

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

дисплей можно выводить все показания с датчиков

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

Делал на днях беспроводное управление контролем доступа с дисплеем Nextion подробнее о проекте можно почитать тут.

Понравилась новость Первые шаги к беспроводной системе управления умным домом? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Лучшие проекты на базе Digispark Attiny85 (мини Arduino). http://portal-pk.ru/news/315-sborka-proektov-sdelannyh-na-digispark.html Константин Portal-PK 2021-08-23T12:40:17+03:00 DigiSpark является небольшой отладочной платой. На которой можно реализовать различные проекты не смотря на ограниченное количество пинов для подключения и небольшой объем памяти под прошивку.Самым большим плюсом данной отладочной платы является ее небольшой размер. Что позволяет разместить DigiSpark, там, где не поместиться Arduino. Вторым плюсом является тот факт, что данная плата определяется компьютером как внешнее устройство и на основе DigiSpark можно реализовать мышке или клавиатуру.

Подборка моих проектов реализованных на DigiSpark.

Подборка моих проектов реализованных на DigiSpark.

Смотрите также статьи и уроки по использованию DigiSpark.

Смотрите также статьи и уроки по использованию DigiSpark.

Понравилась новость Лучшие проекты на базе Digispark Attiny85 (мини Arduino)? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
AT-команды для настройки bluetooth-модулей HC-05, HC-06. http://portal-pk.ru/news/314-at-komandy-dlya-nastroiki-bluetooth-modulei-hc-05-hc-06.html Константин Portal-PK 2021-08-10T05:29:01+03:00 При разработке проектов с беспроводным управлением часто падает выбор на bluetooth-модули HC-05, HC-06. В связи с небольшой стоимостью и простотой использования. Но перед тем как создать проект нужно настроить bluetooth-модуль. Настройка модулей осуществляется с помощью AT-команд.

Схема подключения bluetooth-модулей HC-05, HC-06 к Arduino для настройки.

Схема подключения bluetooth-модулей HC-05, HC-06 к Arduino для настройки.

Какие параметры bluetooth-модулей HC-05, HC-06 можно настроить с помощью AT-команд?

В зависимости от версии bluetooth-модуля и прошивки настроить можно разное количество параметров. Также AT-команд могут быть разные, у разных версий модулей и прошивок. Но основной набор команд неизменный для любой версии. Возможно, разделительный знак будет отличаться, но методом «научного подбора» можно определить, если даже нет описания для вашего модуля.

Основные AT-команды bluetooth-модулей HC-05, HC-06

Основные AT-команды bluetooth-модулей HC-05, HC-06:

  • AT - Используется для проверки связи с модулем.
  • AT+VERSION - Запрос версии прошивки
  • AT+NAME - Запрос / установка имени модуля
  • AT+PSWD или AT+PIN - Запрос / Установка PIN-кода
  • AT+UART - Запрос / установка скорости UART
  • AT+CMODE - Запрос / установка режима подключения
  • AT+BIND - Запрос / установка фиксированного адреса
  • AT+ADDR - Запрос адреса модуля
  • AT+ROLE - Запрос / установка роли модуля

Это основные AT-команды. Остальные команды используются редко. Более подробный список вы можете посмотреть в таблице ниже.

AT-команды: Ответ Bluetooth модуля: Назначение AT-команд:
AT OK Команда Тест:
Используется для проверки связи с модулем.
AT+RESET OK Команда программной перезагрузки модуля:
Модуль ведёт себя так, как после кратковременного отключения питания.
AT+VERSION? +VERSION:ВЕРСИЯ
OK
Запрос версии прошивки модуля:
Модуль возвращает версию в виде строки до 32 байт.
Пример ответа: +VERSION:hc01.comV2.1OK
AT+ORGL OK Сброс пользовательских настроек:
Модуль сбрасывает следующие настройки:
CLASS=0, IAC=9e8b33, ROLE=0, CMODE=0, UART=38400,0,0, PSWD=1234, NAME=hc01.com.
AT+ADDR? +ADDR:АДРЕС
OK
Запрос адреса модуля:
Модуль возвращает три части своего адреса NAP:UAP:LAP разделённые двоеточием.
Каждая часть состоит из шестнадцатиричных цифр.
Пример ответа: +ADDR:1234:56:789ABCOK
Если количество символов в адесе не четное, то такой адрес не получется добавить мастеру в параметр AT+BIND
AT+NAME? +NAME:ИМЯ
OK
Запрос / установка имени модуля:
Имя модуля представлено строкой до 32 байт.
Пример ответа: +NAME:iArduinoOK
Пример установки: AT+NAME=iArduino
Некоторые модули реагируют на команду AT+NAME? только при нажатой кнопке модуля или наличии высокого уровня на входе K.
AT+NAME=ИМЯ OK
AT+RNAME? АДРЕС +RNAME:ИМЯ
OK
Запрос имени найденного Bluetooth устройства:
Адрес вводится после пробела, а части адреса (NAP,UAP,LAP) разделены запятой. Модуль возвращает имя найденного Bluetooth устройства находящегося в зоне действия, адрес которого был в запросе.
Пример запроса: AT+NAME? 1234,56,789ABC
Пример ответа: +RNAME:iArduinoOK
AT+ROLE? +ROLE:РОЛЬ
OK
Запрос / установка роли модуля:
Роль модуля представлена цифрой:
0 - ведомый, 1 - ведущий, 2 - ведомый в цикле*.
Пример ответа: +ROLE:1
Пример установки: AT+ROLE=0
AT+ROLE=РОЛЬ OK
AT+CLASS? +CLASS:ТИП
OK
Запрос / установка типа устройства:
Тип устройства представляется 32 битным числом, по которому можно определить назначение модуля: Bluetooth клавиатура, Bluetooth мышь, гарнитура ...
Пример установки: AT+CLASS=0
AT+CLASS=ТИП OK
AT+IAC? +IAC:КОДOK Запрос / Установка кода общего доступа GIAC:
Код представлен 32 битным числом и используется для обнаружения Bluetooth устройств.
В роли ведущего, по данному коду модуль будет получать доступ к другим Bluetooth устройствам для их поиска (опроса), а в роли ведомого по данному коду будет предоставляться доступ для опроса модуля другими ведущими.
Пример ответа: +IAC:9e8b33OK
Пример установки: AT+IAC=9e8b33
AT+IAC=КОД OK
или
FAIL
AT+INQM? +INQM:РЕЖИМ,КОЛ,ВРЕМЯ
OK
Запрос / Установка режима опроса модулей:
Используемые параметры являются настройками для команды поиска (опроса) других Bluetooth устройств.
- Режим поиска представлен цифрой:
0-стандартный, 1-поиск по интенсивности сигнала.
- Количество представлено цифрой определяющей предельное количество найденных Bluetooth устройств, после которого требуется прекратить поиск.
- Время поиска задаёт таймаут после которого поиск прекращается. Реальное время поиска в секундах равно указанному числу умноженному на 1,28.
Пример ответа: +INQM:1,1,48OK
Пример установки: AT+INQM:1,1,48
AT+INQM=РЕЖИМ,КОЛ,ВРЕМЯ OK
или
FAIL
AT+PSWD? +PSWD:КОД
OK
Запрос / Установка PIN-кода:
Код доступа представлен строкой до 16 байт.
Код модуля в роли ведомого устройства является паролем доступа к текущему модулю.
Код модуля в роли ведущего устройства является паролем доступа к внешним Bluetooth устройствам.
Пример ответа: +PSWD:1234OK
Пример установки: AT+PSWD=1234arduino
AT+PSWD=КОД OK
AT+UART? +UART:СКОР,СТОП,ПРОВ
OK
Запрос / установка скорости UART:
Скорость представлена числом бит/сек
Стоп бит представлен цифрой: 0 - один, 1 - два
Проверка представлена цифрой: 0 - без проверки,
1 - проверка нечётности, 2 - проверка чётности.
Пример ответа: +UART:38400,0,0OK
Пример установки: AT+UART=38400,0,0
AT+UART=СКОР,СТОП,ПРОВ OK
AT+CMODE? +CMOD:РЕЖИМ
OK
Запрос / установка режима подключения:
Режим представлен цифрой:
0 - модуль в роли ведущего подключается только к тому Bluetooth устройству, адрес которого указан командой AT+BIND.
1 - модуль в роли ведущего подключается к любому ведомому Bluetooth устройству.
2 - модуль в роли ведомого работает в цикле*
Пример ответа: +CMOD:0OK
Пример установки: AT+CMOD=1
AT+CMODE=РЕЖИМ OK
AT+BIND? +BIND:АДРЕС
OK
Запрос / установка фиксированного адреса:
Если модуль находится в роли ведущего (ROLE=1) и установлен режим подключения к фиксированному адресу (CMODE=0), то он будет подключаться только к тому Bluetooth устройству, адрес которого указан данной командой.
Части адреса вводятся: при установке - через запятую, а при ответе - через двоеточие.
Пример ответа: +BIND:1234:56:789ABCOK
Пример установки: AT+BIND=0,0,0
AT+BIND=АДРЕС OK
AT+POLAR? +POLAR:ЛОГ,ЛОГ
OK
Запрос / установка активного логического уровня для включения светодиодов:
Полярность представлена цифрой 0 или 1 соответствующей активному логическому уровню.
Первый параметр указывает логический уровень для включения светодиода подключённого к выводу PIO8 (отображает режим работы), а второй для светодиода подключённого к выводу PIO9 (отображает статус соединения).
Пример ответа: +POLAR:1,1OK
Пример установки: AT+POLAR=1,1
AT+POLAR=ЛОГ,ЛОГ OK
AT+PIO=НОМЕР,УРОВЕНЬ OK Установка логического уровня PIO:
Позволяет установить логический уровень на выводе PIO. Номер вывода представлен числом от 2 до 11, кроме 8 и 9. Уровень представлен цифрой 0 или 1.
Пример установки: AT+PIO=11,0
AT+MPIO? +MPIO:ЧИСЛО
OK
Запрос / установка логических уровней PIO:
Позволяет узнать или установить логические уровни сразу на всех выводах PIO.
Уровни представлены шестнадцатиричным числом, каждый бит которого соответствует уровню вывода PIO.
Пример ответа: +MPIO:1F0OK
Пример установки: AT+MPIO:CFC
AT+MPIO=ЧИСЛО OK
AT+IPSCAN? +IPSCAN:A,B,C,D
OK
Запрос / установка параметров IP сканирования:
A - интервал сканирования
B - продолжительность сканирования
C - интервал страниц
D - количество страниц
Пример ответа: +IPSCAN:1024,512,1024,512OK
Пример установки: AT+IPSCAN:1024,512,1024,512
AT+IPSCAN=A,B,C,D OK
AT+SNIFF? +SNIFF:A,B,C,D
OK
Запрос / установка параметров энергосберегающего режима:
A - максимальное время
B - минимальное время
C - период повторов
D - таймаут
Пример ответа: +SNIFF:0,0,0,0OK
Пример установки: AT+SNIFF=0,0,0,0
AT+SNIFF=A,B,C,D OK
AT+ENSNIFF=АДРЕС OK Переход в энергосберегающий режим:
Части адреса вводятся через запятую (NAP,UAP,LAP)
Пример команды: AT+ENSNIFF=1234,56,789ABC
AT+EXSNIFF=АДРЕС OK Выход из энергосберегающего режима:
Части адреса вводятся через запятую (NAP,UAP,LAP)
Пример команды: AT+EXSNIFF=1234,56,789ABC
AT+SENM? +SENM:СЕКРЕТ,ШИФР
OK
Запрос / установка параметров безопасности:
Режим секретности представлен цифрой:
0 - выключен
1 - незащищённое соединение
2 - защита на сервисном уровне
3 - защита на уровне соединения
4 - неизвестный режим
Режим шифрования представлен цифрой:
0 - без шифрования
1 - шифруется только трафик PTP
2 - шифруется весь трафик
Пример ответа: +SENM:0,0OK
Пример установки: AT+SENM:0,0
AT+SENM=СЕКРЕТ,ШИФР OK
AT+PMSAD=АДРЕС OK Удаление устройства из списка пар:
Удаление Bluetooth устройства из списка приведёт к необходимости заново образовывать пару для подключения к нему.
Части адреса удаляемого устройства вводится через запятую (NAP,UAP,LAP)
Пример команды: AT+PMSAD=1234,56,789ABC
AT+RMAAD OK Удаление всех устройств из списка пар:
Очистка данного списка приведёт к необходимости заново образовывать пары с Bluetooth устройствами для подключения к ним.
AT+FSAD=АДРЕС OK
или
FAIL
Поиск устройства в списке пар:
Если Bluetooth устройство с указанным адресом имеется в списке, то модуль вернёт OK иначе FAIL.
Части адреса вводятся через запятую (NAP,UAP,LAP)
Пример запроса: AT+FSAD=1234,56,789ABC
AT+ADCN? +ADCN:КОЛИЧЕСТВО
OK
Запрос количества устройств в списке пар:
При образовании пары ведущий-ведомый, данные о паре автоматически попадают в список пар и для последующих подключений (даже после отключения питания) не требуется повторно устанавливать пару.
Пример ответа: +ADCN:10OK
AT+MRAD? +MRAD:АДРЕС
OK
Запрос адреса устройства из списка пар:
Модуль вернёт адрес Bluetooth устройства из списка пар с которым выполнялось последнее успешное соединение.
Части адреса выводятся через двоеточие (NAP:UAP:LAP)
Пример ответа: +MRAD:1234:56:789ABCOK
AT+STATE? +STATE:СТАТУС
OK
Запрос статуса модуля:
Модуль вернёт свое текущее состояние в виде строки:
INITIALIZED - инициализация
READY - готов
PAIRABLE - образование пары
PAIRED - пара образована
INQUIRING - запрос
CONNECTING - подключение
CONNECTED - подключён
DISCONNECTED - отсоединён
NUKNOW - неизвестное состояние
Пример ответа: +STATE:CONNECTEDOK
AT+INIT OK
или
FAIL
Инициализация профиля SPP:
Профиль SPP эмулирует последовательный порт.
AT+INQ +INQ:АДРЕС,ТИП,СИГНАЛ
+INQ:АДРЕС,ТИП,СИГНАЛ
...
+INQ:АДРЕС,ТИП,СИГНАЛ
Поиск (опрос) Bluetooth устройств:
Команда доступна модулю в роли ведущего.
Модуль ищет Bluetooth устройства в радиусе действия и выводит каждый найденный модуль на новой строке. Режим поиска (опроса) устанавливается командой AT+INQM, код опроса устанавливается командой AT+IAC, тип искомых устройств указывается командой AT+CLASS. Поиск завершается по достижении предельного количества найденных Bluetooth устройств, или по достижении таймаута, или командой AT+INQC.
Пример ответа: +INQ:1234:56:789ABС,240404,7FFF
AT+INQC OK Завершить поиск (опрос) Bluetooth устройств:
Досрочно завершает поиск Bluetooth устройств инициированный командой AT+INQ
AT+PAIR=АДРЕС,ТАЙМАУТ OK
или
FAIL
Создать пару с Bluetooth устройством:
Создание пары или сопряжение Bluetooth устройств инициируется ведущим устройством.
Таймаут указывается десятичным числом в секундах.
Если пара создана, то информация о ней автоматически запишется в список пар, модуль ответит OK после чего можно подключить Bluetooth устройство командой AT+LINK. Если пара не создана (например не подошёл PIN-код или истек таймаут), то модуль ответит FAIL.
Пример команды: AT+PAIR=1234,56,789ABC,10
AT+LINK=АДРЕС OK
или
FAIL
Подключиться к Bluetooth устройству:
После выполнения данной команды можно общаться с подключённым Bluetooth устройством.
Команда доступна модулю в роли ведущего.
Пример команды: AT+LINK=1234,56,789ABC
AT+DISC +DISC:РЕЗУЛЬТАТ
OK
Отключиться от Bluetooth устройства:
Команда указывает модулю отключиться от Bluetooth устройства с которым установлено соединение. После отключения от Bluetooth устройства информация о нём сохраняется в списке пар. Если потребуется вновь подключиться к этому устройству, то создание пары будет необязательно (если Bluetooth устройство намеренно не удалить из списка пар).
После выполнения команды модуль ответит результатом её выполнения:
SUCCESS - успех
LINK_LOSS - соединение потеряно
NO_SLC - отсутствует SLC
TIMEOUT - истекло время ожидания
ERROR - ошибка
Пример ответа: +DISC:SUCCESSOK

Список ошибок которые может вернуть Bluetooth модуль HC-05, HC-06.

ERROR:(№) Описание ошибки Максимальный размер параметра
0 Такая AT команда не существует
-
1 Результат по умолчанию -
2 Ошибка сохранения пароля -
3 Слишком длинное имя устройства 32 байта
4 Имя устройства не указано -
5 Часть адреса NAP слишком длинная 4 разряда в шестнадцатиричной системе
6 Часть адреса UAP слишком длинная 2 разряда в шестнадцатиричной системе
7 Часть адреса LAP слишком длинная 6 разрядов в шестнадцатиричной системе
8 Не указана маска порта PIO -
9 Не указан номер вывода PIO -
A Не указан класс устройства
-
B Слишком длинный класс устройства -
C Не указан общий код доступа IAC -
D Слишком длинный общий код доступа IAC -
E Недопустимый общий код доступа IAC -
F Не указан пароль -
10 Слишком длинный пароль
16 байт
11 Недопустимая роль модуля -
12 Недопустимая скорость передачи данных -
13 Недопустимый размер стоп-бита -
14 Недопустимая настройка бита четности -
15 Устройство отсутствует в списке пар -
16 Профиль последовательного порта не инициализирован -
17 Повторная инициализация профиля SPP -
18 Недопустимый режим опроса Bluetooth устройств -
19 Слишком большое время опроса -
1A Не указан адрес Bluetooth устройства -
1B Недопустимый режим безопасности -
1C Недопустимый режим шифрования -

Сравнение модулей HC-05 и HC-06

Модули HC-05 и HC-06 являются наиболее используемыми. Оба модуля основаны на одинаковом чипе, но есть и важные отличия. Модуль HC-05 может работать в двух режимах работы – и в качестве ведущего (master), и в качестве ведомого (slave).

Сравнение модулей HC-05 и HC-06

Модуль HC-05 стоит несколько дороже, но он имеет большее количество полезных рабочих функций. Скорость передачи АТ команд по умолчанию для HC-05 равна 38400, для HC-06 – 9600. Важным моментом является то, что в конце АТ команд для HC-05 должны быть символы CRLF.

Подключение обоих модулей к плате Arduino одинаково.

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
#35. Выводим символы на дисплей LCD 1602 и LCD 2004. http://portal-pk.ru/news/313-vyvodim-simvoly-na-displei-lcd-1602-i-lcd-2004.html Константин Portal-PK 2021-07-07T16:50:25+03:00 Для создания проектов на Arduino достаточно часто применяют дисплей LCD 1602 и LCD 2004. Как подключить LCD 1602 к Arduino рассмотрели в предыдущем уроке. Кроме текста очень часто нужно вывести специальные символы. Например, обозначение температуры - градус цельсия или процент влажности, а также направление продвижения или вращения. Как же вывести спец символы на дисплей LCD 1602 и LCD 2004? В данном уроке рассмотрим вывод из набора предустановленных символов и создадим свои символы, которые также выведем на LCD 1602 и LCD 2004.

 Как же вывести спец символы на дисплей LCD 1602 и LCD 2004?


Схема подключения LCD 1602 к Arduino UNO по I2C.

Схема подключения LCD 1602 к Arduino UNO по I2C.

Не смотря на то, что схему подключения уже рассматривали в предыдущем уроке. В данном уроке продублирую схему подключения LCD 1602 к Arduino UNO по I2C.

Для урока понадобится:

Выводим символы на дисплей LCD 1602 и LCD 2004.

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

1602 таблица символов

Вывести символ из данной таблицы на дисплей LCD 1602 и LCD 2004 достаточно просто. Вызываем команду:
lcd.print(char(127));

Где 127 номер символа из таблицы.

Таким образом, можно использовать предустановленный набор символов.


Таким образом, можно использовать предустановленный набор символов.

Пример кода (Скетча) вывода символов на дисплей LCD 1602 и LCD 2004.

#include <LiquidCrystal_I2C.h>        //  Подключаем библиотеку для работы с LCD дисплеем по шине I2C
LiquidCrystal_I2C lcd(0x27, 16, 2);   //  Объявляем  объект библиотеки, указывая параметры дисплея (адрес I2C = 0x27, количество столбцов = 16, количество строк = 2)
//  Если надпись не появилась, замените адрес 0x27 на 0x3F
void setup() {                        //
  lcd.init();                       //  Инициируем работу с LCD дисплеем
  lcd.backlight();                  //  Включаем подсветку LCD дисплея
  lcd.setCursor(0, 0);              //  Устанавливаем курсор в позицию (0 столбец, 0 строка)
  lcd.print("LCD");                 //  Выводим текст "LCD", начиная с установленной позиции курсора
  lcd.setCursor(0, 1);              //  Устанавливаем курсор в позицию (0 столбец, 1 строка)
  lcd.print("arduino-tex.ru");     //  Выводим текст arduino-tex.ru, начиная с установленной позиции курсора
  delay(5000);
  lcd.setCursor(0, 0);
  lcd.print("25");
  lcd.print(char(223));
  lcd.print("C");
  lcd.print(" ");
  lcd.print(char(127));
  lcd.print(" ");
  lcd.print(char(126));
  lcd.print(" ");
  lcd.print(char(37));
  lcd.print(" ");
  lcd.print(char(61));
  lcd.print(char(62));
  lcd.setCursor(0, 1);
  lcd.print(" ");
  lcd.print(char(255));
  lcd.print(" ");
  lcd.print(char(252));
  lcd.print(" ");
  lcd.print(char(219));
  lcd.print(" ");
  lcd.print(char(170));
  lcd.print(" ");
  lcd.print(char(63));
  lcd.print(" ");
  lcd.print(char(58));
  lcd.print(" ");
  lcd.print(char(33));
}

void loop() {
}

Как видим из кода, вывод символов ничем не отличается от вывода обычного текста, только вывести можно всего один символ и при этом нужно преобразовать значение в char(). Это необходимо сделать, чтобы микроконтроллер понял, что мы выводим на дисплей символ, а не число.

В результате выведем вот такой набор символов.

В результате выведем вот такой набор символов.

Создаём и выводим на LCD 1602 собственные символы.

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

Создаём и выводим на LCD 1602 собственные символы.

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

  B00000,
  B01010,
  B10101,
  B10001,
  B01010,
  B00100,
  B00000,
  B00000

По аналогии можно создавать другие спец символы.

По аналогии можно создавать другие спец символы.

Пример кода создания своих символов для вывода на дисплей LCD 1602 и LCD 2004.

Пример кода создания своих символов для вывода на дисплей LCD 1602 и LCD 2004.

Создал 8 спец символов для вывода на дисплей LCD 1602 и LCD 2004.

byte customChar[] = {
  B00000,
  B01010,
  B10101,
  B10001,
  B01010,
  B00100,
  B00000,
  B00000
};
byte customChar1[] = {
  B00001,
  B00010,
  B00100,
  B01000,
  B11111,
  B00010,
  B00100,
  B01000
};
byte customChar2[] = {
  B11111,
  B10001,
  B10001,
  B10001,
  B10001,
  B10001,
  B10001,
  B11111
};
byte customChar3[] = {
  B11111,
  B10101,
  B01010,
  B01110,
  B10101,
  B11011,
  B11111,
  B11111
};
byte customChar4[] = {
  B11110,
  B11101,
  B11011,
  B10111,
  B00000,
  B11101,
  B11011,
  B10111
};
byte customChar5[] = {
  B11111,
  B11111,
  B11111,
  B11111,
  B11111,
  B11111,
  B11111,
  B11111
};
byte customChar6[] = {
  B10111,
  B11011,
  B11101,
  B11110,
  B11101,
  B11011,
  B10111,
  B11111
};
byte customChar7[] = {
  B01110,
  B01010,
  B01110,
  B10101,
  B01110,
  B00100,
  B01010,
  B10001
};

Давайте сейчас сохраним данные символы в память дисплея. Для этого используется команда lcd.createChar().

  lcd.createChar(0, customChar);
  lcd.createChar(1, customChar1);
  lcd.createChar(2, customChar2);
  lcd.createChar(3, customChar3);
  lcd.createChar(4, customChar4);
  lcd.createChar(5, customChar5);
  lcd.createChar(6, customChar6);
  lcd.createChar(7, customChar7);

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

Для вывода символов устанавливаем курсор. Например, в домашнюю позицию и выводим по порядку все символы.

  lcd.home();
  lcd.write(0);
  lcd.print(" ");
  lcd.write(1);
  lcd.print(" ");
  lcd.write(2);
  lcd.print(" ");
  lcd.write(3);
  lcd.print(" ");
  lcd.write(4);
  lcd.print(" ");
  lcd.write(5);
  lcd.print(" ");
  lcd.write(6);
  lcd.print(" ");
  lcd.write(7);

Вот так символы отображаются на дисплее LCD 1602 и LCD 2004.

Вот так символы отображаются на дисплее LCD 1602 и LCD 2004.


Но это не позволяет нам выводить русские буквы на дисплей LCD 1602 и LCD 2004. Для этого есть специально адаптированная библиотека с ней мы познакомимся в следующем уроке.

Но это не позволяет нам выводить русские буквы на дисплей LCD 1602 и LCD 2004.

Появились вопросы или предложения, не стесняйся, пиши в комментарии!

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке.

]]>
#34. ЖК-дисплей LCD 1602 и LCD 2004. Подключение к Arduino. Основы. http://portal-pk.ru/news/312-zhk-displei-lcd-1602-i-lcd-2004-podklyuchenie-k-arduino-osnovy.html Константин Portal-PK 2021-06-24T20:13:11+03:00 Символьные ЖК-дисплеи LCD 1602 и LCD 2004 достаточно часто используются в Arduino проектах, благодаря большому размеру и относительно небольшой стоимости. Кроме этого с данными дисплеями достаточно просто работать. Сегодня в Arduino уроке рассмотрим основы работы с ЖК-дисплеями LCD 1602 и LCD 2004. Подключим lcd 1602 к Ардуино. И рассмотрим пару примеров скетчей, которые позволят вывести текстовую информацию на LCD 1602 и 2004.

Описание и классификация LCD 1602 и LCD 2004.

LCD 1602 дисплей еще называют символьным. Это связано с тем, что ЖК-дисплей разбит на области точек. На каждую такую область можно вывести 1 символ. В связи с чем дисплей данного типа подразделяется по количеству строчек и символов в строке. Например, 2 строки и 16 символов в каждой строке, данное значение указывается в названии дисплея 1602. По аналогии 20 символов и 4 строки это LCD 2004. Также есть и другое разрешение дисплея 0802, но у меня, к сожалению, нет таких маленьких дисплеев и продемонстрировать их я вам не смогу. Но работа с ними ничем не отличается от старших братьев.

LCD 1602 дисплей еще называют символьным.

Также можно выделить разный тип подсветки. Существуют дисплеи: синий фон белые буквы, зелёный фон чёрные буквы, чёрный фон белые буквы и проч. Я буду использовать, с синим фоном и белыми буквами.

Для урока понадобится:

LCD 1602 и LCD 2004 подключение к Ардуино.

Существует несколько вариантов подключения LCD 1602 или LCD 2004 к Ардуино по 4-бит или 8-бит параллельному интерфейсу. При таком подключении у нас будет задействовано 6 или 10 контактов Arduino, что неприемлемо при использовании Arduino UNO, Arduino NANO и подобных отладочных плат, в которых не так и много пинов, которые можно использовать.

Схема подключения LCD 1602 к Arduino UNO.

Схема подключения LCD 1602 к Arduino UNO.

Чтобы уменьшить количество проводов для подключения LCD 1602, используется плата PCF8574, которая позволяет подключить дисплей по I2C. Что уменьшает количество проводов до 2. Сегодня в уроке будем использовать подключение LCD 1602 и LCD 2004 к Arduino по I2C.

 LCD 1602 и LCD 2004 к Arduino по I2C

Схема подключения LCD 1602 к Arduino UNO по I2C с использованием PCF8574.

LCD 2004, LCD 1602 библиотека.

Для работы с дисплеем используется библиотека LiquidCrystal. Но в связи с тем, что мы будем использовать подключение LCD 1602 и LCD 2004 к Arduino по I2C. Библиотеку использовать будем другую LiquidCrystal_I2C. Которую можно скачать с GitHub. Или внизу статьи, в разделе «Файлы для скачивания».

После того как вы скачали архив с библиотекой. Заходим в Arduino IDE, открываем вкладку «Скетч -> Подключить библиотеку -> Добавить .ZIP библиотеку…»

LCD 2004, LCD 1602 библиотека.

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

установились с библиотекой LiquidCrystal_I2C

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

примеры, которые установились с библиотекой LiquidCrystal_I2C

Описание библиотеки LiquidCrystal_I2C.

Описание библиотеки LiquidCrystal_I2C.

Перед тем как начать работать с дисплеем LCD 2004, LCD 1602 давайте рассмотрим библиотеку LiquidCrystal_I2C. Ниже приведены основные функции, которые необходимы для работы с дисплеем.

print(data);          // вывести (любой тип данных)
setCursor(x, y);      // курсор на (столбец, строка)
clear();              // очистить дисплей
home();               // аналогично setCursor(0, 0)
noDisplay();          // отключить отображение
display();            // включить отображение
blink();              // мигать курсором на его текущей позиции
noBlink();            // не мигать
cursor();             // отобразить курсор
noCursor();           // скрыть курсор
scrollDisplayLeft();  // подвинуть экран влево на 1 столбец
scrollDisplayRight(); // подвинуть экран вправо на 1 столбец
backlight();          // включить подсветку
noBacklight();        // выключить подсветку
createChar(uint8_t, uint8_t[]);                     // создать символ
createChar(uint8_t location, const char *charmap);  // создать символ

Пример кода вывода текста на LCD 1602 с использованием библиотеки LiquidCrystal.

Не смотря на то, что урок ориентирован на использование подключения дисплея по I2C. Рассмотрим пример подключения дисплея LCD 1602 подключённого по 4-битной параллельной шине. Для работы с дисплеем LCD2004 нужно изменить пятую строчку кода на lcd.begin(20, 4);

#include <LiquidCrystal.h>            //  Подключаем библиотеку LiquidCrystal для работы с LCD дисплеем
LiquidCrystal lcd(2,3,4,5,6,7);       //  Объявляем объект библиотеки, указывая выводы дисплея (RS,E,D4,D5,D6,D7)
                                      //  Если используется 8 проводов шины данных, то указываем (RS,E,D0,D1,D2,D3,D4,D5,D6,D7)
void setup(){                         //
    lcd.begin(16, 2);                 //  Инициируем работу с LCD дисплеем, указывая количество (столбцов, строк)
    lcd.setCursor(0, 0);              //  Устанавливаем курсор в позицию (0 столбец, 0 строка)
    lcd.print("LCD2004");             //  Выводим текст "LDC1602", начиная с установленной позиции курсора
    lcd.setCursor(0, 1);              //  Устанавливаем курсор в позицию (0 столбец, 1 строка)
    lcd.print("arduino-tex.ru");     //  Выводим текст arduino-tex.ru, начиная с установленной позиции курсора
}                                     //
                                      //
void loop(){}                         //  Код внутри функции loop выполняется постоянно. Но так как мы выводим статичный текст, нам достаточно его вывести 1 раз при старте, без использования кода loop

Пример вывода текста на LCD 2004, LCD 1602 с использованием библиотеки LiquidCrystal_I2C.

#include <LiquidCrystal_I2C.h>        //  Подключаем библиотеку для работы с LCD дисплеем по шине I2C
LiquidCrystal_I2C lcd(0x27,16,2);     //  Объявляем  объект библиотеки, указывая параметры дисплея (адрес I2C = 0x27, количество столбцов = 16, количество строк = 2)
                                      //  Если надпись не появилась, замените адрес 0x27 на 0x3F
void setup(){                         //
    lcd.init();                       //  Инициируем работу с LCD дисплеем
    lcd.backlight();                  //  Включаем подсветку LCD дисплея
    lcd.setCursor(0, 0);              //  Устанавливаем курсор в позицию (0 столбец, 0 строка)
    lcd.print("LCD");                 //  Выводим текст "LCD", начиная с установленной позиции курсора
    lcd.setCursor(0, 1);              //  Устанавливаем курсор в позицию (0 столбец, 1 строка)
    lcd.print("arduino-tex.ru");     //  Выводим текст arduino-tex.ru, начиная с установленной позиции курсора
}                                     //
                                      //
void loop(){}                         //  Код внутри функции loop выполняется постоянно. Но так как мы выводим статичный текст, нам достаточно его вывести 1 раз при старте, без использования кода loop

Пример вывода текста на LCD 2004, LCD 1602 с использованием библиотеки LiquidCrystal_I2C.


Не смотря на то, что в примере будем использовать подключение LCD 1602 по I2C и библиотеку LiquidCrystal_I2C. Код не сильно изменится. Для работы с дисплеем LCD2004 нужно изменить 3 строку на LiquidCrystal_I2C LCD (0x27,20,4);

Для работы с дисплеем LCD2004 нужно изменить 3 строку на LiquidCrystal_I2C LCD (0x27,20,4);

Выводим время прошедшее после старта на дисплей LCD1602 подключённый по шине I2C.

#include <LiquidCrystal_I2C.h>             //  Подключаем библиотеку для работы с LCD дисплеем по шине I2C
LiquidCrystal_I2C lcd(0x27,20,4);          //  Объявляем  объект библиотеки, указывая параметры дисплея (адрес I2C = 0x27, количество столбцов = 20, количество строк = 4)
                                           //
uint8_t  tim_D, tim_H, tim_M, tim_S;       //  Объявляем  переменные для хранения дней, часов, минут и секунд.
uint32_t tim;                              //  Объявляем  переменную для хранения общего количества времени прошедшего после старта.
                                           //  Если надпись не появилась, замените адрес 0x27 на 0x3F
void setup(){                              //
 lcd.init();                               //  Инициируем работу с LCD дисплеем
    lcd.backlight();                       //  Включаем подсветку LCD дисплея
    lcd.setCursor(0, 0);                   //  Устанавливаем курсор в позицию (0 столбец, 0 строка)
    lcd.print("LCD");                      //  Выводим текст "LCD", начиная с установленной позиции курсора
    lcd.setCursor(0, 1);                   //  Устанавливаем курсор в позицию (0 столбец, 1 строка)
    lcd.print("arduino-tex.ru");           //  Выводим текст arduino-tex.ru, начиная с установленной позиции курсора
}                                          //
                                           //
void loop(){                               //
                                           //  Получаем время прошедшее после старта: 
    tim   =  millis()   / 1000;            //  Получаем общее количество секунд (максимум 4'294'967 сек ≈ 49,7 дней).
    tim_S =  tim        % 60;              //  Получаем секунды: остаток от деления всех секунд на минуту (60 сек).
    tim   = (tim-tim_S) / 60;              //  Получаем общее количество минут.
    tim_M =  tim        % 60;              //  Получаем минуты: остаток от деления всех минут на час (60 мин).
    tim   = (tim-tim_M) / 60;              //  Получаем общее количество часов.
    tim_H =  tim        % 24;              //  Получаем часы: остаток от деления всех часов на день (24 час).
    tim_D = (tim-tim_H) / 24;              //  Получаем общее количество дней.
                                           //  Выводим время прошедшее после старта: 
    if (millis()%1000<100){                //  Условие выполняется в течении 100 первых миллисекунд каждой новой секунды.
        delay(100);  lcd.setCursor(2, 2);  //  Устанавливаем курсор в позицию (0 столбец, 0 строка).
                     lcd.print("Days: ");  //  Выводим текст.
        if(tim_D<10){lcd.print( 0      );} //  Выводим 0 перед количеством дней.
                     lcd.print(tim_D   );  //  Выводим количество дней.
                     lcd.setCursor(0, 3);  //  Устанавливаем курсор в позицию (0 столбец, 1 строка)
                     lcd.print("Time: ");  //  Выводим текст.
        if(tim_H<10){lcd.print( 0      );} //  Выводим 0 перед количеством часов.
                     lcd.print(tim_H   );  //  Выводим количество часов.
                     lcd.print(':'     );  //  Выводим символ.
        if(tim_M<10){lcd.print( 0      );} //  Выводим 0 перед количеством минут.
                     lcd.print(tim_M   );  //  Выводим количество минут.
                     lcd.print(':'     );  //  Выводим символ.
        if(tim_S<10){lcd.print( 0      );} //  Выводим 0 перед количеством секунд.
                     lcd.print(tim_S   );  //  Выводим количество секунд.
    }                                      //
}                                          //

Выводим время прошедшее после старта на дисплей LCD1602 подключённый по шине I2C.

Если дисплей LCD 2004, LCD 1602 не отображает текст.

После того как вы всё сделали, подключили дисплей. Загрузили код. На дисплее могут не отображаться символы. Что может быть не так:

  • Если дисплей показывает чёрные прямоугольники или пустой экран – нужно отрегулировать яркость дисплея, это синий квадратный регулятор на задней стороне платы.
  • Если кроме чёрных прямоугольников и пустого экрана ничего не видно – меняем адрес в программе. Их всего два: 0x27 и 0x3F.
  • Если все равно не работает – проверяем подключение и повторяем сначала.

На этом урок про дисплеи LCD 2004, LCD 1602 заканчивается. В следующем уроке рассмотрим, какие символы есть в прошивке дисплея и как их вывести, а также создадим свои символы.

Появились вопросы или предложения, не стесняйся, пиши в комментарии!

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке.

]]>
#33. Motor shield l293d подключение. Пример кода для Arduino http://portal-pk.ru/news/311-motor-shield-l293d-podklyuchenie-primer-koda-dlya-arduino.html Константин Portal-PK 2021-06-13T16:24:20+03:00 Робототехника с каждым годом становиться все популярнее. И поэтому количество электроники с помощью которой можно реализовать роботизированную модель достаточно много. А если у вас нет опыта работы с электроникой, вам отлично подойдёт Motor shield на базе драйвера l293d. Шилд устанавливается на плату Arduino UNO.

На shield выведены контакты для подключения двигателей постоянного тока, шаговых двигателей и сервоприводов. Я уже делал проект с использованием данного Motor shield. У вас, наверное, возник вопрос. Если шилд такой простой, почему у меня мало Arduino проектов с его использование? Это связанно со сложностью расширения функционала проекта при использовании Motor shield l293d. Но обо всём по порядку.

Motor shield l293d

Технические параметры Motor shield l293d.

  • Напряжение питания двигателей: 5 — 36 В
  • Напряжение питания платы: 5 В
  • Допустимый ток нагрузки: 600 мА на канал
  • Максимальный (пиковый) ток нагрузки: 1,2 А на канал
  • Размер платы: 70х54х20 мм

Общие сведения о Motor shield L293D.

Motor shield построен на драйвере L293D, состоящим из двух H-мост (H-Bridge), с помощью которых можно управлять двумя постоянными двигателями или одним шаговым двигателем. Каждый канал рассчитан на 0.6 А с пиком 1.2 А. Так как на Motor shield установлено две микросхемы L293D, можно управлять сразу четырьмя двигателями постоянного тока, это позволяет использовать данный shield в разработке робот платформ. Так же, на shield установлен сдвиговый регистр 74HC595, который расширяет 4 цифровых контакта Arduino до 8 управляющих контактов двух микросхем L293D. Познакомиться подробнее со сдвиговым регистром 74HC595 можно в уроке: Урок 2 — Подключаем сдвиговый регистр 74НС595 к Arduino. «Бегущие» огни.

Питание Motor shield L293D


Питание Motor shield L293D:

  • Общий источник питания для Arduino и двигателей (максимальное напряжение 12 В) — можно использовать один источник питания, используется разъем DC на Arduino UNO или 2-х контактный разъем на Motor shield «EXT_PWR», так же необходимо установить перемычку «PWR».
  • Раздельный источник питания — рекомендуется отдельно питать Arduino и shield, для этого Arduino подключаем к USB, а двигатели подключаем к источнику постоянного тока, используя разъем «EXT_PWR». Необходимо убрать перемычку «PWR».

Внимание! Нельзя подавать питание на «EXT_PWR» выше 12 В, при установленной перемычке «PWR».

Выходные контакты двух микросхем L293D выведены по бокам shield с помощью 5-ти контактных винтовых клемм, а именно М1 , М2 , М3 и М4. К этим контактам подключается четыре двигателя постоянного тока и два шаговых двигателя.

Так же, на shield выведено два 3-х контактных разъема, к которым можно подключить два сервопривода.

Контакты, которые не используются Motor shield L293D:

Так как шилд устанавливается на Arduino UNO, есть контакты, которые не используются Motor shield и к ним можно подключить дополнительные компоненты. Это цифровые контакты D2 и D13 и аналоговые контакты A0-A5. Кроме этого на шилде можно распаять пины A0-A5 и подключаться к ним прямо на shield.

Подключение к Motor shield L293D двигателя постоянного тока.

Подключение к Motor shield L293D двигателя постоянного тока.

Для этого нам понадобятся следующие комплектующие:

Схема подключения двигателя постоянного тока к Motor shield.

Схема подключения двигателя постоянного тока к Motor shield.

Устанавливаем shield сверху Arduino, далее подключаем источник питания к клеммам «EXT_PWR», в примере используется источник питания на 12 В. Теперь подключаем двигатели к клеммам M1, M2, M3 или M4. В примере подключаем 2 двигателя постоянного тока к М4, М3.

Установка библиотеки «AFMotor.h»

Для удобной работы с Motor shield L293D, необходимо установить библиотеку «AFMotor.h». Заходим в Arduino IDE, открываем вкладку «Скетч -> Подключить библиотеку -> Управлять библиотеками…»

Установка библиотеки «AFMotor.h»

Откроется новое окно «Менеджер библиотек», в окне поиска вводим «Adafruit Motor Shield» и устанавливаем библиотеку.

«Adafruit Motor Shield» и устанавливаем библиотеку

Скетч управления двигателем постоянного тока с помощью Motor shield L293D.

#include <AFMotor.h>      // Подключаем библиотеку AFMotor
AF_DCMotor motor4(4);      // Указываем какому порту подключен двигатель (1 - 4)
AF_DCMotor motor3(3);      // Указываем какому порту подключен двигатель (1 - 4)
void setup()
{
  motor3.setSpeed(100);    // Начальная скорость вращения
  motor3.run(RELEASE);     // Останавливаем двигатель
  motor4.setSpeed(50);    // Начальная скорость вращения
  motor4.run(RELEASE);     // Останавливаем двигатель
}
void loop()
{
  /* Вращение двигателя вперед*/
  motor3.run(FORWARD);
  for (int i = 0; i < 255; i++) // Ускоряем двигатель от 0 до 255
  {
    motor3.setSpeed(i);    // Отправка скорости
    delay(10);            // Пауза
  }
  for (int i = 255; i != 0; i--) // Замедляем двигатель от 255 до 0
  {
    motor3.setSpeed(i);    // Отправка скорости
    delay(10);            // Пауза
  }
  /* Останавливаем двигатель*/
  motor3.run(RELEASE);
  delay(1000);            // Пауза
  /*Вращение двигателя назад*/
  motor4.run(BACKWARD);
  for (int i = 0; i < 255; i++) // Ускоряем двигатель от 0 до 255
  {
    motor4.setSpeed(i);    // Отправка скорости
    delay(10);            // Пауза
  }
  for (int i = 255; i != 0; i--) // Замедляем двигатель от 255 до 0
  {
    motor4.setSpeed(i);    // Отправка скорости
    delay(10);            // Пауза
  }
  /* Останавливаем двигатель*/
  motor4.run(RELEASE);
  delay(1000);            // Пауза
}

Описание кода:

Скетч начинается с подключения библиотеки «AFMotor.h», затем создаем объект «AF_DCMotor motor4(4)» в котором указываем номер порта двигателя (M1, M2, M3, M4). Для подключения второго двигателя «AF_DCMotor motor3(3)» и так далее.

#include <AFMotor.h>      // Подключаем библиотеку AFMotor
AF_DCMotor motor4(4);      // Указываем какому порту подключен двигатель (1 - 4)
AF_DCMotor motor3(3);      // Указываем какому порту подключен двигатель (1 - 4)

В блоке «setup» мы вызываем функции «setSpeed(speed)» в которой задаем скорость двигателя, от 0 до 255 и функцию «motor.run» направление вращения двигателя, где «FORWARD» — вперед, «BACKWARD» — назад, «RELEASE» — остановка.

  motor3.setSpeed(100);    // Начальная скорость вращения
  motor3.run(RELEASE);     // Останавливаем двигатель
  motor4.setSpeed(50);    // Начальная скорость вращения
  motor4.run(RELEASE);     // Останавливаем двигатель

Подключение сервопривода к Motor shield L293D.

Подключение сервопривода к Motor shield L293D.

Для этого нам понадобятся следующие комплектующие:

С помощью shield L293D можно управлять сервоприводами. На shield выведены 16-разрядные контакты Arduino 9 и 10, питание для сервоприводов подается от 5 вольтового стабилизатора Arduino, поэтому подключать дополнительное питание в разъем «EXT_PWR» не нужно.

Схема подключения сервопривода SG90S к Motor shield.

Схема подключения сервопривода SG90S к Motor shield.

Скетч управления сервопривода SG90S.

#include <Servo.h>    // Подключаем библиотеку Servo
Servo myservo;        // Создаем объект 
void setup() 
{
  myservo.attach(10); // Указываем к какому порту подключен вывод сервопривода
}
void loop() 
{
  for(int i = 0; i <= 180; i++)        // Увеличиваем угол от 0 до 180
  {
    myservo.write(i);                  // Передаем данные
    delay(15);                         // Пауза 
  }
  for(int i = 180; i>=0; i--)    // Уменьшаем угол от 180 до 0
  {
    myservo.write(i);              // Передаем данные
    delay(15);                       // Пауза 
  }
}

Так как используется стандартный вывод PWM, нет смысла использовать дополнительную библиотеку, воспользуемся стандартной библиотекой Servo.

#include <Servo.h>    // Подключаем библиотеку Servo
Servo myservo;        // Создаем объект

Урок по работе с сервоприводом можно почитать тут: Подключает servo-привод к arduino. Сервопривод + кнопка.

Подключение к Motor shield L293D шагового двигателя NEMO17.

Подключение к Motor shield L293D шагового двигателя NEMO17.

Для этого нам понадобятся следующие комплектующие:

В данном примере подключим шаговый двигатель NEMA 17, который рассчитан на 12 В (и выше) и делает 200 шагов на оборот. Итак, подключите шаговый двигатель к клеммам M3 и M4. Затем подключите внешний источник питания 12 В к разъему «EXT_PWR».

Схема подключения шагового двигателя Nemo17 к Motor shield L293D.

Схема подключения шагового двигателя Nemo17 к Motor shield L293D.

Скетч управления шаговым двигателем Nemo17 с помощью Motor shield L293D.

#include <AFMotor.h>                      // Подключаем библиотеку AFMotor
const int stepsPerRevolution = 200;       // Указываем количество шагов на 1 оборот двигателя

AF_Stepper motor(stepsPerRevolution, 2);  // Указываем что двигатель подключен к портам №2 (М3 - М4)

void setup()
{
  motor.setSpeed(10);                     // Скорость двигателя в минуту
}

void loop() {
  motor.step(100, FORWARD, SINGLE);
  motor.step(100, BACKWARD, SINGLE);

  motor.step(100, FORWARD, DOUBLE);
  motor.step(100, BACKWARD, DOUBLE);

  motor.step(100, FORWARD, INTERLEAVE);
  motor.step(100, BACKWARD, INTERLEAVE);

  motor.step(100, FORWARD, MICROSTEP);
  motor.step(100, BACKWARD, MICROSTEP);
}

Используем ту же библиотеку, что и в первом примере.

Описание кода:

Скетч начинается с подключением библиотеки «AFMotor.h». Во второй строке создаем объект «AF_Stepper motor(48, 2)» где указываем количество шагов на оборот и номер порта.

#include <AFMotor.h>                      // Подключаем библиотеку AFMotor
const int stepsPerRevolution = 200;       // Указываем количество шагов на 1 оборот двигателя

В разделе настройки, функцией «motor.setSpeed(10);» устанавливает скорость двигателя, где «10» количество оборотов в минуту.

motor.setSpeed(10);

В разделе цикла программы, мы просто вызываем две функции для управления скоростью и направлением вращения двигателя.

motor.step(100, FORWARD, SINGLE); 
motor.step(100, BACKWARD, SINGLE);
  • «100» — это сколько шагов, необходимо сделать.
  • «FORWARD» и «BACKWARD» — направление вращение двигателем.
  • «SINGLE» — активация одной обмотки двигателя для совершения шага.
  • «DOUBLE» — активация двух обмоток двигателя, что обеспечивает больший вращающий момент
  • «INTERLEAVE» — применение ШИМ для управления шаговым двигателем двигателем.

Для начинающего Ардуинщика Motor shield L293D

Вывод по использованию Motor shield L293D.

Для начинающего Ардуинщика Motor shield L293D позволит реализовать роботизированную модель. Но реализовать более серьёзные проекты не получится. Так как свободных pin для подключения остается не много. Что еще мне не нравится в данном shield это то, что пины для shield заняты всегда, даже если мы подключили 2 двигателя постоянного тока. А другая пара подключения свободна, пины Arduino все равно будут заняты, и мы не сможем их использовать. Это наглядный пример того, что использования данного шилда не является универсальным и гибким решением.

Появились вопросы или предложения, не стесняйся, пиши в комментарии!

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке.

]]>
Проект на дисплее Nextion и Arduino. 8 уроков Nextion по реализации проекта http://portal-pk.ru/news/310-proekt-na-displee-nextion-i-arduino-8-urokov-nextion-po.html Константин Portal-PK 2021-06-07T19:31:39+03:00 Недавно реализовал проект на дисплее Nextion и Arduino. И на основе данного проекта сделал 8 уроков, в которых поэтапно рассказываю о возможностях сенсорного экрана Nextion.

Управление подсветкой на адресных светодиодах WS2812 с дисплея Nextion

Проект позволяет управлять подсветкой на адресных светодиодах, что дает возможность использовать большое количество световых эффектов. Библиотека, которую использую в проекте, имеет более 50 предустановленных эффектов. Как ими пользоваться рассказываю в уроках. Также можно самостоятельно сделать дополнительные эффекты и управлять светом с помощью сенсорного дисплея Nextion.

Урок Nextion дисплей на русском.

Урок 1 - Скачать и установить Arduino IDE, Nextion Editor

Урок 2 - Подготовка графики для дисплея Nextion в Inkscape

Урок 3. Кнопка Dual state Nextion Включаем выключаем подсветку.

Урок 4 Button Nextion Управление яркостью, переключение режимов

Урок 5. Передаем информацию с Arduino на дисплей Nextion

Урок 6. Клавиатура дисплей Nextion. Timer, перенаправление на страницы.

Бонусный урок.

Урок 8. Slider Nextion - управление яркостью подсветки (обзор)

Видео урок по работе со слайдером в Nextion Editor доступен подписчикам на сайте boosty или YouTube.

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

Понравилась новость Проект на дисплее Nextion и Arduino. 8 уроков Nextion по реализации проекта? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
#32. Подключение термопары К-типа к Arduino с помощью модуля max6675. http://portal-pk.ru/news/309-podklyuchenie-termopary-k-tipa-k-arduino-s-pomoshchyu-modulya.html Константин Portal-PK 2021-06-04T10:45:08+03:00 Для измерения высоких температур обычные датчики, такие как DS18B20, термистор – не подойдут. Высокие температуры можно измерять с помощью термопары. Но как ее подключить к Arduino? Для решения данной проблемы есть недорогой модуль max6675 который позволяет преобразовать аналоговый сигнал в цифровой. Полученное цифровое значение считывает Arduino, таким образом, мы получаем показание с термопары К-типа. А сейчас подробно разберемся, что такое термопара К-типа и как подключить модуль max6675 к Arduino.

подключить модуль max6675 к Arduino

Что такое термопар. Характеристики термопары K-типа.

Термопара – это термоэлектрическое устройство замкнутой цепи, чувствительное к температуре, которое состоит из двух проводников, выполненных из разнородных металлов. Электрический ток создается, когда температура на одном конце или спае, отличается от температуры на другом конце. Это явление носит название эффект Зеебека, который является основой измерения температуры с помощью термопар.

Что такое термопар. Характеристики термопары K-типа.

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

Термопары K-типа (хромель – алюмель).

Хромель (Chromel) – это сплав, состоящий на 90% из никеля и на 10% из хрома, а Алюмель (Alumel) – это сплав, содержащий 95% никеля, 2% марганца, 2% алюминия и 1% кремния. Термоэлектрод из сплава Chromel имеет положительный потенциал относительно термоэлектрода из сплава Alumel.

Термопары K-типа

Это недорогие термопары, их диапазон измеряемых температур составляет от -270°C до +1372°C и характеристика относительно линейна. Такие термопары можно использовать в постоянно окислительных или нейтральных средах.

Корпус термопары, который используется в нашем примере, рассчитан на температуру до 600 °C, значит и измерения необходимо производить в диапазоне от 0 до 600 °С.

Описание модуля max6675.

Описание модуля max6675.

Модуль преобразователя MAX6675 поставляется как вместе с термопарой, так и отдельно. Немного расскажу о самом модуле, на котором установлена одна микросхема MAX6675ISA фирмы Maxim Integrated Products конденсатор и пару разъемов. Микросхема имеет 12 битный АЦП, SPI интерфейс и точность микросхемы 0,25°C (это точность самой микросхемы, у термопары точность другая). Если необходима более подробная информация о микросхеме MAX6675, можете воспользоваться документаций, скачать можно внизу статьи.

Характеристики модуля max6675:

  • Тип преобразователя: аналогово-цифровой (АЦП) с компенсацией холодного спая;
  • Разрядность преобразователя: 12 бит;
  • Шаг измерения: 0,25°C;
  • Точность: 1,5°C;
  • Интерфейс подключения к контроллеру: SPI;
  • Напряжение питания: 3 – 5,5 В постоянного тока;
  • Габариты модуля: 32 x 15 x 14 мм;
  • Тип термопары: К (хромель-алюмелевая);
  • Диапазон измеряемой температуры: 0 – +600°С;
  • Диаметр резьбы термопары: 6 мм;
  • Длина резьбы термопары: 13 мм;
  • Длина кабеля термопары: 50 см;
  • Вес комплекта: 25 г.

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

Назначение контактов:

  • GND – «-» , питание модуля;
  • VCC – «+», питание модуля;
  • SCK –тактовые импульсы;
  • CS – вывод интерфейс SPI;
  • SO – вывод интерфейс SPI.

MAX6675 подключение к Arduino.

Для урока понадобится:

Схема подключения MAX6675 к Arduino UNO.

Схема подключения MAX6675 к Arduino UNO.

Подключаем питание, выводы VCC и GND (модуля MAX6675) подключаем к выводам +5В и GND (Arduino). Теперь можно подключить интерфейс ISP, для этого выводы SCK, CS, SO (модуля MAX6675), подключаем к выводам 2, 3, 4 (Arduino).

Установка библиотеки MAX6675.

Для работы с модулем необходимо установить библиотеку MAX6675. Для этого запускаем программу Arduino IDE и выбираем «Скетч -> Подключить библиотеку -> Управлять библиотеками…»

 установить библиотеку MAX6675

В открывшемся окне ищем «MAX6675» и устанавливаем библиотеку. Сейчас можно приступить к коду для Arduino.

 ищем «MAX6675» и устанавливаем библиотеку

Скетч MAX6675 + Arduino считывания показаний с термопары и вывод значений в монитор порта.

Данный пример кода просто считывает показание с термопары и выводит значение в монитор порта.

// Подключаем библиотеку 
#include "max6675.h"

int thermoDO = 4; // Указываем к какому пину подключен SO
int thermoCS = 5; // Указываем к какому пину подключен CS
int thermoCLK = 6; // Указываем к какому пину подключен SCK

MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);

void setup() {
  Serial.begin(9600); // Открытие последовательного порта на скорости 9600

  Serial.println("MAX6675 test");
   // Отправка текста
  delay(500);
}

void loop() {
  
   Serial.print("C = "); // Отправка текста в последовательный порт
   Serial.println(thermocouple.readCelsius()); // Чтение и отправка температуры в последовательный пор

   delay(1000);
}

Вот такое значения температуры с термопары мы увидим в мониторе порта.

Вот такое значения температуры с термопары мы увидим в мониторе порта.

В данном уроке мы рассмотрели основы работы с термопарой и модулем MAX6675. У меня есть несколько реализованных проектов с использованием термопары, вот один из нихАвтоматизация вакуумного пресса на Arduino и дисплее Nextion.

В следующих Arduino Уроках рассмотрим, как автоматически регулировать температуру с помощью IRF520 MOSFET.

В следующих Arduino Уроках рассмотрим, как автоматически регулировать температуру с помощью IRF520 MOSFET.

Появились вопросы или предложения, не стесняйся, пиши в комментарии!

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке.

]]>
Вентиляция и кондиционирование производственных помещений http://portal-pk.ru/news/308-ventilyaciya-i-kondicionirovanie-proizvodstvennyh.html Константин Portal-PK 2021-05-05T18:57:04+03:00 Вентиляция - важнейший элемент в производственных помещениях. Ведь не только для материала, хранящегося на складах, нужно поддерживать приемлемую влажность и температуру окружающей среды, но и для людей, работающих на производстве, должны создаваться приемлемые условия для труда.

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

Оптимальным уровнем влажности для складских помещений является примерно 50-70 %, а температура должна поддерживаться в среднем в диапазоне от -10 до 30 градусов. А для работников влажность 40-60 % и температура 23-25 градусов соответственно. Не стоит забывать и о содержании углекислого газа в воздухе. Ведь если в помещениях переизбыток углекислого газа, продуктивность работников падает.

Оптимальным уровнем влажности для складских помещений является примерно 50-70 %

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

Кондиционеры Раменское, Жуковский, Люберцы и другие регионы в Московской области


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

Правильный выбор систем кондиционирования и вентиляции

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

Понравилась новость Вентиляция и кондиционирование производственных помещений? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Раскрой гофрокартона на ЧПУ. http://portal-pk.ru/news/307-raskroi-gofrokartona-na-chpu.html Константин Portal-PK 2021-04-26T19:08:43+03:00 Сегодня мы с вами поговорим об упаковочных материалах и способах их резки. Упаковочные материалы - неотъемлемая часть жизни человека. Но в связи с тем, что большинство упаковок изготавливаются из пластмассы, наша с вами планета очень сильно загрязняется. Поэтому стоит бережнее относиться к выбору упаковок.

Из него изготавливается: гофротара, гофроящики и гофрокоробки.

На рассмотрении у нас такой материал, как гофрокартон. Из него изготавливается: гофротара, гофроящики и гофрокоробки. Это экологически чистый материал, который не загрязняет окружающую среду.

Гофрокартон можно резать несколькими способами:

  • При помощи ЧПУ плоттера. Плоттерная резка достаточно популярна, позволяет за короткий срок вырезать изделия в штучном экземпляре. Бюджетная, так как плоттер относительно недорогой станок. Плоттерная резка оставляет гладкие края, отсутствуют какие-либо заусенцы, по сравнению с ручной резкой.

При помощи ЧПУ плоттера. Плоттерная резка достаточно популярна

  • При помощи ЧПУ лазерного гравера. Данный способ нарезания гофрокартона выгоден при производстве большого количества одинаковых изделий, но в то же время сам станок обходится в большую стоимость. В качестве резака используется лазер, прожигающий гофрокартон, вследствие чего края изделия остаются ровными.

При помощи ЧПУ лазерного гравера. Данный способ нарезания гофрокартона

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

Понравилась новость Раскрой гофрокартона на ЧПУ? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Байкал русские микропроцессоры http://portal-pk.ru/news/306-baikal-russkie-mikroprocessory.html Константин Portal-PK 2021-04-23T13:45:03+03:00 Байкал Электроникс - российская компания, которая занимается разработкой и производством процессоров. Сегодня обсудим один из их продуктов. Да, это немного не по нашей теме, мы не затронем темы Arduino. Но процессор, который будет рассмотрен сегодня, может использоваться как управляющее устройство станков и принтеров.

Байкал Электроникс - российская компания

Поговорим же мы о процессоре Baikal-T1. Позиционируется же он как “first russian processors” предназначенный для использования в сетевых устройствах, таких как маршрутизаторы, а также для устройств промышленной автоматики.

first russian processors

На борту Baikal-T1 два 32-х битных процессорных ядра P5600, и изготовлен по 28 нм техпроцессу. Имеет производительность в 4 гигафлопса, что вполне будет достаточно для всяческих сетевых устройств и станков. Имеет всего два ядра и работает на частоте 1.2 МГц, что делает его энергоэффективным, с энергопотреблением в 5 Вт.

На данный момент уже имеется множество устройств, работающих под управлением Baikal-T1. Буквально в позапрошлом году был выпущен универсальный маршрутизатор NSG-3060. А самым первым продуктом, была система управления ЧПУ станками «Ресурс-30».

система управления ЧПУ станками «Ресурс-30»

У процессоров есть огромный потенциал, поэтому будем ждать, когда все больше и больше устройств будет работать на отечественных процессорах от компании Байкал Электроникс.

Понравилась новость Байкал русские микропроцессоры? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Проекты самодельных ЧПУ станков. http://portal-pk.ru/news/305-proekty-samodelnyh-chpu-stankov.html Константин Portal-PK 2021-04-19T08:00:29+03:00 Станки на протяжении многих лет облегчают человеку работу. А с появлением числового программного управления, производство можно полностью автоматизировать. Но вот цена у заводских решений достаточно велика, поэтому мы сегодня с вами поговорим о том, какие ЧПУ станки можно сделать своими руками.

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

Для управления ЧПУ изначально купил комплект Mega2560 R3 + RAMPS 1.4+ DVR8825 + 2004 LCD .

Маленькое отступление. Не забывайте, при работе с ЧПУ станками не стоит пренебрегать техникой безопасности. Ведь “Охрана труда” была написана не просто так. Не стоит забывать о защите глаз, при работе с лазером. И будьте аккуратнее с движущимися частями станков.

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

собрать ЧПУ плоттер

Следующий на очереди - лазерный ЧПУ гравер. Еще один станок, который прост в сборке. Но он уже не рисует, а выжигает линии, создавая из них рисунки. А если использовать достаточно мощный лазер, можно и “вырезать” какие-либо детали.

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

Вот такой самодельны фрезерный ЧПУ станок с дисплеем получился.

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

Понравилась новость Проекты самодельных ЧПУ станков? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Установка Arduino IDE в Windows 10. http://portal-pk.ru/news/304-ustanovka-arduino-ide-v-windows-10.html Константин Portal-PK 2021-04-14T11:11:43+03:00 Для работы с Arduino требуется программа Arduino IDE, сегодня поговорим об ее установки в Windows 10. Назовем плюсы и минусы разных способов, и обсудим вопрос почему тормозит компьютер.

Есть 3 способа, как установить Arduino IDE в Windows 10:

  • Самый простой и желательный способ установки. Заключается он в том, что Arduino IDE будем устанавливать через установщик. На официальном сайте находим кнопку “WINDOWS Win 7 and newer” и нажимаем на нее, у нас скачивается приложение, открываем его и устанавливаем как любое приложение, выбирая место установки.

Установка Arduino IDE через .zip файл

  • Установка Arduino IDE через .zip файл. На официальном сайте нужно найти кнопку “WINDOWS ZIP file” нажимаем на нее, ждем скачивание, открываем архив через WinRAR, либо же другой архиватор, устанавливаем, выбирая место установки. Но в этом способе придется вручную устанавливать драйвера. Чтобы установить драйвера, переходим по пути “Пуск -> Панель управления -> Оборудование”.

Находим Arduino Leonardo

Находим Arduino Leonardo, и выполняем поиск драйверов “на моем компьютере”, папку, в которой находятся драйвера, мы установили вместе с архивом, находим ее и устанавливаем драйвера.

установить Arduino IDE можно из магазина Windows

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

Установка и настройка Arduino IDE.

Arduino и операционная система Windows вам необходимо поставить дополнительный драйвер ch340 driver

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

Установка драйвера ch340 для Windows.

  1. Скачайте драйвер.
  2. Распакуйте архив
  3. Запустите исполнительный файл CH341SER.EXE
  4. В открывшемся окне нажмите кнопку Install
  5. На этом установка завершена

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

На плате увидим мигающий светодиод. Почему может тормозить компьютер? Это может быть связано с несколькими вещами. Системный блок в пыли и перегревается. Может не хватать “железа” для работы с Windows 10. Либо же на вашем компьютере много вирусов. Следите за своими аппаратами и “лечите” их вовремя.

Понравилась новость Установка Arduino IDE в Windows 10? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Аренда микроавтобусов и экскурсии в городе Санкт-Петербург. http://portal-pk.ru/news/303-arenda-mikroavtobusov-i-ekskursii-v-gorode.html Константин Portal-PK 2021-04-12T16:58:23+03:00 Санкт-Петербург является одним из самых красивых городов России. Обладает большим количеством достопримечательностей со своей историей. Из-за своих размеров, город будет интересен как туристам, так и местным жителям.

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

Аренда микроавтобусов и экскурсии в городе Санкт-Петербург.

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

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

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

Галант организовывает рейсы из Санкт-Петербурга в ближайшие города Финляндии

Давно хотели побывать в Финляндии, но не знали как добраться? Галант организовывает рейсы из Санкт-Петербурга в ближайшие города Финляндии, а во время Рождественских и школьных каникул, действуют праздничные скидки. Это хороший повод отправиться всей семьей на отдых.

А если же вы переезжаете, можете арендовать Грузо-пассажирское такси, которое поможет вам в перевозке крупногабаритных предметов. Доставка осуществляется на автомобиле IVECO Daily.

А если вы являетесь обладателем Hyundai Grand Starex, обращаясь в Галант, вы можете провести техническое обслуживание, где вам заменять все расходники по выгодной цене, а одним из преимуществ является то, что обслуживание производится только оригинальными запчастями. За обслуживанием вы можете обратиться по адресу наб.Обводного канала д.209.

Заказать подачу авто

Заказать подачу авто, вы можете на их официальном сайте, как онлайн, на сайте Miniventaxi.ru, так и по номеру телефона +7(911) 234-99-99. Подача автомобиля осуществляется в течение получаса.

]]>
Гнутый ходовой винт из Китая для ЧПУ. Что делать? http://portal-pk.ru/news/302-gnutyi-hodovoi-vint-iz-kitaya-dlya-chpu-chto-delat.html Константин Portal-PK 2021-04-11T15:24:41+03:00 Недавно решил собрать себе новый ЧПУ фрезерный станок на ходовых винтах. Заказывал их из Китая. Пришло относительно быстро, но еще с самого начала все пошло не по плану. По ошибке продавца мне пришел винт не с тем шагом, но благо выплатили компенсацию за ошибку.

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

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

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


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

Понравилась новость Гнутый ходовой винт из Китая для ЧПУ. Что делать? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Автоматизация газовых котлов на Arduino. http://portal-pk.ru/news/301-avtomatizaciya-gazovyh-kotlov-na-arduino.html Константин Portal-PK 2021-04-10T19:00:48+03:00 Каждый кто живет в квартире или в доме с газовой системой отопления, на газовых котлах, задумывался хоть раз, а как же можно автоматизировать систему отопления? Сегодня мы поговорим о том, что можно было бы сделать на Arduino, чтобы облегчить себе жизнь. Какие бы функции могла выполнять Arduino.

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

Начнем с самого простого, что можно было бы сделать. Автоматическое включение котла по разнице температур. Как это все могло бы работать. Допустим, нормальная температура в помещении должна составлять +23 градуса, и не должна опускаться ниже +20 градусов. Реализация достаточно проста, устанавливается один датчик в доме и настраивается уровень температур, при которых Arduino будет либо включать котел, либо отключать его.

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

К Arduino можно добавить экран и выводить температуру в помещении.

К Arduino можно добавить экран и выводить температуру в помещении. Добавив еще парочку датчиков, мы уже сможем контролировать и температуру горячей воды, время работы котла в режиме отопления. Можно установить датчик температуры на улице и настроить включение котла, при низкой температуре на улице, а не чтобы он включался при температуры улице +18.

Еще можно придумать множество способов автоматизировать газовые котлы, все зависит от вашей фантазии.

Понравилась новость Автоматизация газовых котлов на Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
MP3 плеер на Arduino. http://portal-pk.ru/news/300-mp3-pleer-na-arduino.html Константин Portal-PK 2021-04-09T19:16:14+03:00 Прослушивание музыки для современного человека является неотъемлемой частью его жизни. Пока едем в машине или в общественном транспорте, мы слушаем музыку. Едем с работы и тоже слушаем музыку. Когда прогуливаемся по торговым центрам, на прогулке, в тренажерном зале. Музыка нас окружает везде.

Эти комплектующие пригодятся при сборе часов с сенсорным дисплеемПоговорим сегодня о MP3 плеере и сделаем его своими руками на Arduino. Это будет достаточно простой плеер с небольшим количеством функций, но которых будет достаточно для домашнего использования. Для изготовления его нам понадобится: Arduino UNO или Arduino NANO, DFPlayer Mini в который мы будем вставлять флешку, динамик, несколько резисторов на 10 кОм, парочка кнопок, а также плата, на которой мы будем это все собирать.

rduino UNO или Arduino NANO, DFPlayer Mini

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

Для оценки качество звучания, можете послушать данный трек, который может вам понравится «VAVAN Не корона бро».

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

Arduino у нас будет выполнять роль переключающего устройства, будет поддерживать связь с DFPlayer Mini.

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

Понравилась новость MP3 плеер на Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Технологии печати домов на 3D принтере. http://portal-pk.ru/news/299-tehnologii-pechati-domov-na-3d-printere.html Константин Portal-PK 2021-04-09T14:46:42+03:00 Технологии 3D печати с каждым годом только улучшаются и модернизируются. Сейчас уже у каждого 10-15 человека есть свой 3D принтер. И вот относительно недавно только говорили все, о том, что в скором будущем дома будут строить роботы за нас. Можно считать, что это самое будущие наступило.

Сегодня поговорим о печати домов на 3D принтере. Как и при любой другой печати, для постройки дома требуется 3D модель, а вместо пластика, как мы все привыкли, используют быстротвердеющий бетон.

Сегодня поговорим о печати домов на 3D принтере.

Совсем скоро технологии 3D печати распространятся на большую часть регионов, и дома под ключ спб, мск, рнд, екб станут чем-то обычным и много чего будет построено таким способом.

Строительные принтеры разнообразны по своей конструкции, но почти все они похожи на своих младших братьев. Различают XYZ-принтеры, Дельта, D-Shape и роботизированные манипуляторы.

XYZ-принтеры.

XYZ-принтеры.

Самая распространённая технология печати, среди младших моделей. Принтер представляет собой раму с тремя осями, и одной печатающей головкой, закрепленной на оси Z. Используются для печати внутренних стен и для изготовления домов по частям.

Дельта.

Дельта.

Еще один вид принтера, берущий свои начала от домашних 3D принтеров. Печатающая головка закреплена на тонких штангах, что позволяет печатать сложные и необычные формы.

D-Shape.

D-Shape в отличие от предыдущих принтеров

D-Shape в отличие от предыдущих принтеров, печатает порошковым материалом, который затем пропитывается связующим веществом.

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

Понравилась новость Технологии печати домов на 3D принтере? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Игра мафия на Arduino. http://portal-pk.ru/news/298-igra-mafiya-na-arduino.html Константин Portal-PK 2021-04-08T10:53:33+03:00 Недавно мы с друзьями собрались большой компанией, все прекрасно общались между собой и веселились. Кто-то из друзей предложил сыграть в мафию. Я помнил, что у меня где-то были карты, но так их и не нашел. Поэтому я не придумал ничего лучше, кроме как сделать выдачу ролей на Arduino.

Давайте сначала разберемся, что такое мафия и что нам нужно от Arduino. Мафия - карточная игра, в которой, как минимум, должны быть:

  • Шериф,
  • Комиссар,
  • Лекарь,
  • Мафия,
  • Мирные жители.

А так как эта игра очень увлекательная, наверняка кто-то из компании может проголодаться, поэтому о еде нужно подумать заранее.

выполнена на Arduino, модуле KY-009 RGB

Если говорить вкратце, задача мафии убить всех, а мирные должны убить, либо исключить мафию. Вся наша игра будет выполнена на Arduino, модуле KY-009 RGB, парочке тактовых кнопок, аккумулятора и DC-DC повышающего преобразователя.

Обозначим цвета для каждой из ролей:

  • Шериф -синим цветом.
  • Комиссар - фиолетовым.
  • Лекаря - белым.
  • Мафии - красный.
  • Мирные жители будут зеленого цвета.

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

что такое мафия и что нам нужно от Arduino

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

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

светодиод цветом роли

Можно модернизировать эту схему и добавить в нее множество всего, экспериментируйте и удачной вам игры!

Понравилась новость Игра мафия на Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Авиамодели с управлением на Arduino. http://portal-pk.ru/news/297-aviamodeli-s-upravleniem-na-arduino.html Константин Portal-PK 2021-04-07T10:28:08+03:00 Наверняка каждый из нас запускал машинку на радиоуправлении. Уверен, что вам знакомо это чувство, когда первые минут 10 этот процесс является увлекательным, а дальше это все наскучивает. У меня есть для вас решение, которое не скоро вам наскучит.

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

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

Управлять всем будет Arduino Pro Mini, между пультом и моделькой связь будет поддерживаться с помощью двух модулей NRF24L01. Понадобится и электродвигатель с винтом. Питаться все может от двух аккумуляторов (один на модель, другой в пульт), со стабилизацией напряжения. Понадобится парочка сервоприводов, для управления рулями высоты и поворота. Парочка джойстиков для пульта.

Управлять всем будет Arduino Pro Mini

Хотели бы полюбоваться видами свысока? Вас интересовал полет на воздушном шаре в Москве цена его? Теперь в запросто можете полетать возле своего дома. Правда у данной самоделки есть маленький недостаток, дальность полета всего 20-25 метров.

полет на воздушном шаре в Москве

Данная тема позволяет вашей фантазии разгуляться. Если же использовать ESP32-CAM, то мы уже получим самолетик с камерой, а изображение можно выводить на телефон.

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

Понравилась новость Авиамодели с управлением на Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Необычные материалы для DIY. Из аптеки. http://portal-pk.ru/news/296-neobychnye-materialy-dlya-diy-iz-apteki.html Константин Portal-PK 2021-04-03T19:23:07+03:00 В самоделках очень часто используются предметы из быта, это неотъемлемая часть некоторых проектов. Сегодня мы с вами разберем, какие же материалы из аптеки можно использовать для своих самоделок, рассмотрим несколько примеров их использования.

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

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

Из шприца на 20 мл выходят хорошие корпуса и холдеры для аккумуляторов 18650.

Из шприца на 20 мл выходят хорошие корпуса и холдеры для аккумуляторов 18650. Диаметр шприца позволяет надежно установить внутрь аккумулятор. Немного подрезаем корпус, срезаем часть поршня, устанавливаем контакты и у нас выходит самодельный холдер. Это прекрасное решение, если ваша самоделка работает от аккумуляторов.

Достаточно часто в автоматических системах полива используется капельница.

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

материалы из аптеки можно использовать для своих самоделок


Понравилась новость Необычные материалы для DIY. Из аптеки? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Создание графики в Inkscape для Arduino проектов и ЧПУ. http://portal-pk.ru/news/295-sozdanie-grafiki-v-inkscape-dlya-arduino-proektov-i-chpu.html Константин Portal-PK 2021-04-03T07:26:11+03:00 Inkscape — это универсальное приложение, позволяющее создавать разнообразную графику для самодельных ЧПУ плоттеров, гравировальных и фрезерных станков на Arduino. Освоить данное приложение может каждый.

графику для самодельных ЧПУ плоттеров, гравировальных и фрезерных станков на Arduino

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

Inkscape позволяет: преобразовывать растровое изображение в векторное, разработка дизайна рекламы

Как и говорилось ранее, мы можем преобразовывать картинки в графику, а затем использовать ее для работы со станками. Так же в Inkscape можно создавать и свои изображения, например для своего недавнего проекта, в котором я создавал экраны для дисплея Nextion. Я рассказывал и показывал, как просто и быстро можно создать кнопки и графическое оформление для дисплея.

Как и говорилось ранее, мы можем преобразовывать картинки в графику

Скачать и установить приложение вы можете с официального сайта Inkscape, для этого в любой поисковой системе, в моем случае Яндекс, вбиваем “Inkscape” и переходим по переходим по первой ссылке.

название программы «Inkscape». Переходим на сайт разработчика Inkscape.org. В разделе “Download” выбираем операционную систему и ее битность. И устанавливаем, как и любую другую программу.

На сайте переходим в раздел «Download».

Так как Inkscape полностью бесплатное приложение, вы и сами можете попробовать в нем что-то нарисовать, либо можете использовать его в своих проектах.

Понравилась новость Создание графики в Inkscape для Arduino проектов и ЧПУ? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Где взять качественную музыку для видео на Youtube? http://portal-pk.ru/news/294-gde-vzyat-kachestvennuyu-muzyku-dlya-video-na-youtube.html Константин Portal-PK 2021-03-27T07:39:06+03:00 Зачастую, хорошую и качественную музыку достаточно проблематично найти, я перепробовал множество сервисов по транслированию музыки онлайн. В конечном итоге остановился на SoundCloud.

SoundCloud хорошая стриминговая платформа

Если же вы так же, как и я, увлекаетесь записью видеороликов на Youtube про Arduino или самодельные станки, либо же на другую тематику, наверняка сталкивались со сложностями в поиске музыки для своего контента. SoundCloud хорошая стриминговая платформа для прослушивания музыки, так же вы можете и сохранять свои треки на ней, либо же скачивать музыку. Используя музыку в своих видео, вы способствует продвижению саундклауд. Ведь в большинстве случаев именно музыкальное сопровождение влияет на смотрящего, оно и определяет настрой и характер видео.

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

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

SoundCloud не имеет ограничений, во время прослушивания музыки вы не встретите рекламы.

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

Понравилась новость Где взять качественную музыку для видео на Youtube? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Сложности установки конечных выключателей на 2 осевой ЧПУ на Arduino. http://portal-pk.ru/news/293-slozhnosti-ustanovki-konechnyh-vyklyuchatelei-na-2-osevoi.html Константин Portal-PK 2021-03-24T11:23:36+03:00 При установке конечных выключателей на самодельные фрезерные ЧПУ или другие 3-х осевые станки не возникает никаких проблем, что не скажешь про 2-х осевые, такие как лазерно-гравировальные станки или ЧПУ плоттеры.

Припаиваем провода и устанавливаем концевые выключатели на заранее подготовленные фанерки.Связано это с тем, что прошивка GRBL по умолчанию сконфигурирована для работы с трех осевым ЧПУ станком.

В прошивке «grbl 1.1» это 105 строка.Поэтому при установке конечных выключателей на 2-х осевые станки у вас будет выдавать ошибку. Ошибка же эта возникает по одной причине. GRBL первым делом ищет конечный выключатель по оси Z, что для нас критично. Чтобы исключить ось Z из поиска, необходимо подправить файл конфигурации прошивки «config.h». Затем установить драйвер ch340 и загрузить GRBL в Arduino UNO.

Запустите исполнительный файл CH341SER.EXEВсе эти действия достаточно несложные и каждый сможет выполнить сам. В итоге получается рабочий 2-х осевой станок с конечными выключателями и прошивкой для них. А файлы для скачивания и более подробные инструкции вы можете найти в моей статье: Установка и настройка конечных выключателей на 2 осевой ЧПУ станок – GRBL.

получается рабочий 2-х осевой станок с конечными выключателями

Понравилась новость Сложности установки конечных выключателей на 2 осевой ЧПУ на Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Микроконтроллер и микропроцессор, в чем их разница? http://portal-pk.ru/news/292-mikrokontroller-i-mikroprocessor-v-chem-ih-raznica.html Константин Portal-PK 2021-03-24T11:09:49+03:00 Если вы занимаетесь самоделками, уверен, что у вас когда-либо возникал вопрос, а в чем же разница микропроцессора и микроконтроллера, об этом мы и поговорим.


Микроконтроллер - микросхема, в ее состав входят процессор, ОЗУ и ПЗУ, устройства ввода/вывода.

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

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


Микропроцессор - кардинально отличается от микроконтроллера.

Микропроцессор

Микропроцессор - кардинально отличается от микроконтроллера. Состоит из арифметико-логического устройства, запоминающих устройств, блока синхронизации и управления, регистра, шины. Но, к микропроцессору так же понадобиться подключить и ОЗУ с ПЗУ, устройства ввода/вывода и интерфейсы. Все это делает его более дорогим и большим, по сравнению с микроконтроллерами, но и вычислительной мощи у микропроцессора во много раз больше. Применяются же они в большей части специализированной и бытовой электроники.Микропроцессор

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

Понравилась новость Микроконтроллер и микропроцессор, в чем их разница? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Для чего нужен WiFi роутер в проектах на ESP8266 и ESP32. http://portal-pk.ru/news/291-dlya-chego-nuzhen-wifi-router-v-proektah-na-esp8266-i-esp32.html Константин Portal-PK 2021-03-23T15:06:53+03:00 Хотелось бы рассказать о важности сети, при работе с модулями ESP8266 и ESP32. Модули данной серии позволяют построить множество проектов, направленных на автоматизацию некоторых процессов. Связь с ними поддерживается через Wi-Fi, что позволяет общаться с устройствами как в локальной сети, так и на большом расстоянии от них через интернет.

На модулях ESP8266 и ESP32 можно сделать устройства полива на даче, работающие от аккумуляторных батарей и сети.

Рассмотрим такой вариант. На модулях ESP8266 и ESP32 можно сделать устройства полива на даче, работающие от аккумуляторных батарей и сети. В связи с тем, что в некоторых краях довольно часто отключают электричество, вы можете полностью потерять связь с устройствами. Решением данной проблемы может стать использование Wi-Fi роутера с сим картой и аккумулятором. Можно использовать хорошее заводское решение: ZTE MF920ru с Антенной ShopCarry M2 на магните переносной роутер WiFi под сим карту 3G 4G.


ZTE MF920ru с Антенной ShopCarry M2 на магните, это переносной WiFi роутер под сим карту 3G/4G

Данный Wi-Fi роутер позволит вам поддерживать связь с вашими устройствами, даже при отключенном свете.

Данный Wi-Fi роутер позволит вам поддерживать связь с вашими устройствами, даже при отключенном свете.

Разберем ситуацию, в которой у вас простой роутер. Устройства полива и датчики питаются от аккумуляторных батарей и сети, и вдруг выключается свет, и теряется связь с устройствами, так как ваш роутер питался от розетки и не имел доп. источника питания. И вот уже следующий день, прогноз погоды показывает +30, а полить растения вы не можете, не имеете связи с вашими устройствами, свет до сих пор не включили. Было бы обидно так потерять растения, когда их сжигает солнце.

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

Понравилась новость Для чего нужен WiFi роутер в проектах на ESP8266 и ESP32? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Что нужно учитывать при постройке мастерской для хобби http://portal-pk.ru/news/290-chto-nuzhno-uchityvat-pri-postroike-masterskoi-dlya.html Константин Portal-PK 2021-03-19T08:25:10+03:00

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

Но так получается, что электроника и станки в общем очень требовательны к месту, где они располагаются. Температура в помещении должна находиться в диапазоне от +5 до +35. А самым главным фактором, который оказывает большое воздействие на металлические детали и электронику станков, является влажность, она не должна быть выше 75%. Влага в помещение может поступать с земли и через стены, благодаря геотекстилю можно избавиться от данной проблемы. Главным поставщиком геотекстиля в СПБ является компания МиК, со всем ассортиментом можете ознакомиться на их сайте компании. Геотекстиль не позволяет задерживаться воде на поверхности, а также очень хорошо вентилируется и не допустит возникновения грибка.

Геотекстиль не позволяет задерживаться воде на поверхности

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

каркасно-щитовой тип здания

Это просто размышление. Как вы будет строить мастерскую для хобби решать вам!

Понравилась новость Что нужно учитывать при постройке мастерской для хобби? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Прошивка для самодельного ЧПУ плоттера. http://portal-pk.ru/news/289-proshivka-dlya-samodelnogo-chpu-plottera.html Константин Portal-PK 2021-03-18T09:03:15+03:00 Я всегда хотел увеличить скорость работы моего самодельного ЧПУ плоттера. Долго экспериментировал и продолжаю его модернизировать.

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

Для рисования на плоттере можно использовать такие же параметры, что при работе с лазером

Речь пойдет о LaserGRBL, хоть данная программа и предназначена для работы с лазерными гравировальными станками, но мы её научим работать и с нашим самодельным ЧПУ станком. А в работе с данной программой нам поможет прошивка GRBL Servo.

 Яндекс произвести поиск по фразе «GRBL Servo»Первым делом мы устанавливаем прошивку GRBL Servo с github, а как я ранее уже говорил, для работы с прошивкой нам понадобиться программа LaserGRBL, как это сделать и как ее настроить, вы сможете прочитать в статье: Установка и настройка программы LaserGRBL. Следующим шагом подключаемся к станку и настраиваем прошивку.

В итоге вот что получается

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

Плюсы программы LaserGRBL для работы с граверам.

А полную статью, инструкцию по прошивке GRBL Servo и настройке программы LaserGRBL, а также все файлы, использовавшиеся в модернизации самодельного станка, вы сможете найти в данной статье: Прошивка для плоттера GRBL Servo и работа с программой LaserGRBL.

Понравилась новость Прошивка для самодельного ЧПУ плоттера? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
А-Контракт российский производитель печатных плат. http://portal-pk.ru/news/288-a-kontrakt-rossiiskii-proizvoditel-pechatnyh-plat.html Константин Portal-PK 2021-03-16T07:14:55+03:00 А-Контракт одна из крупнейших фирм производитель печатных плат. Данная компания поможет вам в осуществлении ваших проектов, разработает за вас схемотехнику печатной платы любой сложности, и сама же изготовит. На рынке печатных плат А-контракт уже больше пяти лет, они хорошо знают свое дело и прекрасно выполняют поставленные им задачи.

А-Контракт одна из крупнейших фирм производитель печатных плат.

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

Печатные платы

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

Печатные платы

Для ваших целей предоставляются следующие виды услуг:

1. Проектирование печатных плат;

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

2. Трассировка печатных плат;

Проектирование расположения печатных дорожек на плате.

3. Одно- и двухсторонние, многослойные и другие печатные платы;

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

4. Печатные платы для применения в условиях высоких и сверхвысоких частот;

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

5. Формирование контура платы;

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

Контроль качества

Контроль качества

А-Контракт полностью отвечает за качество изготавливаемых ими плат. На всех этапах производства проводится контроль качества продукции. Для оценки качества перед монтажом компонентов производится электроконтроль, он позволяет оценить целостность цепей и выявить КЗ проводников на плате. А при изготовлении плат производится тест паяемости финишного покрытия. Нельзя не сказать о том, что каждая плата проверяется вручную под увеличительными приборами с кратностью до 10Х. Может быть проведена и экспертная проверка для большей надежность. При визуальном контроле качества оценивается качество паяльной маски, финишного покрытия, шелкографии, качество обработки контура изделия, измеряются и сравниваются размеры с заданными в конструкционной документации.

Понравилась новость А-Контракт российский производитель печатных плат.? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Автономный лазерный ЧПУ гравер на ESP32_GRBL. http://portal-pk.ru/news/287-avtonomnyi-lazernyi-chpu-graver-na-esp32_grbl.html Константин Portal-PK 2021-03-10T07:03:58+03:00

Для гравировки портретов на лазерном ЧПУ станке требуется 5-7 часов. И самая большая проблема, станок должен быть подключен к компьютеру, и компьютер должен постоянно работать. У меня были проблемы с гравировкой при переходе компьютера в спящий режим. Неплохо было бы сделать такой ЧПУ гравер, чтобы воткнул его в розетку, и он самостоятельно работал. Звучит как фантастика. Но прогресс не стоит на месте и сегодня сделать автономный лазерный гравер достаточно просто, используя прошивку ESP32_GRBL. При этом управлять им можно из другой комнаты с помощью телефона, планшета или ПК.

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

Установка электроники ЧПУ гравера на ESP32.

Подключил всю электронику лазерного ЧПУ гравера на ESP32 по схеме.

Подключил всю электронику лазерного ЧПУ гравера на ESP32 по схеме.Вот что получилось. Не совсем аккуратно, но работает отлично.

Вот что получилось. Не совсем аккуратно, но работает отлично.Также установил камеру на ESP32-CAM, для того чтобы следить за процессом. Исходные материалы можно скачать тут: Лазерный гравер на ESP32. Прошивка GRBL_ESP32.

Установка и настройка GRBL ESP32.

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

Папки с библиотеками нужно скопировать в папку с библиотеками Arduino IDEНастроить конфигурационный файл для 2 осевого станка и настроить работу лазера.

Настроить конфигурационный файл для 2 осевого станка и настроить работу лазера.Загружаем прошивку в плату esp32 devkit v1.

Нажимаем кнопку загрузить. Затем нужно произвести минимальные настройки веб-интерфейса. Подробное описание и все материалы вы найдёте статье: Установка и настройка GRBL ESP32


Сейчас можно приступить к гравировке!

Понравилась новость Автономный лазерный ЧПУ гравер на ESP32_GRBL? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Красивые эффекты для изображений для рисования на ЧПУ плоттере http://portal-pk.ru/news/286-krasivye-effekty-dlya-izobrazhenii-dlya-risovaniya-na-chpu.html Константин Portal-PK 2021-02-28T16:51:31+03:00 Как собрать самодельный ЧПУ плоттер рассказывал в предыдущей новости. А данной статье рассмотрим, как можно сделать красивый рисунок на плоттере используя бесплатные программы преобразования растрового изображения в векторное.

StippleGen 2 программа для создания точечного изображения.StippleGen 2 является бесплатным программным обеспечениемStippleGen 2 бесплатная программа, которая поможет создать из растрового изображения векторное изображение, нарисованное точками. Подробнее читайте: Программа StippleGen 2. Создание точечного изображения для ЧПУ станка.

Веб-приложение Plotterfun для создания векторного изображения с различными эффектами.

Веб-приложение Plotterfun для создания векторного изображения с различными эффектами.

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

Подробнее со всеми функциями программы вы можете ознакомиться: Plotterfun веб приложении для созданий графических изображений для ЧПУ плоттера, гравера.

Понравилась новость Красивые эффекты для изображений для рисования на ЧПУ плоттере? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.


]]>
#31. MQ135 датчик углекислого газа. Библиотека MQ135 Arduino library. http://portal-pk.ru/news/285-mq135-datchik-uglekislogo-gaza-biblioteka-mq135-arduino-library.html Константин Portal-PK 2021-02-27T09:08:15+03:00 Данный датчик позиционируют на рынке, как датчик качества воздуха. Так как он измеряет не только концентрацию CO2 в воздухе, но и концентрацию других газов.

концентрацию CO2 в воздухе, но и концентрацию других газов

Для того чтобы добиться приемлемых показаний, нужно его откалибровать, и при этом показания не на 100% точные. Несмотря на это, данный датчик можно использовать дома или в офисе, для контроля качества воздуха, и выводить данные значений на дисплей, подавать звуковой или световой сигнал. При желании можно сделать автоматическое проветривание помещения.

MQ135 датчик углекислого газа

ВНИМАНИЕ! Перед работай с датчиком его нужно прогреть не менее 12-24 часов. Для этого подаем питание и оставляем датчик на указанное время. Затем его нужно вынести на свежий воздух, рекомендуемая температура +20 С и провертеть.Только после этого датчик будет показывать корректные значение.

Еще один минус, после включения датчик должен прогреться, только после этого можно снимать показание.

Для Arduino урока нам понабиться:

Что из себя представляет датчик качества воздуха MQ135?

Сам датчик MQ-135 представляет собой цилиндрическое устройства с 6 контактами. И выполняется в 2 корпусах.

Сам датчик MQ-135 представляет собой цилиндрическое устройства с 6 контактами.

MQ-135 представляет собой цилиндрическое устройства с 6 контактами

 датчик MQ-135

Для работы с датчика необходима небольшая обвязка.

Для работы с датчика необходима небольшая обвязка

В данном Arduino уроке, мы будем рассматривать подключения модуля, на основе датчика MQ135. Модуль имеет необходимую обвязку, а также оснащен компаратором и подстроечным резистором. Это позволяет получить сигнал на цифровую ножку модуля D0. Когда концентрация ниже установленного параметра, на цифровом выходе датчика логическая 1, и зеленый светодиод не светиться, задать чувствительность датчика можно с помощью подстроечного резистора. При повышении концентрации, светодиод включается и на цифровом пине появляется логический ноль. Используя данный пин, датчик можно использовать без микроконтроллера.

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

Схема модуля выглядит примерно так. В интернете нет точной схемы данного модуля.

Схема модуля выглядит примерно так

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

Разберем технические характеристики газоанализатора:

  • напряжение питания: 5V;
  • время прогрева: около 1 мин;
  • потребляемый ток: 130-150 мА;
  • диапазон рабочих температур: -10 ... 45 С;
  • выходной сигнал TTL уровня;
  • габариты: 35 х 20 х 21 мм;
  • вес: около 10 г.

Схема подключения MQ135 к Arduino.

Назначение пинов датчика MQ135:

  • Vcc – питания 5в.
  • GND – «-» питания.
  • D0 – цифровой пин.
  • A0 – аналоговый пин.

Назначение пинов датчика MQ135:

Подключаем модуль MQ135 к Arduino UNO по схеме. Подключаем модуль MQ135 к Arduino UNO по схеме.

Подключаем модуль MQ135 к Arduino NANO по схеме. Подключаем модуль MQ135 к Arduino NANO по схеме.

Пример кода MQ135 для Arduino.

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

#define analogPin A0 // аналоговый выход MQ135 подключен к пину A0 Arduino
#define digitalPin 3 // цифровой выход подключен к пину 3

float analogValue; // для аналогового значения
byte digitalValue; // для цифрового значения, можно, кстати и boolean, но не суть

void setup() {
  Serial.begin(9600); // инициализация последовательного порта
  pinMode(analogPin, INPUT); // режим работы аналогового пина
  pinMode(digitalPin, INPUT); // режим работы цифрового пина
  delay(1000); // устаканимся
}

void loop() {
  analogValue = analogRead(analogPin); // чтение аналогового значения
  digitalValue = digitalRead(3); // чтение цифрового значения

  Serial.print("Current value: "); // вывод аналогового значения в последовательный порт
  Serial.println(analogValue);

  Serial.print("Threshold: "); // вывод цифрового значения в аналоговый порт
  Serial.println(digitalValue);

  delay(5000); // задержка, чтобы не мельтешило перед глазами
}

 пример кода, поможет получить данные с цифрового и аналогового пина

Но это значения не приведены к стандартным, а хотелось бы снять показание в PPM. Для этого можно использовать библиотеку MQ135.h, которую можно скачать на github или внизу страницы.

Для того чтобы установить библиотеку. Заходим в Arduino IDE и выбираем в меню: Скетч –> Подключить библиотеку –> Добавить .ZIP библиотеку… Заходим в Arduino IDE и выбираем в менюВыбираем скаченный архив MQ135-master.zip и нажимаем кнопку «Открыть». После установки вы увидите надпись, что библиотека успешно добавлена.

Затем загрузим в Arduino пример кода.

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

#include <MQ135.h> // подключение библиотеки

#define analogPin A0 // аналоговый выход MQ135 подключен к пину A0 Arduino
MQ135 gasSensor = MQ135(analogPin); // инициализация объекта датчика

void setup() {
  Serial.begin(9600); // последовательный порт для отображения данных
  delay(1000); // устаканимся
}

void loop() {
  float ppm = gasSensor.getPPM(); // чтение данных концентрации CO2
  Serial.println(ppm); // выдача в последовательный порт

  float rzero = gasSensor.getRZero(); // чтение калибровочных данных
  Serial.println(rzero); // выдача в последовательный порт
  
  delay(1000); // просто задержка, чтобы не мельтешило перед глазами
}

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

«Концентрация углекислого газа (CO2) в земной атмосфере впервые в истории человечества превысила 415 частей на миллион (ppm) - то есть в каждом куб. м воздуха присутствует не менее 415 мл углекислого газа.»

 концентрация углекислого газа в атмосфере


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

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

Также нам нужно знать номинал нагрузочного резистора RL.

Также нам нужно знать номинал нагрузочного резистора RL

В моем случае это 1 кОм. Данное значение нужно указать в библиотеке. Заходим в папку библиотеки и открываем файл MQ135.h с помощью любого текстового редактора.

Заходим в папку библиотеки и открываем файл MQ135.h

И меняем полученные значения. У вас эти данные могут быть другими.

И меняем полученные значения. У вас эти данные могут быть другими.

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

Вот что у меня, выводим в монитор порта.

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

Сейчас полученные показания можно использовать для реализации информера

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

Вывод по работе с датчика MQ135.

Датчик имеет ряд минусов:

  • Прогрев перед работай.
  • Сложность настройки и калибровки.
  • Неточные показания.

Плюсы. Их ни так и много. Один плюс — это стоимость. Данный датчик в разы дешевле аналогичных датчиков качества воздуха.

Вывод по работе с датчика MQ135.

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

Смотрите другие уроки подключения датчиков к Arduino:

Появились вопросы или предложения, не стесняйся, пиши в комментарии!

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке.

]]>
Как собрать ЧПУ плоттер в домашних условиях. http://portal-pk.ru/news/284-kak-sobrat-chpu-plotter-v-domashnih-usloviyah.html Константин Portal-PK 2021-02-26T13:14:47+03:00 Несмотря на то, что у многих дома стоят принтеры, копиры и МФУ. Плоттер остается достаточно интересной и востребованной техникой, скорее всего для хобби или просто поиграться. Но в связи с тем, что его можно собрать практически из подручных средств и недорогой электроники, ЧПУ плоттер может собрать любой школьник или студент.

Для сборки ЧПУ плоттера я использовал готовые каретки, как их собирать рассказывал вот тут:Самодельная каретка для ЧПУ станка.

Устанавливаю все на фанерку и креплю одну каретку на другую под углом 90 градусов.

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

Подключил всю электронику по схеме.Схема подключения электроники ЧПУ плоттера на Arduino UNO и CNC shield v3.

Загрузил GRBL прошивку и с помощью программ, про которые рассказываю тут: ЧПУ плоттер на Arduino своими руками.

Сделал G-Cod. И выполнил первую гравировку на гравировальном на ЧПУ плеторе на Arduino.


Подробное описание процесса сборки, прошивка, электроника и программы для создания кода смотрите в статье: G-Code для плоттера на Arduino.

Так же рекомендую посмотреть видео, по созданию изображений для ЧПУ плоттера, из растрового изображения.

Понравилась новость Как собрать ЧПУ плоттер в домашних условиях? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.


]]>
Машинка, управляемая с телефона. http://portal-pk.ru/news/283-mashinka-upravlyaemaya-s-telefona.html Константин Portal-PK 2021-02-23T10:30:37+03:00 Если вы взрослый, но временами в вас просыпается ребенок, я знаю, чем вам можно помочь. Благодаря следующей самоделке, вы сможете вспомнить детство.

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

Машинка с камерой

Машинка построена на платформе ESP32-CAM. Питается же от двух источников питания 18650. Вся электроника занимает достаточно мало места, что позволяет сделать машинку достаточно компактной. Ей можно управлять с любого устройства, имеющего подключение к интернету. Подключение и управление осуществляется через браузер. Контролировать всю обстановку вокруг позволяет модуль с камерой ESP32-CAM.

Машинка построена на платформе ESP32-CAM

Проект достаточно прост в повторении, а на его изготовление уходит не так много времени. Если же вам захочется повторить данную самоделку, предлагаю ознакомиться с полным перечнем компонентов в указанной ниже статье, там же вы сможете найти и код прошивки:Wi-Fi машинка с камерой на ESP32-CAM.

Понравилась новость Машинка, управляемая с телефона

Понравилась новость Машинка, управляемая с телефона? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

]]>
Часы – матрица своими руками. http://portal-pk.ru/news/282-chasy---matrica-svoimi-rukami.html Константин Portal-PK 2021-02-20T14:52:40+03:00 Недавно сидел и рассуждал о том, чего же у меня не хватает дома. Немного подумал и понял, что у меня никогда не было часов, не видел в них смысла. Но после того, как я неизвестное кол-во времени искал телефон и чуть не опоздал на важное мероприятие, решил всё-таки обзавестись дополнительным указателем времени. Долго просматривал каталоги интернет-магазинов, но увы, ничего для себя дельного не нашел. Поэтому решил отказаться от покупки и сделать их своими руками. Самым простым вариантом был часы – матрица с использованием адресной светодиодной ленты. На нем я и решил остановиться.

Часы – матрица своими руками.

Да, делать данный проект буду на Arduino, вы можете повторить проект с версией Nano, но мой выбор пал на Arduino pro Mini, из-за ее габаритов.

Корпус распечатаем на 3D принтере.

Корпус распечатаем на 3D принтере.

Когда корпусные элементы были напечатаны, вклеиваем в них нашу адресную светодиодную ленту, спаиваем ее и устанавливаем рассеиватель. Рассеивающие линзы сделал из термоклея, а матовый пластик вырезал из коробки для ниток, приобретенную в фикс-прайсе.

Рассеивающие линзы сделал из термоклея, а матовый пластик вырезал из коробки для ниток, приобретенную в фикс-прайсе.

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

минималистичные часы, да еще и цвет циферблата могу выбирать

Проект не сложен в повторении, делается буквально за один вечер, поэтому если вы решите и себе собрать такие интересные и простые часы, то для вас оставляю ссылку на полную статью, в которой рассказано все более подробно, там же найдете и код для Arduino: Часы – матрица на Arduino и адресных светодиодах WS2812B.

Понравилась новость Часы – матрица своими руками? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

Смотрите все интересные новости!

]]>
Пользователь reddit построил руку манипулятор, которая имитирует его движение. http://portal-pk.ru/news/281-polzovatel-reddit-postroil-ruku-manipulyator-kotoraya.html Константин Portal-PK 2021-02-16T19:34:51+03:00 Реддитор, под ником «Spidey616_», показал пользователям действующий прототип механической руки. Устройство работает следующим образом, когда пользователь сжимает руку, механическая рука полностью копирует это движение.

Реддитор, под ником «Spidey616_», показал пользователям действующий прототип механической руки.

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

На руке у «Spidey616_» надета перчатка, на которой приклеены полосочки фольги, с приходящими к ним проводками. Когда контакты замыкаются, сигнал проходит от одного контакта Arduino к другому. После этого от Arduino поступает команда на вращение сервоприводов.

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

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

 систему управления рукой

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

Легкость данного проекта позволяет любому пользователю, с небольшими затратами, повторить это изобретение. Если же вдруг у вас появится желание попробовать сделать что-то похожее своими руками, рекомендую ознакомиться с уроком, в котором я рассказывал о подключении сервопривода к Arduino и способе управления им, посредством кнопки: Подключает servo-привод к arduino. Сервопривод + кнопка.

Понравилась новость Пользователь reddit построил руку манипулятор, которая имитирует его движение? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

Смотрите все интересные новости!

]]>
Лазерный гравер из хлама. http://portal-pk.ru/news/280-lazernyi-graver-iz-hlama.html Константин Portal-PK 2021-02-15T19:19:34+03:00 Собирать ЧПУ станки с каждым годом становиться все проще и дешевле. Для того чтобы собрать ЧПУ станок на Arduino, для хобби или проверки своих сил, не нужно покупать дорогие драйвера, шпиндели, шаговые двигателя и линейные направляющие. Все можно собрать из подручных материалов. На своем втором сайте я выкладываю новые проекты по реализации самодельных ЧПУ станков из хлама. Сегодня речь пойдет о лазерном гравировальном станке, который собран из хлама, буквально на коленке.

Сегодня речь пойдет о лазерном гравировальном станке

Сборка механики из палок и реек.

Для сборки использую готовые модули кареток.

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

Из реек и брусков делаю раму станка. Из фанеры столешницу.

Из реек и брусков делаю раму станка. Из фанеры столешницу.

Устанавливаю лазер на ось X.

Устанавливаю лазер на ось X.

На фанерку закрепляю всю необходимую электронику

На фанерку закрепляю всю необходимую электронику, креплю ее с задней стороны станка.

Соединил все по схеме.

Соединил все по схеме.

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

Станок готов и его можно проверить.

LaserGRBL. Программа для управления лазерным станком на Arduino.

С помощью программы LaserGRBL можно настроить ЧПУ станок. Подробнее о настройке ЧПУ лазерного гравер можно почитать в моей статье: Установка и настройка программы LaserGRBL. С помощью программы LaserGRBL можно настроить ЧПУ станок

Также в данной программе можно создавать эскизы для гравировки, из векторной графики в формате .svg и из растровой графики: jpeg, png. Что позволяет делать гравировку даже без знания устройства ЧПУ станка и G-Code.

делать гравировку даже без знания устройства ЧПУ станка и G-Code.

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

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

Более подробное описание станка и примеры работы смотрите на странице проекта: Самодельный Лазерный гравёр с ЧПУ, в домашних условиях.

Также читайте следующие статьи по теме:

Понравилась новость Лазерный гравер из хлама? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

Смотрите все интересные новости! ]]>
Vdoo сообщила об уже исправленных уязвимостях модулей Realtek. http://portal-pk.ru/news/279-vdoo-soobshchila-ob-uzhe-ispravlennyh-uyazvimostyah-modulei.html Константин Portal-PK 2021-02-12T08:02:01+03:00

IT-специалисты по информационной безопасности из компании Vdoo обнаружили шесть серьезных уязвимостей Wi-Fi модуля от Realtek.

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

Realtek RTL8195A

Данное устройство представляет собой Wi-Fi, предназначенный для использования в устройствах «умного» дома. Он обеспечивает связь между вашими управляющими и исполняющими устройствами. Но это не последнее место его применения, используется так же и в довольно важных сферах, таких как: здравоохранение, автомобилестроение, а также в сельском хозяйстве.

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

Модуль использует Ameba API, обеспечивающий связь пользователя с устройством через Wi-Fi, HTTP и MQTT. Хоть и обнаруженные уязвимости были подтверждены только в Realtek RTL8195A, но они также касаются и модулей TL8711AM, RTL8711AF и RTL8710AF (до версии 2.0.6).

Переполнение буфера (CVE-2020-9395), одна из главных дыр в безопасности модулей. Данная уязвимость позволяет получить доступ к устройству без пароля от Wi-Fi, даже когда устройство не выступает в роли точки доступа.

Оставшиеся пять уязвимостей имеют более мягкий характер. Две из них позволяют вызвать отказ в обслуживании, оставшиеся три (в их числе и CVE-2020-25854) предоставляют злоумышленникам возможность эксплуатировать Wi-Fi устройства владельцев, а также выполнять произвольные коды.

Но на данный момент не о чем переживать. Устройства с версией прошивки после апреля 2020 года, оборудованы защитой от внезапных атак, связанных с их эксплуатацией. Эти же дыры были исправлены с выходом Ameba Arduino 2.0.8.

Понравилась новость Vdoo сообщила об уже исправленных уязвимостях модулей Realtek? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

Смотрите все интересные новости!

]]>
Виды реле и принципы их работы. http://portal-pk.ru/news/278-vidy-rele-i-principy-ih-raboty.html Константин Portal-PK 2021-02-06T18:43:58+03:00 Реле — это электромеханическое устройство. Внутри корпуса которого расположен электромагнит, при подаче напряжения притягивающий якорь. К якорю крепится один подвижный контакт, замыкающийся с одним неподвижным контактом.

Реле — это электромеханическое устройство.

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

Реле с тремя группами контактов.

Бывают так же и другого типа реле, имеющие три группы контактов: первую, всё так же предназначенную для питания устройства, вторую называют нормально разомкнутой группой контактов, а также третью группу контактов, имеющую название нормально замкнутая.

Давайте разберемся во всех видах контактов данного типа реле:

  • Нормально разомкнутая пара контактов – называют те контакты, которые при подаче напряжения на реле замыкаются, а когда питание отсутствует, контакты разомкнуты.Нормально разомкнутая пара контактов
  • Нормально замкнутая группа контактов – та пара, которая размыкается при подаче напряжения на реле, в отключённом состоянии же, они замкнуты.Нормально замкнутая группа контактов

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

Комбинация этих двух видов контактов в одном реле

ЭЛЕКТРОМАГНИТНОЕ РЕЛЕ.

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

ЭЛЕКТРОМАГНИТНОЕ РЕЛЕ.

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

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

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

Принцип работы реле.

Рассмотрим принцип работы на схеме.

Принцип работы реле.

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

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

Параметры электромагнитных реле.

Размеры самих реле позволяют нанести на их корпус основные параметры. В качестве примера рассмотрим реле SONGLE SRD-12VDC-SL-C.

В качестве примера рассмотрим реле SONGLE SRD-12VDC-SL-C.

12VDC – показывает, от какого напряжения и каким его видом питается само реле. Напряжение срабатывания реле 12 Вольт. Питается же реле постоянным током (DC обозначает постоянный ток/напряжение)

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

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

Для нашего случая, контакты реле SONGLE SRD-12VDC-SL-C способны выдержать ток в 10А и переменное напряжение 125/250 В. Так же реле способно коммутировать нагрузку с силой тока в 10 А и постоянным напряжением 28 В.

Твердотельное реле.

Твердотельное реле (ТТР) - Электронное устройство, в котором отсутствуют такие элементы как: катушка, якорь, подпружиненные контакты, ярма и сердечник. Предназначены такие реле для коммутации высокомощностных цепей с помощью низких напряжений, подаваемых на клеммы управления.

Твердотельное реле.

Заменой всей начинки обычных электромагнитных реле служат мощные ключи на полупроводниковых структурах, выполненных по типу: транзисторов, тиристоров или симисторов.

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

Принцип работы твердотельного реле.

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

Принцип работы твердотельного реле.

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

Основные параметры ТТР:

  • коммутируемое напряжение U;
  • коммутируемый ток I;
  • управляющий сигнал;
  • скорость коммутации.

Преимущества твердотельных реле над электромеханическими.

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

Твердотельные же обладают рядом преимуществ:

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

Но к выбору твердотельных реле нужно подходить с умом, т.к. они боятся повышенных напряжений и токов, поэтому при выборе нужно делать запас в 20%, желательно даже больше. ТТР боятся перегревов, сами же по себе выделяют огромное количество тепла, потому что построены на полупроводниковой структуре, из-за этого нуждаются в массивных радиаторах, либо в активном охлаждении.

Понравилась статья? Не забудь поделиться с друзьями в соц. сетях. А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

До встречи в следующем уроке. Спасибо за внимание!

Технологии начинаются с простого!

]]>
Что такое Транзистор? http://portal-pk.ru/news/277-chto-takoe-tranzistor.html Константин Portal-PK 2021-01-26T17:11:55+03:00 Транзистор — один из самых распространенных полупроводниковых элементов самого широкого применения. Существуют различные виды транзисторов, но как правило данный электронный компонент имеет три вывода и, как и диод, основывается на явлении p-n перехода. Отсюда происходит его второе название – полупроводниковый триод.

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

 виды транзисторов

Биполярный транзистор

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

  • Эмиттер (emitter)
  • База (base) – на схемах изображается между К. и Э. под прямым углом к несущей черте
  • Коллектор (collector) – на схемах обозначен стрелкой.

Биполярный транзистор

Таким образом, у биполярных транзисторов имеется два p-n перехода: эмиттер-база и база-коллектор. Наделение полупроводников определенным типом проводимости происходит с помощью легирования — добавления в них специальных примесей. Каждый слой легируется в разной степени.

Различают два типа биполярных транзиторов:

p-n-p, где эмиттер – полупроводник p-типа, база – n-типа, коллектор – p-типа

n-p-n, где эмиттер – полупроводник n-типа, база – p-типа, коллектор – n-типа.

Их схематичное устройство представлено представлено на иллюстрации ниже.

Различают два типа биполярных транзиторов

В основе работы биполярных транзисторов лежит следующий процесс, который рассмотрим на примере транзистора со структурой npn в нормальном активном режиме. В этом режиме переход эметтер-база смещён в прямом направлении, иначе говоря, открыт, а переход база-коллектор смещён в обратном направлении или закрыт. При переходе носителей заряда (электронов) из эмиттера через открытый p-n переход эмиттер-база, часть их рекомбинирует с носителями заряда (дырками) в базе. Однако база делается очень тонкой и слабо легированной (по сравнению с эмиттером), из-за чего большая часть электронов, перешедших (инжектированных) в базу из эмиттера, так сказать, «не находит себе в базе места» и, как следствие, диффундирует в коллектор. Сильное электрическое поле обратносмещённого коллекторного перехода захватывает неосновные носители из базы и переносит их в коллекторный слой. Таким образом, ток коллектора практически равен току эмиттера, за исключением небольшой потери на рекомбинацию в базе, которая и образует ток базы. В случае с биполярными транзисторами структуры pnp процесс будет тем же, изменится лишь полярность и направление токов.

Полевой транзистор (униполярный)

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

Полевые транзисторы имеют следующие выводы

Полевые транзисторы имеют следующие выводы:

  • Исток (source) — область, из которой носители заряда уходят в канал
  • Затвор (gate) – электрод, на который подается управляющее напряжение
  • Сток (drain) – область, в которую носители заряда входят.

Читайте также про другие элементы электрической цепи:

Понравилась статья? Не забудь поделиться с друзьями в соц. сетях. А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

До встречи в следующем уроке. Спасибо за внимание!

Технологии начинаются с простого!

]]>
#30. Радиопульт с приемником HY-DJM-5V. Подключаем к Arduino. http://portal-pk.ru/news/276-radiopult-s-priemnikom-hy-djm-5v-podklyuchaem-k-arduino.html Константин Portal-PK 2020-12-12T14:21:47+03:00 При изучении Arduino, часто возникают разнообразные идеи. Одна из самых распространённых - это беспроводное управление несколькими реле. Для включения различной нагрузки: открывать гаражные ворота, включать и выключать электроприборы и управление освещением. Но как быть, если знания не хватает для реализации идеи. Для этого отлично подойдёт радиопульт, в виде брела, который продается вместе с приемником HY-DJM-5V. Почему данный пульт подойдёт для новичка? Это связано с простотой подключения и использования радиопульта с приёмником HY-DJM-5V в Arduino проектах. Данный пульт и приемник я использовал в управлении светом в проекте «Arduino управление светом с 3 мест: Пульт ДУ + Радиопульт + Переключатель».

Описание радиопульта и приемникаHY-DJM-5V.

Описание радиопульта и приемникаHY-DJM-5V.

В интернете не так много информации по данному радиопульту. Есть источники, в которых говорится, что он работает на частоте 433 МГц. В других источниках говорится, что работает на частоте 315 МГц. Для нас нет большой разницы, на какой частоте работает пульт и приемник. Это не помешает нам сделать отличный проект на Arduino.

Характеристики пульта

Характеристики пульта:

  • частота передачи 315 Мгц,
  • количество каналов 4,
  • дальность действия до 50 м
  • элемент питания 23 a / 12 v

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

Разобрал я пульт, чтобы посмотреть, из чего он состоит. Пульт сделан на микросхеме SC 2262.

Пульт сделан на микросхеме SC 2262.

Схема пульта дистанционного управления на микросхеме SC 2262.

Схема пульта дистанционного управления на микросхеме SC 2262.

Характеристики приемника HY-DJM-5V:

  • частота приема - 315 Мгц,
  • количество каналов – 4,
  • режим – "включен", пока нажата кнопка,
  • тип выхода - открытый коллекто

Схема приемника HY-DJM-5V.

Схема приемника HY-DJM-5V.

Так приемник HY-DJM-5V выглядит в живую.

Так приемник HY-DJM-5V

Кодирование сигнала.

Для того, чтобы ваш сосед с таким же радиопультом не смог открыть ваш гараж, или включать и выключать свет, на пульте и на приемнике есть система кодирования. Рядом со свободными ножками приемника и передатчика есть 2 контактные полоски, одна «+» вторая «-».

Рядом со свободными ножками приемника и передатчика есть 2 контактные полоски

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

Использование радиопульта и приёмника HY-DJM-5V без Arduino.

Использование радиопульта и приёмника HY-DJM-5V без Arduino.

На фото приведен пример использования приемника HY-DJM-5V без Arduino. Мы можем подключить приемник к источнику питания 5В, и управлять нагрузкой. На схеме ниже подключены четыре светодиода. А как мы знаем, вместо светодиодов можно, без проблем, подключить пятивольтовое реле.

Схема подключения приемника HY-DJM-5V без Arduino будет вот такой.

На схеме ниже подключены четыре светодиода

Использование приемника без Arduino имеет большой минус. Светодиод светится, пока нажата кнопка на радиопульте. Поэтому, в данную схему добавит Arduino NANO.

Управление реле, с помощью радиопульта с приемником HY-DJM-5V и Arduino NANO.

Как мы поняли из примера выше, нам нужно в схему добавить Arduino. Схема подключения HY-DJM-5V к Arduino NANO будет следующая:

Схема подключения HY-DJM-5V к Arduino NANO


Код для управления 4 реле, с помощью приемника HY-DJM-5V и Arduino NANO.

Код для управления 4 реле, с помощью приемника HY-DJM-5V и Arduino NANO.

Как и писал в начале статьи, код получается достаточно простой. Даже проще, чем управление светодиодом с помощью кнопки. Тут не нужно бороться с дребезгом. Но задержку нужно сделать, потому что, при большом расстоянии между пультом и приемником, сигнал бывает не стабильным, и реле будет несколько раз подряд включаться и выключаться.
// Радиопульт с приемником HY-DJM-5V.
// https://portal-pk.ru
//переменные для подключении 4 реле //
#define RELAY1 6
#define RELAY2 7
#define RELAY3 8
#define RELAY4 9
// переменные для подключения 4 контактов с приемника HY-DJM-5V //
#define RADIO_PIN1 2
#define RADIO_PIN2 3
#define RADIO_PIN3 4
#define RADIO_PIN4 5
// переменные для хранения состояния реле //
boolean statusRelay1 = false;
boolean statusRelay2 = false;
boolean statusRelay3 = false;
boolean statusRelay4 = false;
void setup() {
  //инициализировать пины реле как выход //
  pinMode(RELAY1, OUTPUT);
  pinMode(RELAY2, OUTPUT);
  pinMode(RELAY3, OUTPUT);
  pinMode(RELAY4, OUTPUT);
  // пины приемника на вход //
  pinMode(RADIO_PIN1, INPUT);
  pinMode(RADIO_PIN2, INPUT);
  pinMode(RADIO_PIN3, INPUT);
  pinMode(RADIO_PIN4, INPUT);
// инициализируем работу с монитором порта 
// и выведем надпись "Relay Ok!" 
  Serial.begin(9600);
  Serial.println("Relay Ok!");
}
void loop() {
  //Если пришел сигнал 
  //выводим в монитор порта информацию что сработало реле 1 "Relay 1". 
  if ( digitalRead(RADIO_PIN1) == HIGH) {
    Serial.println("Relay 1");
    //инвертируем статус реле //
    statusRelay1 = !statusRelay1;
    // отправляем статус на включения или выключения //
    digitalWrite(RELAY1, statusRelay1);
    // подождем 100 мс //
    delay(100);
  }
  if ( digitalRead(RADIO_PIN2) == HIGH) {
    Serial.println("Relay 2");
    statusRelay2 = !statusRelay2;
    digitalWrite(RELAY2, statusRelay2);
    delay(100);
  }
    if ( digitalRead(RADIO_PIN3) == HIGH) {
    Serial.println("Relay 3");
    statusRelay3 = !statusRelay3;
    digitalWrite(RELAY3, statusRelay3);
    delay(100);
  }
    if ( digitalRead(RADIO_PIN4) == HIGH) {
    Serial.println("Relay 4");
    statusRelay4 = !statusRelay4;
    digitalWrite(RELAY4, statusRelay4);
    delay(100);
  }
}

Описание кода.

Создаем переменные для подключения 4 реле, и переменные для подключения 4 контактов с приемника HY-DJM-5V.

//переменные для подключении 4 реле //
#define RELAY1 6
#define RELAY2 7
#define RELAY3 8
#define RELAY4 9
// переменные для подключения 4 контактов с приемника HY-DJM-5V //
#define RADIO_PIN1 2
#define RADIO_PIN2 3
#define RADIO_PIN3 4
#define RADIO_PIN4 5

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

// переменные для хранения состояния реле //
boolean statusRelay1 = false;
boolean statusRelay2 = false;
boolean statusRelay3 = false;
boolean statusRelay4 = false;

В функции setup() нам нужно инициализировать пины реле как выход, а пины приемника на вход, для считывания поступающего сигнала с радиоприемника.

//инициализировать пины реле как выход //
  pinMode(RELAY1, OUTPUT);
  pinMode(RELAY2, OUTPUT);
  pinMode(RELAY3, OUTPUT);
  pinMode(RELAY4, OUTPUT);
  // пины приемника на вход //
  pinMode(RADIO_PIN1, INPUT);
  pinMode(RADIO_PIN2, INPUT);
  pinMode(RADIO_PIN3, INPUT);
  pinMode(RADIO_PIN4, INPUT);

Также инициализируем работу с монитором порта, и выведем надпись "Relay Ok!", что означает, что у нас все работает, и можно начать управлять нашими реле.

// инициализируем работу с монитором порта 
// и выведем надпись "Relay Ok!" 
  Serial.begin(9600);
  Serial.println("Relay Ok!");

В основном цикле loop() будем проверять, по какому каналу пришел сигнал, для этого создадим 4 одинаковых условия для каждого канала.

//Если пришел сигнал 
  //выводим в монитор порта информацию что сработало реле 1 "Relay 1". 
  if ( digitalRead(RADIO_PIN1) == HIGH) {
    Serial.println("Relay 1");
    //инвертируем статус реле //
    statusRelay1 = !statusRelay1;
    // отправляем статус на включения или выключения //
    digitalWrite(RELAY1, statusRelay1);
    // подождем 100 мс //
    delay(100);
  }
  if ( digitalRead(RADIO_PIN2) == HIGH) {
    Serial.println("Relay 2");
    statusRelay2 = !statusRelay2;
    digitalWrite(RELAY2, statusRelay2);
    delay(100);
  }
    if ( digitalRead(RADIO_PIN3) == HIGH) {
    Serial.println("Relay 3");
    statusRelay3 = !statusRelay3;
    digitalWrite(RELAY3, statusRelay3);
    delay(100);
  }
    if ( digitalRead(RADIO_PIN4) == HIGH) {
    Serial.println("Relay 4");
    statusRelay4 = !statusRelay4;
    digitalWrite(RELAY4, statusRelay4);
    delay(100);
  }

Разберём работу по первому каналу. Если пришел сигнал, то выводим в монитор порта информацию, что сработало реле 1 "Relay 1".

if ( digitalRead(RADIO_PIN3) == HIGH) {
    Serial.println("Relay 3");
...
}

Затем инвертируем статус реле, и отправляем статус на включение или выключение.

statusRelay3 = !statusRelay3;
digitalWrite(RELAY3, statusRelay3);
delay(100);

И подождем 100 мс, для того, чтобы наше реле не сработало 2 раза, как и писал выше.

Подключение модуля с 4 твердотельными реле к модулю HY-DJM-5V.

Подключение модуля с 4 твердотельными реле к модулю HY-DJM-5V.

Не стал я убирать светодиоды с макетной платы и, параллельно с ними, подключил модуль с 4 твердотельными реле. Вот что получилось. Как видим, все работает отлично.

Схема подключения четырех реле к модулю HY-DJM-5V.

Схема подключения четырех реле к модулю HY-DJM-5V.

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

Как видим, все отлично работает, и, используя пульт радиоуправления с приемником HY-DJM-5V, можно сделать и другие интересные проекты.

Появились вопросы или предложения, не стесняйся, пиши в комментарии!

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке.

]]>
#29. Подключаем драйвер мотора MX1508 к Arduino. http://portal-pk.ru/news/275-29-podklyuchaem-draiver-motora-mx1508-k-arduino.html Константин Portal-PK 2020-11-27T09:45:13+03:00 Модуль двигателя MX1508, рассмотренный в этой статье, рекламируется на Aliexpress как «Двухканальная плата драйвера двигателя постоянного тока L298N, PWM Speed Dual H Bridge Stepper Module», однако присутствует микросхема MX1508 китайского производства. Также отличаются характеристики драйвера MX1508 от L298N. Давайте рассмотрим подробней данный драйвер и разберемся, как его подключить к Arduino и управлять моторами постоянного тока.

При управлении, например, с платой Arduino UNO, можно управлять двумя двигателями, при этом вращать в любом направлении каждый двигатель. Драйвер представляет из себя Н-мост с рабочим током 800 мА и пиковым током 2,5 А, а также, со встроенной системой контроля температуры.

Модуль двигателя MX1508

Характеристики драйвера MX1508:

  • Напряжение питания модуля 2 - 9,6 В.
  • Диаметр монтажного отверстия: 2 мм.
  • Входное напряжение сигнала: 1,8- 7 В.
  • Ток для одного канала: 0,8 А.
  • Пиковый ток: до 2,5 А.
  • Ток в режиме ожидания: менее 0,1 мкА.
  • Схема защиты от перегрева: встроенная (TSD) с эффектом гистерезиса.
  • Размер: 24,7 х 21 х 7 мм.

Общие сведения о драйвере MX1508.

Основной чип модуля - это микросхема MX1508, состоящая из двух H-мостов (H-Bridge), один для выхода A, второй для выхода B, каждый канал рассчитан на 0,8 А с пиком 2,5 А. H-мост широко используется в электронике и служит для изменения вращения двигателя, схема H-моста содержит четыре транзистора (ключа) с двигателем в центре, образуя H-подобную компоновку. Принцип работы прост, при одновременном закрытии двух отдельных транзисторов, изменяется полярность напряжения, приложенного к двигателю. Это позволяет изменять направление вращения двигателя. На рисунке ниже, показана работа H-мостовой схемы.

работа H-мостовой схемы

Управлять двигателем можно низковольтным напряжением, ниже, чем напряжение на плате Arduino. Для управления скоростью используется широтно-импульсная модуляция (PWM).

Модуль MX1508 содержит разъем для подключения питания, два выхода A и B,

Модуль MX1508 содержит разъем для подключения питания, два выхода A и B, и разъем управления, с назначением каждого можно ознакомиться ниже:

  • Вывод «+» и «-» — питание модуля и двигателей, от 2 до 9,6 В;
  • Выводы A1 и A2 — используются для управления направлением вращения двигателя A;
  • Выводы B1 и B2 — используются для управления направлением вращения двигателя B;
  • Выходы MOTOR A — разъем для двигателя A;
  • Выходы MOTOR B — разъем для двигателя B;

Подключение MX1508 к Arduino (коллекторный двигатель).

Необходимые детали:

  • Arduino UNO.
  • Драйвер мотора на MX1508.
  • Коллекторный двигатель.

Схема подключения MX1508 к Arduino, и коллекторного двигателя к MX1508.

Схема подключения MX1508 к Arduino, и коллекторного двигателя к MX1508.

Первым делом, необходимо подключить источник питания от 2 до 9,6 B к модулю (в примере используется 5 В. от Arduino). Далее, подключаем управляющие провода A1, A2, B1, B2 (встречается маркировка, как на L298: IN1, IN2, IN3, IN1) к цифровым выводам Arduino 10, 11, 5 и 6. Теперь, подключаем двигатели, один к клеммам MOTOR A , а другой к клеммам MOTOR B. Схема подключения приведена ниже.

Схема подключения MX1508 к Arduino, и коллекторного двигателя к MX1508.

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

const int PinA1 = 5;  // (ШИМ) вывод 5 соединен с выводом А1
const int PinA2 = 6;  // (ШИМ) вывод 6 соединен с выводом А2
const int PinB1 = 10; // (ШИМ) вывод 10 соединен с выводом (pin) B1
const int PinB2 = 11;  //(ШИМ) вывод 11 соединен с выводом (pin)B2
byte speed = 250;  // измените это значение (0-255), 
                  //чтобы управлять скоростью вращения двигателей
void setup() {
  pinMode(PinA1, OUTPUT); // установите контакты на выход
  pinMode(PinA2, OUTPUT);
  pinMode(PinB1, OUTPUT);
  pinMode(PinB2, OUTPUT);
  Serial.begin(9600);
}
void loop() {
  Serial.println("Avanti");
  forward();
  delay(2000);
  STOP();
  Serial.println("Indietro");
  backward();
  delay(2000);
  STOP();
  Serial.println("Sinistra");
  left();
  delay(2000);
  STOP();
  Serial.println("Destra");
  right();
  delay(2000);
  STOP();
}
void backward() // Вперед.
{
  analogWrite(PinA1, 0);
  analogWrite(PinA2, speed);
  analogWrite(PinB1, 0);
  analogWrite(PinB2, speed);
}
void forward() //Назад...
{
  analogWrite(PinA1, speed);
  analogWrite(PinA2, 0);
  analogWrite(PinB1, speed);
  analogWrite(PinB2, 0);
}
void left() // В левую сторону
{
  analogWrite(PinA1, speed);
  analogWrite(PinA2, 0);
  analogWrite(PinB1, 0);
  analogWrite(PinB2, speed);
}
void right() //В правую сторону
{
  analogWrite(PinA1, 0);
  analogWrite(PinA2, speed);
  analogWrite(PinB1, speed);
  analogWrite(PinB2, 0);
}
void STOP() //Стоп
{
  analogWrite(PinA1, 0);
  analogWrite(PinA2, 0);
  analogWrite(PinB1, 0);
  analogWrite(PinB2, 0);
  delay (2000);
}

Описание скетча:

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

const int PinA1 = 5;  // (ШИМ) вывод 5 соединен с выводом А1
const int PinA2 = 6;  // (ШИМ) вывод 6 соединен с выводом А2
const int PinB1 = 10; // (ШИМ) вывод 10 соединен с выводом (pin) B1
const int PinB2 = 11;  //(ШИМ) вывод 11 соединен с выводом (pin)B2

Управление скоростью осуществляется с помощью ШИМ, для удобства используем переменную speed, в которой указываем скорость двигателя. Значение «0» - значит остановка, а «255» равносильно напряжению питания, и двигатели крутятся на максимальной скорости.

byte speed = 250;  // измените это значение (0-255), 
                  //чтобы управлять скоростью вращения двигателей

Далее, мы указываем, что данные выводы используем как выход.

  pinMode(PinA1, OUTPUT); // установите контакты на выход
  pinMode(PinA2, OUTPUT);
  pinMode(PinB1, OUTPUT);
  pinMode(PinB2, OUTPUT);

Направление вращения двигателя осуществляется с помощью выводов A1 и A2 - для первого двигателя, B1 и B2 - для второго двигателя, то есть, если подать на вывод A1 — 0B (LOW), а на A2 — 5B (HIGH), двигатель A будет вращаться вперед (так же и для двигателя B). Для вращения назад, необходимо подать на A1 — 5B (HIGH), а на A2 — 0B (LOW), двигатель A будет вращаться назад (так же и для двигателя B). На основании этого напишем небольшие функции, которые позволят вращать оба двигателя вперед, назад, в противоположном направлении, и останавливать вращение обоих двигателей.

void backward() // Вперед.
{
  analogWrite(PinA1, 0);
  analogWrite(PinA2, speed);
  analogWrite(PinB1, 0);
  analogWrite(PinB2, speed);
}
void forward() //Назад...
{
  analogWrite(PinA1, speed);
  analogWrite(PinA2, 0);
  analogWrite(PinB1, speed);
  analogWrite(PinB2, 0);
}
void left() // В левую сторону
{
  analogWrite(PinA1, speed);
  analogWrite(PinA2, 0);
  analogWrite(PinB1, 0);
  analogWrite(PinB2, speed);
}
void right() //В правую сторону
{
  analogWrite(PinA1, 0);
  analogWrite(PinA2, speed);
  analogWrite(PinB1, speed);
  analogWrite(PinB2, 0);
}
void STOP() //Стоп
{
  analogWrite(PinA1, 0);
  analogWrite(PinA2, 0);
  analogWrite(PinB1, 0);
  analogWrite(PinB2, 0);
  delay (2000);
}

Реализуем вывод в монитор порта информацию о направлении вращения двигателя в данный момент.

  Serial.println("Avanti");
  forward();
  delay(2000);

Реализуем вывод в монитор порта информацию о направлении вращения двигателя в данный момент.

Это поможет определить, правильно ли мы всё подключили, или нет. Если двигатели будут вращаться не в том направлении, как выводится в мониторе порта, то необходимо поменять местами провода подключения двигателей, и повторить проверку. Эта информация позволит настроить минимальный код для создания радиоуправляемой машины. Вот такие машинки я делал на Arduino и ESP8266 с использованием драйвера L298:

Используя драйвер MX1508, собрать данные проекты не составит труда, так как код из проектов выше совместим с драйвером MX1508.

Вот такие машинки я делал на Arduino и ESP8266 с использованием драйвера L298

Появились вопросы или предложения, не стесняйся, пиши в комментарии!

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке.

]]>
#28. Подключение модуля освещенности к Arduino. http://portal-pk.ru/news/274-28-podklyuchenie-modulya-osveshchennosti-k-arduino.html Константин Portal-PK 2020-11-21T12:39:28+03:00 В данном Arduino уроке подключим модуль освещённости к Arduino, и научимся настраивать датчик для работы при различной освещённости. В основе датчика лежит светочувствительный полупроводниковый прибор – фоторезистор. Что такое фоторезистор, и как его можно подключить к Arduino, рассматривали в предыдущем уроке: «Подключение фоторезистора к Arduino». В чем преимущество модуля освещённости, и как его использовать в Arduino проектах, рассмотрим в данном уроке.

Два вида моделей освещённости.

При покупке модуля освещённости, нужно определиться с вашей задачей. Что вы планируете собрать, и как должен работать модуль освещённости. Это связано с тем, что модули освещённости бывают разные. На фото ниже приведены 2 модуля освещённости.

Два вида моделей освещённости.

Аналоговый модуль освещённости KY-018.

Arduino модуль освещённости KY-018 черного цвета. Этот модуль состоит из фоторезистора и линейного резистора 10 кОм. Сопротивление фоторезистора будет уменьшаться при наличии света, и увеличиваться при его отсутствии. Выход аналоговый, и он определяет интенсивность света.

Аналоговый модуль освещённости KY-018.

Схема подключения модуля освещённости KY-018 к Arduino.

Схема подключения модуля освещённости KY-018 к Arduino.

На модуль подается питание 5 Вольт, а в зависимости от освещенности в помещении, на выходе модуля (S) меняется напряжение от 0 до 5 Вольт. При подаче этого сигнала на аналоговый вход микроконтроллера, Arduino преобразует сигнал, при помощи АЦП, в диапазоне значений от 0 до 1023.

Скетч для модуля освещённости KY-018.

Скетч для модуля освещённости KY-018.

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

byte sensorPin = A0;
byte ledPin = 3;
// Присваиваем имя для цифрового значения аналогового входа A0
// int округляет значения 
int value = 0;
void setup() {
  // Пин 3 со светодиодом будет выходом (англ. «output»)
  pinMode(ledPin, OUTPUT);
  // Пин A0 с фоторезистором будет входом (англ. «input»)
  pinMode(sensorPin, INPUT);
}
void loop() {
  // Считываем значение с фоторезистора на аналоговом входе A0
  value = analogRead(sensorPin);
  // value значение в диапозоне от 0 до 1023
  // Полученные значения на аналоговом входе A0 делим на 4 
  //чтобы уложиться в диопозон от 0 до 255
  data = value / 4;
  // Включаем светодиод с полученной ранее мощностью - от 0 до 255
  analogWrite(ledPin, data);
}

Цифровой датчик освещённости на LM393.

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

Цифровой датчик освещённости на LM393.

Модуль освещенности на LM393.

Модуль освещенности на LM393 используется для измерения интенсивности света в различных устройствах, таких как: автоматизация света (включение света ночью), в роботах (определение дня или ночи) и приборах, контролирующих уровень освещенности. Измерение осуществляется с помощью светочувствительного элемента (фоторезистора), который меняет сопротивление в зависимости от освещенности.

Технические параметры

  • Напряжение питания: 3.3 В. - 5.5 В.
  • Потребляемый ток: 10 мА.
  • Цифровой выход: TTL (лог 1 или лог 0)
  • Аналоговый выход: 0 В. … Vcc
  • Диаметр монтажного отверстия: 2.5 мм.
  • Выходной ток: 15 мА.
  • Габариты: 42мм. х 15мм. х 8мм.

Общие сведения датчик освещённости на LM393.

Существуют два модуля на базе LM393, их визуальное отличие только в количестве выводов (3 pin и 4 pin), дополнительный вывод добавлен для снятия прямых показаний с фоторезистора (аналоговый выход), по аналогии работы модуля KY-018. Рассмотрим четырех контактный вариант модуля. У этих двух модулей измерение осуществляется с помощью фоторезистора, который изменяет напряжение в цепи, в зависимости от количества света, попадающего на него. Чтобы представить, как свет будет влиять на фоторезистор, приведу краткую таблицу.

Общие сведения датчик освещённости на LM393.

Модуль освещенности с четырьмя выводами содержит два выходных контакта, аналоговый и цифровой, и два контакта для подключения питания. Для считывания аналогово сигнала предусмотрен отдельный вывод «AO», с которого можно считать показания напряжения с 0 В … 3.3 В или 5 В, в зависимости от используемого источника питания. Цифровой вывод DO, устанавливается в лог «0» или лог «1», в зависимости от яркости, чувствительность выхода можно регулировать с помощью поворотного потенциометра. Выходной ток цифрового выхода способен выдать более 15 мА, что очень упрощает использование модуля, и дает возможность использовать его, минуя контроллер Arduino, и подключая его напрямую к входу одноканального реле, или одному из входов двухканального реле. Принципиальная схема модуля освещенности на LM393 с 3 pin и 4 pin, показана ниже.

Принципиальная схема модуля освещенности на LM393 с 4 pin.

Принципиальная схема модуля освещенности на LM393 с 4 pin

Принципиальная схема модуля освещенности на LM393 с 3 pin.

Принципиальная схема модуля освещенности на LM393 с 3 pin

Теперь, как же работает схема. Фоторезистор показан Foto (IN). Основная микросхема модуля - это компаратор LM393 (U1), который производит сравнение уровней напряжения на входах INA- и INA+. Чувствительность порога срабатывания задается с помощью потенциометра R2, и, в результате сравнений, на выходе D0, микросхемы U1, формируется лог «0», или лог «2», который поступает на контакт D0 разъема J1.

Цифровой датчик освещённости на LM393.

Назначение J1 (в исполнении 4 pin)

  • VCC - «+» питание модуля
  • GND - «-» питание модуля
  • D0 - цифровой выход
  • A0 -аналоговый выход

Назначение J1 (в исполнении 3 pin)

  • VCC - «+» питание модуля
  • GND - «-» питание модуля
  • D0 - цифровой выход

Подключение модуля освещенности к Arduino UNO.

Подключение модуля освещенности к Arduino UNO.

Подключение модуля освещенности к Arduino NANO

Подключение модуля освещенности к Arduino UNO

Необходимые детали:

  • Arduino UNO или Arduino NANO
  • Модуль освещенности, LM393
  • Провод DuPont, 2,54 мм.
  • Кабель USB 2.0

Подключение:

В данном примере буду использовать модуль освещенности LM393, 3 pin, и Arduino UNO, все данные будут передаваться в «Мониторинг порта». Схема не сложная, необходимо всего три провода, сначала подключаем D0 к 2 цифровому пину Arduino, осталось подключить питание GND к GND и VCC к 5V (можно запитать и от 3.3В), схема собрана, теперь надо подготовить программную часть.

Запускаем среду разработки и загружаем данный скетч, затем открываем мониторинг порта.

int pinD0 = A1;                    // Пин к которому подключен D0
// Присваиваем имя для порта 9 со светодиодом
#define LED 13

void setup() 
{
  // Пин 9 со светодиодом будет выходом (англ. «output»)
  pinMode(LED, OUTPUT);
  pinMode (pinD0, INPUT);          // Установим вывод A1 как вход
  Serial.begin (9600);             // Задаем скорость передачи данных
}

void loop() 
{
  int xD0;                     // Создаем переменные
  xD0 = digitalRead (pinD0);        // считываем значение с порта pinD0

  Serial.print("Sensor: ");         // Выводим текст
    
  if (xD0 == HIGH)                  // Если xD0 равно "1" 
   {            
     Serial.println ("ON");         // Выводим текст
     digitalWrite(LED, HIGH);
   }
  else
   {
    Serial.println ("OFF");         // Если xD0 равно "0" 
    digitalWrite(LED, LOW);
   }
delay (500);                        // Ждем 500 мкс.
}

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

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

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

Как видим, датчиков освещенности для Arduino проектов существует несколько.

В этом уроке мы рассмотрели, как подключить модуля освещенности к Arduino, в предыдущем уроке мы подключили фоторезистор к Arduino.

Появились вопросы или предложения, не стесняйся, пиши в комментарии!

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке.

]]>
#27. Подключение фоторезистора к Arduino. http://portal-pk.ru/news/273-27-podklyuchenie-fotorezistora-k-arduino.html Константин Portal-PK 2020-11-16T16:23:21+03:00 Сегодня в уроке рассмотрим, что такое фоторезистор, и подключим его в Arduino UNO и Arduino NANO. Рассмотрим пару примеров как с помощью данного элемента электрической цепи можно управлять яркостью светодиода и светильника.

Что такое Фоторезистор?

У полупроводниковых материалов есть много интересных свойств. Одно из них – изменение сопротивления под действием света.Электрическое сопротивление полупроводниковых элементов используется в приборах под названием «фоторезистор».

Что такое Фоторезистор?

Полупроводниковый резистор может изменять параметры электрического тока, в зависимости от интенсивности освещения. Это свойство часто используют на практике для создания устройств, управляемых потоком излучения. Сегодня промышленность поставляет на рынок фоторезисторы с различными характеристиками, а это значит, что они еще находят применение в современных электротехнических устройствах.

Фоторезистор — это полупроводниковый прибор (датчик), который при облучении светом изменяет (уменьшает) свое внутреннее сопротивление.

Устройство фоторезистора.

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

Устройство фоторезистора.

Напыленный слой соединяют с электродами, на которые поступает электрический ток.

Подключение фоторезистора к Arduino.

В этом уроке соберем электрическую схему «умного» светильника. Если в одном из предыдущих уроков, с помощью ШИМ сигнала, изменяли яркость светодиода, то сегодня мы будем использовать фоторезистор в схеме для автоматического включения светодиода. Фоторезистор будет играть роль переменного сопротивления, которое изменяет напряжение на аналоговом входе A0.

Подключение фоторезистора к Arduino.

Для урока понадобиться:

  • Arduino Uno или Arduino Nano
  • макетная плата
  • 1 фоторезистор
  • 1 светодиод
  • 2 резистора 220 Ом
  • провода «папа-папа»

Схема подключения фоторезистора к Arduino UNO.

Схема подключения фоторезистора к Arduino UNO.

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

byte sensorPin = A0;
byte ledPin = 3;
// Присваиваем имя для цифрового значения аналогового входа A0
// int округляет значения 
int value = 0;
void setup() {
  // Пин 3 со светодиодом будет выходом (англ. «output»)
  pinMode(ledPin, OUTPUT);
  // Пин A0 с фоторезистором будет входом (англ. «input»)
  pinMode(sensorPin, INPUT);
}
void loop() {
  // Считываем значение с фоторезистора на аналоговом входе A0
  value = analogRead(sensorPin);
  // value значение в диапозоне от 0 до 1023
  // Если значение value на входе A0 меньше 500, включаем светодиод
  if (value<500) digitalWrite(ledPin, HIGH);
  // В противном случае (если value>500), выключаем светодиод 
  if (value>500) digitalWrite(ledPin, LOW);
}

Пояснения к коду:

  • для удобства, создали переменные: подключения фоторезистора и светодиода;
  • оператор int указывает, что значение value может принимать только целое число, а начальное значение value равно нулю;
  • условный оператор if позволяет определить действие при истинном условии. Оператор else позволяет определить действие, когда условие ложно.

Скетч умного светильника на Arduinoи фоторезисторе.

byte sensorPin = A0;
byte ledPin = 3;

// Присваиваем имя для цифрового значения аналогового входа A0
// int округляет значения 
int value = 0;
 
void setup() {
  // Пин 3 со светодиодом будет выходом (англ. «output»)
  pinMode(ledPin, OUTPUT);
  // Пин A0 с фоторезистором будет входом (англ. «input»)
  pinMode(sensorPin, INPUT);
}
 
void loop() {
  // Считываем значение с фоторезистора на аналоговом входе A0
  value = analogRead(sensorPin);
  // value значение в диапозоне от 0 до 1023
  // Полученные значения на аналоговом входе A0 делим на 4 
  //чтобы уложиться в диопозон от 0 до 255
  data = value / 4;
  
  // Включаем светодиод с полученной ранее мощностью - от 0 до 255
  analogWrite(ledPin, data);
}

Схема подключения остается без имения. Внесем небольшие изменения в коде, и вот, что у нас получится.

Пояснения к коду:

  • в этом скетче мы добавили переменную data, которая равна value, деленная на 4;
  • пин 9 мы использовали, как аналоговый выход, который плавно изменяет яркость свечения светодиода, в зависимости от значения data.

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

В этом уроке мы рассмотрели, как подключить фоторезистор к Arduino, в предыдущем уроке мы подключили инфракрасный датчик препятствия YL-63 к Arduino.

В этом уроке мы рассмотрели, как подключить фоторезистор к Arduino, в предыдущем уроке мы подключили инфракрасный датчик препятствия YL-63 к Arduino.

Появились вопросы или предложения, не стесняйся, пиши в комментарии!

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке.


]]>
#26. Подключение инфракрасного датчика препятствия YL-63 к Arduino. http://portal-pk.ru/news/272-26--podklyuchenie-infrakrasnogo-datchika-prepyatstviya-yl-63.html Константин Portal-PK 2020-11-11T16:11:02+03:00 Сегодня в Arduino Уроке рассмотрим принцип работы инфракрасного датчика препятствия, или как еще его называют, датчик обхода препятствия YL-63 (или FC-51). И научимся подключать датчик к Arduino и рассмотрим пример кода.

Инфракрасный датчик препятствия я YL-63 широко применяется в робототехнике, когда нужно определить препятствие, и объехать его. Поэтому его и называют, иногда, датчиком обхода препятствий. Кроме робототехники данный датчик можно использовать в других Arduino проектах, в которых необходимо определить препятствия. Я использовал данный датчик в следующих Arduino проектах:

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

Технические параметры YL-63 (FC-51).

  • Напряжение питания: 3.3 В - 5.5 В.
  • Потребляемый ток: 10 мА.
  • Цифровой выход: TTL (лог 1 или лог 0)
  • Диаметр монтажного отверстия: 2.5 мм.
  • Выходной ток: 15 мА.
  • Габариты: 42мм. х 15мм. х 8мм.

Описание датчика препятствия YL-63 (FC-51).

Модуль содержит инфракрасный передатчик (ИК диод), излучающий свет в прямом направлении (~ 700 нм, этот свет не виден невооруженным глазом, его можно увидеть только камерой), и приемник (фотодиод), который измеряет отраженное ИК излучение.

700 нм, этот свет не виден невооруженным глазом, его можно увидеть только камерой)

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

одуль содержит инфракрасный передатчик (ИК диод), излучающий свет в прямом направлении

Основная микросхема ИК датчика препятствия - это компаратор LM393 (U1), который производит сравнение уровней напряжений на входах INB- и INB+. Чувствительность порога срабатывания задается с помощью потенциометра R2 и, в результате сравнений, на выходе OUTB микросхемой U1 формируется «LOW» или «HIGH». Принципиальная схема ИК модуля препятствия показана на рисунке ниже.

Принципиальная схема ИК модуля препятствия

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

Оптический датчик YL-63 относится к классу диффузионных.

Коэффициенты расстояния для отражения от различных материалов.

Коэффициенты расстояния для отражения от различных материалов.

Различное отражение и поглощение излучения разных материалов используются для работы воспринимающего узла тахометра. Предположим, у нас есть двигатель Стирлинга. Требуется узнать количество оборотов в минуту вала двигателя. Нас выручит YL-63. Достаточно приклеить на маховик фрагмент белой бумаги, направить луч датчика на маховик и получим воспринимающий узел тахометра. Для снижения последствий различных помех, обрабатывающим микроконтроллером накапливаются данные, полученные от датчика за короткий промежуток времени, и производится усреднение. Датчик YL-63 может работать в приборах, не имеющих микроконтроллера.

Индикаторы на плате датчика YL-63.

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

Индикаторы на плате датчика YL-63.

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

Контакты YL-63.

Датчик препятствия YL-63 ( FC-51) имеет вилку разъема из трех контактов:

Индикаторы на плате датчика YL-63.

  • VCC – питание,
  • GND – общий провод,
  • OUT – выход.

Установка расстояния срабатывания.

Установка расстояния срабатывания.

Настройку устройства облегчает работа индикатора обнаружения. Это позволяет настроить YL-63 (FC-51) на срабатывание в реальных условиях. Установка чувствительности датчика выполняется с помощью переменного резистора, установленного на плате. Препятствие устанавливается на требуемом удалении от фотоприборов датчика. Поворотом подвижного контакта переменного резистора, на плате модуля YL-63, выполняется установка расстояния срабатывания, тем самым добиваются включения красного светодиода. Затем проверяют дистанцию срабатывания перемещением отражающего объекта.

Подключение ИК модуля препятствия YL-63 к Arduino.

Необходимые детали:

  • Arduino UNO R3
  • ИК модуль препятствия YL-63
  • Провод DuPont, 2,54 мм, 20 см

Подключение ИК модуля препятствия YL-63 к Arduino.

В данном примере буду использовать ИК модуль препятствия, YL-63 и Arduino UNO, данные будут передаваться в «Мониторинг порта». Схема не сложная, сначала необходимо подключить питание, GND к GND и VCC к 5V (можно записать и от 3,3В.), затем подключаем вывод OUT к 7 пину Arduino. Схема подключения ниже.

Подключение ИК модуля препятствия YL-63 к Arduino.

Запускаем среду разработки и загружаем данный скетч, затем открываем мониторинг порта.

int irsensor= 7;                    // Вывод OUT на модуле подключен к выходу 7 Arduino
int sensorvalue;                    // Переменная для хранения показаний датчика 
 
void setup()                
{
 Serial.begin(9600);                // Задаем скорость передачи данных
 pinMode(irsensor,INPUT);           // Установим вывод D0 как вход                                                                                                                                                                                
}
 
void loop()
{
 sensorvalue=digitalRead(irsensor); // Считываем показания в переменной sensorvalue.
 Serial.print("Sensor ==");         // Выводим текст
 Serial.println(sensorvalue);       // Выводим текст
 if (sensorvalue==1)
 {
  Serial.println(" No obstacle");   // Выводим текст
  digitalWrite(13,LOW);             // Выключаем светодиод
  delay (500);                      // Ждем 500 мкс
 }
  else 
 {
 Serial.println(" Obstacle ");      // Выводим текст
 digitalWrite(13,HIGH);             // Включаем светодиод
 delay (500);                       // Ждем 500 мкс
 }
}

В мониторинге порта можно увидеть показания с модуля препятствия YL-63 . При выводе в монитор порта значения «1», - значит, что препятствия нет. Вывод значения «0» - означает, что препятствие найдено.

Подключение ИК модуля препятствия YL-63 к Arduino. Запускаем среду разработки и загружаем данный скетч, затем открываем мониторинг порта.

Используя такую несложную логику можно настроить работу робота, чтобы он обнаруживал препятствия, и объезжал их. Для реализации данного алгоритма работы понадобится несколько модулей препятствия, например, 3 штуки. Существуют готовые модули с 5 датчиками препятствия. Как подключить данный модуль препятствия будем рассматривать в следующих Arduino уроках и Arduino проектах.

Подключение ИК модуля препятствия YL-63 к Arduino.

В данном уроке рассмотрели Подключение инфракрасного датчика препятствия YL-63 к Arduino. В предыдущем уроке мы рассматривали, Подключение датчика температуры и давления BMP180 к Arduino.

Появились вопросы или предложения, не стесняйся, пиши в комментарии!

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке.

]]>
#25. Подключение датчика температуры и давления BMP180 к Arduino. http://portal-pk.ru/news/271-25-podklyuchenie-datchika-temperatury-i-davleniya-bmp180-k.html Константин Portal-PK 2020-11-08T07:51:02+03:00 Сегодня в Arduino уроке научимся подключать датчик температуры и давления BMP180 к Arduino.

Данный датчик отлично подойдёт для Arduino проекта, в котором необходимо измерять температуру и давление окружающей среды. Благодаря I2C интерфейсу подключения, данный датчик не занимает дополнительных пинов. Напряжение питания от 3.3 до 5 вольт, что позволяет использовать BMP180 как с Arduino, так и с такими микроконтроллерами как ESP32, ESP8266 и STM32. Если вас интересуют уроки по программированию ESP32, ESP8266, то на моем втором сайте «Ардуино технологии» вы найдете уроки по данной теме, и много другой полезной информации.

Сегодня в Arduino уроке научимся подключать датчик температуры и давления BMP180 к Arduino.

BMP180 достаточно точный датчик, погрешность измерения давления: 0,1 гектопаскаль, и погрешность измерения температуры: 0,1°С.

Параметры датчика давления и температуры BMP180.

  • Напряжение питания: 3.3 В – 5 В.
  • Рабочий ток: 0.5 мA.
  • Диапазон измеряемого давления:300 гПа. – 1100 гПа.
  • Интерфейс: I2C
  • Время срабатывания: 4.5 мс.
  • Точность измерения давления: 0.1 гектопаскаль
  • Точность измерения температуры: 0.1°С
  • Габариты: 15 мм. х 14 мм.

Общие сведения.

Параметры датчика давления и температуры BMP180.

Давайте рассмотрим данный датчик. В левой части расположен сам сенсорный датчик BMP180 фирмы Bosch. Так как датчик BMP 180 работает от 3.3В (а почти все платы Arduino работают на 5В), на плате предусмотрен стабилизатор напряжения XC6206P332MR в корпусе SOT-23, который выдает на выходе напряжение в 3.3В, рядом установлена обвязка стабилизатора, состоящая из двух керамических конденсаторов на 1 мкФ. Подключение осуществляется по интерфейсу I2C, линии SCL и SDA выведены на группу контактов на другой стороне модуля, туда же выведено и питание. Последние два резистора на 4.7 кОм необходимы для подтяжки линии SCL и SDA к питанию, конечно, при необходимости, их можно выпаять, если используете несколько устройств на I2C линии.

Рассмотрим датчик давления и температуры BMP180 (Digital Pressure Sensor)

Рассмотрим датчик давления и температуры BMP180 (Digital Pressure Sensor)

Датчик поставляется в виде модуля (на печатной плате) с 4 или 5 выводами:

  • если у модуля 4 вывода (VIN GND SCL SDA), то на вывод VIN подаётся питание +3,3в.
  • если у модуля 5 выводов (VIN 3V3 GND SCL SDA), то на вывод VIN подаётся +5в. (так же можно запитать модуль с 5 выводами от 3,3в, подав их на вывод 3V3 оставив вывод VIN свободным)
  • если у модуля 5 выводов с выводом IO или VDDIO, то считайте, что у вашего модуля 4 вывода. Не подавайте +5в!!!

Выводы датчика BMP180:

1 - CS, 2 - VDD, 3 - VDDIO, 4 - MOSI, 5 - CSL (CSLK), 6 - SDA (MISO), 7 - GND.

Датчик имеет возможность передачи данных, используя интерфейсы I2C (выводы: 5-CSL и 6-SDA) или SPI (выводы: 1-CS, 4-MOSI, 5-CSLK и 6-MISO)

В рассматриваемых модулях используется протокол I2C, а значит, выводы 1 и 4 датчика не используются, но должны быть припаяны к плате для симметрии

Виды некоторых модулей с установленным датчиком BMP180:

Виды некоторых модулей с установленным датчиком BMP180

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

Выводы модуля BMP180:

  • VIN (Vcc, Vdd) плюс питания;
  • GND (-) (англ. GrouND) общий (минус питания);
  • SDA (DA) (англ. Serial DAta) линия данных, интерфейс I2C
  • SCL (CL) (англ. Serial CLock) линия тактирования, интерфейс I2C

Принципиальная схема датчика BMP180, показана ниже.

Принципиальная схема датчика BMP180

Подключение датчика давления BMP180 к Arduino.

Необходимые детали:

  • Датчик давления BMP180
  • Arduino UNO
  • Провод DuPont 10x, 2,54 мм.

Подключение датчика давления BMP180 к Arduino:

В данном примере используем датчик BMP 180 и плату Arduino NANO, все полученные показания отправляем в «Монитор порта», в принципе и все, осталось собрать схему по рисунку ниже. Для интерфейса I2C на плате Arduino предусмотрено только два вывода A4 и A5.

 датчик BMP 180 и плату Arduino NANO

Подключение датчика давления BMP180 к Arduino NANO.

Подключение датчика давления BMP180 к Arduino UNO

Подключение датчика давления BMP180 к Arduino UNO.

Теперь, о программной части. Для нашего удобства разработана библиотека BMP180 Breakout Arduino Library, которая позволяет упросить работу с датчиком, скачиваем и устанавливаем ее.

#include <SFE_BMP180.h>
#include <Wire.h>

SFE_BMP180 pressure;                          // Объявляем переменную для доступа к SFE_BMP180

void setup()
{
 Serial.begin(9600);                          // Задаем скорость передачи данных
 Serial.println("REBOOT");                    // Вывод текста "Перезагрузка"

 if(pressure.begin())                         // Инициализация датчика
     Serial.println("BMP180 init success");   // Вывод текста "BMP180 подключен"
   else{                                      // В противном случаи, датчик не подключен
     Serial.println("BMP180 init fail\n\n");  // Вывод текста "BMP180 не подключен"
     while(1);                                // Пауза.
       }
}

void loop()
{
  char status;
  double T,P,p0,a;

/* Так как давление зависит от температуры, надо сначало узнать температуру 
 * Считывание температуры занимает какоето время. 
 * Если все хорошо, функция pressure.startTemperature вернет status с количеством милисикунд
 * которые нужно подождать. Ксли какае то проблема, то функция вернет 0.
*/

  status = pressure.startTemperature();       // Считывание показания
  if(status!=0){                              // Если значение status не 0, выполняем следующию команду.
     delay(status);                           // Ждем     
     status = pressure.getTemperature(T);     // Полученые показания, сохраняем в переменную T
      if(status!=0){                          // Если все хорошо, функция вернет 1, иначе вернет 0
         Serial.print("Temperature: ");       // Вывод текста "Температура"
         Serial.print(T,2);                   // Вывод показания переменной "Т"
         Serial.println(" C, ");              // Вывод текста "С"

/* Определяем показания атмосферного давления
 * Параметр указывает расширение, от 0 до 3 (чем больше расширение, тем больше точность, тем долше ждать)
 * Если все хорошо, функция pressure.startTemperature вернет status с количеством милисикунд
 * которые нужно подождать. Если какая то проблема, то функция вернет 0.
*/

  status = pressure.startPressure(3);         // Считывание показания
  if(status!=0){                              // Если значение status не 0, выполняем следующию команду.
     delay(status);                           // Ждем
     status = pressure.getPressure(P,T);      // Полученные показания, сохраняем в переменную P
      if(status!=0){                          // Если все хорошо, функция вернет 1, иначе вернет 0 
         Serial.print("Absolute pressure: "); // Вывод текста "Атмосферное давление"
          Serial.print(P,2);                  // Вывод показания переменной mBar
          Serial.print(" mbar, ");            // ПВывод текста "mBar"
          Serial.print(P*0.7500637554192,2);  // Вывод показания в mmHg
          Serial.println(" mmHg");}           // Вывод текста "mmHg"

  else Serial.println("error retrieving pressure measurement\n");}    // Ошибка получения давления
  else Serial.println("error starting pressure measurement\n");}      // Ошибка запуска получения давления
  else Serial.println("error retrieving temperature measurement\n");} // Ошибка получения температуры
  else Serial.println("error starting temperature measurement\n");    // Ошибка запуска получения температуры
  delay(5000);                                                        // Пауза в 5с
}

Загружаем скетч в плату Arduino, и если все правильно подключено, то в окне мониторинга порта можно увидеть температуру и атмосферное давление.

Загружаем скетч в плату arduino,

В данном уроке рассмотрели Подключение датчика температуры и давления BMP180 к Arduino. В предыдущем уроке мы рассматривали, как можно реализовать анимацию на сегментном дисплее TM1637.

В данном уроке рассмотрели Подключение датчика температуры и давления BMP180 к Arduino.

Появились вопросы или предложения, не стесняйся, пиши в комментарии!

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке

]]>
Конденсатор. Принцип работы, основные характеристики. http://portal-pk.ru/news/270-kondensator-princip-raboty-osnovnye-harakteristiki.html Константин Portal-PK 2020-10-29T13:46:00+03:00 Конденсатор — распространенный двухполюсный электронный компонент, главным свойством которого является способность накапливать электрический заряд и «отпускать» его обратно. Процесс накопления заряда называется зарядкой, а процесс его потери – разрядкой.

Выпускаются конденсаторы самых разных типов и конструкций. Наиболее распространены в электронике и любительской радиотехнике следующие виды:

  • Керамические конденсаторы
  • Танталовые конденсаторы
  • Электролитические конденсаторы
  • Конденсаторы переменной емкости

Выпускаются конденсаторы самых разных типов и конструкций.

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

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

В простейшем виде конденсатор состоит их двух металлических пластин

При включении конденсатора в цепь с источником тока, под воздействием электрического поля на одной обкладке накапливается положительный заряд, а на другой – отрицательный. Это будет происходить до тех пор, пока на обкладках не накопится максимально возможное количество заряда. Оно определяется важной характеристикой конденсатора — емкостью. Емкость конденсатора определяется количеством заряда, которое он может накопить при заданном напряжении:

Формула емкости.

Формула емкости

C — емкость конденсатора, q — заряд, U — напряжение.

Емкость зависит от таких физических характеристик, как, например, площадь обкладок, расстояние между ними и диэлектрическая проницаемость диэлектрика. Единицей измерения емкости конденсаторов в международной системе единиц (СИ) является Фарад (Ф).

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

Основные параметры конденсаторов:

  • Основной характеристикой конденсатора является его ёмкость, характеризующая способность конденсатора накапливать электрический заряд. В обозначении конденсатора фигурирует значение номинальной ёмкости, в то время как реальная ёмкость может значительно меняться в зависимости от многих факторов. Реальная ёмкость конденсатора определяет его электрические свойства. Так, по определению ёмкости, заряд на обкладке пропорционален напряжению между обкладками. Типичные значения ёмкости конденсаторов составляют от единиц пикофарад до тысяч микрофарад. Однако существуют конденсаторы (ионисторы) с ёмкостью до десятков фарад.
  • Конденсаторы также характеризуются удельной ёмкостью — отношением ёмкости к объёму (или массе) диэлектрика. Максимальное значение удельной ёмкости достигается при минимальной толщине диэлектрика, однако при этом уменьшается его напряжение пробоя.
  • Плотность энергии электролитического конденсатора зависит от конструктивного исполнения. Максимальная плотность достигается у больших конденсаторов, где масса корпуса невелика по сравнению с массой обкладок и электролита.
  • Другой, не менее важной характеристикой конденсаторов является номинальное напряжение — значение напряжения, обозначенное на конденсаторе, при котором он может работать в заданных условиях в течение срока службы с сохранением параметров в допустимых пределах. Номинальное напряжение зависит от конструкции конденсатора и свойств применяемых материалов. При эксплуатации напряжение на конденсаторе не должно превышать номинального. Для многих типов конденсаторов с увеличением температуры допустимое напряжение снижается, что связано с увеличением тепловой скорости движения носителей заряда и, соответственно, снижению требований для образования электрического пробоя.
  • Полярность. Многие конденсаторы с оксидным диэлектриком (электролитические) функционируют только при корректной полярности напряжения из-за химических особенностей взаимодействия электролита с диэлектриком. При обратной полярности напряжения электролитические конденсаторы обычно выходят из строя из-за химического разрушения диэлектрика с последующим увеличением тока, вскипанием электролита внутри и, как следствие, с вероятностью взрыва корпуса.

Основная классификация конденсаторов проводится по типу диэлектрика в конденсаторе. Тип диэлектрика определяет основные электрические параметры конденсаторов: сопротивление изоляции, стабильность ёмкости, величину потерь и др.

По виду диэлектрика различают:

  • Конденсаторы вакуумные (между обкладками находится вакуум).
  • Конденсаторы с газообразным диэлектриком.
  • Конденсаторы с жидким диэлектриком.
  • Конденсаторы с твёрдым неорганическим диэлектриком: стеклянные (стеклоэмалевые, стеклокерамические, стеклоплёночные), слюдяные, керамические, тонкослойные из неорганических плёнок.
  • Конденсаторы с твёрдым органическим диэлектриком: бумажные, металлобумажные, плёночные, комбинированные — бумажноплёночные, тонкослойные из органических синтетических плёнок.
  • Электролитические и оксидно-полупроводниковые конденсаторы. Такие конденсаторы отличаются от всех прочих типов, прежде всего, большой удельной ёмкостью. В качестве диэлектрика используется оксидный слой на металлическом аноде. Вторая обкладка (катод) — это или электролит (в электролитических конденсаторах), или слой полупроводника (в оксидно-полупроводниковых), нанесённый непосредственно на оксидный слой. Анод изготовляется, в зависимости от типа конденсатора, из алюминиевой, ниобиевой или танталовой фольги или спечённого порошка. Время наработки на отказ типичного электролитического конденсатора 3000-5000 часов при максимально допустимой температуре, качественные конденсаторы имеют время наработки на отказ не менее 8000 часов при температуре 105°С. Рабочая температура — основной фактор, влияющий на продолжительность срока службы конденсатора. Если нагрев конденсатора незначителен из-за потерь в диэлектрике, обкладках и выводах, (например, при использовании его во времязадающих цепях при небольших токах или в качестве разделительных), можно принять, что интенсивность отказов снижается вдвое при снижении рабочей температуры на каждые 10 °C вплоть до +25 °C. Твердотельные конденсаторы — вместо традиционного жидкого электролита используется специальный токопроводящий органический полимер или полимеризованный органический полупроводник. Время наработки на отказ ~50000 часов при температуре 85°С. ЭПС меньше чем у жидко-электролитических и слабо зависит от температуры. Не взрываются.

Последовательное соединение конденсаторов.

Последовательное соединение конденсаторов

При последовательном соединении конденсаторов уменьшается общая емкость и увеличивается общее напряжение конденсаторов. Общая емкость при последовательном соединении конденсаторов будет вычисляться по формуле:

Последовательное соединение конденсаторов

Общее напряжение будет равняться сумме напряжений всех конденсаторов.

Например: мы имеем три конденсатора по 30 мкФ x 100 В каждый. При их последовательном соединении общий конденсатор будет иметь следующие данные: 10 мкФ x 300 В.

Параллельное соединение конденсаторов.

Параллельное соединение конденсаторов

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

Параллельное соединение конденсаторов

Например: мы имеем три конденсатора 30 мкФ x 100 В, соединённые параллельно. Параметры всего набора конденсаторов в этом случае будут следующие: 90 мкФ x 100 В.

Соединение более двух конденсаторов последовательно редко встречается в реальных схемах. Хотя для увеличения общего напряжения такой набор может встретиться в высоковольтных источниках питания. А вот в низковольтных источниках довольно часто встречается параллельное соединение нескольких конденсаторов для сглаживания пульсаций после выпрямления при больших токах потребления.

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

Понравилась статья? Не забудь поделиться с друзьями в соц. сетях. А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

До встречи в следующем уроке. Спасибо за внимание!

Технологии начинаются с простого!

]]>
Обзор драйвера шагового двигателя DRV8825 и A4988. http://portal-pk.ru/news/269-obzor-draivera-shagovogo-dvigatelya-drv8825-i--a4988.html Константин Portal-PK 2020-10-07T15:01:41+03:00 На моем новом сайте про ЧПУ станки и ЧПУ технологии (CNC-tex.ru) вышли две новые статьи про драйвера шаговых двигателей DRV8825 иA4988.

драйвера шаговых двигателей DRV8825 иA4988

Драйвера DRV8825 иA4988 широко применяются в разработке ЧПУ станков различного назначения. Начиная от простых плоттеров для рисования и выкройки ткани и рекламной плёнки, до более сложных станков, таких как настольные фрезерные станки с ЧПУ. Кстати, данные драйвера также используются в 3D принтерах. Но последнее время использовать данные драйвера для управления шаговыми двигателями в 3D принтерах стали редко. Это связанно с тем, что DRV8825 иA4988 имеют небольшое деление шага A4988 максимум 1/16, а DRV8825 1/32. Также новые версии драйверов, например TMC-2208, обеспечивают более тихую работу шаговых двигателей.

Подробную информацию и техническое описание драйвера A4988

Подробную информацию и техническое описание драйвера A4988 читайте тут:

Драйвер шагового двигателя A4988.

Подробную информацию и техническое описание драйвера DRV8825

Подробную информацию и техническое описание драйвера DRV8825 читайте тут:

Драйвер шагового двигателя DRV8825. Подключение к Arduino.

Также рекомендую к прочтению Плата расширения для Arduino UNO, CNC shield v3 и драйверов A4988.

Если вы планируете собрать самостоятельно ЧПУ станок, то читайте

ЧПУ станок своими руками на базе arduino. Пошаговая инструкция + видео

Не забывайте подписываться на мой YouTube канал, вступить в группу Вконтакте, в группу на Facebook.

И всем пока-пока.

До встречи в следующей статье.

]]>
6 частых ошибок начинающих предпринимателей, и способы их избежать http://portal-pk.ru/news/268-6-chastyh-oshibok-nachinayushchih-predprinimatelei-i-sposoby.html Константин Portal-PK 2020-09-16T07:38:59+03:00

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


1.Использование чужой интеллектуальной собственности

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

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


2. Переоценка собственных возможностей

Предприниматели, даже начинающие, как правило, много знают и еще больше умеют. Они часто думают: «В этом нет ничего сложного, я, наверняка, сам смогу…». В четырех случаях из пяти это оказывается правдой. Но когда вы запускаете собственный бизнес, повторяйте, как мантру следующие слова: «Я не могу делать все, и не должен/не должна этого делать». Ваше время и энергия должны быть посвящены задачам, которые можете выполнять только вы как владелец бизнеса.

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


3. Упущение момента

Многие предприниматели склонны к перфекционизму. И вы тоже, если требуете лучшее из возможного, а оценка «достаточно хорошо» вас не устраивает. Но стремление к идеальному во всем способно убить бизнес. Подождите еще немного, и момент будет упущен. Например, если вы ищите место для своего кафе, рассматриваете варианты, но никак не выберете лучшее. Эксперты часто называют подобный образ мыслей «аналитическим параличом». Страх принять неверное решение буквально не дает двигаться вперед. Но дело в том, что играть в игру «а что, если…» можно бесконечно, так ни на что и не решившись.

Как избежать? Дайте себе время принять решение, но установите жесткие рамки. Например, два дня или одну неделю. А затем смело принимайте одну из сторон, - в конце концов, решитесь купить офис в Рязани (регион приведен в качестве примера) - и открывайтесь.



4. Работать non-stop

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

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


5. Сокращение неоправданных затрат

Какие статьи расходов сокращают предприниматели в первую очередь в кризис? Рекламу? Юридический отдел? В регионах многие компании оставили сотрудников на удалёнке. Но будьте осторожны, урезая бюджеты. Независимо от того, сколько денег это поможет сэкономить вам прямо сейчас, в конечном итоге вы можете заплатить намного больше. Если бизнес только развивается, вам более чем нужны и маркетологи, и юристы, не говоря уже о самом насущном вопросе - аренде офиса в Рязани (город опять же упомянут в качестве примера) или в другом актуальном для вас регионе.

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


6. Стремление быть всем для всех

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

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

]]>
Резистор http://portal-pk.ru/news/267-rezistor.html Константин Portal-PK 2020-07-26T15:28:54+03:00 Резистор — искусственное «препятствие» для тока. Сопротивление в чистом виде. Резистор ограничивает силу тока, переводя часть электроэнергии в тепло. Сегодня невозможно изготовить ни одно, сколько-нибудь функционального, электронного устройства без резисторов. Они используются везде: от компьютеров, до небольших проектов на Arduino.

Резистор — искусственное «препятствие» для тока. Сопротивление в чистом виде.

Сопротивление резистора — его основная характеристика. Основной единицей электрического сопротивления является Ом. На практике используются также производные единицы — килоом (кОм), мегаом (МОм), гигаом (ГОм), которые связаны с основной единицей следующими соотношениями:

1 кОм = 1000 Ом,
1 МОм = 1000 кОм,
1 ГОм = 1000 Мом

Купить набор резисторов для проектов на Arduino можно тут.

Ниже на рисунке видна маркировка резисторов на схемах:

Ниже на рисунке видна маркировка резисторов на схемах:

Наклонные линии обозначают мощность резистора до 1 Вт. Вертикальные линии и знаки V и X (римские цифры), указывают на мощность резистора в несколько Ватт, в соответствии со значением римской цифры.

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

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


Последовательное соединение резисторов.

Последовательное соединение резисторов применяется для увеличения сопротивления. То есть, когда резисторы соединены последовательно, общее сопротивление равняется сумме сопротивлений каждого резистора. Например, если резисторы R1 и R2 соединены последовательно, их общее сопротивление высчитывается по формуле:

Rобщ = R1 + R2

Это справедливо и для большего количества соединённых последовательно резисторов:

Rобщ = R1 + R2 + R3 + … + Rn

Цепь из последовательно соединённых резисторов будет всегда иметь сопротивление большее, чем у любого резистора из этой цепи.

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

Мощность при последовательном соединении.

При соединении резисторов последовательно электрический ток по очереди проходит через каждое сопротивление. Значение тока в любой точке цепи будет одинаковым. Данный факт определяется с помощью закона Ома. Если сложить все сопротивления, приведенные на схеме, то получится следующий результат:

R = 200 + 100 + 51 + 39 = 390 Ом

Мощность при последовательном соединении

Учитывая напряжение в цепи, равное 100 В, по закону Ома сила тока будет составлять

I = U/R = 100 В/390 Ом = 0,256 A

На основании полученных данных можно рассчитать мощность резисторов при последовательном соединении по следующей формуле:

P = I2 x R = 0,2562 x 390 = 25,55 Вт

Таким же образом можно рассчитать мощность каждого отдельно взятого резистора:

P1 = I2 x R1 = 0,2562 x 200 = 13,11 Вт;
P2 = I2 x R2 = 0,2562 x 100 = 6,55
Вт;
P3 = I2 x R3 = 0,2562 x 51 = 3,34
Вт;
P4 = I2 x R4 = 0,2562 x 39 = 2,55
Вт
.

Если сложить полученные мощности, то общая Р составит:

Робщ = 13,11 + 6,55 + 3,34 + 2,55 = 25,55 Вт

Параллельное соединение резисторов.


Параллельное соединение резисторов

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

Расчет параллельного сопротивления двух параллельно соединённых резисторов R1 и R2 производится по следующей формуле:

Rобщ = (R1 × R2) / (R1 + R2)

Параллельное соединение трёх и более резисторов требует более сложной формулы для вычисления общего сопротивления:

1 / Rобщ = 1 / R1 + 1 / R2 + … + 1 / Rn

Сопротивление параллельно соединённых резисторов будет всегда меньше, чем у любого из этих резисторов.

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

Мощность при параллельном соединении.

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

1/R = 1/200 + 1/100 + 1/51 + 1/39 ≈ 0,06024 Ом
R = 1 / 0,06024 ≈ 16,6 Ом

Мощность при параллельном соединении

Используя значение напряжения 100 В, по закону Ома рассчитывается сила тока

I = U/R = 100 В x 0,06024 Ом = 6,024 A

Зная силу тока, мощность резисторов, соединенных параллельно, определяется следующим образом

P = I2 x R = 6,0242 x 16,6 = 602,3 Вт

Расчет силы тока для каждого резистора выполняется по формулам:

I1 = U/R1 = 100/200 = 0,5 A;
I2 = U/R2 = 100/100 = 1 A;
I3 = U/R3 = 100/51 = 1,96 A;
I4 = U/R4 = 100/39 = 2,56 A

На примере этих сопротивлений прослеживается закономерность, что с уменьшением сопротивления, сила тока увеличивается.

Существует еще одна формула, позволяющая рассчитать мощность при параллельном подключении резисторов:

P1 = U2/R1 = 1002/200 = 50 Вт;
P2 = U2/R2 = 1002/100 = 100 Вт;
P3 = U22/R3 = 1002/51 = 195,9 Вт;
P4 = U22/R4 = 1002/39 = 256,4 Вт

Если сложить полученные мощности, то общая Р составит:

Робщ = 50 + 100 + 195,9 + 256,4 = 602,3 Вт

Цветовая маркировка резисторов.

Наносить номинал резистора на корпус числами — дорого и непрактично: они получаются очень мелкими. Поэтому номинал и допуск кодируют цветными полосками. Разные серии резисторов содержат разное количество полос, но принцип расшифровки одинаков. Цвет корпуса резистора может быть бежевым, голубым, белым. Это не играет роли. Если не уверены в том, что правильно прочитали полосы, можете проверить себя с помощью мультиметра или калькулятора цветовой маркировки.

Цветовая маркировка резисторов

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

Если же вы увлекаетесь ЧПУ станками, данные знания тоже будет не лишними.

Понравилась статья? Не забудь поделиться с друзьями в соц. сетях. А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

До встречи в следующем уроке. Спасибо за внимание!

Технологии начинаются с простого!

]]>
Лазерный станок с ЧПУ с АлиЭкспресс http://portal-pk.ru/news/266-lazernyi-stanok-s-chpu-s-aliekspress.html Константин Portal-PK 2020-07-19T08:56:35+03:00 Мое увлечение ЧПУ станками началось больше 3 лет. Все это время я собирал самодельные ЧПУ станки. Сегодня я буду собирать заводской лазерный станок с ЧПУ, купленный на АлиЭкспресс. У вас, наверное, возник вопрос что случилось? Почему заводской, а не самодельный станок с ЧПУ?

Все просто: сочетание прагматичности, логики и немного лени.

Более подробное описание смотрите на моем втором сайте X-TEX.

Дело обстояло так. Попался на сайте АлиЭкспресс автономный лазерно-гравировальный ЧПУ станок с рамой из алюминиевых профилей.

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

Сборка Лазерного станка с ЧПУ с АлиЭкспресс.

Сборку произвожу по инструкции, которая идет в комплекте со станком. Кстати, инструкцию перевел и немного доработал:Инструкция по сборке лазерно-гравировального станка CNC2-6550.

Сборку произвожу по инструкции

Собираем раму.

Собираем раму.Собираем каретки станка.

Собираем каретки станка.

Ставлю все на место.

Ставлю все на место.

Натягиваем ремни.

Натягиваем ремни.

Подключаем двигателя и пульт управления к плате управления.

Подключаем двигателя и пульт управления к плате управления.

Можно запускать.

Запуск Лазерного станка с ЧПУ с АлиЭкспресс.

Благодаря пульту управления станком можно управлять и без компьютера. В комплекте идет карта памяти, которая устанавливается в пульт станка с ЧПУ.

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

Центральная кнопка пульта включает лазер для настройки и определения положения заготовки.

Возможности пульта управления Лазерного станка с ЧПУ с АлиЭкспресс.

  • Перемещение по осям.
  • Включение и выключение лазера при нажатии кнопки.
  • Выбор файла с карты памяти и автономная работа.


Минусом пульта является невозможность перехода из перемещения осями в выбор файла.

Минусом пульта является невозможность перехода из перемещения осями в выбор файла.

Пример гравирования на Лазерном станке с ЧПУ.

На карте памяти есть несколько файлов для гравировки. Можно запустить и проверить работу станка. Как видим, станок работает, но очень медленно и прожигает сильно. Это связано с тем, что примеры с карты памяти рассчитаны на более слабый лазер.

Пример гравирования на Лазерном станке с ЧПУ.

Но для проверки работоспособности достаточно.

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

Не забывайте подписываться на мой YouTube канал, вступить в группу Вконтакте, в группу на Facebook.

И всем пока-пока.

До встречи в новом проекте.

]]>
Что такое макетная плата и как ей пользоваться? http://portal-pk.ru/news/265-chto-takoe-maketnaya-plata-i-kak-ei-polzovatsya.html Константин Portal-PK 2020-07-13T19:25:05+03:00 Для чего нужна макетная плата?

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

Прототип — это работающая модель устройства. Именно для прототипированя нам и понадобится макетная плата.

Прототип — это работающая модель устройства. Именно для прототипированя нам и понадобится макетная плата.

Беспаечные макетные платы (breadboard).

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

Беспаечные макетные платы (breadboard).

На рисунке ниже показан breadboard, на котором снято основание на нижней части. Как вы видите, на плате установлены ряды металлических пластин.

На рисунке ниже показан breadboard, на котором снято основание на нижней части. Как вы видите, на плате установлены ряды металлических пластин.

Каждая металлическая пластина имеет вид, приведенный на рисунке ниже. То есть, это не просто пластина, а пластина с клипсами, которые прячутся в пластиковой части монтажной платы. Именно в эти клипсы вы подключаете ваши провода.

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

Обратите внимание, что на одной рельсе пять клипс. Это общепринятый стандарт. Большинство беспаечных макетных плат реализуются именно таким образом. То есть, вы можете подключить до пяти компонентов включительно к отдельной рельсе на breadboard’е и они будут связаны между собой. Но ведь на плате десять отверстий в ряду! Почему мы ограничены пятью контактами? Вы, наверное, обратили внимание, что по центру монтажной платы есть отдельная рельса без пинов? Эта рельса изолирует пластины друг от друга.

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

 светодиод, установленный на беспаечную макетную плату.

Теперь рассмотрим макетные платы на 400 контактов. На таких платах, как правило, предусматривают две вертикально расположенные рельсы. Так называемые рельсы для питания.

\Теперь рассмотрим макетные платы.

Эти рельсы аналогичны по исполнению с горизонтальными, но при этом соединены друг с другом по всей длине. При разработке проекта вам часто необходимо питание для многих компонентов. Именно эти рельсы используются для питания. Обычно их отмечают «+» и «-» и двумя разными цветами — красным и голубым. Как правило, рельсы соединяют между собой, чтобы получить одинаковое питание по обеим сторонам макетной платы (смотрите на рисунке ниже). Кстати, нет необходимости подключать плюс именно к рельсе с обозначением «+», это исключительно подсказка, которая поможет вам структурировать ваш проект.

это исключительно подсказка, которая поможет вам структурировать ваш проект.


Центральная рельса без контактов изолирует две стороны беспаечной монтажной платы. Помимо изоляции, эта рельса выполняет вторую важную функцию. Большинство микросхем (ICs), изготавливаются в стандартных размерах. Для того, чтобы они занимали минимум места на монтажной плате, используется специальный форм-фактор под названием Dual in-line Package, или сокращенно – DIP.

У DIP-микросхем контакты расположены по двум сторонам и отлично садятся на две рельсы по центру макетной платы. Именно в этом случае изоляция контактов – отличный вариант, который позволяет сделать разводку каждого контакта микросхемы на отдельную рельсу с пятью контактами.

На рисунке ниже показана установка двух DIP микросхем. Сверху – LM358, ниже – микроконтроллер ATMega328, который используется во многих платах Arduino.

установка двух DIP микросхем. Сверху – LM358, ниже – микроконтроллер ATMega328

Наверняка вы обращали внимание, что на беспаечных монтажных платах нанесены числа и буквы возле строк (горизонтальных рельс) и столбцов (вертикальных рельс). Эти обозначения нанесены исключительно для удобства. Прототипы ваших устройств очень быстро обрастают дополнительными компонентами, а одна ошибка в подключении приводит к неработоспособности электрической схемы или даже к выходу из строя отдельных компонентов. Гораздо проще подключить контакт к рельсе, которая отмечена цифрой и буквой, чем отсчитывать контакты “на глаз”.

Breadboard также не заменив при изучении Arduino.

Breadboard также не заменив при изучении Arduino. В моих уроках устанавливаю на маетную плату Arduino NANO и устанавливаю на макетную плату все необходимые элементы. Затем все соединяю соединительными проводами.


Понравилась статья? Не забудь поделиться с друзьями в соц. сетях. А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

До встречи в следующем уроке. Спасибо за внимание!

Технологии начинаются с простого!

]]>
Самодельные динамики для монитора с регулировкой громкости. http://portal-pk.ru/news/264-samodelnye-dinamiki-dlya-monitora-s-regulirovkoi.html Константин Portal-PK 2020-07-01T04:00:54+03:00 В период самоизоляции, когда все было достаточно строго, у меня сломались колонки для компьютера. Заказал новые, но доставят через неделю, работать надо сейчас. Решил сделать себе самодельные динамики для монитора. Благо все комплектующие были в наличии.

Если у вас все в порядке с компьютерными колонками но, нужен сервер, дедик или VPS. Купить сервер, дедик, VPS можно на сайте vpserver.pro.

Что понадобилось для создания самодельных колонок для монитора.

В наличии были 2 усилителя PAM8403 DC 5v 2 канала. Один с регулятором громкости, второй пассивный. Использовать решил плату с регулировкой громкости, постоянно регулировать громкость на компьютере неудобно.

2 усилителя PAM8403 DC 5v 2

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

Питание подавать через USB провод

Динами взял от старого нерабочего ноутбука. Я их часто использую в своих проектах со звуком, например при создании MP3-плеера на DFPlayer Mini и Arduino.

Для сборки понадобится клеевой пистолет, паяльник.

К сборке все готово, можно приступать к работе.

Сборка самодельных колонок для монитора.

Для проверки работоспособности усилителя сперва все собрал соединительными проводами без пайки.

Сборка самодельных колонок для монитора.

Собирал все по схеме.

Собирал все по схеме.

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

Все работает! Звук регулируется, но конечно желает лучшего. Но на несколько дней работы достаточно.

Установка динамиков на монитор.

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

Установка динамиков на монитор.

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

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

Мое мнение об усилители PAM8403.

Усилитель не очень мощный и при этом чувствителен к помехам. Если вам нужно сделать оповещение или уведомления, усилитель PAM8403 подойдёт отлично, но для реализации устройства, которое будет воспроизводить аудио или звук из видео, то это сомнительное решение. Не смотря на это, самодельные динамики я сделал и установил нам монитор и пользовался некоторое время, по причине отсутствия другого решения.

Мое мнение об усилители PAM8403.

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

Не забывайте подписываться на мой YouTube канал, вступать в группу Вконтакте, в группу на Facebook.

И всем пока-пока.

До встречи в новом проекте.

]]>
Изучаем Arduino без Arduino c помощью Tinkercad и его сервиса Схемы. http://portal-pk.ru/news/263-izuchaem-arduino-bez-arduino-c-pomoshchyu-tinkercad-i-ego-servisov.html Константин Portal-PK 2020-06-04T15:48:14+03:00 С каждым годом робототехника становиться популярнее. Для разработки роботов и простых проектов используется платформа Arduinо, но для изучения данной платформы нужно купить Arduino UNO или NANO, резисторы, светодиоды, соединительные провода, макетную плату, сервоприводы, двигателя, дисплей, реле, датчики и сенсоры. Начальное вложение от 2 т. руб. при покупке минимального Arduino набора на Aliexpress. Если покупать в наших магазинах стоимость может быть в 2-3 раза больше. Стоит ли покупать железки для изучения робототехники? На данный вопрос можно ответить, попробовав свои силы в сборке схем и программировании Arduino в Tinkercadи его сервисе Circuits.

 сборке схем и программировании Arduino в Tinkercad и его сервисе Circuits.

Что такое Tinkercad?

Tinkercad - графический редактор, предназначенный для создания и печати трехмерных моделей.

Tinkercad - графический редактор, предназначенный для создания и печати трехмерных моделей.

Главным преимуществом программы, по сравнению с другими CAD-редакторами, является то, что она представлена в виде онлайн-приложения, и не требует установки на компьютер. Сервисом можно пользоваться прямо в веб-браузере благодаря технологии WebGL, позволяющей отображать трехмерную графику в интернет-обозревателях.

Онлайн-сервис Tinkercad полностью бесплатный, русифицирован, имеет простой интерфейс, понятный даже новичкам, не требует установки дополнительных плагинов и поддерживает работу со всеми основными браузерами (Chrome, Firefox, Opera и другие). CAD-редактор позволяет сохранять готовые проекты на сервере разработчика или на жестком диске компьютера в виде OBJ и STL-файлов, а также обладает возможностью печати моделей.

Tinkercad позиционирует себя как сервис робототехники для начинающих. Изучать схемотехнику и программирование Arduino помогает раздел Схемы.

Tinkercad Arduino

Tinkercad Arduino

Тинкеркад (Tinkercad Circuits Arduino) – бесплатный, удивительно простой и одновременно мощный эмулятор Arduino, с которого можно начинать обучение электронике и робототехнике. Он предоставляет очень удобную среду для написания своих проектов. Не нужно ни чего покупать, ни чего качать — все доступно онлайн. Единственное, что от вас потребуется — зарегистрироваться.

Возможности симулятора Tinkercad для разработчика Arduino.

Возможности симулятора Tinkercad для разработчика Arduino.

  • Онлайн платформа, для работы не нужно ничего кроме браузера и устойчивого интернета.
  • Удобный графический редактор для визуального построения электронных схем.
  • Предустановленный набор моделей большинства популярных электронных компонентов, отсортированный по типам компонентов.
  • Симулятор электронных схем, с помощью которого можно подключить созданное виртуальное устройство к виртуальному источнику питания и проследить, как оно будет работать.
  • Симуляторы датчиков и инструментов внешнего воздействия. Вы можете менять показания датчиков, следя за тем, как на них реагирует система.
  • Встроенный редактор Arduino с монитором порта и возможностью пошаговой отладки.
  • Готовые для развертывания проекты Arduino со схемами и кодом.
  • Визуальный редактор кода Arduino.
  • Возможность интеграции с остальной функциональностью Tinkercad и быстрого создания для вашего устройства корпуса и других конструктивных элементов – отрисованная модель может быть сразу же сброшена на 3D-принтер.
  • Встроенные учебники и огромное сообщество с коллекцией готовых проектов

Начало работы в Tinkercad Arduino.

Начало работы в Tinkercad Arduino.

Найти Tinkercad достаточно просто. Для этого в поисковой системе указываем Тинкеркад. Заходим на сайт с доменом tinkercad.com. Для того, чтобы начать пользоваться сервисом нужно авторизоваться или зарегистрироваться.

авторизоваться или зарегистрироваться

Регистрация в Tinkercad.

Для того, чтобы зарегистрироваться нажимаем кнопку Присоединиться. Регистрация доступна по E-mail или с помощью учтённой записи Google или Apple.

Регистрация в Tinkercad.

При регистрации с использованием E-mail нужно указать вашу страну, дату рождения, свой E-mail и пароль.

При регистрации с использованием E-mail нужно указать вашу страну

При входе с помощью учтённой записи Google или Apple достаточно разрешить использование сервисом Tinkercad данных для авторизации. Но не забывайте, что у вас должен быть создан аккаунт в данной системе и вы должны быть авторизованы.

Создание первой схемы в Circuits.

Создание первой схемы в Circuits.

После авторизации в сервисе вы попадете в раздел 3D-проектирования. Для создания схем нам нужно перейти в раздел Circuits. Чтобы создать электрическую цепь нужно нажать на кнопку Создать цепь.

Для создания схем нам нужно перейти в раздел Circuits.

После чего нам откроется рабочая область в которой:

  • Название проекта;
  • Меню управления;
  • Панель компонентов;
  • Рабочее поле.

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

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

Программирование Arduino в Tinkercad.

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

Программирование Arduinoв Tinkercad.

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

Встроенный светодиодподключен к 13 пину Арудино.

Давайте подключим внешний светодиод. Для этого установим светодиод и резистор на макетную плату. Подключим все по схеме. Встроенный светодиодподключен к 13 пину Арудино. Подключим внешний светодиод к тому же пинуи увидим синхронное мигание встроенного и внешнего светодиода.

Примеры реализации проектов на Arduino.

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

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

Кроме моделирования данный сервис поможет не сделать ошибки новичку и испортить элементы цепи или спалить Arduino.

Защита от ошибок новичка.

При программировании приложений для ПК или телефона у вас могут возникнуть ошибки с кодом и к серьезным последствиям это навряд ли приведет. Но при разработке проектов на Arduino, нужно не только писать код, но и понимать, как собирать электрические схемы. И при неправильно собранной схеме может перегореть светодиод, исполнительный механизм, датчик, сенсор, модуль и пр. А также может выйти из строя отладочная плата Arduino. Вот почему так важно понимать, как правильно собирать электрические схемы.

Защита от ошибок новичка.

При сборе схем в Tinkercad Circuits вы защищены от основных ошибок новичка. Например, если вы подключите светодиод без резистора, то вы увидите предупреждение о том, что ток превышен, что может привести к быстрому выходу из строя светодиода.

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

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

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

Понравилась статья? Не забудь поделиться с друзьями в соц. сетях. А также подписаться на наш канал на YouTube, вступать в группу Вконтакте, в группу на Facebook.

До встречи в следующем уроке. Спасибо за внимание!

Технологии начинаются с простого!

]]>
Инструкция по сборке лазерного гравировального станка CNC2-6550. http://portal-pk.ru/news/262-instrukciya-po-sborke-lazernogo-gravirovalnogo.html Константин Portal-PK 2020-06-02T07:19:41+03:00

CNC2-6550

Part A: Инструкция по сборке лазерного гравировального станка.

Инструкция по сборке лазерного гравировального станка.

Подключение станка к компьютеру и автономное использование с внешним дисплеем.

Краткая инструкция по использованию программы LaserGRBL.

Видео по сборке и запуску станка будет доступно в ближайшее время!

Купить станок с автономным управлением можно тут CNC2-6550.

CNC 6550 Machine Desktop DIY Big Laser 65x50cm CNC 6550 Machine Desktop DIY Big Laser 65x50cm

Переведено и дополнено проектом Portal-PK. Сайт проекта Portal-PK.ru

Технологии начинаются с простого!

Инструкция по сборке лазерного гравировального станка.

2. Направляющие для портала.

2. Направляющие для портала.

3. Направляющие для портала, и установка двигателя для перемещения по оси Y.


Направляющие для портала, и установка двигателя для перемещения по оси Y.

4. Сборка каретки и установка лазера.

Сборка каретки и установка лазера.

5. Сборка портала лазерного гравировального станка.

Сборка портала лазерного гравировального станка.

6. Установка ножек станка.

 Установка ножек станка.

7. Установка 4-ой ножки станка с платой управления.

Установка 4-ой ножки станка с платой управления.


8.Y-ось: длина ремня: 765 мм x2 шт.

X-ось: длина ремня: 790 мм x1 шт

Y-ось: длина ремня



Подключение станка к компьютеру и автономное использование с внешним дисплеем

Подключение станка к компьютеру и автономное использование с внешним дисплеем.

Управлять станком CNC2-6550 можно через компьютер или с дисплея. В комплекте идет карта памяти на 1 Гб, что позволяет управлять станком без использования ПК.

Купить станок с автономным управлением можно тут CNC2-6550.

CNC 6550 Machine Desktop DIY Big Laser 65x50cm CNC 6550 Machine Desktop DIY Big Laser 65x50cm

Переведено и дополнено проектом Portal-PK. Сайт проекта Portal-PK.ru

Технологии начинаются с простого!

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

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

Если вы работаете без подключения к компьютеру, подключать USB провод не нужно!

CH340SER2. Установка драйвера. Вместе с инструкцией на флешке есть файл CH340SER.exe

Кликаем по нему 2 раза. И устанавливаем.


Кликаем по нему 2 раза. И устанавливаем.


3. Чтобы определить COM-порт вашего станка нужно:

• Windows XP: щелкните правой кнопкой мыши «Мой компьютер», выберите «Свойства», выберите «Диспетчер устройств».

• Windows 7: нажмите «Пуск» -> щелкните правой кнопкой мыши «Компьютер» -> выберите «Диспетчер устройств» -> «Порты (COM и LPT)»

• Вашим устройством будет последовательный порт USB (COMX), где «X» представляет номер COM, например COM5.

• Если имеется несколько последовательных USB-портов, щелкните каждый из них правой кнопкой мыши и проверьте производителя, выбрать нужно «CH340».

Чтобы определить COM-порт вашего станка нужно

4.0. Использование вместе с программой LaserGRBL (есть на USB флешке)

 Использование вместе с программой LaserGRBL

4.1. Используйте USB-кабель для подключения к компьютеру. (Не подключайте при автономной работе!)


Используйте USB-кабель для подключения к компьютеру. (Не подключайте при автономной работе!)

  • Если все удачно подключилось, то вы увидите надпись ” Grbl 1.1f ['$' for help]”.
  • Если выбран неверный порт, то данное сообщение вы не увидите.

4.2. Фокусировка лазера.

Фокусировка лазера.

Лазер нужно сфокусировать, для этого поверните объектив, чтобы минимизировать пятно. Работать с лазером нужно в защитных очках.

Лазер нужно сфокусировать, для этого поверните объектив, чтобы минимизировать пятно. Работать с лазером нужно в защитных очках.


4.3. ИМПОРТ РАСТРОВЫХ ИЗОБРАЖЕНИЙ

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

Его можно вызвать из меню "Файл, Открыть файл", выбрав изображение типа jpg, png или bmp.

4.3. ИМПОРТ РАСТРОВЫХ ИЗОБРАЖЕНИЙ

Его можно вызвать из меню "Файл, Открыть файл", выбрав изображение типа jpg, png или bmp.

Растровый импорт позволяет загружать изображение любого вида в LaserGRBL

Обратите внимание: скорость и значение S отличаются для разных материалов.

Обратите внимание: скорость и значение S отличаются для разных материалов.

4.5. Сохраните программу в файл "NC", если вы используете автономный контроллер.


Сохраните программу в файл "NC", если вы используете автономный контроллер.


Автономный контроллер можно использовать в качестве считывателя карт через USB-кабель.

  • Автономный контроллер можно использовать в качестве считывателя карт через USB-кабель.
  • Затем подключите автономный контроллер к плате управления. (Не подключайте USB-кабель к компьютеру)

 Затем подключите автономный контроллер к плате управления. (Не подключайте USB-кабель к компьютеру)

  • Затем. См. ”руководство пользователя автономного контроллера", чтобы начать работу.

ЭКСПЕРТНЫЙ РЕЖИМ

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

1. Режим Постоянной Мощности Лазера М3.(режим по умолчанию)

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

ПРИМЕЧАНИЕ: M3 можно использовать, чтобы держать лазер включенным для фокусировки.

2. Динамический режим мощности лазера M4

Режим динамической мощности лазера автоматически регулирует мощность лазера, в зависимости от текущей скорости, относительно запрограммированной частоты. Это, по существу, гарантирует, что количество лазерной энергии вдоль разреза остается неизменным, даже если машина может быть остановлена или активно ускоряться. Это очень полезно для чистой, точной гравировки и резки простых материалов в широком диапазоне методов генерации G-кода программами CAM. Как правило, он будет работать быстрее и может быть все, что вам нужно использовать.

Grbl рассчитывает мощность лазера, исходя из предположения, что мощность лазера линейна по скорости и материалу. Часто это не так. Лазеры могут резать по-разному при разных уровнях мощности, и некоторые материалы могут плохо резать при определенной скорости и / или мощности. Короче говоря, это означает, что режим динамического питания может работать не во всех ситуациях. Всегда делайте пробный образец, прежде чем использовать его с новым материалом или машиной.

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

Откройте «Режим динамической мощности лазера M4» в программном обеспечении LaserGRBL.

Примечание. Лазер включается только при движении машины.

Режим Постоянной Мощности Лазера М3.

3. Пользовательская кнопка

LaserGRBL поддерживает пользовательские кнопки. Щелкните правой кнопкой мыши в области кнопок, чтобы добавить новую пользовательскую кнопку.

Пользовательская кнопка

В пользовательской кнопке вы можете написать набор инструкций G-кода для выполнения пользовательских действий.

Существует 3 типа пользовательских кнопок:

  • Button
  • TwoStateButton
  • PushButton

Пользовательская кнопка типа «Button» содержит блок кода GCode, который будет выполнен при нажатии. Это можно использовать для запуска серии инструкций gcode, то есть для трассировки кадра вокруг изображения или установки новой нулевой позиции.

В пользовательской кнопке вы можете написать набор инструкций G-кода для выполнения пользовательских действий.

«TwoStateButton» содержит два блока GCode. Первое действие выполняется при первом щелчке, затем второе действие выполняется при втором щелчке. Это очень полезно для таких действий, как включение / выключение лазера, чтобы увидеть его положение Включить / выключить лазер.

«TwoStateButton» содержит два блока GCode.«PushButton» похож на «TwoStateButton», но первое действие выполняется при наведении мыши, второе - при нажатии мыши. Пользовательские кнопки поддерживают ряд переменных, которые можно использовать в выражениях. Вот полный набор поддерживаемых переменных:

«PushButton» похож на «TwoStateButton», но первое действие выполняется при наведении мыши

4. Конфигурация по умолчанию


Конфигурация по умолчанию


Видео по сборке и запуску станка будет доступно в ближайшее время!

Купить станок с автономным управлением можно тут CNC2-6550.

CNC 6550 Machine Desktop DIY Big Laser 65x50cm CNC 6550 Machine Desktop DIY Big Laser 65x50cm

Скачать инструкцию в формате PDF можно по ссылке внизу статьи: инструкция для лазерного гравировального станка CNC2-6550 на русском.

Переведено и дополнено проектом Portal-PK. Сайт проекта Portal-PK.ru

Технологии начинаются с простого!

Подписывайтесь на наш Youtube и вступайте в группы в Вконтакте и Facebook.

]]>
Что такое светодиод? Как подключить к Arduino? http://portal-pk.ru/news/261-chto-takoe-svetodiod-kak-podklyuchit-k-arduino.html Константин Portal-PK 2020-05-19T10:53:51+03:00 Для реализации многих проектов на Arduino используются светодиоды. А для изучения Ардуино светодиод является не заменимым инструментом. Для изучения основ Arduino на сайте есть целый блок уроков, который так и называться: Уроки Arduino: Светодиоды, Резисторы, Arduino.

Что такое резистор рассмотрим в следующий раз.

Что же такое светодиод и как он работает?

Светодиод — вид диода, представляет собой полупроводниковый прибор, способный излучать свет при пропускании через него электрического тока в прямом направлении, от анода (+) к катоду (-).

Что же такое светодиод и как он работает?

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

  1. анод (+) светодиода имеет более длинную ножку;
  2. со стороны катода, корпус светодиода немного срезан.

В современной микроэлектронике применяются миниатюрные светодиоды для поверхностного монтажа (SMD). Такие индикаторы, например, имеются на Arduino Uno для информирования пользователя о состоянии системы.

Такие индикаторы, например, имеются на Arduino Uno для информирования пользователя о состоянии системы.


Подключение Светодиода к Arduino.

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

Подключение Светодиода

Подключение Светодиода к Arduino.

Подключим например к пину 3 платы Arduino. Наша программа примет вот такой вид.

/*
  Зажигаем светодиод на одну секунду, затем выключаем его на  
  одну  секунду в цикле.
 */
void setup() {               
  // Инициализируем цифровой вход/выход в режиме выхода.
    pinMode(3, OUTPUT);   
}
void loop() {
  digitalWrite(3, HIGH);   // зажигаем светодиод
  delay(1000);              // ждем 3 секунды
  digitalWrite(3, LOW);    // выключаем светодиод
  delay(1000);              // ждем секунду
}

Подробнее: Урок 2 – Мигаем светодиодом на Arduino

Расчеты для выбора резистора и мощности светодиода.

Рассмотрим основные расчеты схемы подключения светодиода к Arduino. Возьмём светодиод, круглый 5 мм, – полупроводниковый источник света с рабочим напряжением от 1.9в до 3.4в и силой тока в 20мА.

Рассчитаем, какой резистор R в приведённой схеме нам нужно взять, чтобы получить оптимальный результат. Предположим, что у нас такой светодиод имеет рабочее напряжения 3.3 В и источник питания Arduino 5в:

VF = 3.3 В
I = 20 мА
Vcc = 5 В

Найдём оптимальное сопротивление R и минимально допустимую мощность резистора PR.

Сначала рассчитаем, какое напряжение должен взять на себя резистор:

UR = Vcc – VF = 5 В – 3.3 В = 1.7 В

По закону Ома найдём значение сопротивления, которое обеспечит такое падение:

R = UR / I = 1.7 В / 0.02 А = 85 Ом

Таким образом:

  • при сопротивлении более 85 Ом яркость будет ниже заявленной;
  • при сопротивлении менее 85 Ом срок жизни светодиода будет меньше.

Далее рассчитаем мощность, которую при этом резистору придётся рассеивать:

PR = I2 × R = (0.02 А)2 × 85 Ом = 0.034 Вт

Это означает, что при мощности резистора менее 34 мВт резистор перегорит.

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


Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Вторая модернизация (доработка) 3D принтера Anet A8. http://portal-pk.ru/news/260-vtoraya-modernizaciya-dorabotka-3d-printera-anet-a8.html Константин Portal-PK 2020-05-14T08:05:36+03:00 При разработке самоделок и проектов на Arduino не обойтись без 3D принтера. Купил я себе недорогой 3D принтер Anet A8. Принтер бюджетный, поэтому есть недочёты, чтобы устранить основные, сделал первую модернизацию. Ее было необходимо сделать для увеличения скорости печати, иначе печатать на данном принтере можно только на очень низкой скорости 30-40 мм/сек. А сегодня буду проводить вторую модернизацию. Данная модернизация нужна в основном для комфортной работы.

Купил я на Aliexpress следующие комплектующие:

Купил я на Aliexpress следующие комплектующие:

В связи с тем, что у меня сломался кулер обдува хотенда

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

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

Дальше приступил к устранению еще одной досадной ситуации.

Термодатчик крепиться только с помощью клейкой ленты

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

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

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

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

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

Чтобы наклейка не мешала винтам с пружинками, которые держат стол, подрезал уголки на наклейке

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

После чего стол нужно установить на место и откалибровать.

И напоследок, установил силиконовый чехол на хотенд.

И напоследок, установил силиконовый чехол на хотенд.


Данная модернизация 3D принтер Anet A8 ускорит нагрев стола и хотенда, а при печати ABS и PETG пластиком это занимает достаточно долгое время. Также уменьшит рассеивание тепла, что снизит расход электроэнергии. Ещё снизит вероятность отклеивания от стола детали при печати ABS пластиком.

После модернизации и калибровки решил проверить печать. Мне нужно было напечатать пару крупных деталей соплом 0,6 мм. Вот результат.

После модернизации и калибровки решил проверить печать. Мне нужно было напечатать пару крупных деталей соплом 0,6 мм.

А так, Anet A8 сам по себе работает достаточно шумно.


Вывод следующий: нагрев стола стал быстрее; работает тише, но это благодаря замене сломанного кулера. А так, Anet A8 сам по себе работает достаточно шумно.

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока. И до встречи в следующем проекте.

]]>
Ночник с сенсорной кнопкой из Киндер Сюрприз - diy. http://portal-pk.ru/news/259-nochnik-s-sensornoi-knopkoi-iz-kinder-syurpriz---diy.html Константин Portal-PK 2020-04-30T12:00:21+03:00 Пару лет назад я делал ночник из Kinder Sorpresa. Не смотря на свою простоту исполнения и небольшой размер, данный ночник светит ярко и пользуется популярностью. Один знакомый, увидев ночник, заинтересовался и подсказал очень интересное решение: «Вот бы еще сделать сенсорное включение, чтобы пошел у меня ребенок ночью в туалет, бац рукой по нему и ночник включился. Пошел обратно, бац рукой и свет выключился. И при этом чтобы не было сильно ярко». Приступил я к реализации, что у меня получилось, смотрите ниже.

Для данного DIY понадобится:

Для данного DIY понадобится

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


Схема подключения электронных компонентов.

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

Схема подключения электронных компонентов.

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

Подключал к зарядному устройству и к внешнему Power Bank, все работает как нужно.


Этапы сборки сенсорного ночника из Киндер Сюрприза.

Приступим к сборке.

Сперва нам нужно подготовить USB провод. Отрезаем провод, оставив небольшой кусок длиной 10 см.

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

В USB разъёме это самые длинные контакты и располагаются они по кроям.

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

В нижней части капсулы из Kinder Sorpresa сделал отверстие и установил в него подготовленный USB разъем.

В нижней части капсулы из Kinder Sorpresa сделал отверстие и установил в него подготовленный USB разъем.

Дальше нам понадобится паяльник. ВНИМАНИЕ! Детям нельзя пользоваться паяльником без присмотра взрослых.

Спаиваем все элементы по схеме, которая представлена выше.

Спаиваем все элементы по схеме, которая представлена выше.

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

Затем на двухсторонний скотч приклеиваем светодиоды, предварительно отогнув их так чтобы, они светили в центр капсулы из-под Kinder Sorpresa

Затем на двухсторонний скотч приклеиваем светодиоды, предварительно отогнув их так чтобы, они светили в центр капсулы из-под Kinder Sorpresa. На крышку приклеиваем сенсорную кнопку. Но тут будьте внимательны, скотч клеим по краям кнопки, ни в коем случае не клейте скотч в центр кнопки. Так как сенсорный элемент не должен соприкасаться с поверхностью, иначе он будет срабатывать произвольно.

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

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


Проверка и тестирование diy из Kinder Sorpresa.

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

Проверка и тестирование diy из Kinder Sorpresa.

Для тестирования я использовал недорогой Power Bank. Все работает отлично. И в связи с тем, что источник питания автономный данный ночник можно поставить где угодно. А при необходимости приклеить или закрепить в нужном месте, например, на кухне. Если вдруг к вам придёт «Ночная жрица», чтобы ни кого не разбудить!


Подведём итог.

Ночник делается из простых и достаточно дешевых элементов. А универсальность изделия позволяет пользоваться данным ночником не только дома, но и в походе, и на даче. Отличная самоделка и повторить ее достаточно просто.

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

Не забывайте подписываться на мой YouTube канал, вступать в группу Вконтакте, в группу на Facebook.

И всем пока-пока.

До встречи в новом проекте.

]]>
Автоматический дозатор мыла и антисептика своими руками. http://portal-pk.ru/news/258-avtomaticheskii-dozator-myla-i-antiseptika-svoimi.html Константин Portal-PK 2020-04-21T12:27:30+03:00 В школе робототехники, где я работаю преподавателем, попросили сделать автоматический дозатор мыла на Arduino. Начал я разрабатывать данный проект и тут закрыли всех на карантин. Проект автоматического сенсорного дозатора для жидкого мыла так и стоял недоделанным. Решил я исправить данную ситуацию и вот что получилось.

Проект автоматического сенсорного дозатора для жидкого мыла так и стоял недоделанным.

Дозатор работает от батарейки крона 9v, что обеспечивает автономность и безопасность работы, но есть и минусы. Но обо всем по порядку.

Что понадобиться для того чтобы сделать самодельный дозатор.

Использовать ультразвуковой датчик расстояния, который используют в большинстве случаем для реализации подобных проектов, я не стал. Для измерения расстояния решил использовать инфракрасный модуль препятствия. Его преимущества заключается в небольших размерах и простоте использование в Ардуино проектах.

Что понадобиться для того чтобы сделать самодельный дозатор.

Для того, чтобы собрать автоматический дозатор мыла понадобится:


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

Для программирования и отладки сенсорного дозатора мыла собираем все элементы на макетной плате по схеме.

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

При сборке схемы для автономной работы от батарейки крона изменим схему подключения. Плюсовой контакт Servo подключим в пину vin, так как данный пин соединен напрямую с источником питания, в нашем случае это батарейка крона 9v. Соответственно питание на Servo будет 9 в.

Плюсовой контакт Servo подключим в пину vin, так как данный пин соединен напрямую с источником питания,


Программа для управления автоматическим дозатором.

В связи с тем, что инфракрасный модуль препятствия устроен так, что при появлении препятствия на выходе датчика будет 5 в. При отсутствии препятствия соответственно 0. Поэтому код будет аналогичен работе изменения положения сервопривода при нажатии кнопки. Урок можно посмотреть тут: Подключает servo-привод к arduino. Сервопривод + кнопка

Поэтому подробно останавливаться на разборке кода не будем.


Сборка самодельного дозатора.

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

Сперва устанавливаем сервопривод

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

Затем приклеил на двухсторонний скотч остальные элементы: Ардуино, датчик и батарею крона.

Затем приклеил на двухсторонний скотч остальные элементы: Ардуино, датчик и батарею крона.

С помощью соединительных проводов соединил все элементы как показано на схеме выше.

С помощью соединительных проводов соединил все элементы как показано на схеме выше.

Закрепил под крышкой одну сторону нитки, перекинул через носик дозатора, а второй край прикрепил к рычажку сервопривода.

Закрепил под крышкой одну сторону нитки, перекинул через носик дозатора, а второй край прикрепил к рычажку сервопривода.


Обзор автоматического сенсорного дозатора для жидкого мыла.

Обзор автоматического сенсорного дозатора для жидкого мыла.

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

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

Также нужно учесть, что скотч клеить на контакты датчика нежелательно, так как возможны ложные срабатывания при включении Ардуино. Что у меня и произошло.


Вывод можно сделать следующий.

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


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

Не забывайте подписываться на мой YouTube канал, вступать в группу Вконтакте, в группу на Facebook.

И всем пока-пока.

До встречи в новом проекте.

]]>
Что такое Arduino? http://portal-pk.ru/news/257-chto-takoe-arduino.html Константин Portal-PK 2020-04-17T13:12:41+03:00 Программная часть состоит из бесплатной программной оболочки (Arduino IDE) для написания программ, их компиляции и программирования аппаратуры. Аппаратная часть представляет собой набор смонтированных печатных плат, продающихся как официальным производителем, так и сторонними производителями. Полностью открытая архитектура системы позволяет свободно копировать или дополнять линейку продукции Arduino.

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

Больше информации читайте на сайте разработчика и в Википедии. А сейчас на простом примере рассмотрим, как Arduino можно использовать в робототехнике и при разработке самодельных ЧПУ станков и 3D принтеров.

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

Arduino — это огромный конструктор,

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

Arduino представляет собой небольшую плату с собственным процессором и памятью

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

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


В чем преимущество Arduino?

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

В чем преимущество Arduino?

Сложно ли начать изучение?

Свою огромную популярность Arduino приобрела именно благодаря простоте и дружелюбности. Даже абсолютный ноль в программировании и робототехнике может освоить основы работы с Arduino за пару дней! Этому способствуют тысячи публикаций, учебников, заметок в интернете и куча роликов на YouTube.

Программы для Arduino пишутся на обычном C++, дополненным простыми и понятными функциями для управления вводом/выводом на контактах. Если вы уже знаете C++ — Arduino станет дверью в новый мир, где программы не ограничены рамками компьютера, а взаимодействуют с окружающим миром и влияют на него. Если же вы новичок в программировании — не проблема, вы с лёгкостью научитесь, это просто.

Для удобства работы с Arduino существует бесплатная официальная среда программирования «Arduino IDE», работающая под Windows, Mac OS и Linux. С помощью неё загрузка новой программы в Arduino становится делом одного клика, только лишь подключите плату к компьютеру через USB.

Arduino IDE

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

В следующих статьях рассмотрим, что такое Arduino IDE. Сравним платы Arduino и определим, с какой платы лучше начинать изучать Arduino и прочее.


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

Не забывайте подписываться на мой YouTube канал, вступать в группу Вконтакте, в группу на Facebook.

И всем пока-пока.

До встречи в новой статье.

]]>
Самодельные часы - плеер на Arduino с сенсорным дисплеем Nextion. http://portal-pk.ru/news/256-samodelnye-chasy---pleer-na-arduino-s-sensornym-displeem.html Константин Portal-PK 2020-04-13T15:24:34+03:00 Разработка часов на Arduino достаточно увлекательная и интересная тема. На моём сайте вы найдете большое количество различных проектов часов, в том числе и проект часов на Arduino с дисплеем Nextion.

В данном проекте будем дорабатывать часы на Arduino с сенсорным дисплеем Nextion. Напечатаем новый корпус на 3D принтере и добавим возможность воспроизведения MP3 файлов с карты памяти.

В данном проекте будем дорабатывать часы на Arduino с сенсорным дисплеем Nextion. Напечатаем новый корпус на 3D принтере

Первая версия часов с сенсорным дисплеем.

Предыдущая версия часов получилась неплохой, но были недостатки. Один из недостатков заключался в том, что часы обладали минимальным набором функций: вывод даты и времени, температуры, влажности в помещении. Но больше всего не понравился моим подписчикам на YouTube корпус. Он был сделан из банки из-под чипсов и имел ряд недочетов. Подписчики на канале предложили переделать корпус, и напечатать его на 3D принтере, что я и сделал.

Для того, чтобы собрать часы на Arduino с дисплеем Nextion нам понадобится:

1. Arduino Nano V3.0 (ATmega328). Версия Arduino Nano V2.0 (ATmega168) не подойдет, так как для текущего функционала недостаточно памяти.

2. Дисплей Nextion 2,8 дюйма. Можно и другого размера.

3. Датчик температуры и влажности SHT3x (SHT31) .

4. Часы реального времени (RTC) DS3231, я использовал версию mini.

5. Разъем 5.5 мм, для подключения питания часов.

6. MP3-плеер DFPlayer Mini.

7. Динамик 3Вт. 4Ом.

8. Провода для соединения элементов.

9. Пластик для печати корпуса.

10. Винты, гайки и шайбы М3.

11. Краска для покраски корпуса. Можно и не красить.

Эти комплектующие пригодятся при сборе часов с сенсорным дисплеем

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


Схема подключения самодельных часов и плеера.

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

Схема подключения самодельных часов и плеера.

Перед тем, как установить все в корпус, необходимо запрограммировать Arduino. Это связано с тем, что мы будем использовать аппаратные пины RX TX. На плате это pin 0 и 1. Если мы подключим к ним дисплей, то прошить Ардуино не получится, будет выводить ошибку. Вот почему так важно перед сборкой загрузить скетч в Arduino NANO.


Скетч часов на Arduino с дисплеем Nextion.

Скетч часов на Arduino с дисплеем Nextion можно скачать внизу статьи, в разделе материалы для скачивания. Там же вы найдете все необходимые библиотеки.

Скетч часов на Arduino с дисплеем Nextion можно скачать внизу статьи, в разделе материалы для скачивания. Там же вы найдете все необходимые библиотеки.

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

Если у вас возникнут трудности, задавайте вопросы на форуме, там быстрее увижу и отвечу вам.


Корпус для часов Nextion.

После того, как забраковали мой первый корпус для часов, я решил не расстраиваться, а сделать 3D Model в программе Fusion 360.

3D Model в программе Fusion 360

Модель, к сожалению, утеряна, так как у меня сломался жёсткий диск. Остался только код для печати на 3D принтере пластиком PLA, соплом 0,4 мм.Код можно скачать в разделе материалы для скачивания.

Корпус удался не с первого раза.

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

Первая модель получилась достаточно маленькая и компактная, но устанавливать элементы было бы достаточно сложно. А порой даже невозможно. Для установки дисплея мне пришлось подточить крепления задней крышки.

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

Долго мучиться я не стал с подгонкой всех элементов и сделал вторую версию.

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

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


Сборка часов с сенсорным дисплеем.

Сборка часов с сенсорным дисплеем.

После того, как Arduino запрограммирована, можно приступить к установке электроники в корпус. Поэтапно устанавливаем все элементы: датчик температуры и влажности, модуль MP3 плеера, динамик, его устанавливаю на заднюю крышку с помощью крепежного кольца.

крышку с помощью крепежного кольца.

Дисплей Nextion закрепляю с помощью винтов M3, предварительно подложив по три шайбы между корпусом и дисплеем. Это необходимо для того, чтобы корпус и дисплей были на одном уровне. Устанавливаем разъём питания на заднюю крышку. После чего зданию крышку устанавливаем на место, и закрепляем ее с помощью двух винтов.

Часы готовы и теперь их можно проверить.

Часы готовы и теперь их можно проверить.


Обзор готовых часов плеера на Ардуино с дисплеем.

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

Функции и возможности самодельных часов на Ардуино

Функции и возможности самодельных часов на Ардуино:

  • Вывод даты и времени;
  • Вывод температуры и влажности;
  • Настройка даты и времени;
  • Время не сбрасывается при отключении питания;
  • Воспроизведение музыки с карты памяти;
  • Настраиваемые плейлисты.
  • Воспроизведение композиций из выбранного плейлиста.
  • Воспроизведение случайной композиции.
  • Настройка громкости.

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

Вывод.

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

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

Не забывайте подписываться на мой YouTube канал, вступать в группу Вконтакте, в группу на Facebook.

И всем пока-пока.

До встречи в новом проекте.

]]>
Arduino урок 24. Анимация на семисегментный индикатор TM1637. http://portal-pk.ru/news/255-animaciya-na-semisegmentnyi-indikator-tm1637.html Константин Portal-PK 2020-04-02T15:14:46+03:00 Сегодня в Arduino уроке научимся выводить анимацию и бегущую строку на семисегментный индикатор TM1637. Если вы не знаете, что такое семисегментный индикатор TM1637, или у вас возникли сложности с данным уроком, вы можете посмотреть предыдущий урок:Урок 23. Подключение сегментного дисплея TM1637 к Arduino. В нём уже рассматривали модуль TM1637, с простыми примерами использования данного модуля.

Сегодня в Arduino уроке научимся выводить анимацию и бегущую строку на семисегментный индикатор TM1637

Установка и настройка библиотеки TM1637.h.

Для данного урока будем использовать другую библиотеку, которая обладает рядом преимуществ:

  • Вывод символов происходит простым написанием этого символа в коде;
  • Есть готовая функция скроллинга текста, просто указываем массив символов. Таким способом удобно выводить дату и год;
  • Функции анимации вывода символов на дисплей;

Скачать библиотеку можно внизу статьи, в разделе "Материалы для скачивания". После того, как вы скачали архив с библиотекой, её нужно установить. Для этого откроем Arduino IDE, перейдем в раздел Скетч -> Подключить библиотеку -> Добавить ZIP. библиотеку.

Установка и настройка библиотеки TM1637.h.

Выбираем архив. После установки, библиотека появиться в списке библиотек.

После установки, библиотека появиться в списке библиотек.

Внимание! Если вы ставили другие библиотеки для работы с дисплеем TM1637, их необходимо удалить. В противном случае возможен конфликт. Удалить библиотеку можно из менеджера библиотек, конечно если вы ставили через менеджер библиотек. Или напрямую из папки libraries, которая располагается: C:\Users\(Пользователь)\Documents\Arduino\libraries в операционной системе Windows.

 Если вы ставили другие библиотеки для работы с дисплеем TM1637, их необходимо удалить.

Описание функций библиотеки TM1637

init() - инициализация
set(n) - яркость сегментов от 0 до 7
clearDisplay() - очистить экран
point(True) - выключить/включить разделитель (две вертикальные точки)
displayInt(value) - вывести на экран четырёхзначное число
displayIntZero(value) - вывести на экран четырёхзначное число с нулями слева
display(posit, Byte) - вывести на экран символ Byte (0-9) в одну из четырёх позиций posit(0-3)
display(array) - вывести на экран массив array из четырёх символов
displayByte(posit, Byte) - вывести на экран символ Byte в одну из четырёх позиций posit(0-3)
displayByte(ARRAY_BYTE) - RRAY_BYTE - массив ( 0x7d, 0x7d, 0x7d, 0x7d )
displayByte(Byte1, Byte2, Byte3, Byte4) - вывести на экран четыре знака
runningString(buf, sizeof(buf), delay) - бегущая строка из массива (массив, размер массива, задержка в мс)
scroll(BitAddr, DispData, delayms) - обновить значение пролистыванием (адрес, символ, задержка в мс)
scroll(DispData[], delayms) - обновить значение пролистыванием (массив символов, задержка в мс)
scrollByte(BitAddr, DispData, delayms) - обновить значение пролистыванием (адрес, БАЙТ, задержка в мс)
scrollByte(DispData[], delayms) - обновить значение пролистыванием (массив, задержка в мс)
twist(BitAddr, DispData, delayms) - обновить значение вращением (адрес, символ, задержка в мс)
twist(DispData[], delayms) - обновить значение вращением (массив символов, задержка в мс)
twistByte(BitAddr, DispData, delayms) - обновить значение вращением (адрес, БАЙТ, задержка в мс)
twistByte(DispData[], delayms) - обновить значение вращением (массив, задержка в мс)
displayClock(hrs, mins) - выводит часы, минуты
displayClockScroll(hrs, mins, delayms) - выводит часы, минуты с эффектом пролистывания экрана вниз
displayClockTwist(hrs, mins, delayms) - выводит часы, минуты с эффектом вращения знакоместа

Сейчас можно приступить к подключению сегментного дисплея TM1637 к Arduino.

Подключение дисплея TM1637 к Arduino

Подключить дисплей можно к любым цифровым пинам Ардуино. В нашем случае будем подключать к Arduino NANO по схеме.

Подключить дисплей можно к любым цифровым пинам Ардуино. В нашем случае будем подключать к Arduino NANO по схеме.

  • Arduino Nano [PIN 5V] - TM1637 Module[PIN 5V]
  • Arduino Nano [PIN GND] - TM1637 Module[PIN GND]
  • Arduino Nano [PIN 2] - TM1637 Module[PIN DIO]
  • Arduino Nano [PIN 3] - TM1637 Module[PIN CLK]

Подключить TM1637 к Arduino UNO можно по аналогичной схеме.

Подключить TM1637 к Arduino UNO можно по аналогичной схеме.

Пример кода для вывода анимации и бегущей строки на семисегментный индикатор с драйвером TM1637.

Пример 1. Анимация пузыри на TM1637.

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

#define CLK 3
#define DIO 2
#include "TM1637.h"
TM1637 disp(CLK, DIO);
void setup()
{
  disp.clear();
  disp.brightness(7);  // яркость минимум =0, стандарт=2,  максимум=7)
}
void loop()
{
  running_text(); // пузыри
}
void running_text() // пузыри
{
  byte buf[] = {_degree, _o, _degree, _o, _degree, _o, _degree, _o, _degree, _o, _degree, _o};
  disp.runningString(buf, sizeof(buf), 300);  // время в мс
}

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

Пример 2. Вывод символов со скроллингом текста вниз.

#define CLK 3
#define DIO 2
#include "TM1637.h"
TM1637 disp(CLK, DIO);
static byte buff[4] = {_L, _E, _G, _O};
void setup()
{
  disp.clear();
  disp.brightness(7);  // яркость минимум =0, стандарт=2,  максимум=7)
}
void loop()
{
  scrolling_text();// скролинг текста вниз
}
void scrolling_text() // скролинг текста вниз
{
  disp.clear();
  disp.scrollByte(buff, 100);
  delay(1000);
}

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

Пример 3. Анимация вращения символов на дисплее TM1637.

#define CLK 3
#define DIO 2
#include "TM1637.h"
TM1637 disp(CLK, DIO);
static byte buff[4] = {_S, _t, _O, _P};
void setup()
{
  disp.clear();
  disp.brightness(7);  // яркость минимум =0, стандарт=2,  максимум=7)
}
void loop()
{
  rotation_all_sign(); // вращение по часовой стрелке всех символов
  rotation_one_sign(); // вращение символов по очереди слева на право
}
void rotation_all_sign()  // вращение по часовой стрелке всех символов
{
  disp.clear();
  disp.twistByte(buff, 100);
  delay(1000);
}
void rotation_one_sign()  // вращение символов по очереди слева на право
{
  for (uint8_t i = 0; i < 4; i++)
  {
    disp.twistByte(i, buff[i], 70);
    delay(100);
  }
}

Информация на дисплее появляется с эффектом вращения символов. Первая функция вращает все символы и выводит их на дисплей. Вторая функция вращает по одному символу и выводит их на дисплей по очереди.

Пример 4. Обычные часы и изменения яркости.

#define CLK 3
#define DIO 2
#include "TM1637.h"
TM1637 disp(CLK, DIO);
uint32_t Now;
boolean flag;
void setup() 
{
  disp.clear();
  disp.brightness(7);  // яркость минимум =0, стандарт=2,  максимум=7)
}
void loop() 
{
  normClock(); //обычные часы
  blinking_text(); //изменяем яркость
}
void normClock() //обычные часы
{
  byte hrs = 19, mins = 55;
  uint32_t tmr;
  Now = millis();
  while (millis () - Now < 10000) {   // каждые 10 секунд
    if (millis() - tmr > 500) {       // каждые полсекунды
      tmr = millis();
      flag = !flag;
      disp.point(flag);   //выкл/выкл разделитель:
     if (flag) 
      {
        // ***** часы! ****
        mins ++;
        if (mins > 59) 
        {
          mins = 0;
          hrs++;
          if (hrs > 24) hrs = 0;
        }
      // ***** выводим часы! ****
      disp.displayClock(hrs, mins);   // выводим время функцией часов
      }
    }
  }
  disp.point(0);   // выкл точки
}
void blinking_text() //изменяем яркость
{
   disp.brightness(0);
   delay(500);
    for (uint8_t i = 0; i < 5; i++) 
    {
      disp.brightness(2);
      delay(200);
      disp.brightness(7);
      delay(200);
      disp.brightness(0);
      delay(500);
    }
 disp.brightness(7);
}

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

Пример 5. Часы с вращающимися символами на TM1637 и Arduino.

#define CLK 3
#define DIO 2
#include "TM1637.h"
TM1637 disp(CLK, DIO);
uint32_t Now;
boolean flag;
void setup() 
{
  disp.clear();
  disp.brightness(7);  // яркость минимум =0, стандарт=2,  максимум=7)
}
void loop() 
{
  twistClock(); //часы с вращающимися цифрам
}
void twistClock()  //часы с вращающимися цифрам
{
  byte hrs = 19, mins = 53;
  uint32_t tmr;
  Now = millis();
  while (millis () - Now < 10000) {   // каждые 10 секунд
    if (millis() - tmr > 500) {       // каждые полсекунды
      tmr = millis();
      flag = !flag;
      disp.point(flag);   // выкл/выкл точки
      if (flag) 
      {
        // ***** часы! ****
        mins ++;
        if (mins > 59) 
        {
          mins = 0;
          hrs++;
          if (hrs > 24) hrs = 0;
        }
        // ***** часы! ****
        disp.displayClockTwist(hrs, mins, 35);    // показываем часы
      }
    }
  }
  disp.point(0);   // выключить разделитель :
}

В данном примере сделаем имитацию работы часов с выводом символов с анимацией вращения. Пример подойдёт для реализации часов с красивым выводом значений даты и времени на TM1637 и Arduino.

Пример 6. Часы со скроллингом текста сверху вниз на TM1637 и Arduino.

#define CLK 3
#define DIO 2
#include "TM1637.h"
TM1637 disp(CLK, DIO);
uint32_t Now;
boolean flag;
void setup() 
{
  disp.clear();
  disp.brightness(7);  // яркость минимум =0, стандарт=2,  максимум=7)
}
void loop() 
{
  scrollClock(); //часы со скролингом цифр
}
void scrollClock() //часы со скролингом цифр
{
  byte hrs = 19, mins = 54;
  uint32_t tmr;
  Now = millis();
  while (millis () - Now < 10000) {   // каждые 10 секунд
    if (millis() - tmr > 500) {       // каждые полсекунды
      tmr = millis();
      flag = !flag;
      disp.point(flag);   // выкл/выкл разделитель:
      if (flag) 
      {
        mins ++;
        if (mins > 59) 
        {
          mins = 0;
          hrs++;
          if (hrs > 24) hrs = 0;
        }
        // ***** выводим часы! ****
        disp.displayClockScroll(hrs, mins, 70);    // показываем часы
      }
    }
  }
  disp.point(0);   // выкл точки
}

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

Пример 7. Бегущая строка на TM1637 и Arduino.

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

#define CLK 3
#define DIO 2
#include "TM1637.h"
TM1637 disp(CLK, DIO);
void setup() 
{
  disp.clear();
  disp.brightness(7);  // яркость минимум =0, стандарт=2,  максимум=7)
}
void loop() 
{
  running_text();
}
void running_text()
{
  byte buf[] = { _A,_r,_d,_u,_i,_n,_o,0,0,_N,_A,0,0,_P,_o,_r,_t,_A,_L,0,_P,_C,0,0,_A,_r,_d,_u,_i,_n,_o,0,0,_S,_E,_N,_S,_O,_r,_S,0,0,_A,_L,_L,0,0,_F,_o,_r,0,0,\
  _A,_r,_d,_u,_i,_n,_o,0,0,_b,_o,_A,_r,_d,_S,0,0};
  disp.runningString(buf, sizeof(buf), 200);  // время в мс
}

Для примера вывел надпись: _A,_r,_d,_u,_i,_n,_o,0,0,_N,_A,0,0,_P,_o,_r,_t,_A,_L,0,_P,_C,

Как вы догадываетесь это: Arduino na Portal PC. Почему PC? Дисплей не поддерживает символ К.

Вывод: Использование данной библиотеки позволяет по-другому взглянуть на возможности семисегментного индикатор на TM1637. Скучные символы становятся анимированными и более красивыми.

Планирую сделать часы на TM1637 и Arduino с использованием анимации.

Планирую сделать часы на TM1637 и Arduino с использованием анимации.

Появились вопросы или предложения, не стесняйся, пиши в комментарии!

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке

]]>
Проекты ночников и светильников на Arduino. http://portal-pk.ru/news/254-proekty-nochnikov-i-svetilnikov-na-arduino.html Константин Portal-PK 2020-03-31T15:38:35+03:00

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

6. Космический ночник со стеклянными шарами своими руками.

Сегодня расскажу про светильник, который сделал своими руками на Arduino (DigiSpark).Очень красивый светильник со стеклянными шарами. Знакомые сказали, что его можно использовать вместо свечек для создания романтичной обстановки. И я с ними согласен. Светильник достаточно яркий и красивый. Стеклянные шары выглядят просто сногсшибательно. Пузырьки воздуха внутри шарика похоже на звезды в небе. А переливающий свет придает дополнительный антураж.

Ночник со стеклянными шарами на Arduino своими руками.

5. Сенсорный светильник с большой площадью срабатывания на Arduino (Digispark).

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

Управляет всем небольшой микроконтроллер Arduino (Digispark). Для обеспечения 5 режимов работы использовал светодиодную ленту ws2812b.

Cамодельный сенсорный светильник на Arduino (Digispark).

4. Ночник в виде куба с несколькими режимами работы на Arduino и светодиодах WS2812.

Ночник в виде куба с несколькими режимами работы на Arduino и светодиодах WS2812.При изучении 3D моделирования, и осваивая печать на 3D принтере, сделал вот такой ночник в виде куба. Не смотря на свою простоту и небольшой размер данный ночник нравится многим знакомым. Управляет ночником Ардино (DigiSpark) в качестве светодиодов отлично подошли светодиоды ws2812b.

Светодиодный ночник в виде куба.

3. Два варианта ночника «светофор» на Arduino иадресных светодиодах WS2812.

Два варианта ночника «светофор» на Arduino иадресных светодиодах WS2812.

Сделал уже два варианта светофора на Arduino и адресных светодиодах WS2812. Достаточно удобные ночники и нравиться детям. У меня ребенок играл месяца 2 с данным светильником. Также использовал как ночник. В связи с тем, что он работает на батарейках, его можно поставить в любое место. Ребенок включает его и ставит на тумбочку около кровати. Время работы от 7 до 9 ночей.

Ардуино светофор на digispark и ws2812b

Светофор на Digispark и адресных светодиодах WS2812 — Ардуино светофор

2. Светильник, сделанный на ЧПУ станке с 5 режимами работы и регулировкой яркости.

Светильник, сделанный на ЧПУ станке с 5 режимами работы и регулировкой яркости.

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

Первый светильник до сих пор стоит у меня. Ребенок года полтора пользовался им как ночником. Но сейчас он любит включать подсветку на окне. И светильник используется реже.

Очередной проект на Digispark и адресных светодиодах WS2812. Работа ЧПУ

1. Ночник из банки из-под витаминов на Arduino и адресных светодиодах WS2812.

Ночник из банки из-под витаминов на Arduino и адресных светодиодах WS2812.

Это первый проект, который я сделал на адресных светодиодов WS2812. Рассеиватель сделал из банки из-под витаминов для детей.

Через некоторое время переделал данный светильник, добавил режимы работы и вместо Arduino NANO установил Digispark.

Меняем Arduino на Digispark в светильнике на ws2812. digispark проекты.

Умный ночник на Arduino и адресных светодиодах WS2811

]]>
Урок 23. Подключение сегментного дисплея TM1637 к Arduino. http://portal-pk.ru/news/253-podklyuchenie-segmentnogo-displeya-tm1637-k-arduino.html Константин Portal-PK 2020-03-24T12:24:49+03:00 Сегодня в уроке подключим семисегментный индикатор TM1637 к Arduino. Установим библиотеку TM1637.h и научимся выводить на дисплей цифры и некоторые символы.

Как устроен и из чего состоит модуль TM1637.

Характеристики Индикатора на TM1637:
• Напряжение питание: 5,5В
• Потребляемый ток 0.2 — 80мА (в зависимости от горящих сегментов)
• Градаций яркости индикаторов — 8
• Размеры платы: 42x24мм
• Двух проводной последовательный интерфейс (CLK, DIO).

Фото модуля от магазина RobotDyn фронтальный вид.

Фото модуля от магазина RobotDyn, фронтальный вид

Фото модуля от магазина RobotDyn вид с тыльной стороны.

Фото модуля от магазина RobotDyn вид с тыльной стороны.

Этот модуль собран на драйвере TM1637.
• Есть модули красного, синего, зелёного, белого цвета.
• Размеры 0,36” и 0,56”

В уроке будем использовать модуль TM1637 0,56”, зеленого цвета.


Возможности модуля TM1637:
• Зажигать сразу все знаки или по одному сегменту или символу,
• Выводить цифры от 0 до 9 и некоторые буквы. Смотри ниже.
• Цифры могут выводиться как с нулями слева, так и без них,
• 8 градаций изменения яркости.
• Вывод символа в определённую позицию (ячейку).

Отличие модуля индикатора на TM1637 от других – это его компактность, он не дорогой, и управление всего по двум проводам.

Отличие модуля индикатора на TM1637 от других – это его компактность, он не дорогой, и управление всего по двум проводам.

Подключение дисплея TM1637 к Arduino

Подключить дисплей можно к любым цифровым пинам Ардуино. В нашем случае будем подключать к Arduino NANO по схеме.

Подключение дисплея TM1637 к Arduino

Arduino Nano [PIN 5V] - TM1637 Module[PIN 5V]

Arduino Nano [PIN GND] - TM1637 Module[PIN GND]

Arduino Nano [PIN 2] - TM1637 Module[PIN DIO]

Arduino Nano [PIN 3] - TM1637 Module[PIN CLK]

Подключение дисплея TM1637 к Arduino UNO

Установка и настройка библиотеки TM1637.h.

Установить библиотеку TM1637.h можно из менеджера библиотек. Для этого откроем Arduino IDE, перейдем в раздел Скетч-> Подключить библиотеку -> Управление библиотеками.

Установить библиотеку TM1637.h

Затем в строке поиска наберем TM1637. И установим библиотеку Grove 4-Digit Display.

 Затем в строке поиска наберем TM1637. И установим библиотеку Grove 4-Digit Display.

Вы также можете скачать библиотеку TM1637 внизу урока, в разделе «материалы для скачивания».


Настройка библиотеки TM1637 для вывода дополнительных символов.

Библиотека позволяет вывести цифры и некоторые символы на дисплей.

Библиотека позволяет вывести цифры и некоторые символы на дисплей.

Для реализации простых проектов, таких как часы, индикаторы и счетчики, этого набора символов достаточно. Я реализовывал часы с выводом температуры и влажности: Arduino часы. Видео 2. Подключаем к Arduino TM1637 и датчик DHT11.

Для отображения температуры использовал символ «С» номер для вывода на индикатор 12и для отображения влажности использовал символ «F» номер для вывода на дисплей 15.

Но для некоторых проектов на Arduino не достаточно

Но для некоторых проектов на Arduino не достаточно данного набора символов. Расширить его достаточно легко, для этого в файле TM1637.cpp библиотеки находим массив TubeTab[] и добавляем нужные коды символов.

TM1637.cpp библиотеки

Список добавленных символов в файле TM1637.cpp, библиотеки TM1637.

Список добавленных символов в файле TM1637.cpp, библиотеки TM1637.

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

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

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

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

После кодирования сегментов, установив нужные биты в байте,

После кодирования сегментов, установив нужные биты в байте, для сокращения записи можно перевести байт из двоичного в шестнадцатиричный формат, как - b00011110 -> 0x1E.


Пример кода для вывода информации на семисегментный индикатор с драйвером TM1637.

Пример 1. Вывод времени с мигающим двоеточием.

Пример 1. Вывод времени с мигающим двоеточием.

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

В данном примере выведем 4 цифры на индикатор TM1637,

Пример 2. Вывод слов на модуль TM1637.

Пример 2. Вывод слов на модуль TM1637.

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

Дополнительные символы добавили в библиотеку, сейчас осталось научиться их выводить.

Пример 3. Выводданных с датчиком с символами.

Пример 3. Выводданных с датчиком с символами.

Мы научились выводить цифры и слова на дисплей. Как же сделать динамическое изменение значений на дисплее. При этом добавлять символы для индикации различных данных.

Тут поможет нам посимвольный вывод данных на дисплей. Например, запись tm1637.display(0, 5) выводит первый символ на дисплей 5. Аналогично выводятся остальные 3 символа.

Тут поможет нам посимвольный вывод данных на дисплей. Например, запись tm1637.display(0, 5)

Для разделения числа на десятки и единицы, для нахождения единиц нужно найти остаток от деления на 10, и для получения десяток нужно число делить на 10.

Для разделения числа на десятки и единицы

И после числового значения выведем символ, например, для температуры символ «С».

И после числового значения выведем символ, например, для температуры символ «С».


Пример применим при выводе даты, времени и показаний с датчиков.


Появились вопросы или предложения не стесняйся, пиши в комментарии!

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке

]]>
Работа со встроенной EEPROM в микроконтроллерах на Arduino http://portal-pk.ru/news/252-rabota-so-vstroennoi-eeprom-v-mikrokontrollerah-na-arduino.html Константин Portal-PK 2020-03-21T10:19:57+03:00 Микроконтроллеры AVR, на основе которых создаются платы Arduino и Genuino, обладают встроенной EEPROM: памятью, которая хранит значения переменных, пока плата выключена (подобно крошечному жесткому диску). Описываемая в данной статье библиотека позволяет считывать и записывать данные в EEPROM.

Поддерживаемые микроконтроллеры на различных платах Arduino и Genuino обладают разным размером EEPROM: 1024 байта в ATmega328, 512 байт в ATmega168 и ATmega8, 4 KB (4096 байт) в ATmega1280 и ATmega2560. Платы Arduino и Genuino 101 обладают эмуляцией EEPROM пространства размером 1024 байт.

Функции для работы с EEPROM:

read()

Описание
Считывает байт из EEPROM. Ячейки, которые никогда не были записаны, содержат значение 255.
Синтаксис
EEPROM.read(address)
Параметры
address: адрес ячейки для считывания, начинается с 0 (int).
Возвращаемое значение
Значение, записанное в ячейку (byte).
Пример
/*
 * EEPROM Read
 *
 * Считывает значение каждого байта в EEPROM и выводит его
 * на компьютер.
 */

#include <EEPROM.h>

// начать чтение с первого байта (адрес 0) в EEPROM
int address = 0;
byte value;

void setup() {
  // инициализировать последовательный порт и ждать,
  // пока порт не будет открыт:
  Serial.begin(9600);
  while (!Serial) {
    ; // ждать подключения последовательного порта. Необходимо только для встроенного USB порта.
  }
}

void loop() {
  // прочитать байт из текущего адреса EEPROM
  value = EEPROM.read(address);

  Serial.print(address);
  Serial.print("\t");
  Serial.print(value, DEC);
  Serial.println();

  /***
    Перейти к следующему адресу, или, если находимся в конце, вернуться в начало.

    Большие AVR контроллеры обладают большим размером EEPROM, например:
    - Arduno Duemilanove: 512b EEPROM;
    - Arduino Uno:        1kb EEPROM;
    - Arduino Mega:       4kb EEPROM;

    Вместо жесткого прописывания размера EEPROM, лучше использовать предусмотренную 
    функцию определения размера.
    Это сделает ваш код портируемым на все микроконтроллеры AVR.
  ***/
  address = address + 1;
  if (address == EEPROM.length()) {
    address = 0;
  }

  /***
    Поскольку размеры EEPROM являются степенями двойки, то возврат к началу EEPROM
    можно было бы реализовать с помощью операции побитового И со значением (размер - 1).

    ++address &= EEPROM.length() - 1;
  ***/

  delay(500);
}

write()

Описание
Записывает байт в EEPROM.
Синтаксис
EEPROM.write(address, value)
Параметры
address: адрес ячейки для записи, начинается с 0 (int).
value: значение для записи, от 0 до 255 (byte).
Возвращаемое значение
Ничего не возвращается.
Примечание
Запись в EEPROM занимает 3,3 мс. Память EEPROM обладает жизненным циклом 100 000 операций записи/стирания, поэтому, возможно, вам придется быть осторожными с тем, как часто записываете её.
Пример
/*
 * EEPROM Write
 *
 * Записывает значения, считанные с аналогового входа 0, в EEPROM.
 * Эти значения будут оставаться в EEPROM, когда плата будет
 * выключена, и могут быть извлечены позже при следующем запуске.
 */

#include <EEPROM.h>

/** текущий адрес в EEPROM (т.е. какой байт мы собираемся записать следующим) **/
int addr = 0;

void setup() {
  /** Нет никаких начальных настроек. **/
}

void loop() {
  /***
    Необходимо делить на 4, так как диапазон значений на аналоговых входах
    составляет от 0 до 1023, а каждый байт EEPROM может хранить значения
    только от 0 до 255.
  ***/

  int val = analogRead(0) / 4;

  /***
    Записать значение в соответствующий байт EEPROM.
    Эти значения останутся там, когда плата будет выключена.
  ***/

  EEPROM.write(addr, val);

  /***
    Перейти к следующему адресу, или, если находимся в конце, вернуться в начало.

    Большие AVR контроллеры обладают большим размером EEPROM, например:
    - Arduno Duemilanove: 512b EEPROM;
    - Arduino Uno:        1kb EEPROM;
    - Arduino Mega:       4kb EEPROM;

    Вместо жесткого прописывания размера EEPROM, лучше использовать предусмотренную 
    функцию определения размера.
    Это сделает ваш код портируемым на все микроконтроллеры AVR.
  ***/
  addr = addr + 1;
  if (addr == EEPROM.length()) {
    addr = 0;
  }

  /***
    Поскольку размеры EEPROM являются степенями двойки, то возврат к началу EEPROM
    можно было бы реализовать с помощью операции побитового И со значением (размер - 1).

    ++addr &= EEPROM.length() - 1;
  ***/
  delay(100);
}

update()

Описание
Записывает байт в EEPROM. Значение записывается, только если оно отличается от значения уже записанного по этому адресу.
Синтаксис
EEPROM.update(address, value)
Параметры
address: адрес ячейки для записи, начинается с 0 (int).
value: значение для записи, от 0 до 255 (byte).
Возвращаемое значение
Ничего не возвращается.
Примечание
Запись в EEPROM занимает 3,3 мс. Память EEPROM обладает жизненным циклом 100 000 операций записи/стирания, поэтому данная функция, в отличие от write(), может сохранить время, если записываемые данные часто не меняются.
Пример
/***
   EEPROM Update

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

   Если значение не изменилось, то EEPROM не перезаписывается,
   что поможет без необходимости не сокращать срок службы EEPROM.
 ***/

#include <EEPROM.h>

/** текущий адрес в EEPROM (т.е. какой байт мы собираемся записать следующим) **/
int address = 0;

void setup() {
  /** EMpty setup **/
}

void loop() {
  /***
    Необходимо делить на 4, так как диапазон значений на аналоговых входах
    составляет от 0 до 1023, а каждый байт EEPROM может хранить значения
    только от 0 до 255.
  ***/
  int val = analogRead(0) / 4;

  /***
    Обновить конкретную ячейку EEPROM.
    Эти значения останутся там при выключении платы.
  ***/
  EEPROM.update(address, val);

  /***
    Функция EEPROM.update(address, val) эквивалентна следующему:

    if( EEPROM.read(address) != val ){
      EEPROM.write(address, val);
    }
  ***/

  /***
    Перейти к следующему адресу, или, если находимся в конце, вернуться в начало.

    Большие AVR контроллеры обладают большим размером EEPROM, например:
    - Arduno Duemilanove: 512b EEPROM;
    - Arduino Uno:        1kb EEPROM;
    - Arduino Mega:       4kb EEPROM;

    Вместо жесткого прописывания размера EEPROM, лучше использовать предусмотренную 
    функцию определения размера.
    Это сделает ваш код портируемым на все микроконтроллеры AVR.
  ***/
  address = address + 1;
  if (address == EEPROM.length()) {
    address = 0;
  }

  /***
    Поскольку размеры EEPROM являются степенями двойки, то возврат к началу EEPROM
    можно было бы реализовать с помощью операции побитового И со значением (размер - 1).

    ++addr &= EEPROM.length() - 1;
  ***/

  delay(100);
}

get()

Описание
Считывает любой тип данных или объект из EEPROM.
Синтаксис
EEPROM.get(address, data)
Параметры
address: адрес для чтения, начинается с 0 (int).
data: данные для чтения, могут быть примитивным типом (например, float) или пользовательской структурой struct.
Возвращаемое значение
Ссылка на переданные данные.
Пример
/***
    Чтобы предварительно записать данные в EEPROM, используйте 
    пример для функции put().
    Можно обойтись и без этого, но значения, выводимые этим скетчем,
    зависят от того, что содержится в EEPROM. Это может заставить
    объект последовательного порта вывести на печать длинную строку
    мусора, если в загруженной строке не будет найден нулевой символ.
***/

#include <EEPROM.h>

void setup() {

  float f = 0.00f;   // Переменная для хранения данных, прочитанных из EEPROM.
  int eeAddress = 0; // Адрес EEPROM, откуда следует начать чтение.

  Serial.begin(9600);
  while (!Serial) {
    ; // ждать подключения последовательного порта. Необходимо только для встроенного USB порта.
  }
  Serial.print("Read float from EEPROM: ");

  // Получить данные типа float из EEPROM в месте 'eeAddress'
  EEPROM.get(eeAddress, f);
  Serial.println(f, 3);    // Это может напечатать 'ovf, nan', если данные в EEPROM 
                           // не корректны для float.

  /***
    Так как get возвращает ссылку на 'f', вы можете использовать ее в качестве аргумента
    То есть: Serial.print( EEPROM.get( eeAddress, f ) );
  ***/

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

  secondTest(); // Запустить следующий тест.
}

struct MyObject {
  float field1;
  byte field2;
  char name[10];
};

void secondTest() {
  int eeAddress = sizeof(float); // Переместить адрес к байту, следующему после float 'f'.

  MyObject customVar; // Переменная для хранения данных, прочитанных из EEPROM.
  EEPROM.get(eeAddress, customVar);

  Serial.println("Read custom object from EEPROM: ");
  Serial.println(customVar.field1);
  Serial.println(customVar.field2);
  Serial.println(customVar.name);
}

void loop() {
  /* Пустой цикл */
}

put()

Описание
Записывает любой тип данных или объект из EEPROM.
Синтаксис
EEPROM.put(address, data)
Параметры
address: адрес для записи, начинается с 0 (int).
data: данные для записи, могут быть примитивным типом (например, float) или пользовательской структурой struct.
Возвращаемое значение
Ссылка на переданные данные.
Примечание
Функция использует EEPROM.update() для реализации записи, поэтому она не перезаписывает значение, если оно не изменилось.
Пример
/***
    Этот скетч также можно использовать для предварительной
    записи в EEPROM данных, используемых в примере для функции get().

    Обратите внимание, что, в отличие от однобайтной версии EEPROM.write(),
    функция put использует обновление. То есть байт будет записан, только
    если он отличается от записанных в EEPROM данных. 
***/

#include <EEPROM.h>

struct MyObject {
  float field1;
  byte field2;
  char name[10];
};

void setup() {

  Serial.begin(9600);
  while (!Serial) {
    ; // ждать подключения последовательного порта. Необходимо только для встроенного USB порта.
  }

  float f = 123.456f;  // Переменная для записи в EEPROM.
  int eeAddress = 0;   // Место, куда мы хотим положить данные.
  // Простой вызов с адресом и переменной в качестве аргументов.
  EEPROM.put(eeAddress, f);

  Serial.println("Written float data type!");

  /** Put поддерживает и пользовательские структуры. **/

  //Data to store.
  MyObject customVar = {
    3.14f,
    65,
    "Working!"
  };

  eeAddress += sizeof(float); // Переместить адрес к байту, следующему после float 'f'.

  EEPROM.put(eeAddress, customVar);
  Serial.print("Written custom data type! \n\nView the example sketch eeprom_get to see how you can retrieve the values!");
}

void loop() {
  /* Пустой цикл */
}

EEPROM[]

Описание
Данный оператор позволяет использовать идентификатор 'EEPROM', как массив. Ячейки EEPROM могут быть прочитаны и записаны непосредственно с помощью этого оператора.
Синтаксис
EEPROM[address]
Параметры
address: адрес для чтения/записи, начинается с 0 (int).
Возвращаемое значение
Ссылка на ячейку EEPROM.
Пример
#include <EEPROM.h>

void setup(){

  unsigned char val;

  // Прочитать первую ячейку EEPROM.
  val = EEPROM[ 0 ];

  // Записать первую ячейку EEPROM.
  EEPROM[ 0 ] = val;

  // Сравнить содержимое
  if( val == EEPROM[ 0 ] ){
    // Сделать что-то...
  }
}

void loop(){ /* Пустой цикл */ }
]]>
#22. Подключаем к Arduino джойстик. Управление servo сервоприводом. http://portal-pk.ru/news/251-podklyuchaem-k-arduino-dzhoistik-upravlenie-servo.html Константин Portal-PK 2020-03-18T14:15:57+03:00 Сегодня в уроке подключим джойстик к Arduino UNO. И рассмотрим пару примеров использования джойстика в робототехнике:

  1. Вывод данных о положении стика джойстика в монитор порта.
  2. Управление свечением двух светодиодов с помощью джойстика.
  3. Подключить джойстик и сервопривод к Arduino. Научимся управлять сервоприводами с помощью джойстика.

А для начала рассмотрим, что такое джойстик, из чего он состоит и как устроен.

Устройство аналогово джойстика и принцип работы.

Устройство аналогово джойстика и принцип работы.

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

Устройство аналогово джойстика и принцип работы.

Управляет всем стик. При изменении положения стика по оси X - вращается потенциометр, выход которого outX, а при перемещении по оси Y - меняется значение потенциометра с выводом outY. По сути, это 2 потенциометра, с которых снимаем показания. Стик устроен таким образом, что он возвращается самостоятельно в центральное положение. Что обеспечивает центрование потенциометров. В данном состоянии джойстика на выходах outX, outY будет 511.

Управляет всем стик. При изменении положения стика по оси X

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

На плате установлена тактовая кнопка. Использовать ее или нет решать вам. При создании пульта для радиоуправляемой машинки я использовал данную кнопку для переключения режима работы: с джойстика или с акселерометра. Если интересно читайте на странице проекта: Машинка на радиоуправлении. Arduino + nrf24l01 + пульт.


Вывод данных о положении стика джойстика в монитор порта.

Вывод данных о положении стика джойстика в монитор порта.

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

подключим джойстик к Arduino UNO по схеме.

После чего нужно загрузить код в Arduino UNO.

После чего нужно загрузить код в Arduino UNO.

В мониторе порта будут вот такие данные.

В мониторе порта будут вот такие данные.

Как видите, они отличаются от 511. Показание отличаются на разных осях X=507, Y=510. Эти данные нам пригодятся в следующем примере.

Если мы подвигаем стик джойстика, то увидим изменение значений от 0 до 1023 по каждой оси.

Если мы подвигаем стик джойстика, то увидим изменение значений от 0 до 1023 по каждой оси.

На выходе мы получаем значение до 1023. Данный диапазон значений практически не применим в проектах на Ардуино, поэтому давайте приведем это значение к диапазону от 0 до 255, для этого воспользуемся функцией map().

 Данный диапазон значений практически не применим в проектах на Ардуино

После чего в мониторе порта мы получим вот такие значения.

После чего на мониторе порта мы получим вот такие значения.


Управление свечением двух светодиодов с помощью джойстика.

Управление свечением двух светодиодов с помощью джойстика.

Чтобы усложнить ситуацию, сделаем так, чтобы светодиод не светился при центральном положении джойстика, а при отклонении джойстика светодиод плавно увеличивал яркость. Для этого нужно подключать светодиоды к пинам с ШИМ. Подключим джойстик и светодиоды к Ардуино по схеме.

Подключим джойстик и светодиоды к Ардуино по схеме

Так как мы знаем значение при центральном положении стика, для оси Х это 507, а для оси Y 510, используя функцию map(), приведем к необходимому диапазону, например для оси Х от 507 до 1023 к диапазону от 0 до 255. Код будет вот таким.

Так как мы знаем значение при центральном положении стика

Данный пример применим при разработке пульта радиоуправления.


Подключить джойстик и сервопривод к Arduino. Научимся управлять сервоприводами с помощью джойстика.

Подключить джойстик и сервопривод к Arduino. Научимся управлять сервоприводами с помощью джойстика.

Джойстик часто используется для управления сервоприводами. Поэтому рассмотрим небольшой пример, в котором будем изменять угол положения двух servo подключённых к Arduino UNO по схеме.

 двух servo подключённых к Arduino UNO по схеме

Для данного примера устанавливать дополнительные библиотеки не нужно, так как библиотека servo устанавливается вместе с Arduino IDE.

Код для управления сервоприводами с помощью джойстика будет небольшим и достаточно простым.

Код для управления сервоприводами с помощью джойстика будет небольшим и достаточно простым.

Итог: Как видим из примеров, применение джойстика достаточно большое в разработке проектов на Arduino и в робототехнике.

 двух servo подключённых к Arduino UNO

Если вас интересует дополнительная информация о джойстике, пишите об этом в комментариях.

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке

]]>
#21. Подключаем к Arduino Шаговый двигатель 28BYJ-48 на драйвере ULN2003 http://portal-pk.ru/news/250-podklyuchaem-k-arduino-shagovyi-dvigatel-28byj-48-s-pomoshchyu.html Константин Portal-PK 2020-03-06T13:02:07+03:00 Сегодня в уроке подключим шаговый двигатель 28BYJ-48 к Arduino и научимся вращать вал двигателя в разные стороны и изменять скорость вращения с помощью потенциометра и энкодера KY-040.

Кратко, что такое шаговый двигатель (ШД) - это двигатель, который способен осуществлять вращение на 1 шаг. Шаг — это угол, который обусловлен устройством каждого конкретного шагового двигателя.

Характеристики шагового двигателя 28BYJ-48:

Характеристики шагового двигателя 28BYJ-48:

Размера шагового двигателя 28BYJ-48. Необходимы при проектировании деталей для 3D печати.

Размера шагового двигателя 28BYJ-48. Необходимы при проектировании деталей для 3D печати.

Вот так выглядит схема шагового двигателя 28BYJ-48

Вот так выглядит схема шагового двигателя 28BYJ-48

Подавая сигналы в определённом порядке на выводы двигателя, двигатель можно вращать по часовой стрелке.

Для шагового режима.

Для шагового режима.

Для полушагового режима.

Для полушагового режима.

Прямое подключение шагового двигателя 28BYJ-48 к Arduino.

В связи с тем, что двигатель 28BYJ-48 работает от 5в и при небольших токах, его можно подключить на прямую к Arduino.

Схема подключения к Arduino UNO будет следующая.

В связи с тем, что двигатель 28BYJ-48 работает от 5в и при небольших токах, его можно подключить на прямую к Arduino.

Для вращения ШД достаточно подавать сигналы по схеме, которую мы рассмотрели выше.

Для этого можно сделать массив подачи сигнала на пины микроконтроллера.

Для этого можно сделать массив подачи сигнала на пины микроконтроллера.

И в цикле выполнять каждую строчку массива. Но есть решение с более компактным кодом. Нашел я данный пример на канале Дмитрия Осипова. За что ему отельное спасибо!

Код для вращения в одну и в другую сторону будет вот таким.

ВНИМАНИЕ! Материалы для скачивания находятся внизу статьи!

Пример подключения шагового двигателя 28BYJ-48 (5V)с использованием драйвер ULN2003.

Также у Дмитрия Осипова есть код для изменения скорости вращения с помощью потенциометра. Я его немного доработал, сделал обработку нажатия кнопки без задержки в 500 мс. Сейчас двигатель стал вращаться в обратную сторону без видимой задержки.

Для подключения буду использовать модуль SBT0811 на драйвере ULN2003.

Для подключения буду использовать модуль SBT0811 на драйвере ULN2003.

Драйвер устроен вот таким образом.

Драйвер устроен вот таким образом.

Соответственно, наш код будет работать и с данным драйвером.

Подключим все по схеме и загрузим код в Arduino NANO.

Подключим все по схеме и загрузим код в Arduino NANO.

Схема подключения для Arduino UNO будет аналогичной.

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

ВНИМАНИЕ! Материалы для скачивания находятся внизу статьи!

Пример управления шаговым двигателем 28BYJ-48 с помощью Энкодера.

Для уменьшения количества элементов в схеме решил заменить потенциометр и тактовую кнопку на энкодер вращения KY-040. Как подключить энкодер вращения к Arduino рассказывал в предыдущем уроке.

Подключаем шаговый двигатель 28BYJ-48 и энкодер к Arduino по схеме.

Подключаем шаговый двигатель 28BYJ-48 и энкодер к Arduino по схеме.

Проводим небольшую доработку кода и получим вот такой результат.

Если нажать на энкодер, меняется направление вращения. А при вращении энкодера по часовой стрелке - скорость увеличивается. Если вращать против часовой стрелки - скорость снижается.

Если нажать на энкодер, меняется направление вращения. А при вращении энкодера по часовой стрелке - скорость увеличивается. Если вращать против часовой стрелки - скорость снижается.

ВНИМАНИЕ! Материалы для скачивания находятся внизу статьи!

Вы также можете без проблем воспользоваться примером из стандартной библиотеки Stepper, которая позволит сделать тоже самое и при меньшем объёме кода. Но библиотека не даст вам понять, как это все устроено.

стандартной библиотеки Stepper

А вот сам пример вращения в одну сторону, а затем в другую с использованием библиотеки Stepper.

А вот сам пример вращения в одну сторону, а затем в другую с использованием библиотеки Stepper.

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

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

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке

]]>
#20 Плейлисты, воспроизводим случайную композицию DFPlayer Mini и Arduino. http://portal-pk.ru/news/249-pleilisty-vosproizvodim-sluchainuyu-kompoziciyu-dfplayer-mini.html Константин Portal-PK 2020-03-04T13:18:26+03:00 В продолжение урока: Делаем MP3-плеер на DFPlayer Mini и Arduino. Рассмотрим, как можно создавать плейлисты для воспроизведения композиции с автоматическим определением количества плейлистов и количества треков в каждом плейлисте. А также сделаем воспроизведение случайного трека и зациклим воспроизведение композиции в одной папке.

В продолжение урока:Делаем MP3-плеер на DFPlayer Mini и Arduino. Рассмотрим, как можно создавать плейлисты

После того, как я сделал урок с использованием MP3-плеера написал мне подписчик: «познавательное видео! а можешь рассказать как сделать, например, 10 папок с музыкой и в них 10 музыкальных фрагментов, как подключаются кнопки выбора по папкам, и оставить громкость + - , воспроизведение и стоп? Я видел схему с множеством резисторов, для определения, например, каждой кнопки - музыкальному отрывку, но не нашел как подключить кнопки выбора папок - буду признателен за помощь!»

После того, как я сделал урок с использованием MP3-плеера написал мне подписчик

Решил я помочь подписчику и сделать урок с использованием DFPlayer и Arduino. Реализовать выбор папки и включение нужного mp3 файла. Но как сделать так, чтобы не нужно было каждый раз прописывать в коде, сколько у нас папок и сколько треков в каждой папке. А чтобы Arduino проделывала роботу по определению количества папок и треков. Ограничение DFPlayer Mini - максимум плейлистов 99, и треков в плейлисте 999, - и этого достаточно для решения, практически, любой задачи.

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

Для урока MP3-плеера на Arduino нам понадобится:

1. Arduino UNO или Arduino NANO

2. DFPlayer Mini.

3. Беспаечная макетная плата .

4. Соединительные провода .

5. Динамик. Я использую от ноутбука.

6. 2 резистора на 10 кОм.

Подключаем MP3-плеера DFPlayer к Arduino по схеме.

Подключаем MP3-плеера DFPlayer к Arduino по схеме.

Пример работы с выбором папок, и композиции в них на DFPlayer.

Приступим к реализации просьбы подписчика. На карте памяти сделаем несколько папок с порядковыми номерами 01, 02, 03, 04 .. 11. В моем случае 11 папок, вы можете сделать любое количество.

На карте памяти сделаем несколько папок с порядковыми номерами 01, 02, 03, 04 .. 11.

Загрузим в каждую папку треки от 10 до 14. Вот так это будет выглядеть на карте памяти.

Загрузим в каждую папку треки от 10 до 14. Вот так это будет выглядеть на карте памяти.

За основу возьмем код из предыдущего урока и немного его доработаем. Добавим переменные, которые будут отвечать за папки и треки.

 Добавим переменные, которые будут отвечать за папки и треки.

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

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


Переменная folders получается на 1 больше, чем на карте. Сейчас мы можем, без проблем, добавлять папки на нашу карту памяти и MP3-плеер автоматически определит сколько их. Папок может быть не больше 99, и название должно состоять из 2 цифр.

Посчитаем сколько треков в первом каталоге.

Посчитаем сколько треков в первом каталоге.

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

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


Кнопка buttonNext будет переключать папки, а buttonPrevious – будет переключать по трекам в выбранной папке.

Переключать по трекам и по папкам будем в сторону увеличения. Можно сделать переключение в обратную сторону, но нужно добавить еще 2 кнопки. И дописать соответствующий код. Это вы сможете сделать самостоятельно, если это будет вам необходимо.

Рассмотрим код переключения по папкам:

Рассмотрим код переключения по папкам:

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

 Почему нужно вычитать 1 рассказывал выше.

Затем нам нужно подсчитать, сколько треков в данной папке.

Затем нам нужно подсчитать, сколько треков в данной папке.

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

включаем первый трек из данной папки

Если вы планируете воспроизводить с первого трека при переключении между папками, нужно убрать условие и оставить j = 1;. Осталось воспроизвести трек и вывести информацию в монитор порта номер трека и номер папки, в которой находится трек.


Осталось воспроизвести трек и вывести информацию в монитор порта номер трека и номер папки, в которой находится трек.

Это не оптимальный код. Его можно упростить и сделать быстрее, но для понятия будет сложнее.

Приступим к переключению треков в выбранной папке.

Приступим к переключению треков в выбранной папке.

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

В мониторе порта это будет выглядеть вот так:

В мониторе порта это будет выглядеть вот так:

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

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

Если трек последний, то при следующем нажатии на кнопку, переключаемся на первый трек в текущей папке.

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

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


Зациклить воспроизведение композиций в папке, и случайное воспроизведение всех треков на DFPlayer и Arduino.

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

Схема подключения будет аналогично предыдущему примеру.

Схема подключения будет аналогично предыдущему примеру.

Код тоже возьмём из предыдущего примера и немного его изменим. Переменных нам нужно будет меньше:

Код тоже возьмём из предыдущего примера и немного его изменим. Переменных нам нужно будет меньше:

Кнопка buttonNext будет переключать воспроизведение папок.

Кнопка buttonNext будет переключать воспроизведение папок.

Как видно из кода мы переключаем на следующую папку и включаем зацикливание воспроизведения всех треков в выбранной папке.

На кнопку buttonPrevious помешаем случайное воспроизведение трека из всех доступных на карте памяти.

На кнопку buttonPrevious помешаем случайное воспроизведение трека из всех доступных на карте памяти.

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

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

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

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке

]]>
Проекты часов на Arduino. От часов на светодиодах до часов на дисплее Nextion. http://portal-pk.ru/news/248-proekty-chasov-na-arduino-ot-chasov-na-svetodiodah-do-chasov.html Константин Portal-PK 2020-03-03T18:24:51+03:00 Разрабатываю часы на Arduino уже несколько лет подряд. Решил поместить все свои проекты часов на Arduino на одну страницу, чтобы самому знать, сколько часов сделано, и, при необходимости, показать заинтересованным читателям, знакомым и родственникам.

Это я решил сделать в связи с тем, что часто спрашивают:

  • А что ты можешь сделать?
  • Например, часы - отвечаю я.
  • А покажи примеры!

И тут я начинаю искать по сайту, что показать. А в конце вопрос: это ты сделал 5 различных часов на Arduino? Или больше? И тут начинаем листать обратно, считая сколько часов я сделал.

Поэтому решил все часы выложить тут:

6. Часы на OLED дисплее SSD1306 и Arduino.

Oled часы с выводом температуры на Arduino своими руками. Еще один интересный проект часов на OLED дисплее SSD1306 и Arduino. Данные часы небольшого размера, но обладают функциями полноценных часов. Часы выводят температур, дату и время. Благодаря двум тактовым кнопкам можно настроить дату и время.

5. Часы без кнопок с сенсорным дисплеем Nextion и Arduino.

Часы на Arduino и дисплее Nextion с выводом температуры и влажности.

Вам не нравятся часы с вечно чикающими кнопками? Представляю вашему вниманию часы с сенсорным экраном Nextion, и Arduino.

Часы выводят дату, время температуру и влажность. Также позволяют настраивать время и дату. И все это делается на экране без единой внешней кнопки. Как это по-современному.

Часы будут доработаны, и ожидается новая версия часов на Arduino с дисплеем Nextion с еще большим функционалом.

4. Часы матрица на Arduino и адресных светодиодах WS2812.

Светодиодные часы своими руками на ардуино (Arduino) WS2812 управляемых (адресных)

После того, как я купил себе 3D принтер, стал активно делать проекты с использованием 3D печати. Одним их проектов стали часы-матрица с выводом времени и даты на матрицу 16х5 пикселей. Получились отличные часы с возможностью настраивать время и дату. Но в связи с тем, что печатал решётку для светодиодов пластиком PLA, то на внешних контурах он потрескался уже через полгода. Нужно перепечатать внешнюю решётку ABS пластиком. Но пока не доходят руки.

3. LEGO часы на Arduino.

Часы-будильник на Arduino. Корпус сделан из конструктора LEGO.  LEGO Arduino

Задали ребёнку сделать «умный проект в доме». После недолгих размышлений решили сделать Arduino часы из LEGO. Добавили в часы спикер, и кнопку для отключения будильника. Часы не только работали и показывали текущее время, но и в них был запрограммирован будильник, который срабатывал в 07:00. Все отлично, но работал будильник каждое утро, и даже в выходные дни. Не смотря на то, что часы нравились ребенку, они проработали недолго. Ребенок разобрал корпус для своего строения из LEGO.

2. Светодиодные часы на адресных светодиодах WS2812 и Arduino.

Классные самодельные настенные светодиодные часы на arduino

Часы состоят из 3 круглых контуров, по которым располагаются светодиоды. Внешний контур показывает минуты с кратностью 5. Если светиться 1 светодиод, значит 5 мин, 2 – 10 мин и т.д. По аналогии работы стрелочных часов. Средний контур, с выфрезерованными цифрами 3,6,9,12, – это часовой индикатор, который показывает сколько часов. И маленький контур с 4 светодиодами указывает сколько минут нужно добавить к минутам, которые получаются на внешнем контуре, т.е если на внешнем контуре светиться 3 светодиода, а на маленьком 2 то значит сейчас 17 минут (15+2). Заполняем минуты, которые нельзя показать на внешнем контуре.

Часы сделал 2 года, и они до сих пор работают и висят у меня в коридоре, удивляя гостей своей необычной формой.

1.Arduino часы на сдвиговых регистрах и 28 светодиодах. С выводом температуры и влажности на семисегментный индикатор TM1637.

Arduino часы - Видео 4. Делаем корпус и собираем Arduino часы

Часы состоят из 28 светодиодов, которые показывают тегирующее время. Также время дублируется на семисегментный индикатор TM1637. Также на TM1637 выводится влажности и температура в помещении. Время настраивается с помощью пульта дистанционного управления.

]]>
Урок 19. Делаем MP3-плеер на DFPlayer Mini и Arduino. http://portal-pk.ru/news/247-delaem-mp3-pleer-na-dfplayer-mini-i-arduino.html Константин Portal-PK 2020-02-28T14:05:54+03:00 Как воспроизвести аудиофайлы в формате wav я уже рассказывал в уроке: Arduino SD карта. Воспроизводим звуки и музыку в wav формате. Данный способ подходит, когда нужно воспроизвести файлы не очень высокого качества, например, уведомления, оповещение и пр. Если же надо воспроизводить файлы в формате mp3, нам поможет модуль DFPlayer Mini.

модуль DFPlayer Mini

MP3-плеер DFPlayer Mini позволяет воспроизводить аудиофайлы, записанные на карту памяти формата microSD. С помощью этого плеера можно управлять музыкой: приостановка и возобновление воспроизведения аудиофайла. А также можно установить громкость из 30-ти уровней громкости и одни из 6-ти режимов эквалайзера.

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

Характеристики DFPlayer MP3 mini:

Характеристики DFPlayer MP3 mini:

  • Напряжение питания: 3,3–5 В
  • Количество каналов: 1 моно, 3 Вт + 2 стерео, без усилителя
  • Поддерживаемые частоты дискретизации: 8, 11, 12, 16, 22, 24, 32, 44,1, 48 кГц
  • Разрядность ЦАП: 24 бита
  • Поддерживаемые файловые системы: FAT16, FAT32
  • Максимальный объём SD-карты: 32 ГБ
  • Количество каталогов композиций: до 100
  • Количество композиций в каталоге: до 255
  • Форматы аудиофайлов: MP3, WAV, WMA
  • Кол-во уровней громкости: 30
  • Режимов эквалайзера: 6 (Normal/Pop/Rock/Jazz/Classic/Base)

Для реализации самого простого плеера не нужно подключать DFPlayer к Arduino. Достаточно подключить несколько кнопок вот по такой схеме.

Для реализации самого простого плеера не нужно подключать DFPlayer к Arduino.

Но у нас уроки про Arduino, поэтому рассмотрим простой пример подключения MP3-плеер к Arduino, который подключается по аппаратному или программному UART порту (пины RX и TX) Ардуино.

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

Для воспроизведения аудиофайла необходимо поместить на карту памяти microSD один трек. Файлы рекомендуется помещать в папку mp3 и называть порядковыми номерами вот в таком формате 0001.mp3. Мой опыт показывает, что можно скидывать файлы с любым названием и помещать в корень флешки, но воспроизводиться файлы будут в том порядке, в каком их загрузилина карту памяти. При пакетной загрузке одни файлы загружаются быстрее, а другие медленнее, из-за чего воспроизведение треков идет в хаотичном порядке.

Пример MP3-плеера на DFPlayer Mini и Arduino с возможностью выбора трека и изменением громкости.

Давайте сделаем полноценный MP3-плеера на Arduino. Для этого нам понадобится:

1. Arduino UNO или Arduino NANO

2. DFPlayer Mini.

3. Беспаечная макетная плата .

4. Соединительные провода .

5. Динамик. Я использую от ноутбука.

6. 2 резистора на 10 кОм.

Все компоненты нашего будущего MP3-плеера на DFPlayer соединяем по схеме.

Все компоненты нашего будущего MP3-плеера на DFPlayer соединяем по схеме.


Загрузим файлы с треками на карту памяти microSD, я использую 3 трека с YouTube, чтобы можно было воспроизводить музыку в видеоролике и не получить бан. Архив с треками можно скачать внизу статьи, в разделе материалы для скачивания.

Загрузим файлы с треками на карту памяти microSD, я использую 3 трека с YouTube

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

#include "DFRobotDFPlayerMini.h"
// библиотека для эмуляции Serial порта
#include <SoftwareSerial.h>
// создаём объект mySoftwareSerial и передаём номера управляющих пинов RX и TX
// RX - цифровой вывод 10, необходимо соединить с выводом TX дисплея
// TX - цифровой вывод 11, необходимо соединить с выводом RX дисплея
SoftwareSerial mySoftwareSerial(10, 11); // RX, TX для плеера DFPlayer Mini 
DFRobotDFPlayerMini myDFPlayer;
int buttonNext = 2;   // кнопка следующий трек
int buttonPause = 3;  // кнопка пауза/ пуск
int buttonPrevious = 4; // кнопка предыдущий трек 
int buttonVolumeUp = 5; // кнопка увеличение громкости
int buttonVolumeDown = 6; // кнопка уменьшение громкости
boolean isPlaying = false; // статус воспроизведения/пауза
void setup() {
  pinMode(buttonPause, INPUT_PULLUP); 
  pinMode(buttonNext, INPUT_PULLUP);
  pinMode(buttonPrevious, INPUT_PULLUP);
  pinMode(buttonVolumeUp, INPUT_PULLUP);
  pinMode(buttonVolumeDown, INPUT_PULLUP);
  mySoftwareSerial.begin(9600); 
  Serial.begin(9600);
  delay(1000);
  Serial.println();
  Serial.println("DFPlayer Mini Demo");
  Serial.println("Initializing DFPlayer...");
  if (!myDFPlayer.begin(mySoftwareSerial)) {
    Serial.println("Unable to begin:");
    Serial.println("1.Please recheck the connection!");
    Serial.println("2.Please insert the SD card!");
    while (true);
  }
  Serial.println(F("DFPlayer Mini online."));
  myDFPlayer.setTimeOut(300);
  //----Set volume----
  myDFPlayer.volume(15); //Set volume value (0~30).
  //----Set different EQ----
  myDFPlayer.EQ(DFPLAYER_EQ_NORMAL);
  myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD);
  myDFPlayer.play(1); //Воспроизведение первого mp3
  isPlaying = true; // воспроизводим
  Serial.println("Playing..");
  //----Читать информацию----
  Serial.println(myDFPlayer.readState()); //читать состояние mp3
  Serial.println(myDFPlayer.readVolume()); //Текущая громкость 
  Serial.println(myDFPlayer.readEQ()); // читаем настройку эквалайзера
  Serial.println(myDFPlayer.readFileCounts()); // читать все файлы на SD-карте
  Serial.println(myDFPlayer.readCurrentFileNumber()); // текущий номер файла воспроизведения
}
void loop() {
  if (digitalRead(buttonPause) == LOW) {
    if (isPlaying) { // если было воспроизведение трека
      myDFPlayer.pause(); // пауза
      isPlaying = false; // пауза
      Serial.println("Paused..");
    } else {        // иначе
      isPlaying = true; // воспроизводим
      myDFPlayer.start(); //запускаем mp3 с паузы
    }
    delay(500);
  }
  if (digitalRead(buttonNext) == LOW) {
    if (isPlaying) {
      myDFPlayer.next(); //Next Song
      Serial.println("Next Song..");
    }
    delay(500);
  }
  if (digitalRead(buttonPrevious) == LOW) {
    if (isPlaying) {
      myDFPlayer.previous(); //Previous Song
      Serial.println("Previous Song..");
    }
    delay(500);
  }
  if (digitalRead(buttonVolumeUp) == LOW) {
    if (isPlaying) {
      myDFPlayer.volumeUp(); //Volume Up
      Serial.println("Volume Up..");
    }
    delay(500);
  }
  if (digitalRead(buttonVolumeDown) == LOW) {
    if (isPlaying) {
      myDFPlayer.volumeDown(); //Volume Down
      Serial.println("Volume Down..");
    }
    delay(500);
  }
}

У платы Arduino NANO всего один аппаратный Serial Port, поэтому будем использовать программный порт. Для этого нужно установить и подключить библиотеку SoftwareSerial.h.

подключить библиотеку SoftwareSerial.h.

Чтоб проверить, подключен или нет DFPlayer используется условие:

Чтоб проверить, подключен или нет DFPlayer используется условие:

Если в мониторе порта мы видим надпись «DFPlayer Mini online.» все подключено правильно и работает.

Данные строки кода

Включают первый трек. И выводят в монитор порта информацию об этом.

Включают первый трек. И выводят в монитор порта информацию об этом.

Строки ниже выводят в монитор порта полезную информацию о статусе работы.

Строки ниже выводят в монитор порта полезную информацию о статусе работы.

Первая строчка выводит статус: цифра с кодом.

Вторая строчка выводить уровень текущей громкости от 0 до 30

Третья выводит настройки эквалайзера, также в цифровом значении.

Четвертая выводит, сколько треков найдено на карте памяти.

Последняя стока выводит, какой трек воспроизводится сейчас.

В мониторе порта это будет выглядеть вот так:

В мониторе порта это будет выглядеть вот так:

В основном цикле loop выводим условия проверки нажатия той или иной кнопки. И выполняем нужную команду.

  if (digitalRead(buttonNext) == LOW) {
    if (isPlaying) {
      myDFPlayer.next(); //Next Song
      Serial.println("Next Song..");
    }
    delay(500);
  }

Это одно условие для примера, остальные устроены аналогично, их рассматривать не будем. Список команд для работы с DFPlayer Mini myDFPlayer.next(); // Воспроизвести следующий mp3

  myDFPlayer.previous();  // Воспроизвести предыдущий mp3
  myDFPlayer.play(1);  //Воспроизведение первого mp3
  myDFPlayer.loop(1);  //зациклить первый mp3
  myDFPlayer.pause();  //приостановить mp3
  myDFPlayer.start();  //запускаем mp3 с паузы
  myDFPlayer.playFolder(15, 4);  //воспроизводить определенный mp3 в SD: /15/004.mp3; Имя папки (1 ~ 99);
  myDFPlayer.enableLoopAll(); //зациклить все mp3 файлы.
  myDFPlayer.disableLoopAll(); //остановить цикл всех mp3 файлов.
  myDFPlayer.playMp3Folder(4); //воспроизводить конкретный mp3 в SD: /MP3/0004.mp3; Имя файла (0 ~ 65535)
  myDFPlayer.advertise(3); //рекламируем конкретный mp3 в SD: /ADVERT/0003.mp3; Имя файла (0 ~ 65535
  myDFPlayer.playLargeFolder(2, 999); //воспроизводить конкретный mp3 в SD: /02/004.mp3; Имя папки (1 ~ 10); Имя файла (1 ~ 1000)    
  myDFPlayer.loopFolder(5); //зациклить все mp3 файлы в папке SD: / 05.
  myDFPlayer.randomAll(); //Произвольное воспроизведение всех mp3.  
  myDFPlayer.enableLoop(); //включить цикл.
  myDFPlayer.disableLoop(); //отключить цикл

Как видите, не так много кода и алгоритм работы достаточно несложный. Планирую реализовать пару проектов с использованием модуля DFPlayer Mini и Arduino, ESP8266, ESP32 для публикации на сайте. Благо, опыт работы с этим модулем и данными платформами есть.

ару проектов с использованием модуля DFPlayer Mini и Arduino, ESP8266, ESP32 для публикации на сайте.

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

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке.

]]>
Ночник со стеклянными шарами на Arduino своими руками. http://portal-pk.ru/news/246-nochnik-so-steklyannymi-sharami-na-arduino-svoimi-rukami.html Константин Portal-PK 2020-02-27T15:06:47+03:00 Сегодня расскажу про светильник, который сделал своими руками на Arduino (DigiSpark). В качестве рассеивателя установил стеклянные шарики, которые фиксируются с помощью оргстекла молочного цвета.

Заготовки для светильника вырезал на своем самодельном фрезерном ЧПУ станке больше года назад. После склейки корпуса установил электронику и протестировал работу. Но меня не устроили некоторые моменты и проект отложил. И вот, дошли руки его доработать. Изначально стеклянные шарики прижимались куском фанеры, и свет плохо рассеивался. Чтобы устранить данный конструктивный изъян заменил верхнюю часть на 2 детали. Стеклянные шарики зажимаются оргстеклом и для того, чтобы стекло сильно не прогибалось, фиксирую его куском фанеры. Такая конструкция позволяет надежно зафиксировать шарики без прогиба оргстекла.

Сегодня расскажу про светильник, который сделал своими руками на Arduino (DigiSpark).

К сожалению, раскроя фанеры нет, так как у меня сломался жёсткий диск, и часть информации было утеряно, в том числе и раскрой фанеры для данного светильника. Но возможно, осталась копия на рабочем компьютере, который стоит для управления самодельным ЧПУ станком на Arduino. Если найду, то обязательно выложу внизу стати в разделе материалы для скачивания.

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

Покрасил все заготовки в белый цвет и собрал. Вот что получилось.

Покрасил все заготовки в белый цвет и собрал. Вот что получилось.

Электроника и схема подключения самодельного светильника на Arduino (DigiSpark).

Для проекта нам понадобится:

  • Digispark
  • Адресные светодиоды WS2812
  • Резистор 10 кОм
  • Бокс под батарейки 4 x AA
  • Кнопка без фиксации
  • Кнопка с фиксацие

Подключаем все компоненты светильника на Arduino по вот такой схеме.

Подключаем все компоненты светильника на Arduino по вот такой схеме.

Вместо DigiSpark можно использовать Arduino NANO. Подключить кнопку и адресные светодиоды можно к любому цифровому пину Arduino.

Данный проект, по электронным комплектующим и схеме подключения, схож с проектом светофора на адресных светодиодах WS2812.

Прошивка для самодельного светильника на Arduino.

#include <Adafruit_NeoPixel.h>
#define PIN 0
#define STRIPSIZE 3
byte button_rejim = 1;  // кнопка режим
int rejim = 0;       // текущий режим
int yarkast = 250;       // текущая яркасть
boolean lastButten = LOW;     // предыдущее состояние кнопки
boolean currentButten = LOW;  // текущее состояние кнопки
int wait = 15;
uint16_t j = 0;
uint16_t i = 0;
Adafruit_NeoPixel strip = Adafruit_NeoPixel(STRIPSIZE, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
  pinMode(button_rejim, INPUT); // настроить пин кнопки
  strip.begin();
}
boolean debvance (boolean last) //убираем дребизг 2
{
  boolean current = digitalRead (button_rejim); // считываем данные с кнопки
  if (last != current) // Если текущее состояни еотличететься от предыдущего
  {
    delay (5);   // Ждем 5 милисек.
    current = digitalRead (button_rejim); // Присваеваем текущее состояние кнопки
    return current;
  }
}
void loop() {
  currentButten = debvance (lastButten); // Передаем функции дребезга значение по умолчанию LOW
  if (lastButten == LOW && currentButten == HIGH) // Проверяем отпускали мы кнопку или нет
  {
    rejim++; // изменяем режим
    i = 0;
    if (rejim == 3)
      rejim = 0;
  }
  lastButten =  currentButten;  // Переприсваеваем прошлое состояние кнопки
  if (rejim == 0)
  {
    if (j < 256) {
      for (i = 0; i < strip.numPixels(); i++) {
        strip.setPixelColor(i, Wheel((i + j) & 255));
      }
      delay(wait);
      j++ ;
    }
    if (j == 255)
      j = 0;
  }
  else if (rejim == 1)
  {
    if (j < 256 * 5) { // 5 cycles of all colors on wheel
      for (i = 0; i < strip.numPixels(); i++) {
        strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
      }
      delay(wait);
      j++;
    }
    if (j == 255)
      j = 0;
  }
  else if (rejim == 2) // радуга из центра
  {
    for (i = 0; i < strip.numPixels(); i++) {
      strip.setPixelColor(i, strip.Color(255, 255, 255));
      delay(wait);
    }
  }
  strip.setBrightness(yarkast);  // Lower brightness and save eyeballs!
  strip.show(); // Initialize all pixels to 'off'
}
uint32_t Wheel(byte WheelPos) {
  if (WheelPos < 85) {
    return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  } else if (WheelPos < 170) {
    WheelPos -= 85;
    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  } else {
    WheelPos -= 170;
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
}
void colorWipes(uint32_t c, int num) {
  for (i = 0; i < strip.numPixels(); i++) {
    if (i == num)
      strip.setPixelColor(i, c);
    else
      strip.setPixelColor(i, strip.Color(0, 0, 0));
  }
  strip.setPixelColor(num, c);
  strip.show();
  delay(1);
}

Перед установкой электроники нужно запрограммировать DigiSpark или Arduino.

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

Как запрограммировать Arduino смотрите тут. Загрузка скетча в DigiSpark происходит немногого по-другому. Сначала нажимаете кнопку загрузить код, после того как код скомпилируется и выйдет надпись, у вас будет 60 секунд для подключения DigiSpark к компьютеру.

Загрузка скетча в DigiSpark происходит немногого по-другому.

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

Кнопка с фиксацией включает и выключает питание. Тактовая кнопка переключает режимы.

У светильника есть 3 режима роботы:

  • Плавная смена цвета всех светодиодов одновременно.
  • Смена цветов у каждого светодиода свой цвет.
  • Белый цвет свечения всех светодиодов.

Светильник запрограммирован и собран. Можно приступить к тестированию.

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

Батареек самых дешевых хватит примерно на 5-7 ночей. Это достаточно неплохой результат.

Батареек самых дешевых хватит примерно на 5-7 ночей. Это достаточно неплохой результат.

И еще немного фото самодельного светильника на Arduino (DigiSpark).

И еще немного фото самодельного светильника на Arduino (DigiSpark).

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

На этом всё. Не забывайте подписываться на мой YouTube канал, вступать в группу Вконтакте, в группу на Facebook.

И всем пока-пока.

До встречи в новом проекте.

]]>
ESP32-CAM сохраняем фотографии на флешку при движении http://portal-pk.ru/news/245-esp32-cam--sohranyaem--fotografii-na-fleshku-pri-dvizhenii.html Константин Portal-PK 2020-02-20T12:33:42+03:00 Сегодня в проекте на ESP32 научим ESP32-CAM модуль делать фотографии при движении объекта и сохранять фотографии на флешку. Название кадра будет содержать дату и время, когда было сделано фото.

научим ESP32-CAM модуль делать фотографии при движении объекта и сохранять фотографии на флешку

У PIR датчика HC-SR501 на выходе 3,3в, что позволяет нам подключить датчик движения к ESP32 без дополнительных преобразователей и пр.

Спонсор видео NextPCB. 0$ первый пробный заказ печатных плат от NextPCB.

Корпус для esp32 cam ov2640.

Корпус самостоятельно делать не пришлось, так как готовые варианты есть в интернете. Скачал я пару моделей и напечатал на 3D принтере. Вот что получилось.

 Скачал я пару моделей и напечатал на 3D принтере. Вот что получилось.

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

Кроме модуля можно установить разъем micro-USB, что позволит подключать ESP32-CAM wifi к телефонному зарядному устройству или power bank.

Кроме модуля можно установить разъем micro-USB

Для проекта нам понадобиться:

Для проекта нам понадобиться: ESP32-CAM модуль ov2640.

Приступим к установке, настройке необходимого ПО и прошивке ESP32. Для удобства я разделил всё на несколько этапов:

1. Установка дополнения ESP32
В этом примере будем использовать Arduino IDE для программирования платы ESP32-CAM. Установите Arduino IDE, и настройте работу с ESP32. Если этого у вас не сделано, воспользуетесь следующей инструкцией:

Установка, прошивка платы ESP32 в Arduino IDE (Windows, Mac OS X, Linux)

2. Код проекта. Меняем все необходимые параметры.
В среде Arduino IDE открываем код:

В среде Arduino IDE открываем код:

Перед загрузкой прошивки в модуль ESP32 CAM необходимо указать ваши данные для подключения к Wi-Fi сети.

String _ssid= "Имя_точки_wi-fi "; // Для хранения SSID
String _password = "пароль_от_wi-fi // Для хранения пароля сети

Больше настраивать не нужно, код готов к загрузке в ESP32.

3. Прошивка ESP32-CAM

Для прошивки я использую самый недорогой TTL программатор. И всё прошивается и работает отлично.

Подключаю всё вот по такой схеме:

 Прошивка ESP32-CAM

Важно! GPIO 0 должен быть подключен к GND, чтобы вы смогли загрузить код.

Чтобы загрузить код, выполните следующие действия:

  • Перейдите в меню Инструменты > Плата и выберите модуль Al Thinker ESP32-CAM
  • Перейдите в меню Инструменты > порт и выберите COM-порт, к которому подключен ESP32
  • Нажмите кнопку ESP32-CAM on-board RESET
  • Затем нажмите кнопку Загрузка, чтобы загрузить код

Перейдите в меню Инструменты выберите модуль Al Thinker ESP32-CAM

Важно! Если вы не можете загрузить код, то еще раз проверьте, что GPIO 0 подключен к GND и, что вы выбрали правильные настройки в меню Инструменты. Вы также должны нажать кнопку сброса на борту, чтобы перезагрузить ESP32 в режиме программирования.

Код загружен, сейчас нужно все собрать в корпус.


ESP32-CAM схема подключения.

Для проверки работы собираем все элементы на макетной плате по схеме.

Для проверки работы собираем все элементы на макетной плате по схеме.

Вот так это выглядит в живую.

Вот так это выглядит в живую.

При движении получаются вот такие фото.

Котэ попал в кадр. Модуль работает.

Котэ попал в кадр. Модуль работает.

Для подключения к micro usb dip 5 pin нужно припаять 4 провода. Как-то вот так.

Для подключения к micro usb dip 5 pin

Укладываем все в корпус. В задней крышке сделал отверстия для проводов, которые подключаются к PIR датчику HC-SR501. Датчик приклеил на двухсторонний скотч сверху, так чтобы был доступ к подстроечным резисторам.

Датчик приклеил на двухсторонний скотч сверху, так чтобы был доступ к подстроечным резисторам.

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

Установил ESP32-CAM sending photo на техническую полку выше холодильника.

Установил ESP32-CAM sending photo на техническую полку выше холодильника.

Настроил время срабатывания и дистанцию PIR датчика HC-SR501. Смотрел вот по такому примеру.

Настроил время срабатывания и дистанцию PIR датчика HC-SR501.

К сожалению, у меня время срабатывания максимум секунд 30, но этого достаточно для данного проекта. Если время срабатывания датчика настроить 5 сек или меньше, то у модуля esp32 cam получается очередь, так как время на фотографирование и сохранение в память занимает больше 5 секунд. И пока не закончиться очередь, он будет фотографировать, если даже в поле срабатывания ни кто не двигается.

В итоге получаются вот такие фото.

В итоге получаются вот такие фото.

Качество не очень, так как в коридоре освещение, как правило, делают не яркое. У меня не исключение. Да и модуль камеры ov2640 снимает с качеством 2МРх. Что от него ожидать?

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

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

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

Второй минус - это запрет на многие символы в названии файлов, поэтому время и дата выводятся не совсем в привычном формате, но все равно понятном.

Второй минус - это запрет на многие символы в названии файлов, поэтому время и дата выводятся не совсем в привычном формате, но все равно понятном.

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

На этом всё. Не забывайте подписываться на мой YouTube канал, вступать в группу Вконтакте, в группу на Facebook.

И всем пока-пока.

До встречи в новом проекте.

]]>
#18. Урок Nextion дисплей на русском, анимация на дисплее без Arduino. http://portal-pk.ru/news/244-urok-nextion-displei-na-russkom-animaciya-na-displee-bez.html Константин Portal-PK 2020-02-18T14:08:47+03:00 Сегодня в уроке научимся делать анимацию и выводить ее на дисплей Nextion. Вся программная часть будет реализована с использованием возможностей Nextion Editor, без использования Arduino.

Подготавливаем картинки для вывода анимации на экран Nextion.

Nextion display не умеет выводить gif анимацию или видео на экран. Это касается старых моделей. Новые модели, скорее всего, умеют воспроизводить видео и звук, так как в Nextion Editor появились инструменты позволяющие добавлять элементы медиа. Но у меня нет таких дисплеев, поэтому будем делать анимацию по старинке. То есть покадрово. Для того, чтобы разбить gif анимацию на кадры я использую онлайн сервис picasion.

разбить gif анимацию на кадры я использую онлайн сервис picasion

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

Анимация процесса загрузки.

Самая простая анимация, но при этом одна из самых распространенных - это анимация загрузки. Для начала создадим новый проект в Nextion Editor, если вы не знаете, как это сделать, смотрите урок: Nextion Editor урок 1. Скачиваем и первый пример hmi.

Анимация процесса загрузки.

Затем загрузим картинки для анимации. Для этого в панели Picture 1- нажмем на кнопку в виде плюса. В отрывшемся окне 2 выберем нужные картинки и нажмем на копку «Открыть» – 3.

панели Picture У нас получиться список картинок с порядковыми номерами от 0 до 51, которые мы и будем использовать.

 список картинок с порядковыми номерами

В панели инструментов «Toolbox» выбираем элемент «Timer», этот элемент невидимый и он появиться в панели элементов данного типа.


Выбираем элемент «Timer», его название - tm0

Выбираем элемент «Timer», его название - tm0. Установим значение 50 в параметре tim, это интервал срабатывания в миллисекундах, то есть картинка будет меняться каждые 50 мс. Теперь нам нужно написать код, который будет обновлять картинки, это будет небольшое условие.

На поле экрана нужно добавить картинкус номером 0. Это будет первый кадр.

На поле экрана нужно добавить картинкус номером 0. Это будет первый кадр.

Можно проверять Nextion пример анимации.

Можно проверять Nextion пример анимации.

Две кнопки по краям это просто перенаправление на другие страницы урока. Nextion hmi и tft nextion можно скачать внизу статьи, в разделе материалы для скачивания.


Эквалайзер при воспроизведении музыки.

Второй пример основан на первом. Загружаем nextion картинки и добавляем таймер.

Загружаем nextion картинки и добавляем таймер.

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

Давайте загрузим картинки для кнопок.

Давайте загрузим картинки для кнопок.

Давайте загрузим картинки для кнопок.

И добавим нужные элементы в проект.

И добавим нужные элементы в проект.

Напишем

следующий код для нажатия кнопки.


Напишем следующий код для нажатия кнопки.


Будем включать и выключать таймер 0, а также менять картинку кнопки.

Еще один nextion пример готов.Осталось запустить и проверить.

Nextion hmi и tft nextion можно скачать внизу статьи, в разделе материалы для скачивания.

Анимация по времени.

В проектах часто приходится делать вывод времени и обработку событий по определённому расписанию или через определённый интервал. В следующем примере будем производить отсчет времени на дисплее nextion без использования Ардуино. Для этого разместим элементы на экране.

 отсчет времени на дисплее nextion без использования Ардуино

Загрузим картинки для кнопок и для анимации.

Анимация тут будет без повтора, поэтому код будет видоизменен.

Загрузим картинки для кнопок и для анимации.

Также добавим второй таймер и переменную. На панели невидимых элементов это будет выглядеть вот так.

Также добавим второй таймер и переменную.Переменная va0 остается без изменений, а параметр val должен быть равен 0.

Переменная va0 остается без изменений, а параметр val должен быть равен 0.

Для второго

таймера пропишем вот такой код.


Для второго таймера пропишем вот такой код.

Интервал tim для второго счетчика устанавливаем 500 мс. Рассмотрим код подробнее.


if(p1.pic==96)
{
  p1.pic=97
  p2.pic=97
}else
{
  p1.pic=96
  p2.pic=96
n0.val++
}

Если мы оставим только лишь эти строки, то мы увидим мигание точек у часов. Картинки 96 и 97 -это токи и просто белый фон. Они меняются местами с интервалом в пол секунды.

n0.val++ - добавляет ежесекундно «1» к числу в данном поле. И мы видим секунды на наших импровизированных часах.

va0.val=n0.val%10
  if(n0.val>=60)
  {
    n0.val=10
  }
  if(va0.val==0)
  {
    p0.pic=79
  }
  if(va0.val==2)
  {
    p0.pic=102
  }

va0.val=n0.val%10 получаем остаток от деления на 10 и сохраняем в переменнуюva0.val.

Когда время достигло 60 сек., то меняем значение на 10. Но по-хорошему это должен быть 0. Тогда будет полноценное изменение времени. Тут можно добавить прибавление минут ко второму числу часов, но я не стал писать много кода, чтобы было более понятно.

if(va0.val==0)
  {
    p0.pic=79
  }
  if(va0.val==2)
  {
    p0.pic=102
  }

Тут мы проверяем, какое значение в нашей переменной. Если остаток от деления равен 0, тогда задаём начальную картинку анимации, что автоматически запустит анимацию. Это прописано в нашем первом таймере. Если остаток от деления равен 2, то выводим белую картинку. Это закрывает последний кадр анимации.

По данному алгоритму анимация повторяется каждые 10 секунд. «Интервал», «время» и прочие параметры можно настроить и дописать для решения вашей задачи.

Чтобы запустить анимацию с использованием Arduino достаточно отправит на nextion display

значения для включения таймера.Как это сделать смотрите в nextion уроке: Дисплей Nextion урок 2. Подключаем и передаем данные на Arduino.

Если вам интересна эта тема, смотрите мой проект часов: Часы на Arduino и дисплее Nextion с выводом температуры и влажности. В данном проекте нашел пару недочётов, скоро будет доработанная версия с еще большим функционалом.

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

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке.

]]>
Урок 17. Подключаем энкодер к Arduino. http://portal-pk.ru/news/243-podklyuchaem-enkoder-k-arduino.html Константин Portal-PK 2020-02-12T11:05:53+03:00 В данном уроке рассмотрим энкодер вращения и подключим его к Arduino.

Модуль KY-040 является энкодером вращения. Из названия понятно, что принцип его работы это вращение. А именно преобразование угла поворота в сигнал. Сигнал может быть цифровым и аналоговым. Более подробную информацию о видах энкодеров и принципе их действия можно почитать в интернете. Цель нашего урока подключить конкретный модуль к Arduino и научиться управлять внешними устройствами с помощью энкодера.

В данном уроке рассмотрим энкодер вращения и подключим его к Arduino.

Характеристики Энкодера KY-040:
Функция нажатия: Да
Количество импульсов на 360 гр. : 20
Число рабочих циклов: 30000
Вес: 5 грамм

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

Подключаем энкодер KY-040 к Arduino.

 Энкодер KY-040

Модуль имеет 5 контактов, это:

  • + и GND - линии питания и земли. Данный энкодер является механическим, питание для него не требуется, линии нужны для цепи с подтягивающими резисторами.
  • SW - вывод кнопки имеет потягивающий резистор, существует модули у которых при нажатии вывод замыкается на землю;
  • CLK и DT - выводы энкодера, они подтянуты к линии питания резисторами 10кОм;

Подключаем Энкодер KY-040 к Arduino UNO по схеме.

Подключаем Энкодер KY-040 к Arduino UNO по схеме.

Пример кода вывода информации о положении энкодера в монитор порта.

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

#define pin_CLK 2
#define pin_DT  4
#define pin_Btn 3
unsigned long CurrentTime, LastTime;
enum eEncoderState {eNone, eLeft, eRight, eButton};
uint8_t EncoderA, EncoderB, EncoderAPrev;
int16_t counter;
bool ButtonPrev;
eEncoderState GetEncoderState() {
  // Считываем состояние энкодера
  eEncoderState Result = eNone;
  CurrentTime = millis();
  if (CurrentTime - LastTime >= 5) {
    // Считываем не чаще 1 раза в 5 мс для уменьшения ложных срабатываний
    LastTime = CurrentTime;
    if (digitalRead(pin_Btn) == LOW ) {
      if (ButtonPrev) {
        Result = eButton; // Нажата кнопка
        ButtonPrev = 0;
      }
    }
    else {
      ButtonPrev = 1;
      EncoderA = digitalRead(pin_CLK);
      EncoderB = digitalRead(pin_DT);
      if ((!EncoderA) && (EncoderAPrev)) { // Сигнал A изменился с 1 на 0
        if (EncoderB) Result = eRight;     // B=1 => энкодер вращается по часовой
        else          Result = eLeft;      // B=0 => энкодер вращается против часовой
      }
      EncoderAPrev = EncoderA; // запомним текущее состояние
    }
  }
  return Result;
}
void setup() {
  pinMode(pin_DT,  INPUT);
  pinMode(pin_CLK, INPUT);
  pinMode(pin_Btn, INPUT); // Кнопка не подтянута к +5 поэтому задействуем внутренний pull-up резистор
  Serial.begin(9600);
  counter = 0;
}
void loop() {
  switch (GetEncoderState()) {
    case eNone: return;
    case eLeft: {   // Энкодер вращается влево
        counter--;
        break;
      }
    case eRight: {  // Энкодер вращается вправо
        counter++;
        break;
      }
    case eButton: { // Нажали кнопку
        counter = 0;
        break;
      }
  }
  Serial.println(counter);

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

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

Если у вас получается противоположное значение, т.е. при вощении против часовой стрелки получаете положительное значение. Исправьте 2 строчки:

      EncoderA = digitalRead(pin_CLK);
      EncoderB = digitalRead(pin_DT);

На вот такие.

       EncoderA = digitalRead(pin_DT);
       EncoderB = digitalRead(pin_CLK);

С выводом в монитор порта разобрались. Давайте используем для управления свечением двумя светодиодами.


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

Для примера давайте подключаем к схеме выше еще 2 светодиода. В итоге схема подключения управления яркостью двух светодиодов с помощью энкодера и Arduino NANO будет вот такой.

схема подключения управления яркостью двух светодиодов с помощью энкодера и Arduino NANO

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

#define pin_CLK 2
#define pin_DT  4
#define pin_Btn 3
#define pin_led1 5 // пин подключения
#define pin_led2 6 // пин подключения


unsigned long CurrentTime, LastTime;
enum eEncoderState {eNone, eLeft, eRight, eButton};
uint8_t EncoderA, EncoderB, EncoderAPrev;
int8_t counter, brightness1, brightness2;
bool ButtonPrev;

eEncoderState GetEncoderState() {
  // Считываем состояние энкодера
  eEncoderState Result = eNone;
  CurrentTime = millis();
  if (CurrentTime - LastTime >= 5) {
    // Считываем не чаще 1 раза в 5 мс для уменьшения ложных срабатываний
    LastTime = CurrentTime;
    if (digitalRead(pin_Btn) == LOW ) {
      if (ButtonPrev) {
        Result = eButton; // Нажата кнопка
        ButtonPrev = 0;
      }
    }
    else {
      ButtonPrev = 1;
      // EncoderA = digitalRead(pin_DT);
      // EncoderB = digitalRead(pin_CLK);
      EncoderA = digitalRead(pin_CLK);
      EncoderB = digitalRead(pin_DT);
      if ((!EncoderA) && (EncoderAPrev)) { // Сигнал A изменился с 1 на 0
        if (EncoderB) Result = eRight;     // B=1 => энкодер вращается по часовой
        else          Result = eLeft;      // B=0 => энкодер вращается против часовой
      }
      EncoderAPrev = EncoderA; // запомним текущее состояние
    }
  }
  return Result;
}

void setup() {
  pinMode(pin_DT,  INPUT);
  pinMode(pin_CLK, INPUT);
  pinMode(pin_Btn, INPUT); // Кнопка подтянута к GND Иначе используем INPUT_PULLUP

  Serial.begin(9600);
  counter = 0;
}

void loop() {
  switch (GetEncoderState()) {
    case eNone: return;
    case eLeft: {   // Энкодер вращается влево
        counter--;
        break;
      }
    case eRight: {  // Энкодер вращается вправо
        counter++;
        break;
      }
    case eButton: { // Нажали кнопку
        counter = 0;
        break;
      }
  }
  Serial.println(counter);
  if (counter < 0)
  {
    brightness2 = -counter;
    brightness1 = 0;
  }
  else if (counter > 0)
  {
    brightness1 = counter;
    brightness2 = 0;
  }
  else
    brightness1 = 0, brightness2 = 0;
  analogWrite(pin_led1, brightness1);    // устанавливаем значение
  analogWrite(pin_led2, brightness2);    // устанавливаем значен
}

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

Вращение энкодера по часовой стрелке привет к тому, что загорается красный светодиод.

Энкодер широко используется в проектах на Arduino. Например, для управления работы 3D принтером используется как раз энкодер аналогичный KY-040. При разработке панели управления самодельным ЧПУ станком используется также энкодер. И это только малая доля использования энкодера. Большинство проектов, где используется потенциометр его можно заменить на энкодер. Пишите в комментариях, как вы используете энкодер.

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке.

]]>
Oled часы с выводом температуры на Arduino своими руками. http://portal-pk.ru/news/242-oled-chasy-s-vyvodom-temperatury-na-arduino-svoimi-rukami.html Константин Portal-PK 2020-02-06T12:38:50+03:00 Я люблю разрабатывать различные часы на Arduino . Свои первые часы делал на сдвиговых регистрах, светодиодах и Arduino. Вторая версия светодиодных часов уже была сделана на адресных светодиодах (данные часы до сих пор работают и висят у меня в коридоре). С ребёнком делали часы из Лего, семисегментного индикатора и digispark. Последние, четвёртые, реализованы на Arduino и дисплее Nextion. Подписчики написали мне, что часы получаются достаточно дорогие и собирать их нецелесообразно. Согласен, что дисплей Nextion дорогой, поэтому решил собрать часы на OLED дисплее и Arduino.

Для реализации данного проекта нам понадобится:

Электронную часть OLED часов собрал на макетной плате вот по такой схеме.

Электронную часть OLED часов собрал на макетной плате вот по такой схеме.

Описание работы часов OLED часы на Arduino.

Часы имеют стандартный функционал. Вывод текущего дня недели, даты, времени и температуры. Две тактовые кнопки помогают нам настраивать дату и время.

Часы имеют стандартный функционал

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

Устанавливаем и настраиваем библиотеки.

1. Установить библиотеки Adafruit : библиотеку Adafruit_SSD1306 и библиотеку Adafruit_GFX . Как их установить, я рассматривал в уроке.

2. Скачать файл glcdfont.c и заменить его в библиотеке Adafruit-GFX. Библиотека находится C:\Users\USER\Documents\Arduino\libraries\Adafruit_GFX_Library. У вас путь до библиотеки может отличаться. Вы можете скачать, библиотеку подготовленную для вывода русского текста, внизу статьи в разделе материалы для скачивания.

3. В скетч нужно добавить функцию перекодировки русских букв из UTF-8 в Win-1251 . Добавить функцию можно внизу кода.

/* Функция перекодировки русских букв из UTF-8 в Win-1251 */
String utf8rus(String source)
{
  int i,k;
  String target;
  unsigned char n;
  char m[2] = { '0', '\0' };
  k = source.length(); i = 0;
  while (i < k) {
    n = source[i]; i++;
    if (n >= 0xC0) {
      switch (n) {
        case 0xD0: {
          n = source[i]; i++;
          if (n == 0x81) { n = 0xA8; break; }
          if (n >= 0x90 && n <= 0xBF) n = n + 0x30;
          break;
        }
        case 0xD1: {
          n = source[i]; i++;
          if (n == 0x91) { n = 0xB8; break; }
          if (n >= 0x80 && n <= 0x8F) n = n + 0x70;
          break;
        }
      }
    }
    m[0] = n; target = target + String(m);
  }
return target;
}

4. Добавить в блок void setup() {} следующую строчку кода.

display.cp437(true);

5. При выводе русского текста использовать функцию utf8rus() .

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


Код OLED часы на Arduino.

Рассказывать, как устроена программа часов полностью не буду. Тем более у меня на сайте достаточно уроков и примеров по реализации функционалов на дисплеях и работы с часами реального времени. Рассмотрим только основную особенность данного кода - это вывод русского языка в том виде, как он прописан в самом коде. Библиотеку для вывода символов на дисплей мы установили и настроили. Как же сейчас её использовать так, чтобы постоянно не прописывать перекодировку символов? Для этого сделаем функцию, которая будет выводить наш текст с нужным размером шрифта по указанным координатам.

void draw_text(byte x_pos, byte y_pos, char *text, byte text_size) {
  display.setCursor(x_pos, y_pos);
  display.setTextSize(text_size);
  display.print(utf8rus(text));
  display.display();
}

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

void display_day() { // вывод дня недели
  switch (day) {
    case 1:  draw_text(30, 0, "ВОСКРЕСЕНЬЕ", 1); break;
    case 2:  draw_text(30, 0, "ПОНЕДЕЛЬНИК", 1); break;
    case 3:  draw_text(30, 0, "  ВТОРНИК  ", 1); break;
    case 4:  draw_text(30, 0, "   СРЕДА   ", 1); break;
    case 5:  draw_text(30, 0, "  ЧЕТВЕРГ  ", 1); break;
    case 6:  draw_text(30, 0, "  ПЯТНИЦА  ", 1); break;
    default: draw_text(30, 0, "  СУББОТА  ", 1);
  }
}

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

/*
   Arduino часы с выводом температуры на DS3231 и SSD1306 OLED
   Сайт https://portal-pk.ru/
   Проекты на Arduino https://portal-pk.ru/page-17/proekty-na-arduino.html
   Проекты на ESP https://portal-pk.ru/page-18/proekty-na-nodemcu-esp8266-esp-01.html
*/
#include <Wire.h>                        // I2C 
#include <Adafruit_GFX.h>                // Включить графическую библиотеку Adafruit
#include <Adafruit_SSD1306.h>            // Включить драйвер OLED Adafruit SSD1306
#define SCREEN_WIDTH 128 // Ширина OLED-дисплея, в пикселях
#define SCREEN_HEIGHT 64 // Высота OLED-дисплея в пикселях
// SSD1306, подключенного к I2C (выводы SDA, SCL)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
#define button1    9                       // Кнопка B1 подключена к контакту Arduino 9
#define button2    8                       // Кнопка B2 подключена к контакту Arduino 8
void setup(void) {
  pinMode(button1, INPUT_PULLUP);
  pinMode(button2, INPUT_PULLUP);
  delay(1000);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // инициализировать с помощью I2C адресс 0x3C (для 128x64)
  // Очистить дисплей.
  display.clearDisplay();
  display.display();
  display.cp437(true);
  display.setTextColor(WHITE, BLACK);
  display.drawRect(117, 56, 3, 3, WHITE);     // Поставить символ степени ( ° )
  draw_text(0, 56, "ТЕМПЕРАТУРА =", 1);
  draw_text(122, 56, "C", 1);
}
char Time[]     = "  :  ";
char Calendar[] = "  /  /20  ";
char temperature[] = " 00.00";
char temperature_msb;
byte i, second, minute, hour, day, date, month, year, temperature_lsb;
void display_day() { // вывод дня недели
  switch (day) {
    case 1:  draw_text(30, 0, "ВОСКРЕСЕНЬЕ", 1); break;
    case 2:  draw_text(30, 0, "ПОНЕДЕЛЬНИК", 1); break;
    case 3:  draw_text(30, 0, "  ВТОРНИК  ", 1); break;
    case 4:  draw_text(30, 0, "   СРЕДА   ", 1); break;
    case 5:  draw_text(30, 0, "  ЧЕТВЕРГ  ", 1); break;
    case 6:  draw_text(30, 0, "  ПЯТНИЦА  ", 1); break;
    default: draw_text(30, 0, "  СУББОТА  ", 1);
  }
}
void DS3231_display() {
  // Преобразовать в десятичную
  minute = (minute >> 4) * 10 + (minute & 0x0F);
  hour   = (hour >> 4)   * 10 + (hour & 0x0F);
  date   = (date >> 4)   * 10 + (date & 0x0F);
  month  = (month >> 4)  * 10 + (month & 0x0F);
  year   = (year >> 4)   * 10 + (year & 0x0F);
  Time[4]     = minute % 10 + 48;
  Time[3]     = minute / 10 + 48;
  if (second % 2)
    Time[2]   = 32;
  else
    Time[2]   = 58;
  Time[1]     = hour   % 10 + 48;
  Time[0]     = hour   / 10 + 48;
  Calendar[9] = year   % 10 + 48;
  Calendar[8] = year   / 10 + 48;
  Calendar[4] = month  % 10 + 48;
  Calendar[3] = month  / 10 + 48;
  Calendar[1] = date   % 10 + 48;
  Calendar[0] = date   / 10 + 48;
  if (temperature_msb < 0) {
    temperature_msb = abs(temperature_msb);
    temperature[0] = '-';
  }
  else
    temperature[0] = ' ';
  temperature_lsb >>= 6;
  temperature[2] = temperature_msb % 10  + 48;
  temperature[1] = temperature_msb / 10  + 48;
  if (temperature_lsb == 0 || temperature_lsb == 2) {
    temperature[5] = '0';
    if (temperature_lsb == 0) temperature[4] = '0';
    else                     temperature[4] = '5';
  }
  if (temperature_lsb == 1 || temperature_lsb == 3) {
    temperature[5] = '5';
    if (temperature_lsb == 1) temperature[4] = '2';
    else                     temperature[4] = '7';
  }
  draw_text(4,  12, Calendar, 2);                     // Показать дату (формат: дд / мм / гггг)
  draw_text(20, 30, Time, 3);                         // Показать время
  draw_text(80, 56, temperature, 1);                  // Показать температуру
}
void blink_parameter() {
  byte j = 0;
  while (j < 10 && digitalRead(button1) && digitalRead(button2)) {
    j++;
    delay(25);
  }
}
byte edit(byte x_pos, byte y_pos, byte parameter, byte text_size) {
  char text[3];
  sprintf(text, "%02u", parameter);
  while (!digitalRead(button1));                     // Подождите, пока кнопка B1 отпущена
  while (true) {
    while (!digitalRead(button2)) {                  // Если кнопка B2 нажата
      parameter++;
      if (i == 0 && parameter > 31)                  // Если date > 31 ==> date = 1
        parameter = 1;
      if (i == 1 && parameter > 12)                  // Если  month > 12 ==> month = 1
        parameter = 1;
      if (i == 2 && parameter > 99)                  // Если year > 99 ==> year = 0
        parameter = 0;
      if (i == 3 && parameter > 23)                  // Если hours > 23 ==> hours = 0
        parameter = 0;
      if (i == 4 && parameter > 59)                  // Если minutes > 59 ==> minutes = 0
        parameter = 0;
      sprintf(text, "%02u", parameter);
      draw_text(x_pos, y_pos, text, text_size);
      delay(200);                                    // Ждем 200ms
    }
    draw_text(x_pos, y_pos, "  ", text_size);
    blink_parameter();
    draw_text(x_pos, y_pos, text, text_size);
    blink_parameter();
    if (!digitalRead(button1)) {                     // Если кнопка B1 нажата
      i++;                                           // Увеличение «i» для следующего параметра
      return parameter;                              // Вернуть значение параметра и выйти
    }
  }
}
void draw_text(byte x_pos, byte y_pos, char *text, byte text_size) {
  display.setCursor(x_pos, y_pos);
  display.setTextSize(text_size);
  display.print(utf8rus(text));
  display.display();
}
void loop() {
  if (!digitalRead(button1)) {                       // Если кнопка B1 нажата
    i = 0;
    while (!digitalRead(button1));                   // Дождитесь отпускания кнопки B1
    while (true) {
      while (!digitalRead(button2)) {                // Пока кнопка B2 нажата
        day++;                                       // Инкремент для деня
        if (day > 7) day = 1;
        display_day();                               // Вызовите функцию display_day
        delay(200);                                  // Ждем 200 ms
      }
      draw_text(30, 0, "           ", 1);
      blink_parameter();                             // Вызов функции blink_parameter
      display_day();                                 // Вызовите функцию display_day
      blink_parameter();                             // Вызов функции blink_parameter
      if (!digitalRead(button1))                     // Если кнопка B1 нажата
        break;
    }
    date   = edit(4, 12, date, 2);                      // Изменить дату
    month  = edit(40, 12, month, 2);                    // Изменить month
    year   = edit(100, 12, year, 2);                    // Изменить year
    hour   = edit(20, 30, hour, 3);                     // Изменить hours
    minute = edit(74, 30, minute, 3);                   // Изменить minutes
    // Преобразовать десятичную в BCD
    minute = ((minute / 10) << 4) + (minute % 10);
    hour = ((hour / 10) << 4) + (hour % 10);
    date = ((date / 10) << 4) + (date % 10);
    month = ((month / 10) << 4) + (month % 10);
    year = ((year / 10) << 4) + (year % 10);
    // End conversion
    // Записать данные в DS3231 RTC
    Wire.beginTransmission(0x68);               // Запустите протокол I2C с адресом DS3231
    Wire.write(0);                              // Отправить адрес регистрации
    Wire.write(0);                              // Сбросьте sesonds и запустите генератор
    Wire.write(minute);                         // Запишем минуту
    Wire.write(hour);                           // Запишем  hour
    Wire.write(day);                            // Запишем  day
    Wire.write(date);                           // Запишем  date
    Wire.write(month);                          // Запишем  month
    Wire.write(year);                           // Запишем  year
    Wire.endTransmission();                     // Остановите передачу и отпустите шину I2C
    delay(200);                                 // Ждем 200ms
  }
  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();                         // Считать minuts из регистра 1
  hour   = Wire.read();                         // Считать hour из регистра 2
  day    = Wire.read();                         // Считать day из регистра 3
  date   = Wire.read();                         // Считать date из регистра 4
  month  = Wire.read();                         // Считать month из регистра 5
  year   = Wire.read();                         // Считать year из регистра 6
  Wire.beginTransmission(0x68);                 // Запустите протокол I2C с адресом DS3231
  Wire.write(0x11);                             // Отправить адрес регистрации
  Wire.endTransmission(false);                  // Перезапуск I2C
  Wire.requestFrom(0x68, 2);                    // Запрос 2 байта от DS3231 и освобождение шины I2C
  temperature_msb = Wire.read();                // Чтение температуры MSB
  temperature_lsb = Wire.read();                // Считать температуру LSB
  display_day();
  DS3231_display();                             // Время и календарь
  delay(50);                                    // Ждем 50ms
}
/* Функция перекодировки русских букв из UTF-8 в Win-1251 */
String utf8rus(String source)
{
  int i, k;
  String target;
  unsigned char n;
  char m[2] = { '0', '\0' };
  k = source.length(); i = 0;
  while (i < k) {
    n = source[i]; i++;
    if (n >= 0xC0) {
      switch (n) {
        case 0xD0: {
            n = source[i]; i++;
            if (n == 0x81) {
              n = 0xA8;
              break;
            }
            if (n >= 0x90 && n <= 0xBF) n = n + 0x30;
            break;
          }
        case 0xD1: {
            n = source[i]; i++;
            if (n == 0x91) {
              n = 0xB8;
              break;
            }
            if (n >= 0x80 && n <= 0x8F) n = n + 0x70;
            break;
          }
      }
    }
    m[0] = n; target = target + String(m);
  }
  return target;
}

Пишите в комментариях, какие проекты на данном дисплее вы бы хотели видеть.


Возможности OLED часов на arduino.

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

Возможности OLED часов на arduino.

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

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

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


На этом всё. Не забывайте подписываться на мой YouTube канал, вступать в группу Вконтакте, в группу на Facebook.

И всем пока-пока. До встречи в новом проекте.


]]>
Обзор USB адаптера (программатора) для ESP-01 на CH340G http://portal-pk.ru/news/241-obzor-usb-adaptera-programmatora-dlya-esp-01-na-ch340g.html Константин Portal-PK 2020-02-04T13:07:38+03:00 Сегодня я расскажу про USB адаптер для ESP-01 на чипе CH340G. И поделюсь своим опытом, как можно переделать данный адаптере в программатор для esp-01.

Описание адаптера для ESP-01.

Адаптер представляет из себя плату чёрного цвета, на которой установлены: микросхема CH340G; разъем с шагом 2,5 мм для установки модуля ESP-01; стабилизатор LM62063; USB разъем для подключения к компьютеру.

Описание адаптера для ESP-01.

Приобрел я на AliExpress USB адаптер для программирования esp-01. Из названия понятно, что это просто адаптер, а не программатор. В интернете достаточно много примеров переделки USB адаптера в программатор, что я и сделал, припаяв вот такую гребенку.

припаяв вот такую гребенку

Чтобы адаптер переходил в режим программирования необходимо GPIO0 замыкать на GND. А во втором положении перемычки, чтобы не замыкала данные контакты.

переделки USB адаптера в программатор

Это решение достаточно удобное. После прошивки микроконтроллера мы можем проверить какую информацию он вводит в монитор порта. Достаточно только поменять положение перемычки.

 поменять положение перемычки

Для работы адаптера на микросхеме CH340G необходимо установить дополнительный драйвер в операционной системе Windows. Драйвер можно скачать внизу статьи, в разделе материалы для скачивания. В операционной системе Linux всё работает без установки дополнительных драйверов.

Для проверки работоспособности программатора можно загрузить скетч мониторинга WiFi сетей

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

 загрузить скетч мониторинга WiFi сетей

Данный скетч есть в стандартных примерах Arduino IDE в разделе ESP8266WiFi, точнее он ставится вместе с установкой поддержки семейства ESP8266.

 Данный скетч есть в стандартных примерах Arduino IDE в разделе ESP8266WiFi, точнее он ставится вместе с установкой поддержки семейства ESP8266.

Как настроить Arduino IDE для работы с ESP8266

Как настроить Arduino IDE для работы с ESP8266 смотрите тут.

Для прошивки микроконтроллера esp-01 устанавливаем джампер так, чтобы он замыкал GPIO0 на GND. После прошивки переставляем джампер, что позволяет вывести информацию в монитор порта и мы увидим список доступных WiFi сетей.

 увидим список доступных WiFi сетей

Можно резюмировать, что данный метод переделки из USB адаптера в программатор работает. Но на этом история не заканчивается. Недавно нашел на AliExpress уже готовый программатор с переключателем на плате. Так выглядит данный программатор.

Недавно нашел на AliExpress уже готовый программатор с переключателем на плате

Он тоже сделан на микросхеме ch340g, и его принцип работы ничем не отличается от переделанного адаптера. А самое обидное то, что этот программатор стоит всего на 50-60 руб дороже, чем адаптер. Оставлю вам ссылку на программатор, чтобы вы не тратили лишнее время на переделку адаптера.

Надеюсь, что моя статья кому-нибудь помогла. Пишите своё мнение про адаптер, программатор и общее впечатление про ESP-01.

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

]]>
Cамодельный сенсорный светильник на Arduino (Digispark). http://portal-pk.ru/news/240-camodelnyi-sensornyi-svetilnik-na-arduino.html Константин Portal-PK 2020-01-30T11:22:11+03:00 На рынке достаточно много светильников с различными сенсорными кнопками . Что бы включить такой светильник необходимо прикоснуться к определённой области на корпусе прибора. Подобное управление я уже реализовывал, и меня не удивить таким управлением. Недавно делал елочную гирлянду, в которой управление сенсорной кнопкой выступало как альтернативное, основное управление реализовано по Wi-fi.

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

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

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

Теперь необходимо сделать основание корпуса, куда будет уложена электроника. Изначально я планировал начертить свое основание в программе Fusion 360, но на просторах интернета наткнулся вот на такой готовый вариант. Все элементы отлично подошли для моего проекта, пришлось только увеличить отверстие для установки разъёма 5,5 на 2,5 мм.

Теперь необходимо сделать основание корпуса,

Корпус готов. Переходим к электронной части проекта.

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

Для проекта понадобиться:

- digispark

- сенсорная кнопка ttp223

- разъем 5,5 на 2,5 мм

- алюминиевый профиль для светодиодных лент

- немного пластика для 3D принтера

В связи с тем, что в основании не так и много места, управлять всем будет Digispark

Электронику светильника с сенсорным управлением на Arduino (Digispark) собираю вот по такой схеме.

Электронику светильника с сенсорным управлением на Arduino (Digispark) собираю вот по такой схеме.

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

У сенсорной кнопки ttp223

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

Укладываем электронику в основание и закрываем заднюю крышку.

Укладываем электронику в основание и закрываем заднюю крышку.


Переходим к программной части.

Чтобы Digispark работал в среде Arduino IDE необходимо настроить поддержку данной платы.

Для этого в Arduino IDE зайдём во вкладку «файл», «настройки» и в открывшемся окне настроек, в поле « Дополнительные ссылки для менеджера плат » указываем вот такую ссылку. Нажимаем кнопку « OK».

Для этого в Arduino IDE зайдём во вкладку

Дополнительные ссылки для менеджера плат

Дальше переходим в меню «инструменты», выбираем пункт «менеджер плат» и в открывшемся окне в строке поиска указываем слово: «Digispark». Производим установку.

Дальше переходим в меню «инструменты»

«Digispark». Производим установку.

После чего переходим в пункт меню «инструменты» и в пункте «платы» выбираем Digispark.

После чего переходим в пункт меню «инструменты» и в пункте «платы» выбираем Digispark.

Для операционной системы Windows необходимо установить дополнительные драйвера, которые вы можете скачать по ссылке или из раздела « материалы для скачивания» в конце статьи.

Прошивка Digispark немного отличается от прошивки Arduino.

Прошивка Digispark немного отличается от прошивки Arduino. Сперва нажимаем кнопку «загрузить», после чего появляется надпись о том, что ожидается подключение устройства. Далее мы подключаем к USB Digispark. Если вы увидели бегущие проценты до 100 и в конце надпись « Thank you!». Значит ваш плата успешно прошита.

 Далее мы подключаем к USB Digispark. Если вы увидели бегущие проценты до 100 и в конце надпись «Thank you!».


Код для светильника сенсорным управлением.

Код прошивки небольшой, максимум, что вам нужно изменить количество светодиодов в вашей ленте. Значение переменной STRIPSIZE как раз отвечает за установку количества светодиодов.

#include <Adafruit_NeoPixel.h>
#define PIN 0               // пин подключения ленты
#define STRIPSIZE 20        // количество светодиодов в ленте
byte button_rejim = 1;      // кнопка режим
byte rejim = 0;             // текущий режим
byte yarkast = 150;         // текущая яркасть 
boolean lastButten = LOW;   // предыдущее состояние кнопки
boolean currentButten = LOW;// текущее состояние кнопки

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

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

В итоге вот такой красивый стильный светильник получается.

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

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

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

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

Планирую доработать данную версию светильника. Есть идея сделать управление через Bluetooth, wi-fi с помощью мобильного приложения. Пишите в комментариях, и на форуме какую версию проекта вы бы хотели видеть. И что вас интересует, возможно даже не в рамках данного проекта.

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем проекте.

]]>
Урок 16.1. Бегущая строка на русском языке. Arduino и MAX7221. http://portal-pk.ru/news/239-begushchaya-stroka-na-russkom-yazyke-arduino-i-max7221.html Константин Portal-PK 2020-01-28T12:40:35+03:00 Сегодня в уроке научимся выводить текст на русском языке на матрицу MAX7221. Для более быстрой смены текста в бегущей строке «научим» Arduino выводить на матрицу полученный текст из монитора порта . Как подключать матрицу MAX7221 к Arduino, рассказывал в предыдущем уроке: Подключаемматрицу Max72xx (MAX7219) к Arduino. Простая анимация.

Подключение светодиодной матрицы 8×8 на MAX7219 к Arduino.

Для выполнения Arduino урока нам понадобится:

Для подключения необходимо пять проводов, которые чаше всего идут в комплекте с матрицей. Подключаем вывод CLK (MAX7219 ) к выводу 13 (Arduino), вывод CS подключаем к выводу 9, вывод DIN подключаем к выводу 11. Питание подключается VCC к +5В и GND к GND.

Схема подключения модуля с 4 матрицами к Arduino UNO .

Схема подключения модуля с 4 матрицами к Arduino UNO.

Схема подключения модуля с 4 матрицамиMAX7219 к Arduino NANO будет вот такой.

Схема подключения модуля с 4 матрицамиMAX7219 к Arduino NANO
Установка библиотек Adafruit_GFX и Max72xxPanel. И настройка для вывода русского текста.

Существует несколько библиотек, доступных для управления матрицей на драйвере MAX7219 . В этом уроке я буду использовать две библиотеки: Adafruit_GFX и Max72xxPanel .

Для установки этих библиотек выполните следующие действия.
1. Откройте Arduino IDE и перейдите в раздел Скетч > Подключить библиотеку > управление библиотеками .

Должен открыться менеджер библиотек.

2. Укажите “ GFX” в поле поиска, выберете из списка и установите библиотеку от Adafruit GFX.

Аналогично установите вторую библиотеку, для этого в поле поиска укажите “GFX”

3. Библиотеку Max72xxPanel можно установить из zip архива. Для этого скачайте архив с библиотекой отсюда или внизу урока из раздела «Файлы для скачивания». В Arduino IDE перейдите в раздел Скетч > Подключить библиотеку > Добавить .ZIP библиотеку . Выбираете архив с библиотекой.

 Библиотеку Max72xxPanel можно установить из zip архива

4. Скачать файл glcdfont.c и заменить его в библиотеке Adafruit-GFX. Библиотека находится C:\Users\USER\Documents\Arduino\libraries\Adafruit_GFX_Library. У вас путь до библиотеки может отличаться. Вы также можете скачать библиотеку Adafruit-GFX подготовленную для работы с русским текстом внизу статье есть раздел с материалами для урока.

5. В скетч нужно добавить функцию перекодировки русских букв из UTF-8 в Win-1251 . Добавить функцию можно в самом низу кода.

/* Функция перекодировки русских букв из UTF-8 в Win-1251 */
String utf8rus(String source)
{
  int i,k;
  String target;
  unsigned char n;
  char m[2] = { '0', '\0' };
  k = source.length(); i = 0;
  while (i < k) {
    n = source[i]; i++;
    if (n >= 0xC0) {
      switch (n) {
        case 0xD0: {
          n = source[i]; i++;
          if (n == 0x81) { n = 0xA8; break; }
          if (n >= 0x90 && n <= 0xBF) n = n + 0x30;
          break;
        }
        case 0xD1: {
          n = source[i]; i++;
          if (n == 0x91) { n = 0xB8; break; }
          if (n >= 0x80 && n <= 0x8F) n = n + 0x70;
          break;
        }
      }
    }
    m[0] = n; target = target + String(m);
  }
return target;
}

6. После установки библиотек перезагрузите среду разработки Arduino.


Пример вывода русского текста на матрицу MAX7221.

Пример вывода русского текста на матрицу MAX7221.

Пример 1. Выводим русский текст на матрицу. Текст хранится в переменной. Для смены текста нужно постоянно загружать скетч в Arduino.

В скетч нужно добавить функцию перекодировки русских букв из UTF-8 в Win-1251 . Добавить функцию можно в самом низу кода.

#include <SPI.h>                             // Подключаем библиотеку SPI
#include <Adafruit_GFX.h>                    // Подключаем библиотеку Adafruit_GFX
#include <Max72xxPanel.h>                    // Подключаем библиотеку Max72xxPanel
int pinCS = 9;                               // Указываем к какому выводу подключен контакт CS
int numberOfHorizontalDisplays = 1;          // Количество матриц по горизонтали
int numberOfVerticalDisplays = 4;            // Количество матриц по-вертикали

Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);

String tape = "";
int wait = 100;                             // интервал, чем меньше тем бытрее бежит строка
int spacer = 1;                             // Промежуток между символами (кол-во точек)
int width = 5 + spacer;                     // Ширина шрифта составляет 5 пикселей

void setup() {
  Serial.begin(9600);
  tape = utf8rus("Привет мир! Портал ПК");
  matrix.setIntensity(5);                    // Задаем яркость от 0 до 15
  matrix.setRotation(3);                     // Направление текста 1,2,3,4
}

void loop() {

  for ( int i = 0 ; i < width * tape.length() + matrix.width() - spacer; i++ )
  {
    matrix.fillScreen(LOW);

    int letter = i / width;                   // номер символа выводимого на матрицу

    int x = (matrix.width() - 1) - i % width;
    int y = (matrix.height() - 8) / 2;         // отцентрировать текст по вертикали

    while ( x + width - spacer >= 0 && letter >= 0 ) {
      if ( letter < tape.length() ) {
        matrix.drawChar(x, y, tape[letter], HIGH, LOW, 1);
      }
      letter--;
      x -= width;
    }
    matrix.write();                       // выведим значения на матрицу
    delay(wait);
  }
}

/* Функция перекодировки русских букв из UTF-8 в Win-1251 */
String utf8rus(String source)
{
  int i, k;
  String target;
  unsigned char n;
  char m[2] = { '0', '\0' };
  k = source.length(); i = 0;
  while (i < k) {
    n = source[i]; i++;
    if (n >= 0xC0) {
      switch (n) {
        case 0xD0: {
            n = source[i]; i++;
            if (n == 0x81) {
              n = 0xA8;
              break;
            }
            if (n >= 0x90 && n <= 0xBF) n = n + 0x2F;
            break;
          }
        case 0xD1: {
            n = source[i]; i++;
            if (n == 0x91) {
              n = 0xB7;
              break;
            }
            if (n >= 0x80 && n <= 0x8F) n = n + 0x6F;
            break;
          }
      }
    }
    m[0] = n; target = target + String(m);
  }
  return target;
}

При