Уроки Arduino: Подключение датчиков и модулей к Arduino
Сегодня в уроке рассмотрим Модуль GSM GPRS SIM800L V2.0 MicroSIM с антенной. Посмотрим в чем его преимущества и недостатки. Разберемся, как управлять данным модулем с помощью AT команд и оправим CMC сообщение.
Модуль GSM GPRS SIM800L V2.0 обладает минимальным функционалом — обмен данными с GSM-модулем по UART. Плата имеет слот для установки внешней SIM-карты. SIM800L V2.0 GSM/GPRS — это четырех диапазонный GSM/GPRS модуль, совместимый с Arduino. Модуль используется для реализации функций GSM и GPRS. Преимуществом этого модуля является возможность напрямую подключать его к Arduino или другому микроконтроллеру с напряжением питания 5В.
Обновлено: 15 сентября , 2021 Подробнее …
Используем IDE
Написанные для платформы Ардуино называются скетчами. Создать скетч можно при помощи интегрированной среды разработки, коротко – IDE (официальная версия так и называется, Arduino IDE). Установив драйвера и эту среду, вы можете сделать свой первый шаг.
IDE предоставляет вашему вниманию уже написанные простые скетчи. Откройте один из них и выберите свой Arduino в списке плат, после чего загрузите на свое устройство скетч при помощи команды Upload. Все это делается очень просто – интерфейс у среды разработки графический, он понятен интуитивно.
Также в Сети есть огромное количество уже готовых скетчей. Например, на Википедии в статье про Ардуино вы можете найти готовый пример программы, задающей мигание светодиодом. На специализированных ресурсах вы найдете невероятно сложные алгоритмы, делающие из Ардуино настоящего робота. Чтобы научиться писать такие, понадобится определенное время и упорство, однако вы можете изучать их уже в самом начале, чтобы понять как можно больше принципов программирования под платформу. Если вы хотите написать элементарную программку и не знаете ка, то заходите сюда.
Если вам понравилась статья, поделитесь с друзьями. Подписывайтесь на обновления блога, чтобы не пропустить новости или чего-нибудь интересного. Успехов вам.
С уважением, Гридин Семён
#35. Выводим символы на дисплей LCD 1602 и LCD 2004.
Для создания проектов на Arduino достаточно часто применяют дисплей LCD 1602 и LCD 2004. Как подключить LCD 1602 к Arduino рассмотрели в предыдущем уроке. Кроме текста очень часто нужно вывести специальные символы. Например, обозначение температуры — градус цельсия или процент влажности, а также направление продвижения или вращения. Как же вывести спец символы на дисплей LCD 1602 и LCD 2004? В данном уроке рассмотрим вывод из набора предустановленных символов и создадим свои символы, которые также выведем на LCD 1602 и LCD 2004.
Обновлено: 8 июля , 2021 Подробнее …
#34. ЖК-дисплей LCD 1602 и LCD 2004. Подключение к Arduino. Основы.
Символьные ЖК-дисплеи LCD 1602 и LCD 2004 достаточно часто используются в Arduino проектах, благодаря большому размеру и относительно небольшой стоимости. Кроме этого с данными дисплеями достаточно просто работать. Сегодня в Arduino уроке рассмотрим основы работы с ЖК-дисплеями LCD 1602 и LCD 2004. Подключим lcd 1602 к Ардуино. И рассмотрим пару примеров скетчей, которые позволят вывести текстовую информацию на LCD 1602 и 2004.
Описание и классификация LCD 1602 и LCD 2004.
Обновлено: 8 июля , 2021 Подробнее …
Для кого это?
Кому нужен Ардуино?
- Детям и подросткам, интересующимся робототехникой;
- Учащимся профильных технических вузов и училищ;
- Специалистам, желающим вспомнить старые навыки;
- Преподавателям для обучения своих студентов;
- Всем склонным к технике людям, желающим интересно проводить время.
Изучить программирование, тут же применяя полученные знания на практике; написать дипломный проект; создать умную систему для дома, которая позволит дистанционно управлять приборами и освещением; сконструировать робота – это далеко не полный список возможностей, которые предоставляет Ардуино. Они поистине безграничны, и все ограничивается лишь вашей фантазией! При этом система доступна даже новичкам благодаря широкому комьюнити и наличию в Сети множества уроков Ардуино, в том числе и на русском языке.
#33. Motor shield l293d подключение. Пример кода для Arduino
Робототехника с каждым годом становиться все популярнее. И поэтому количество электроники с помощью которой можно реализовать роботизированную модель достаточно много. А если у вас нет опыта работы с электроникой, вам отлично подойдёт Motor shield на базе драйвера l293d. Шилд устанавливается на плату Arduino UNO.
На shield выведены контакты для подключения двигателей постоянного тока, шаговых двигателей и сервоприводов. Я уже делал проект с использованием данного Motor shield. У вас, наверное, возник вопрос. Если шилд такой простой, почему у меня мало Arduino проектов с его использование? Это связанно со сложностью расширения функционала проекта при использовании Motor shield l293d. Но обо всём по порядку.
Обновлено: 24 июня , 2021 Подробнее …
ОБОРУДОВАНИЕ ТЕХНОЛОГИИ РАЗРАБОТКИ
Окончание разработки контроллера (уроки 36 – 44). Доработаем программное обеспечение. Добавим функцию установки технологических параметров устройства с помощью программы верхнего уровня.
Предыдущий урок Список уроков Следующий урок
В предыдущих уроках (36 — 43) мы разработали Ардуино контроллер элемента Пельтье. Устройство получилось вполне работоспособное и может быть использовано в реальных системах охлаждения.
Работу контроллера и всей системы охлаждения определяют технологические параметры: коэффициенты регуляторов, параметры срабатывания защит, заданные значения температуры и ограничения выходной мощности.
Эти параметры задаются в исходном тексте программы. Для загрузки параметров в контроллер требуется:
- запустить программу Arduino IDE;
- загрузить исходный код программы контроллера;
- изменить параметры в тексте программы;
- откомпилировать и загрузить программу в плату Ардуино.
Достаточно долгий процесс. Требует наличия на компьютере Arduino IDE. Всегда можно что-нибудь испортить в коде программы. В общем, неудобный, и даже небезопасный способ.
За работой контроллера и состоянием системы охлаждения в целом мы можем наблюдать с помощью программы ”Монитор” из предыдущего урока. В главном окне этой программы отображаются нужные нам параметры. Так почему бы не устанавливать параметры в этой же программе без использования Arduino IDE. Такой способ будет гораздо практичнее и удобнее.
Что для этого надо сделать.
- Хранить параметры в энергонезависимой памяти контроллера (EEPROM).
- Реализовать протокол загрузки параметров через последовательный порт UART.
- Добавить в программу верхнего уровня ”Монитор” функцию установки параметров.
В качестве устройства контроля и управления системой охлаждения можно будет использовать не только персональный компьютер, но и, например, Андроид совместимый планшет или сотовый телефон. Конечно, если написать для него функциональный аналог программы ”Монитор”.
Технологические параметры контроллера.
Я решил, дать возможность оперативно изменять следующие параметры:
ПараметрЕд. измеренияЗаданная температура в камере°CМаксимальная заданная мощностьВтИнтегральный коэффициент регулятора мощностиед. ШИМ / Вт * секИнтегральный коэффициент регулятора температурыВт / °C * секПропорциональный коэффициент регулятора температурыВт / °CДифференцирующий коэффициент регулятора температурыВт / °CТемпература включения вентилятора°CТемпература выключения вентилятора°CТемпература перегрева радиатора°CОстальные параметры ”привязаны” к аппаратной части устройства и изменять их в готовом контроллере нет необходимости. Например, если схема контроллера разработана для выходной мощности 50 Вт, то максимальную мощность 50 Вт можно задать один раз в исходном коде и затем загрузить программу в плату Ардуино. Изменять значение этого параметра в конкретном устройстве уже не допустимо.
Размещение параметров в EEPROM.
Раньше параметры были заданы как константы. Например:
#define koeffRegPwrInt 0.05 // интегральный коэффициент регулятора мощности
Теперь необходимо создать для каждого параметра переменную.
float koeffRegPwrInt; // интегральный коэффициент регулятора мощности
Неслучайно я в программе написал имена параметров не как принято для констант – большими буквами, а по правилам имен для переменных — строчными. Теперь не надо выискивать имена параметров по всему тексту программы и менять.
Формат хранения данных в EEPROM мы уже выбрали в предыдущей версии программы для параметров ”заданная температура” и ”разрешенная мощность”. В новой версии будем использовать этот формат для всех параметров.
Напомню, что каждый параметр хранится в 5 байтах EEPROM. 4 байта это число типа float. И еще байт контрольного кода для контроля целостности данных.
Относительный адресСодержимоеНазначение0 … 3Число типа floatЗначение параметра4Сумма байтов 0 … 3 ^ 0xe5Контрольный код
Для записи и чтения данных с таким форматом у нас уже есть функции writeFloatToEeprom() и readFloatToEeprom().
Выберем адреса хранения параметров в EEPROM.
Адрес EEPROMПеременнаяЕд. измеренияПараметр5setTempRef°CЗаданная температура в камере10maxSetPowerВтМаксимальная заданная мощность15koeffRegPwrIntед. ШИМ / Вт * секИнтегральный коэффициент регулятора мощности20koeffRegTmpIntВт / °C * секИнтегральный коэффициент регулятора температуры25koeffRegTmpPrВт / °CПропорциональный коэффициент регулятора температуры30koeffRegTmpDifВт / °CДифференцирующий коэффициент регулятора температуры35tempOnVent°CТемпература включения вентилятора40tempOffVent°CТемпература выключения вентилятора45overHeatTemp°CТемпература перегрева радиатораУкажем их в программе:
// адреса EEPROM #define EEPROM_SET_TEMP_REF 5 // заданная температура в камере #define EEPROM_MAX_SET_POWER 10 // заданная максимальная мощность #define EEPROM_KOEFF_REG_PWR_INT 15 // интегральный коэффициент регулятора мощности #define EEPROM_KOEFF_REG_TMP_INT 20 // интегральный коэффициент регулятора температуры #define EEPROM_KOEFF_REG_TMP_PR 25 // пропорциональный коэффициент регулятора температуры #define EEPROM_KOEFF_REG_TMP_DIF 30 // дифференцирующий коэффициент регулятора температуры #define EEPROM_TEMP_ON_VENT 35 // температура включения вентилятора #define EEPROM_TEMP_OFF_VENT 40 // температура выключения вентилятора #define EEPROM_OVER_HEAT_TEMP 45 // температура перегрева радиатора
В принципе, у нас в программе уже есть 2 параметра, которые хранятся в EEPROM: ”заданная температура” и ”разрешенная мощность”. Для остальных параметров надо сделать то же самое – загрузку их из EEPROM в интервале 1. Например:
- хранятся в EEPROM;
- на первом интервале раз в секунду загружаются в соответствующие переменные;
- в алгоритме программы используются параметры-переменные, а не константы.
Только, если первые два параметра можно изменять кнопками контроллера, то остальные пока задать невозможно.
Протокол загрузки параметров.
Параметры должны загружаться в контроллер через последовательный порт платы Ардуино. Прежде всего, необходимо определить протокол приема данных с последовательного порта.
Я затрагивал вопросы о протоколе обмена через UART в уроке 31. Повторяться не буду. Возможно, кому-то стоит просмотреть второй раздел этого урока. Там даны самые общие понятия о протоколах.
Загрузка параметров в EEPROM – ответственная операция. Случайные данные пришедшие из последовательного порта не должны вызывать загрузку EEPROM. Это сразу приведет к неработоспособности контроллера. Контрольный код при чтении EEPROM не совпадет, замигает светодиод ”Ошибка” и устройство отключится.
Значит, данные должны сопровождаться контрольным кодом.
Контрольный код вручную рассчитывать тяжело. Поэтому загружать параметры с помощью монитора последовательного порта Arduino IDE практически невозможно. Вследствие этого я решил выбрать не текстовый, а числовой протокол. Увидите насколько проще с ним работать, чем с текстовым протоколом.
Т.е. мы будем передавать информацию не в виде текста (кодов символов), а в виде двоичных чисел. Если надо передать, например число 12.34567, то мы будем передавать не коды символов ”1”, ”2”, ”.”, ”3”… Мы будем передавать 4 байта числа формата float.
- Данных будет на много меньше.
- Нам не надо будет преобразовывать их из текстового вида в числовой.
- Но мы никогда не сможем передать их из стандартного текстового терминала. Только с помощью специализированной программы.
Я выбрал такой протокол.
Номер байта в пакетеНазначение0Адрес EEPROM1 – 4Значение параметра (4 байта числа формата float)5Контрольный код (сумма байтов 0…4 ^ e5h)Протокол простой. Всего 6 байтов. Ответа об успешном завершении операции нет. Т.е. после записи параметра необходимо убедиться, что он загрузился правильно. Думаю, для данной задачи этого вполне достаточно.
Реализация загрузки параметров в контроллер.
Реализовал я алгоритм загрузки параметров очень просто.
Один раз в секунду на интервале 25 проверяется, есть ли данные в приемном буфере последовательного порта. Если данные есть, то взводится признак serialDataPresent.
Через 20 мс (на следующем интервале) в случае, если на предыдущем интервале появились данные, проверяется, сколько данных в приемном буфере. Если все правильно, то должно быть ровно 6 байтов. Времени 20 мс хватит, на передачу всех байтов. Если передача затянулась, значит это ошибка. Лишние байты – тоже ошибка.
// чтение данных из порта в буфер с вычислением контрольного кода unsigned int sum=0; for (int i=0; i < 5; i++) < bufData = Serial.read(); sum = sum + (unsigned int)bufData; > // проверка контрольного кода if ( (byte)sum == ((byte)Serial.read() ^ 0xe5))
else < // ошибка контрольного кода while (true) < if (Serial.read() == 0xffff) break;>// сброс порта > > else < // число данных неправильное while (true) < if (Serial.read() == 0xffff) break;>// сброс порта > >- Если принято ровно 6 байтов, то все данные считываются в массив bufData[] и проверяется контрольный код. При правильном контрольном коде происходит запись данных в EEPROM.
К недостаткам такого алгоритма следует отнести то, что параметры для загрузки в EEPROM можно передавать не чаще, чем 1 раз в сек. Но я не заметил на практике каких-то проблем, связанных с этим ограничением.
При желании можно коды для интервалов 26 и 27 повторить еще на нескольких интервалах. Тогда данные последовательного порта будут проверяться чаще. Чаще их можно будет и передавать.
Загрузить окончательный вариант скетча можно по этой ссылке:
Зарегистрируйтесь и оплатите. Всего 60 руб. в месяц за доступ ко всем ресурсам сайта!
Небольшая доработка программы.
C LCD индикатором FDCC0801 FLYYBW-51LR у меня все работало безукоризненно. Когда я поставил другой индикатор фирмы Winstar, то появилась проблема. Изображение на дисплее помигивало раз в секунду, а в режиме установки все так мелькало, что с трудом можно было различить символы.
Это произошло из-за того, что при каждом выводе информации я очищал экран функцией
disp.begin(8, 1); // инициализация дисплея 1 строка, 8 символов
В принципе эта функция предназначена для инициализации дисплея. Одновременно она очищает содержимое экрана. Я решил ее использовать для очистки. Инициализация лишний раз не помешает. Но с другим индикатором Winstar это привело к неприятностям.
Поэтому я изменил способ очистки экрана на традиционный, с помощью функции clear(). Каждую строку в тексте цикла loop() (2 строки)
disp.begin(8, 1); // инициализация дисплея 1 строка, 8 символов
я заменил на строку
disp.clear(); // очистка дисплея
В результате скетч программы стал таким:
Зарегистрируйтесь и оплатите. Всего 60 руб. в месяц за доступ ко всем ресурсам сайта!
Я обозначил его как новую версию программы. Если будут еще изменения и доработки, то я создам на форуме сайта тему, в которой буду информировать о новых версиях программы.
Программа верхнего уровня.
Я назвал программу ”Монитор Ардуино контроллера элемента Пельтье, версия 2.1”. Установка, первый запуск абсолютно такие же, как и для предыдущей версии программы (урок 43). Загрузить приложение можно по этой ссылке:
Зарегистрируйтесь и оплатите. Всего 60 руб. в месяц за доступ ко всем ресурсам сайта!
В новой версии программы добавились только кнопки с карандашиком напротив параметров, которые можно загружать в контроллер.
Если нажать на кнопку, то открывается окно редактирования параметра, в котором его можно изменить и загрузить в контроллер. Надо помнить, что значение параметра должно быть указано в формате с плавающей запятой. Т.е. в качестве децимального разделителя должна использоваться точка, а не запятая.
После записи окно редактирования параметра автоматически закроется и в основном окне отобразится значение параметров уже считанных из EEPROM.
Окна редактирования параметров выглядят так.
Пояснять здесь особенно нечего.
После загрузки скетча программы в плату Ардуино в EEPROM окажутся случайные, неправильные данные. Будет мигать светодиод ”Ошибка”, контроллер отключит напряжение с нагрузки.
Все заработает только после того, как с помощью программы ”Монитор” будут загружены все технологические параметры.
Я закончил разработку контроллера элемента Пельтье. Она длилась целую вечность — 9 уроков. Я даже перестал думать, о чем писать в следующих уроках. Мне теперь чего-то не хватает.
Разработка будет поддерживаться. Если найдутся ошибки – буду исправлять. На форуме сайта можно обсудить, каких функций или режимов не хватает в проекте. Если устройство вызовет большой интерес, доработаю. Может быть, программу монитор под Андроид напишу.