Опубликовано

Встречайте: “Методы и алгоритмы анализа данных для веб-разработки и маркетинга”

Методы и алгоритмы анализа данных для веб-разработки и маркетинга

Рассмотрены основные методы и алгоритмы анализа данных для веб-разработки и маркетинга, в том числе методы декомпозиции, визуализации, функционально-стоимостного анализа, эконометрический метод и другие. Приведены алгоритмы  семантического анализа текстов, ранжирования смысловых приоритетов и отбора ключевых фраз, алгоритмы оценки потребительской лояльности, в том числе алгоритм оценки тональности текстов, алгоритм анализа качества веб-интерфейсов Mobile First и другие. Рассмотрены задачи прогнозирования коммерческого спроса, анализа потребительского доверия к бренду, сокращения рекламных расходов, а также комплексного анализа данных деятельности компании. Описан общедоступный инструментарий, такой как Яндекс.Подбор слов, Яндекс.Метрика, ExportBase, Яндекс.Поиск, ГлавРед, EditPlus, Антиплагиат, Гугл.Таблицы, MS Excel и Google Mobile Test.

Электронный архив на сайте издательства содержит цветные рисунки, примеры HTML-документов, скриптов и дополнительные pdf-файлы.

Для начинающих аналитиков данных

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

Многие задаются вопросом: как использовать статистику о поведении пользователей для принятия решений при разработке и сопровождении коммерческих продуктов? Не важно, что в рассмотрении — сайт или моб

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

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

В книге приводятся практические решения комплексных аналитических задач с помощью общедоступного инструментария:

  • Яндекс.Подбор слов (статистика потребительских поисковых запросов);
  • Яндекс.Метрика (статистика и аналитика по сайту компании);
  • ExportBase (доступные базы данных о российских компаниях);
  • Яндекс.Поиск (результаты ранжирования по тематике сайта);
  • EditPlus или аналог (редактор кода для исполнения решений с графиками);
  • ГлавРед (исправление текста);
  • Антиплагиат (уникальность);
  • Гугл.Таблицы или MS Excel (редактор таблиц для обработки данных);
  • Google Mobile Test (анализ веб-сайта на мобилопригодность и индекс Mobilefirst);
    и другие.

    Прикладные методы и алгоритмы анализа данных:

    • анализ и прогноз спроса на товары и услуги на основе статистики;
    • A/B-тестирование гипотез — сравнение и аналитический выбор по заданным мотивационным факторам покупки: цена и выгода;
    • семантический анализ персональных данных пользователей для отбора коммерческих интересов. Алгоритм анализа тональности текстов;
    • решение задачи минимизации рекламных расходов с помощью визуального сопоставления рекламных каналов и аналитического отбора по условиям;
    • оценка лояльности потребителей к бренду с применением опросов по метрике NPS.

     

    Методы принятия решения и повышения эффективности компании:

    • методика TD ABC для расчета затрат по операциям в условиях ограниченных ресурсов компании;
    • имитационное моделирование процессов обработки заявок в расчетно-кассовом и дистанционном банковском обслуживании клиентов для оценки себестоимости транзакций и влияния риска отказов на прибыль компании;
    • качественная оценка состояния компании (стартапа) для принятия решений по стратегическому управлению и инвестированию;
    • факторный анализ для оптимального выбора на основе заданных признаков сравнения;
    • комплексный анализ данных компании методом декомпозиции, фильтрации и анализа статистики поисковых запросов из Яндекс.Метрики и поведения пользователей на сайте компании.

Книгу “Методы и алгоритмы анализа данных для веб-разработки и маркетинга” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Предисловие…………………………………………………………………………………………… 11

Глава 1. Введение в анализ данных……………………………………………………….. 14

Термины и определения…………………………………………………………………………………………………………….. 14

Взаимосвязь сущностей исследования…………………………………………………………………………………….. 17

Постановка и условия задачи…………………………………………………………………………………………… 19

Сбор данных без потерь……………………………………………………………………………………………………. 20

Гипотеза: построение, подтверждение или опровержение……………………………………………. 20

О выборе методов и алгоритмов для решения задачи……………………………………………………. 21

Определение алгоритма…………………………………………………………………………………………………….. 22

Проведение эксперимента…………………………………………………………………………………………………. 24

Анализ экспериментальных данных………………………………………………………………………………… 25

Рекомендации по результатам анализа…………………………………………………………………………… 25

Об апробации результатов исследования……………………………………………………………………….. 26

О логике продуктового мышления……………………………………………………………………………………. 26

Подход к факторному анализу в исследовании……………………………………………………………………… 28

Апробация как часть технологической фазы исследования………………………………………………….. 29

Сбор, хранение и воспроизведение данных……………………………………………………………………………. 29

Рекомендация вести календарь исследования………………………………………………………………… 30

Транспорт данных экспортом из редактора таблиц в веб-приложение……………………….. 31

Таблица статистики из облака с выводом на график……………………………………………………… 31

Формирование личного профиля из компетенций специалиста……………………………………………. 40

Организация процесса работы аналитика………………………………………………………………………………. 42

Сроки и значимость аналитического исследования………………………………………………………………. 45

Комплексный подход к аналитическому исследованию……………………………………………………….. 46

Глава 2. Декомпозиция для исследования сложной системы………………….. 47

Факторинг в программировании………………………………………………………………………………………………. 49

Фильтры поиска недвижимости для упрощения факторного отбора……………………………. 49

Задача о разборчивой невесте………………………………………………………………………………………….. 51

Постановка задачи……………………………………………………………………………………………………. 51

Условия задачи…………………………………………………………………………………………………………. 51

Стратегия «бери или уходи»……………………………………………………………………………………………… 52

Объектно-ориентированный подход к методу декомпозиции……………………………………………….. 52

Стандартизация кода по методологии БЭМ…………………………………………………………………………… 54

Философия БЭМ…………………………………………………………………………………………………………………. 55

Что в целом улучшает метод декомпозиции и БЭМ в работе веб-разработчиков?…….. 59

Рефакторинг программного кода……………………………………………………………………………………………… 61

Чем отличается стандартизация кода от рефакторинга?………………………………………………. 63

Может ли начинающий веб-разработчик сделать рефакторинг исходного кода коммерческого продукта?         63

Декомпозиция рефакторинга…………………………………………………………………………………………….. 63

Первичная обработка данных для анализа…………………………………………………………………………….. 65

Выводы о методе декомпозиции………………………………………………………………………………………………. 67

Глава 3. Визуализация больших данных……………………………………………….. 69

Зачем нужно изучать визуализацию данных и овладевать навыками работы с ней?………… 69

Базовые требования к визуализации данных………………………………………………………………………….. 69

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

Визуализация динамики процессов…………………………………………………………………………………………. 76

Ошибки и несоответствия между графиком математического моделирования и эмпирической моделью на основе эксперимента………………………………………………………………………………………………………………………. 77

Задачи аналитика………………………………………………………………………………………………………………. 78

Пример плавного вывода графика на веб-странице с использованием сплайнов Катмулла–Рома            78

Постановка задачи……………………………………………………………………………………………………. 79

Решение……………………………………………………………………………………………………………………… 79

Визуализация по принципу «от простого к сложному»…………………………………………………………. 84

Визуальные акценты на ключевых аспектах защиты исследовательской работы……… 84

Система знаков для обмена информацией………………………………………………………………………. 86

Стандартизация визуальных и текстовых данных…………………………………………………………………. 87

Стандартизация по корпоративным стандартам……………………………………………………………. 88

Дизайн-система Material Design (Google Inc.)…………………………………………………………………… 90

Графический метод визуализации данных……………………………………………………………………………… 91

Графический метод — один из наиболее точных для прогнозирования………………………. 93

Переход от плоской визуализации к объемной……………………………………………………………….. 93

Принятие обоснованных решений на основе визуализации данных……………………………………. 95

Логические методы принятия решений……………………………………………………………………………………. 97

Выводы о визуализации аналитических данных……………………………………………………………………. 99

Выводы о принятии решений на основе визуализации данных………………………………………….. 100

Глава 4. Прогнозирование коммерческого спроса на товары и услуги…. 101

Гипотетическая оценка спроса на основе публичной статистики……………………………………… 101

Актуальность коммерческих потребительских запросов…………………………………………………….. 103

Формула актуальности поискового запроса…………………………………………………………………. 104

Как выйти на экспоненту доходности в компании?……………………………………………………………… 107

Эффект сарафанного радио…………………………………………………………………………………………….. 110

Характеристика Mobile-Friendly по веб-сайту «HTML Academy»………………………………. 110

Конверсия целевой аудитории в покупатели продукции…………………………………………………….. 112

Что такое воронка продаж?……………………………………………………………………………………………………. 115

Возможно ли автоматизировать воронку продаж?………………………………………………………. 116

Голосовой помощник………………………………………………………………………………………………………………. 117

Запись, обработка и воспроизведение голосовых команд посетителя……………………….. 118

Выводы из примера реализации голосового помощника Voice Assistant…………………… 118

Как увеличить конверсию в электронной торговле?……………………………………………………………. 119

A/B-тестирование предложений товаров и услуг…………………………………………………………. 122

Цена или выгода?…………………………………………………………………………………………………………….. 124

Как эффективнее сделать представление товаров в витрине целевой страницы для конверсии во входящие заявки(лиды)?………………………………………………………………………………………………………….. 126

Шаг № 1: определение необходимой выборки целевой аудитории для A/B-теста       127

Шаг № 2: отправка данных в Яндекс.Метрику……………………………………………. 128

Шаг № 3: настройка целей и интеграция с кол-трекингом…………………………. 129

Результаты: распределение конверсий по визитам с параметрами теста…………. 130

Выводы о прогнозировании спроса……………………………………………………………………………………….. 131

Глава 5. Семантический метод анализа больших текстов…………………….. 133

Графические форматы для семантического анализа текстов……………………………………………… 133

Алгоритм ранжирования смысловых приоритетов в тексте………………………………………………… 135

Пример № 1: смысловые приоритеты в тексте………………………………………………………………. 135

Выводы из примера………………………………………………………………………………………………… 139

Анализ тональности текста…………………………………………………………………………………………….. 139

Пример № 2: эмоциональная тональность текста……………………………………………….. 140

Вывод из примеров…………………………………………………………………………………………………………… 141

Алгоритм анализа семантического ядра для поисковой оптимизации………………………………. 142

Организация хранения и заполнения семантического ядра………………………………………… 142

Шаг № 1: сбор необходимой технической информации……………………………………… 144

Шаг № 2: построение структуры сайта………………………………………………………………… 144

Шаг № 3: подготовка ключевых фраз для целевых страниц………………………………. 145

Шаг № 4: заполнение важных тегов всех целевых страниц……………………………….. 146

Способ 1………………………………………………………………………………………………………….. 146

Способ 2………………………………………………………………………………………………………….. 147

Шаг № 5: постановка на переобход обновленных страниц веб-сайта……………… 150

Алгоритм отбора ключевых фраз для эффективной работы веб-ресурса………………………….. 151

Последовательность исполнения алгоритма отбора ключевых фраз………………………… 152

Базовые требования к подготовке оптимизированных текстов для сайта…………………. 155

Выводы об эффективности алгоритма отбора ключевых фраз по актуальности……… 159

Эффективность алгоритма для поисковой оптимизации…………………………………….. 159

Актуальность ключевых фраз для повышения эффективности сайта……………….. 159

Рекомендации по подготовке уникального контента перед публикацией веб-ресурса……. 160

Выводы о семантическом анализе текстов……………………………………………………………………………. 161

Глава 6. Анализ потребительского доверия к бренду……………………………. 163

Лояльность потребителей к бренду……………………………………………………………………………………….. 163

Классификация по характеристикам…………………………………………………………………………………….. 164

Алгоритмы и метрики потребительской лояльности……………………………………………………………. 165

Алгоритм анализа тональности текстов пользователей………………………………………………. 165

Потребительские и специализированные отраслевые рейтинги…………………………………. 166

Метрики повторных продаж и количества возвратов………………………………………………….. 168

Метрика «индекс потребительской лояльности» (NPS)………………………………………………… 168

Индекс потребительской лояльности…………………………………………………………………………………….. 168

Промежуточные выводы…………………………………………………………………………………………………. 170

Об алгоритме опроса для оценки NPS……………………………………………………………………………………. 170

Что дает исследуемой компании измерение метрики NPS?………………………………………….. 171

Опрос клиентов для анализа лояльности к бренду………………………………………………………. 172

Шаг № 1: составление списка вопросов……………………………………………………………….. 173

Удовлетворенность клиентов компании………………………………………………………. 173

Доверие к бренду производителя продукции………………………………………………. 173

Репутация бренда…………………………………………………………………………………………… 173

Качество продукции и ее ценность……………………………………………………………….. 173

Атрибуты бренда……………………………………………………………………………………………. 174

Шаг № 2: заполнение веб-формы опроса для публикации…………………………………. 174

Шаг № 3: выборка целевой аудитории для рассылки опроса……………………………. 175

Шаг № 4: выбор канала доставки опроса для рассылки…………………………………….. 176

Шаг № 5: доставка опроса выборке ЦА по расписанию…………………………………….. 176

Алгоритм вычисления индекса лояльности NPS…………………………………………………………… 176

Отчет о вычислении индекса NPS…………………………………………………………………………………… 177

Выводы: что дает аналитику и компании анализ метрики NPS?………………………………………… 179

Глава 7. Методика TD ABC. Функционально-стоимостный анализ себестоимости транзакций в системах массового обслуживания……………………………………………………….. 181

Оценка базовой модели ABC………………………………………………………………………………………………….. 183

Пример № 1: расчет ставки стоимости мощности по TD ABC…………………………………….. 183

Пример № 2: оценка затрат за единицу времени…………………………………………………………… 184

Практическая ценность методики учета затрат TD ABC…………………………………………………….. 188

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

Обслуживание потока заявок в СМО……………………………………………………………………………… 190

Рекомендуемая литература по системам массового обслуживания…………………………… 192

Бизнес-модели СМО для секторов B2C и B2B………………………………………………………………. 192

Социально-экономическое значение СМО……………………………………………………………………. 193

Социально-экономическая характеристика дистанционных услуг…………………………………… 196

Количественные характеристики дистанционных услуг…………………………………………….. 197

Эффект масштаба…………………………………………………………………………………………………………….. 201

Пример № 3: развитие дистанционных каналов обслуживания клиентов
в Альфа-Банке…………………………………………………………………………………………………………………… 202

Тезисные выводы……………………………………………………………………………………………………………… 203

Основания инвестиционной привлекательности внедрения СМО на предприятии…… 203

Интерпретация благоприятных условий для роста прибыли ДБО……………………………… 204

О развитии экономики российских компаний в сфере service on demand…………………………… 205

Обзор сферы дистанционных услуг……………………………………………………………………………….. 205

Управление рисками негативного влияния на сервисы дистанционных услуг в РФ…. 207

Рекомендации для повышения эффективности СМО……………………………………………………. 208

Выводы о пользе изучения методик TD ABС и СМО……………………………………………………………. 210

Глава 8. Факторный анализ для оптимального выбора……………………….. 213

Условия применения факторного анализа…………………………………………………………………………….. 213

Применение факторного анализа в исследованиях……………………………………………………………… 214

Решение сложных задач с помощью факторного анализа………………………………………………….. 215

Объектно-ориентированный подход к многофакторному анализу…………………………………….. 215

Пример № 1: матрица принятия решения………………………………………………………………………. 216

Задача……………………………………………………………………………………………………………………… 216

Требования………………………………………………………………………………………………………………. 216

К рассмотрению……………………………………………………………………………………………………… 216

Решение……………………………………………………………………………………………………………………. 216

Вывод о матрице принятия решений…………………………………………………………………….. 217

Пример № 2: сравнительный многофакторный анализ………………………………………………… 218

Задача……………………………………………………………………………………………………………………… 218

Условия……………………………………………………………………………………………………………………. 218

Решение……………………………………………………………………………………………………………………. 218

Выводы о многофакторном сравнительном анализе…………………………………………… 220

Рекомендуемая литература по изучению факторного анализа…………………………. 220

Статистический анализ рынка промышленных комплектующих в РФ………………………………. 221

Каталог комплектующих для производства и сбыта……………………………………………………. 221

Исходная статистика и эмпирические данные для анализа рынка сбыта…………………. 222

Сбор данных о предприятиях России…………………………………………………………………………….. 222

Расчет рыночной стоимости выпускаемых комплектующих………………………………………. 225

Оценка привлекательности комплектующих по регионам РФ…………………………………….. 227

Муфты соединительные…………………………………………………………………………………………. 231

Шкивы клиновые…………………………………………………………………………………………………….. 232

Алгоритм развития продаж комплектующих в регионах России………………………………… 232

Шаг № 1: обработка исходных данных……………………………………………………………….. 233

Шаг № 2: онлайн-заказ с расчетом цены по формуле…………………………………………. 234

Шаг № 3: аналитика……………………………………………………………………………………………….. 235

Шаг № 4: стратегия «Морской бой»……………………………………………………………………… 236

Оценка точности выводов по факторному анализу рынка сбыта комплектующих в РФ…. 237

Первое приближение: метод проб и ошибок. Наивные выводы аналитика-новичка… 237

Метод мультифакторного анализа для достижения требуемой точности результатов       238

Второе приближение: изменение бизнес-модели для монетизации
доступными средствами………………………………………………………………………………………………….. 239

Глава 9. Задача сокращения рекламных расходов……………………………….. 242

Постановка задачи в общем виде…………………………………………………………………………………………… 242

Рекламные каналы для анализа конверсии и цены………………………………………………………. 243

Результаты………………………………………………………………………………………………………………………… 244

A/B-тестирование гипотез об эффективности рекламных каналов…………………………………….. 245

Задача сокращения рекламных расходов в частном виде…………………………………………… 245

При прочих равных условиях………………………………………………………………………………… 246

Визуальный отбор каналов рекламы для таргетинга…………………………………………………… 250

Предварительные выводы……………………………………………………………………………………… 251

Эконометрический отбор по распределению результатов анализа…………………………… 251

Рекомендации по внедрению…………………………………………………………………………………. 251

Юнит-экономика как необходимый инструментарий веб-аналитика………………………………… 253

Как использовать результаты, полученные по задаче минимизации
рекламных расходов?……………………………………………………………………………………………………………… 254

Выводы о минимизации рекламных расходов……………………………………………………………………… 254

Глава 10. Эконометрический метод оценки эффективности ИТ-проектов 256

О стартапах на начальном этапе развития…………………………………………………………………………… 256

Инвестиционная привлекательность дистанционных услуг в РФ………………………………………. 257

Условия достижения эффективности услуг по запросу……………………………………………………….. 258

Пример применения инструментария юнит-экономики……………………………………………….. 260

Задача……………………………………………………………………………………………………………………… 260

Исходные данные……………………………………………………………………………………………………. 260

Условия задачи……………………………………………………………………………………………………….. 260

Решение……………………………………………………………………………………………………………………. 261

Техническая характеристика ИТ-проекта…………………………………………………………………….. 262

Экономическая характеристика ИТ-проекта………………………………………………………………… 264

Характеристика лояльности посетителей ИТ-проекта………………………………………………… 265

Визуально-аналитическая оценка эффективности ИТ-проекта………………………………………….. 265

Качественная оценка метрик ИТ-проекта……………………………………………………………………… 266

Графики функций……………………………………………………………………………………………………………… 268

Выводы об эконометрическом методе оценки эффективности……………………………………………. 269

Глава 11. Семантический анализ данных пользователей веб-сервиса….. 271

О точке приложения семантического анализа……………………………………………………………………… 271

Постановка цели и задач семантического анализа……………………………………………………………… 273

Шаг № 1: формирование набора потенциальных микросервисов для внедрения в качестве гипотез        274

Шаг № 2: внедрение инструментов для анализа…………………………………………………………… 275

Словарь интересов………………………………………………………………………………………………….. 275

Средний чек каждого пользователя………………………………………………………………………. 279

Пример № 1: вычисление среднего чека………………………………………………………. 281

Оценка рентабельности услуги……………………………………………………………………………… 281

Пример № 2: вычисление рентабельности услуги………………………………………. 281

Шаг № 3: отбор и ранжирование потенциальных услуг из гипотез……………………………. 283

Использование показателя среднего чека для исследования…………………………….. 283

Аналитическая функция R’ для ранжирования услуг………………………………………….. 284

Пример № 3: вычисление популярности услуги по тексту пользователя…. 285

Логическая схема семантического анализа для монетизации……………………………. 287

Шаг № 4: формирование результатов исследования……………………………………………………. 288

Отчет по результатам аналитического исследования………………………………… 288

Визуализация результатов исследования……………………………………………………. 288

Сегментация данных по группам коммерческих интересов……………………………….. 290

Раздел «Монетизация сервисов» веб-интерфейса пользователя………………………… 291

Раздел «Аналитика продаж» веб-интерфейса………………………………………………………. 294

Шаг № 5: прогнозирование рентабельности микросервисов………………………………………. 295

Компетентная оценка рентабельности микросервисов……………………………………………………….. 296

Выводы о семантическом анализе данных…………………………………………………………………………… 297

Глава 12. Алгоритм анализа веб-интерфейсов Mobile First……………………. 299

Ключевые факторы алгоритма Mobile First…………………………………………………………………………… 300

Допустимые размеры шрифтов………………………………………………………………………………………. 301

Отзывчивость в миллисекундах……………………………………………………………………………………… 302

Анализ целевой страницы алгоритмом Mobile First……………………………………………………… 303

Рекомендации по оптимизации целевой страницы для повышения позиций в ранжировании поиска Google 305

Выводы об алгоритме Mobile First………………………………………………………………………………………….. 307

Глава 13. Комплексный анализ исходных данных компании………………. 308

Исходные данные для анализа………………………………………………………………………………………………. 308

Анализ входящих заявок на услуги агентства недвижимости…………………………………………….. 310

Исключение из правила анализа данных………………………………………………………………………. 312

Промежуточные выводы…………………………………………………………………………………………………. 313

Сравнение целевой аудитории……………………………………………………………………………………….. 314

Выводы, сделанные на основе анализа данных компании………………………………………….. 315

Почему следует исключить контекстную рекламу из состава инструментов продвижения нового направления услуг?……………………………………………………………………………………………………………………….. 316

Как этого достичь в сложившихся обстоятельствах?…………………………………………. 317

Почему шагов именно 4, а не условно 5 или 7?……………………………………………………. 318

Рекомендации для руководства агентства недвижимости…………………………………………… 318

Фильтрация исходных данных………………………………………………………………………………………………. 323

Очистка входной статистики путем декомпозиции и фильтрации………………………………. 323

Решение по фильтрации данных…………………………………………………………………………………….. 324

Метрика «Роботность»…………………………………………………………………………………………………….. 325

Метрика «Отказы»……………………………………………………………………………………………………………. 326

Что по существу мы получили?………………………………………………………………………………………. 328

Высокая конкуренция требует интересных решений…………………………………………………… 331

Алгоритм подготовки и публикации уникальных описаний для поисковой оптимизации контента   332

Задача SEO-специалиста………………………………………………………………………………………………… 332

Решение……………………………………………………………………………………………………………………. 332

Соотношение уникальности в карточках объектов……………………………………………………… 335

Как определить будущие хиты продаж по названиям товаров или объектов недвижимости?     336

Процентное соотношение уникального текста в карточке товара……………………………… 337

Проблема контроля и фильтрации входящих заявок из-за множества
точек входа……………………………………………………………………………………………………………… 337

Как исправить ситуацию с проблемой минимального коммерческого спроса на недвижимость и трудностью расчета конверсии?………………………………………………………………………………………………… 338

Результаты анализа данных…………………………………………………………………………………………………… 339

Аналитические выводы и рекомендации для повышения эффективности компании… 340

Вывод № 1: необходима автоматизация воронки продаж………………………………….. 340

Рекомендация № 1: внедрить в веб-сайт и в виртуальную АТС компании голосового помощника для диалога с клиентом………………………………………………………………………………………………………….. 341

Вывод № 2: необходимо увеличение адресной базы в каталоге недвижимости. 344

Рекомендация № 2: ранжировать карточки объектов в каталоге недвижимости от максимума к минимуму по эмоциональному критерию оценок пользователей и по актуальности запросов         344

Вывод № 3: необходима интеграция БД объектов с каталогом
в сообществе ВКонтакте………………………………………………………………………………………… 344

Рекомендация № 3: настроить выгрузку обновленной БД объектов в сообществе агентства недвижимости в соцсети ВКонтакте…………………………………………………………………………………………. 345

Выводы о комплексном подходе к анализу данных…………………………………………………………….. 346

Заключение………………………………………………………………………………………….. 347

Приложение. Описание файлового архива…………………………………………… 349

Предметный указатель…………………………………………………………………………. 350

Поляков Егор Юрьевич – опытный веб-разработчик со стажем работы 15 лет, закончил Санкт-Петербургский государственный университет информационных технологий, механики и оптики. Автор учебных книг и курсов по векторной графике, техническому дизайну и анализу данных.

Опубликовано

Долгожданная новинка: “Баг-трекинг: локализация и оформление дефектов”

Баг-трекинг: локализация и оформление дефектов

Подробно раскрываются темы о локализации дефектов, правилах и приемах оформления описаний выявленных ошибок и исправлений. Приведены паттерны и антипаттерны обоснования задач. Описаны инструменты баг-трекинга и процесс отслеживания ошибок. Рассказано о методах ретроспективного анализа ошибок. Рассмотрен жизненный цикл (Workflow) задач. Приведено множество примеров локализации ошибок, оформления дефектов и задач, даны рекомендации по составлению описаний.

Для тестировщиков ПО и специалистов технической поддержки

От автора бестселлеров «Что такое тестирование. Курс молодого бойца» и «Тест-дизайн. Практическое руководство для начинающих»

Белка истеричка

Как часто вы оформляете баги? Специалисты по тестированию решают подобные задачи практически каждый день. Кажется, этому даже учиться не надо, тонкости познаются на практике… Но можно ли прокачать этот навык? Конечно да! Можно пройти курсы, обратиться к ментору… Или просто прочитать эту книгу, применяя на практике приведенные в каждом разделе советы.

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

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

А я - Катька. Тестировщик.
  • Локализация дефектов
  • Оформление описания бага и улучшения
  • Паттерны и антипаттерны обоснования задач
  • Процесс и инструменты баг-трекинга
  • Жизненный цикл (Workflow) задач

Макет цветного плаката НЛО от автора

Полную версию плаката можно найти в блоге автора — статья так и называется: «Плакат НЛО (найти, локализовать и оформить ошибку

План действий:
1. Скачать плакат.
2. Отдать в типографию, напечатать на цветном принтере в формате А1.
3. Повесить на стену и сверяться с ним при заведении бага.

Он яркий, прикольный да еще и полезный. Три в одном! 😊

Книгу “Баг-трекинг: локализация и оформление дефектов ” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Назина Ольга

Ольга Назина — генеральный директор обучающего центра ООО «Тестбейз». Тестировщик, тренер и писатель. Автор статей на «Хабре» и бесплатных уроков на YouTube. Создала порталы Багред («Главред» для тестировщиков) и Testbase, на котором собраны полезные материалы по тестированию. Проработала в тестировании 17 лет, 10 из которых активно учила новичков. Провела более 200 курсов для тестировщиков, материал которых послужил основой для этой книги.

Опубликовано

Управление несколькими цветными светодиодами одним контактом платы Arduino

Раздел из главы 7 “Управление светодиодными устройствами вывода данных” из книги “Arduino. Большая книга рецептов, 3-е изд.” (авторы Джепсон Брайан, Марголис Майкл, Уэлдин Николас Роберт)

Arduino. Большая книга рецептов, 3-издание

ЗАДАЧА

Требуется управлять цветом нескольких RGB-светодиодов, используя один контакт платы Arduino.

РЕШЕНИЕ

Для решения этой задачи требуется использовать специальный модуль RGB-светодиодов со встроенным микроконтроллером — кольцо NeoPixel. Подключение модуля NeoPixel и потенциометра для управления его цветом к плате Arduino показано на рис. 7.7.

C:\Users\acer\Documents\#Electronics\Магазин электроники\фрагменты из книг\2788. Arduino Cookbook. Recipes to Begin, Expand, and Enhance\pic\07\7.7.png

Рис. 7.7. Подключение модуля NeoPixel и потенциометра к плате Arduino

При использовании платы Arduino с питанием 3,3 В как потенциометр, так и положительный вывод модуля NeoPixel следует подключить к контакту 3V3 платы Arduino, а не к контакту 5V.

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

Листинг 7.4. Работа с модулем RGB-светодиодов NeoPixels

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
/*
* Скетч SimplePixel
* Меняет свет модуля RGB-светодиодов в зависимости от значения
сигнала датчика
*/
#include <Adafruit_NeoPixel.h>
const int sensorPin = A0; // Номер контакта для подключения датчика
const int ledPin = 6; // Номер контакта для подключения модуля RGB-светодиодов
const int count = 8; // Количество светодиодов в модуле
// Объявляем экземпляр объекта модуля RGB-светодиодов
Adafruit_NeoPixel leds = Adafruit_NeoPixel(count, ledPin, NEO_GRB + NEO_KHZ800);
 
void setup()
{
leds.begin(); // Инициализируем экземпляр модуля светодиодов
for (int i = 0; i < count; i++)
{
leds.setPixelColor(i, leds.Color(0,0,0)); // Выключаем все светодиоды модуля
}
leds.show(); // Обновляем состояние модуля новыми значениями
// отдельных RGB-светодиодов (все выключены)
}
 
void loop()
{
static unsigned int last_reading = -1;
int reading = analogRead(sensorPin);
if (reading != last_reading)
{
// Если значение входного сигнала изменилось,
// сопоставляем новое значение диапазону цветов модуля NeoPixel
unsigned int mappedSensorReading = map(reading, 0, 1023, 0, 65535);
// Обновляем состояние отдельных RGB-светодиодов модуля
// с небольшой задержкой между ними, чтобы создать эффект скольжения
for (int i = 0; i < count; i++)
{
leds.setPixelColor(i, leds.gamma32(
leds.ColorHSV(mappedSensorReading, 255, 128)));
leds.show();
delay(25);
}
last_reading = reading;
}
}

Обсуждение работы решения и возможных проблем

Скетч решения управляет модулем NeoPixel компании Adafruit, содержащим восемь RGB-светодиодов, расположенных в виде кольца. Скетч можно использовать с другими версиями модуля NeoPixel, содержащими большее количество RGB-светодиодов (пикселов), присвоив переменной numOfLeds соответствующее значение. Но в таком случае следует иметь в виду, что каждый светодиод может потреблять до 60 мА тока (если задать для него белый цвет на полную яркость). Порт USB может запитать до восьми светодиодов, но для большего количества питание на модуль NeoPixel необходимо подавать с отдельного мощного источника питания напряжением 5 В. При этом шину «земли» этого источника питания необходимо подключить к шине «земли» платы Arduino. Кроме того, для плат Arduino с напряжением питания 3,3 В, напряжение питания модуля NeoPixel не должно превышать 3,7 В, поскольку напряжение сигнала данных модуля NeoPixel должно быть примерно равно напряжению питания модуля. При использовании для модуля NeoPixel отдельного источника питания, необходимо установить конденсатор емкостью 1000 мкФ между положительной и отрицательной («землей») шинами источника питания для защиты светодиодов модуля. При этом следует обеспечить правильную полярность подключения этого конденсатора.

В скетче объявляется переменная leds объекта модуля NeoPixel с помощью следующей строки кода:

1
Adafruit_NeoPixel leds = Adafruit_NeoPixel(count, ledPin, NEO_GRB + NEO_KHZ800);

В результате исполнения этой строки в памяти платы создается структура для хранения цвета каждого светодиода и взаимодействия с модулем. В параметрах объявления указывается количество светодиодов в модуле (count), номер контакта платы Arduino (ledPin), к которому подключается линия управления модуля, а также тип используемого модуля (NEO_GRB + NEO_KHZ800). При использовании другого светодиодного модуля нужно проверить информацию в документации библиотеки и используемого модуля, чтобы узнать, не требуется ли применить иные параметры.

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

Цвет отдельных светодиодов устанавливается с помощью метода (функции) led.setPixelColor(). В параметрах функции передается номер требуемого светодиода (нумерация которых начинается со значения 0) и требуемый цвет. Данные на светодиод передаются посредством функции led.show(). Прежде чем вызывать функцию led.show(), можно изменить значения цвета нескольких светодиодов, которые потом будут применены одновременно с этой функцией. Значения, которые не были изменены, останутся прежними. При создании экземпляра объекта Adafruit_NeoPixel все значения цветов инициализируются значением 0.

Библиотека Adafruit NeoPixel содержит собственную функцию ColorHSV() для преобразования цвета спектра в значения RGB. Функции передаются три параметра: цвет спектра, насыщенность цвета и яркость, в указанном порядке. Результат, возвращенный функцией ColorHSV(), обрабатывается функцией gamma32(), которая преобразовывает его, чтобы компенсировать разницу между представлением цвета компьютерами и его восприятием людьми.

Каждый светодиод модуля (так называемый пиксел) оснащен контактами для ввода и вывода данных, а также плюса и минуса («земли») питания. Управляющий сигнал с Arduino подается на контакт ввода данных первого светодиода, контакт вывода данных которого подключен к контакту ввода следующего светодиода, и т. д. со всеми светодиодами цепочки. На рынке предлагаются как отдельные пикселы, так и модули из нескольких уже соединенных пикселов, организованных в кольцо или полосу.

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

В ранних светодиодных модулях использовалась микросхема WS2811, на смену которой пришли разные другие версии — например, WS2812, WS2812B и APA102. Если ваш светодиодный модуль не поддерживается библиотекой Adafruit, попробуйте использовать библиотеку Fast LED (http://fastled.io).

Совместимая с Arduino плата Teensy 3.x и более поздние ее версии (https://www.pjrc.com/teensy) может управлять восемью модулями и благодаря своему эффективному аппаратному и программному обеспечению способна реализовывать высококачественную анимацию.

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

Дополнительная информация

Более подробная информация по модулям NeoPixel приводится в руководстве Uberguide компании Adafruit (https://oreil.ly/zgAVa).

Веб-страница библиотеки OctoWS2811 (https://oreil.ly/yxGBM) поддерживает работу со светодиодными модулями платы Teensy и содержит удачные схемы подключения источников питания для большого количества светодиодов, а также программу movie2serial на языке Processing, которая извлекает данные из файла видео, указанного в программе, и отображает это видео на панели из светодиодных полос.

Опубликовано

Взаимодействие Arduino с компьютерной программой Processing

По материалам книги Джереми Блума “Изучаем Arduino: инструменты и методы технического волшебства. 2-е изд.: пер. с англ.“(Глава 7. Последовательный интерфейс USB)

Изучаем Arduino: инструменты и методы технического волшебства. 2-е изд.

Прежде чем рассмотреть взаимодействие Arduino с компьютерной программой, рассмотрим как такое взаимодействие организовано посредством программы Монитора порта.

Отправка одиночных символов для управления светодиодом

Прежде чем приступать к обработке чисел, состоящих из нескольких цифр, разработаем скетч для управления светодиодом с помощью одного символа. В частности, при получении символа “1” скетч будет включать светодиод, а символа “0” — выключать его. Для работы этого скетча нужно подключить светодиод к контакту 9 платы Arduino, как показано на рис. 7.10.

C:\Users\Anansi\AppData\Local\Temp\FineReader10\media\image10.jpeg

Рис. 7.10. Подключение светодиода к контакту 9 платы Arduino (Рисунок создан в программе Fritzing)

Как мы разобрались в предыдущем разделе, при отправке одиночного символа проще всего сравнить его с целевым символом в операторе условия if. Каждый помещаемый в буфер символ сравнивается с символом ‘0’ или ‘1’, и в зависимости от того, с каким символом он совпадает, предпринимается соответствующее действие. Создайте новый скетч, скопируйте в него код из листинга 7.4, загрузите его в свою плату Arduino и экспериментируйте, отправляя одиночные символы 0 и 1 из монитора порта.

Листинг 7.4. Программа single_char_control.ino для управления светодиодом с помощью одиночных символов

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// Управление светодиодом с помощью одиночных символов
const int LED=9;
char data; // Переменная для хранения получаемого символа
void setup()
{
Serial.begin(9600); // Запускаем последовательный порт
// со скоростью в бодах = 9600
pinMode(LED, OUTPUT);
}
 
void loop()
{
// Предпринимаем действие только при наличии данных в буфере
if (Serial.available() > 0)
{
data = Serial.read(); // Считываем входящий байт данных
// Включаем светодиод
if (data == '1')
{
digitalWrite(LED, HIGH);
Serial.println("LED ON");
}
 
// Выключаем светодиод
else if (data == '0')
{
digitalWrite(LED, LOW);
Serial.println("LED OFF");
}
}
}

Обратите внимание на то, что вместо простого оператора условия if…else в коде присутствует его вариант if…else…if. Поскольку в каждой передаче вместе с символами управления светодиодом монитор порта также отправляет и символ новой строки, важно удалить этот символ из буфера. Считываемый функцией Serial.read() символ новой строки не проходит проверку на превышение символа ‘0’, и в скетче не предпринимается никакого действия по его обработке. Обрабатываются только получаемые символы ‘0’ и ‘1’. Если же в коде использовался бы вариант if…else, то светодиод выключался бы при получении как символа ‘0’, так и символа новой строки ‘\n’. Более того, даже при получении символа ‘1’ скетч сразу же после включения светодиода выключал бы его при получении символа новой строки ‘\n’, следующего за символом ‘1’.

Управление разноцветным светодиодом с помощью списка значений

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

C:\Users\Anansi\AppData\Local\Temp\FineReader10\media\image11.jpeg

Рис. 7.11. Подключение разноцветного светодиода к плате Arduino (Рисунок создан в программе Fritzing)

Для управления разноцветным светодиодом нам нужно посылать плате Arduino три значения в диапазоне 0–100, задающие яркость каждого из составляющих его трех светодиодов. Например, чтобы задать полную яркость для всех трех составляющих светодиодов, нам нужно отправить значения 100,100,100. Решение этой задачи сопряжено с несколькими проблемами:

  • Нам нужно как-то отличить числа от запятых.
  • Последовательность символов нужно преобразовать в целые числа и сопоставить эти числа значениям в диапазоне 0–255 для управления светодиодами, используя функции analogWrite().
  • Нам также нужно учитывать, что мы работаем со светодиодом с общим анодом, и сигналы управления подаются на катоды составляющих его светодиодов. Иными словами, значение 255 выключит светодиод, а значение 0 включит его на полную яркость.
  • Необходимо учитывать возможность, что значения яркости могут состоять из одной, двух или трех цифр.
  • Наша программа должна быть достаточно надежной, способной обрабатывать полученные данные, форматирование которых не соответствует норме, таким образом, чтобы они не искажали данные последующих передач (в разумных пределах).

К счастью среда Arduino IDE содержит очень удобную функцию Serial.parseInt() для определения и извлечения целых чисел. Функция ожидает, пока во входной буфер последовательного порта не поступит нецифровое значение, после чего она преобразовывает все предыдущие цифры в целое число. В нашем случае, первые два значения считываются по обнаружению следующих за ними запятых, а последнее — после обнаружения символа перевода строки.

Чтобы увидеть работу этой функции, загрузите код из листинга 7.5 в свою плату Arduino.

Листинг 7.5. Программа list_control.ino для управления разноцветным светодиодом

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
// Отправляем одновременно несколько значений
// Данные отправляются в следующем формате: <0-100>,<0-100>,<0,100)>\n
// Здесь числа представляют яркость в процентах красного,
// зеленого и синего светодиодов
// Контакты платы Arduino, к которым подключаются катоды светодиодов
const int RED = 11;
const int GREEN = 10;
const int BLUE = 9;
void setup()
{
Serial.begin(9600); // Запускаем последовательный порт
// со скоростью в бодах = 9600
Serial.setTimeout(10); // Таймаут, в течение которого
// ожидать целое число
// Задаем выходной режим работы для контактов управления светодиодами
pinMode(RED, OUTPUT);
pinMode(GREEN, OUTPUT);
pinMode(BLUE, OUTPUT);
// Выключаем светодиоды
// Поскольку светодиод имеет общий анод, для выключения светодиода
// на катод подается сигнал высокого уровня
digitalWrite(RED, HIGH);
digitalWrite(GREEN, HIGH);
digitalWrite(BLUE, HIGH);
}
void loop()
{
// Считываем данные, когда они присутствуют в буфере
if (Serial.available() > 0)
{
// Ожидаем получить три целых числа по последовательному каналу связи
// Функция parseInt() заблокирует исполнение следующего кода
// до тех пора, пока не будет получено действительное целое число
// Целое число определяется по завершающей запятой
// или символу новой строки
// Недействительные символы удаляются перед найденным целым числом,
// а не после него
int val1 = Serial.parseInt();
int val2 = Serial.parseInt();
int val3 = Serial.parseInt();
// После считывания всех целых чисел, очищаем буфер
while (Serial.available())
{
Serial.read();
}
// Ограничиваем полученные значения диапазоном 0–100%
int val1c = constrain(val1,0,100);
int val2c = constrain(val2,0,100);
int val3c = constrain(val3,0,100);
// Сопоставляем аналоговые значения процентным значениям
int rval = map(val1c,0,100,255,0); // Первое действительное
// целое число
int gval = map(val2c,0,100,255,0); // Второе действительное
// целое число
int bval = map(val3c,0,100,255,0); // Третье действительное
// целое число
// Устанавливаем яркость светодиода
analogWrite(RED, rval);
analogWrite(GREEN, gval);
analogWrite(BLUE, bval);
// Выводим на экран использованные значения яркости
Serial.println("Red: " + String(val1c) + "%");
Serial.println("Green: " + String(val2c) + "%");
Serial.println("Blue: " + String(val3c) + "%\n");
}
}

В функции setup() запускаем последовательный интерфейс, а затем с помощью функции setTimeout() задаем величину таймаута, равную 10 мс для функции parseInt(). Если в течение 10 мс по последовательному каналу не будет получен следующий символ, эта функция считает завершенным извлечение текущего целого числа. Это просто мера предосторожности, чтобы не допустить зависания программы в случае отправки неполного списка значений.

Вспомним, что поскольку наш разноцветный светодиод с общим анодом, мы управляем составляющими светодиодами, подключая их катоды на землю. Таким образом, подача высокого уровня на катод светодиода препятствует протеканию тока через него, т. е. выключает светодиод. Подобным образом необходимо инвертировать значения аргументов функции analogWrite(), т. е. значение 255 выключает светодиод, а значение 0 включает его на полную яркость. Код главного цикла loop() ожидает наличия данных в буфере последовательного порта и извлекает из него первые три целых числа. Если буфер содержит какие-либо дополнительные данные, все они удаляются функцией Serial.read(), оставляя буфер пустым. Затем вызывается функция constrain(), ограничивающая все значения диапазоном 0–100. Далее функция map() сопоставляет 0 процентов значению 255, а 100 процентов значению 0, чтобы обеспечить использование функции analogWrite(). Наконец, устанавливаются уровни яркости составляющих цветных светодиодов, значения которых также дополнительно выводятся в окно монитора порта. Затем цикл ожидает поступления следующего набора команд.

Загрузите эту программу в свою плату Arduino и откройте окно монитора последовательного порта. Наберите в строке ввода монитора порта три числа со значениями в диапазоне 0–100, например, 80,10,80, и нажмите кнопку Отправить. Попробуйте немного поэкспериментировать, устанавливая разные цвета для светодиода.

Взаимодействие с компьютерной программой

Со временем вам надоест взаимодействовать с платой Arduino посредством программы монитора порта. К счастью, это не единственная программа, с помощью которой можно обмениваться информацией между компьютером и платой Arduino: практически любой язык программирования содержит библиотеки, позволяющие работать с последовательным портом компьютера. Из наиболее популярных языков программирования, обладающих обширными, хорошо задокументированными библиотеками последовательной связи, можно назвать, например, Python, Java, C, Node.js и другие. Таким образом, если вы знаете какой-либо из этих языков программирования, то сможете разрабатывать на нем программы для двустороннего обмена данными через последовательный интерфейс между компьютером и платой Arduino.

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

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

Установка Processing

Чтобы разрабатывать программы на языке Processing, нам нужно установить этот язык на свой компьютер. Загрузите установочный архив для своей операционной системы со страницы загрузки Processing (https://processing.org/download/) на свой компьютер. Для установки просто распакуйте загруженный архив в какую-либо папку. Запустите приложение Processing, выполнив двойной щелчок мышью по значку приложения. Должно открыться главное окно среды IDE, которое выглядит, как показано на рис. 7.12.

C:\Users\Anansi\AppData\Local\Temp\FineReader10\media\image12.jpeg

Рис. 7.12. Главное окно среды Processing IDE

Управление приложением Processing посредством платы Arduino

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

Создайте новый скетч, вставьте в него код из листинга 7.6 и загрузите его в свою плату Arduino. Эта программа каждые 50 мс отправляет текущее значение величины сигнала с потенциометра на последовательный порт компьютера. Период передачи длительностью 50 мс важен. Если передавать значения с максимально возможной скоростью, то скетч Processing не сможет обрабатывать все поступающие значения, и со временем произойдет переполнение входного буфера последовательного порта компьютера.

Листинг 7.6. Программа Arduino arduino_read_pot.ino для передачи данных на компьютер

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// Передача значения уровня сигнала с потенциометра на компьютер
const int POT=0; // Сигнал с потенциометра подается
// на аналоговый контакт A0
int val; // Переменная для хранения сопоставленного
// значения сигнала с потенциометра
void setup()
 
{
Serial.begin(9600); // Запускаем последовательную передачу данных
}
 
void loop()
{
val = map(analogRead(POT), 0, 1023, 0, 255); // Считываем сигнал
// с потенциометра и сопоставляем его
// значению в диапазоне 0–255
Serial.println(val); // Отправляем значение на компьютер
delay(50); // Выдерживаем паузу, чтобы
// не переполнить входной буфер
}

А теперь следует интересная часть задачи: создание скетча Processing для приема и обработки данных, передаваемых платой Arduino. Программа, приведенная в листинге 7.7, считывает данные из входного буфера последовательного порта компьютера, и изменяет яркость одного из основных цветов созданного им окна на основе значений, получаемых от Arduino. Создайте новый скетч Processing и скопируйте в него код из листинга 7.7. Затем вам нужно будет внести в скопированный код одну важную корректировку. В частности, скетчу Processing необходимо знать, на каком последовательном порту ожидать поступающие от Arduino данные. Это будет тот же самый порт, к которому подключена ваша плата Arduino. Поэтому в листинге 7.7 замените COM3 номером этого последовательного порта. (В системах под Linux и Mac OS обозначение этого порта будет выглядеть наподобие /dev/ttyUSB0). Чтобы избежать ошибок при ручном вводе, номер последовательного порта можно скопировать из среды Arduino IDE.

Листинг 7.7. Скетч processing_display_color.pde для приема данных по последовательному каналу и изменения цвета окна

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// Скетч Processing для приема данных по последовательному каналу
// и изменения цвета окна
// Импортируем и инициализируем библиотеку последовательного порта
import processing.serial.*;
Serial port;
float brightness = 0; // Переменная для хранения значения сигнала
// с потенциометра
 
void setup()
{
size(500,500); // Размер окна
port = new Serial(this, "COM3", 9600); // Инициализируем
// последовательный порт
port.bufferUntil('\n'); // Конфигурируем порт для чтения
// данных до символа новой строки
}
 
void draw()
{
background(0,0,brightness); // Обновляем окно
}
void serialEvent (Serial port)
{
brightness = float(port.readStringUntil('\n')); // Получаем значение
// от Arduino
}

Скопировав код в свой скетч и указав в нем правильный номер последовательного порта, проверьте, что программа монитора порта среды Arduino IDE не открыта. Последовательный порт компьютера может одновременно использоваться только одной программой. Нажмите кнопку Run окна Processing IDE (левая кнопка со значком треугольника в ней, расположенная в верхнем левом углу окна). Откроется небольшое окно (рис. 7.13). Вращайте подключенный к плате Arduino потенциометр; цвет окна должен плавно изменяться с черного на синий.

C:\Users\Anansi\AppData\Local\Temp\FineReader10\media\image13.jpeg

Increasing analog values

Увеличивающиеся аналоговые значения

Рис. 7.13. Пример исполнения скетча Processing для изменения цвета окна

Убедившись, что наш скетч работает должным образом, рассмотрим пошагово его код, чтобы разобраться, как он работает. В отличие от скетчей Arduino, библиотека для работы с последовательным портом не импортируется автоматически в программы на Processing. Эту задачу выполняет оператор import processing.serial.*, а оператор Serial port создает объект последовательной связи, называющийся port.

Подобно скетчам Arduino, программы на Processing содержат функцию setup(), которая исполняется один раз в начале кода. В данном коде Processing эта функция выполняет настройки последовательного порта и посредством команды size(500,500) создает окно размером 500 × 500 пикселов. Оператор port = new Serial(this, “COM3”, 9600) предоставляет Processing всю необходимую информацию для создания экземпляра объекта последовательного порта. При исполнении в этом скетче данный экземпляр порта (называющийся port) будет поддерживать связь через порт COM3 (или через другой конкретный порт) со скоростью 9600 бод. Скорость последовательной передачи данных должна быть одинаковой, как в скетче Arduino, так и в скетче Processing; в противном случае передаваемые символы будут искажаться в процессе приема. Оператор port.bufferUntil(‘\n’) дает указание Processing помещать полученные данные во входной буфер и не предпринимать никаких действий до тех пор, пока не будет получен символ новой строки.

В Processing вместо цикла loop() предусмотрены другие специальные функции, в частности, функции draw() и serialEvent(). Функция draw() Processing похожа на функцию loop() Arduino: она исполняется в бесконечном цикле и обновляет дисплей. Функция background() устанавливает цвет окна, задавая интенсивность составляющих цветов: красного, зеленого и синего (значения которых передаются функции в аргументах). В данном случае выходной сигнал от потенциометра управляет интенсивностью синего цвета, а для красного и зеленого цветов установлены нулевые значения. Можно изменить управляемый потенциометром цвет, просто разместив аргумент brightness в соответствующей позиции списка аргументов. Значения красного, зеленого и синего цветов задаются значениями в диапазоне от 0 до 255, поэтому значения выходного сигнала с потенциометра перед их передачей сопоставляются значениям в этом диапазоне.

Функция serialEvent() вызывается всякий раз, когда выполняется условие bufferUntil(), заданное в функции setup(). Таким условием является получение символа новой строки. Поступающие по последовательному каналу данные считываются в строку оператором port.readStringUntil(‘\n’). Строку можно рассматривать, как массив текстовых символов. Содержимое строки преобразуется в число с плавающей запятой посредством функции float(). Результат этой функции присваивается переменной brightness, в итоге изменяется цвет фона окна приложения.

Чтобы остановить исполнение приложения Processing, нажмите кнопку Stop в окне среды Processing IDE (круглая кнопка со значком квадрата внутри нее, расположенная справа от кнопки Run).

Передача скетчем Processing данных на плату Arduino

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

Создайте в Processing новый скетч, скопируйте в него код, приведенный в листинге 7.8, и запустите программу на исполнение. (Не забудьте изменить номер порта в коде на номер порта, используемый вашей платой Arduino, как это нужно было сделать в предыдущем скетче.)

Листинг 7.8. Скетч processing_control_RGB.pde для управления разноцветным светодиодом на Arduino

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import processing.serial.*; // Импортируем библиотеку serial
PImage img; // Объект изображения
Serial port; // Объект последовательного порта
void setup()
{
size(640,256); // Размер изображения в цветовой модели HSV
img = loadImage("hsv.jpg"); // Загружаем фоновое изображение
port = new Serial(this, "COM3", 9600); // Открываем последовательный
// порт
}
void draw()
{
background(0); // Черный фон
image(img,0,0); // Накладываемое изображение
}
void mousePressed()
{
color c = get(mouseX, mouseY); // Получаем цвет RGB в точке,
// где находится курсор мыши
int r = int(map(red(c), 0, 255, 0, 100));
int g = int(map(green(c), 0, 255, 0, 100));
int b = int(map(blue(c), 0, 255, 0, 100));
String colors = r+","+g+","+b+"\n"; // Извлекаем значения из цвета
print(colors); // Выводим значения цветов
// на экран для целей отладки
port.write(colors); // Отправляем значения
// на плату Arduino
}

Скетчи Processing автоматически загружают сопутствующие файлы из папки data, вложенной в папку скетча. Файл hsv.jpg входит в состав кода для этой главы. Загрузите его и поместите в папку data в папке своего скетча. По умолчанию Processing сохраняет скетчи в папке Processing, находящейся в папке Мои документы текущего пользователя, автоматически создавая папку для скетча с таким же самым названием, как и скетч. Структура папок проекта выглядит подобно показанной на рис. 7.14. Изображение в папке data будет использоваться в качестве цветовой палитры.

C:\Users\Anansi\AppData\Local\Temp\FineReader10\media\image14.jpeg

Рис. 7.14. Структура папок проекта Processing

Запустите скетч Processing на исполнение; отроется окно приложения, заполненное палитрой, как на рис. 7.15.

7

Рис. 7.15. Окно программы Processing для выбора цвета

Щелкайте мышью по разным цветам; в консоли окна среды Processing IDE будут выводиться значения составных цветов выбранного цвета, которые передаются на плату Arduino, вызывая соответствующее изменение цвета подключенного к ней разноцветного светодиода.

Убедившись, что все составляющие проекта функционируют должным образом, рассмотрим код скетча Processing более подробно, чтобы разобраться, как он работает. Как и в предыдущем скетче Processing, импортируется библиотека последовательного интерфейса serial и создается объект последовательного порта с названием port. Кроме этого создается объект типа PImage с названием img, который будет содержать фоновое изображение. В функции setup() выполняется инициализация последовательного порта, устанавливается размер окна приложения, равный размеру выводимого в нем изображения, и осуществляется импорт изображения в объект изображения, с помощью оператора img = loadImage(“hsv.jpg”). Операция импорта предполагает, что файл hsv.jpg находится в папке data текущего скетча Processing.

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

При каждом щелчке мышью по изображению палитры в окне приложения вызывается функция mousePressed(). Цвет пиксела, по которому пришелся щелчок, сохраняется в виде объекта типа color с названием c. Сам цвет извлекается методом get(), который предоставляет приложению информацию, откуда получить значения цвета (в данном случае, координаты X и Y щелчка мыши). Затем вызывается функция map(), которая сопоставляет значения составных цветов процентным значениям, ожидаемых скетчем Arduino. Полученные процентные значения далее конкатенируются в строку, которая отправляется по последовательному каналу на плату Arduino. Для справки эти значения также выводятся в консоли главного окна Processing IDE.

Подключите свою плату Arduino (с подсоединенным к ней разноцветным светодиодом) к компьютеру и загрузите в нее код из листинга 7.5. Запустите на исполнение скетч Processing (предварительно исправив в нем номер последовательного порта должным образом), и щелкайте по разным цветам в палитре в открывшемся окне приложения. Выбранный таким образом цвет должен устанавливаться на разноцветном светодиоде, подключенном к плате Arduino.

Резюме

В этой главе мы узнали следующее:

  • Платы Arduino подключаются к компьютеру через преобразователь USB/RS-232.
  • Для преобразования USB/RS-232 в разных платах Arduino может быть предусмотрена специальная микросхема или реализована встроенная поддержка функциональности USB.
  • Плата Arduino может отправлять данные на компьютер через интерфейс USB.
  • Для форматирования текста, выводимого в окне монитора порта, можно использовать символы новой строки и табуляции.
  • Данные передаются по последовательному каналу в виде символов, которые можно преобразовать в целые числа несколькими способами.
  • По последовательному каналу с компьютера в скетч Arduino можно отправлять наборы целых чисел, разделенных запятыми. В скетче Arduino составляющие числа можно извлечь из набора с помощью специальных функций и использовать их в качестве команд для скетча.
  • По последовательному каналу можно отправлять данные из скетча Arduino в программу на Processing, исполняющуюся на компьютере.
  • Из программы на Processing можно отравлять данные в скетч Arduino для управления подключенными к плате Arduino периферийными устройствами.
Опубликовано

Руководство по сопряжению модулей HC-05 (ver. 4.0 2019[1]) и HC-06 (BT SPP V3.0)

По материалам руководства к набору “Знакомьтесь! Я — Робот. Робототехнический набор + КНИГА

Для сопряжения модулей HC-05 (master-модуль) и HC-06 (slave-модуль) необходимо выполнить следующее:

  1. Установить одинаковую скорость передачи на обоих устройствах.
  2. Убедитесь, что пароли на HC-05 и HC-06 совпадают (при необходимости установить одинаковые)
  3. Определить MAC адрес HC-06
  4. Соединить HC-05 с HC-06
  5. Связать HC-06 с HC-05
  6. Настроить HC-05 на соединение только с сопряженным устройствам HC-06
  7. Соединить HC-05 с HC-06

Прежде чем приступить к сопряжению модулей, опишем их подключение к ПК для последующей настройки и тестирования соединения. Обращаем внимание, что кроме двух сопрягаемых модулей HC-05 и HC-06, нам понадобится дополнительный плата Arduino и модуль HC-05, который поможет определить MAC-адрес HC-06 в каждой паре. В качестве дополнительного модуля мы использовали HC-05 версии 3.0-20170601. Мы указываем конкретные версии модулей, т.к. выяснили, что порядок настройка модулей разных версий может немного отличаться.


Примечание

Также для определения MAC-адреса можно использовать смартфон на базе Android с установленной терминальной программой (например, Serial Bluetooth Terminal или Bluetooth Terminal HC-05)


1. Подключение модулей Bluetooth к ПК

1.1. Подключение модуля HC-06

# Действия Примечание
1 Подключаем Bluetooth HC-06 к преобразователю USB-UART с помощью проводов «мама-мама».

01_BT-USB-UART-HC06

Обратите внимание, контакт «Transmit Data» одного устройства подключен к контакту «Receive Data» другого!
2 Включаем преобразователь USB-UART в разъем USB ПК.
3 Запускаем Arduino IDE.
4 Выбираем порт, к которому подключен USB-UART (Инструменты | Порт)

5 Открываем монитор последовательного порта (Инструменты | Монитор порта). Выбираем настройки:.

Скорость 9600 бод

Режим «Нет конца строки»

6 Для контроля правильности подключения вводим команду

AT

и получаем в ответ отклик от модуля Bluetooth HC-06

OK

1.2. Подключение master-модуля HC-05 (ver. 4.0). Модуль брелка

# Действия Примечание
1 Подключаем Bluetooth HC-05 (ver. 4.0) к преобразователю USB-UART с помощью проводов «мама-мама» как показано на рис ниже.

01b_BT-USB-UART-HC05

Обратите внимание, контакт «Transmit Data» одного устройства подключен к контакту «Receive Data» другого!
2 Включаем преобразователь USB-UART в разъем USB ПК. Светодиод на BT будет медленно мигать. Обращаем внимание, что подача напряжения 3,3 В на контакт EN переводит BT при подключении к ПК в Режим AT-команд #1.

В этом режиме BT работает на скорости 38400 бод и реагирует на определенный набор команд.

3 Запускаем Arduino IDE.
4 Выбираем порт, которому подключен USB-UART (Инструменты | Порт)

5 Открываем монитор последовательного порта (Инструменты | Монитор порта). Настраиваем Arduino.

Скорость 38400 бод

Режим «NL & CR»

6 Для контроля правильности подключения вводим команду

AT

и получаем в ответ отклик от модуля Bluetooth HC-06

OK

1.3. Подключение master-модуля HC-05 (ver. 3.0 20170601). Модуль для определения MAC-адреса HC-06

Этот модуль мы используем, чтобы создать «испытательный стенд» для определения MAC-адреса модулей HC-06, которые мы будем сопрягать с «брелком». Он является «стационарным» устройством для определения адресов всех модулей HC-06 и настраивается только один раз перед началом работы.

1 этап

# Действия Примечание
1. Подключаем Bluetooth HC-05 (ver. 3.0) к плате Arduino Uno, как показано на рисунке.

Подключение HC-05 для для определения MAC-адреса

2. Запускаем Arduino IDE.
3. Откройте в Arduino IDE и загрузите скетч Bluetooth_INQ-1.ino на плату Arduino UNO (см. внизу)..
4 Переведите BT модуль в «первый» режим ввода команд. Для этого

– Отключите провод питания модуля BT (VCC)

– Подайте на пин EN напряжение 3,5В (можно и 5 В) и не отключайте. Напряжение можно подать от платы Arduino Uno (или кантакта 3V3 преобразователя USB-UART/TTL CP2102)

– Снова подключите провод питания модуля BT (VCC)

– Если вы успешно вошли в режим AT-команд #1, то светодиод будет медленно мигать, и вы сможете подключиться к нему со скоростью 38400 бод с помощью загруженного скетча..

BT V3.0 есть два AT-режима, которые «понимают» несколько разные наборы команд.

Вместо подачи на контакт EN напряжения +3,5 В можно при запуске держать нажатой кнопку на модуле BT и затем зафиксировать ее в таком положении, например прищепкой или «крокодилом».

5 Введите следующие AT-команды

AT
AT+UART=115000,0,0
AT+RMAAD
AT+ROLE=1
AT+RESET
AT+CMODE=1
AT+INQM=0,5,5

AT+UART=115000,0,0 устанавливает скорость. 115200.AT+RMAAD очищает все сохраненные соединения

AT+ROLE=1 устанавливает его в качестве ведущего

AT +RESET устройство перезапускается для перехода на master

AT+CMODE=1 принимает все виды устройств

AT+INQM=0,5,5 запрашивает в стандартном режиме, с 5 максимальными подключениями или 5 секундами


Листинг 1. Bluetooth_INQ-1.ino

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <SoftwareSerial.h>
SoftwareSerial BTserial(2, 3); // RX | TX`
<strong>const long baudRate = 38400; </strong>
char c=' ';
boolean NL = true;
void setup()
{
Serial.begin(9600);
Serial.print("Sketch: "); Serial.println(__FILE__);
Serial.print("Uploaded: "); Serial.println(__DATE__);
Serial.println(" ");
BTserial.begin(baudRate);
Serial.print("BTserial started at "); Serial.println(baudRate);
Serial.println(" ");
BTserial.println("AT");
delay(1000);
}
 
void loop()
{
// Read from the Bluetooth module and send to the Arduino Serial Monitor
if (BTserial.available())
{
c = BTserial.read();
Serial.write(c);
}
// Read from the Serial Monitor and send to the Bluetooth module
if (Serial.available())
{
c = Serial.read();
BTserial.write(c);
// Echo the user input to the main window. The "&gt;" character indicates the user entered text.
if (NL) { Serial.print("&gt;"); NL = false; }
Serial.write(c);
if (c==10) { NL = true; }
}
}

2 этап

1 Загрузите на плату Arduino скетч Bluetooth_INQ-2.ino.

По сравнению с Bluetooth_INQ-1.ino в нем изменен только один параметр.

const long baudRate = 115200;

т.к. вы на первом этапе уже задали для модуля BT скорость 115200 бод

2. Переведите BT модуль во «второй» режим ввода команд. Для этого:

  • включите питание (не удерживая кнопку и не подавая питание на пин EN). Светодиод LED на модуле BT начинет быстро мигать.
  • подайте питание +3,5 В на пин EN (или нажмите и удерживайте кнопку). Светодиод будет продолжать быстро мигать, но теперь вы можете подключиться к устройству с настроенной скоростью передачи данных.
Пример

Uploaded: Sep 3 2021
BTserial started at 9600
AT
OK
AT+STATE
+STATE:CONNECTED
OK
AT+INIT
ERROR:(17)
AT+INQ
+INQ:20:4:BDD6A7,1F00,7FFF
+INQ:20:4:BDD6A7,1F00,7FFF

Откройте Монитор последовательного порта и введите команды.

AT
AT+STATE?
AT + RMAAD
AT + ROLE= 1
AT + RESET
AT + RMAAD очищает все ранее сопряженные устройства.
AT + ROLE = 1 переводит HC-05 в режим Master.
AT + RESET сбрасывает HC-05. Иногда это необходимо после смены ролей.

HC-05_to_HC-06-HC-05_Connect01
AT + CMODE = 0
AT + INQM = 0,5,9
AT + INIT
AT + INQ
AT + CMODE = 0 позволяет HC-05 подключаться к любому устройству.
AT + INQM = 0,5,9 устанавливает запрос для поиска до 5 устройств в течение 9 секунд.
AT + INIT инициирует профиль SPP. Если SPP уже активен, вы получите сообщение об ошибке (17), которое можно игнорировать.
AT + INQ выполняет поиск других устройств Bluetooth.
HC-05_to_HC-06-HC-05_Connect02
На экране Монитора порта появится список обнаруженных устройств, например

+ INQ: A854: B2: 3FB035,8043C, 7FFF

Первая группа цифр определяет MAC- адрес найденного HС-06.

На приведенном выше снимке экрана видно, что HC-05 обнаружил 2 устройства Bluetooth.
+ INQ: A854: B2: 3FB035,8043C, 7FFF
+ INQ: 3014: 10: 171179,1F00,7FFFЧтобы узнать имя найденного устройства, мы можем использовать командуAT + RNAME?АдресДля первого устройства это будет команда

AT + RNAME?
A854, B2,3FB035

Для второго устройства

AT + RNAME?
3014,10,171179

Листинг 2. Bluetooth_INQ-2.ino

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include &lt;SoftwareSerial.h&gt;
SoftwareSerial BTserial(2, 3); // RX | TX`
//const long baudRate = 38400;
<strong>const long baudRate = 115200; </strong>
char c=' ';
boolean NL = true;
void setup()
{
Serial.begin(9600);
Serial.print("Sketch: "); Serial.println(__FILE__);
Serial.print("Uploaded: "); Serial.println(__DATE__);
Serial.println(" ");
BTserial.begin(baudRate);
Serial.print("BTserial started at "); Serial.println(baudRate);
Serial.println(" ");
}
void loop()
{
// Read from the Bluetooth module and send to the Arduino Serial Monitor
if (BTserial.available())
{
c = BTserial.read();
Serial.write(c);
}
// Read from the Serial Monitor and send to the Bluetooth module
if (Serial.available())
{
c = Serial.read();
BTserial.write(c);
// Echo the user input to the main window. The "&gt;" character indicates the user entered text.
if (NL) { Serial.print("&gt;"); NL = false; }
Serial.write(c);
if (c==10) { NL = true; }
}
}

2. Настройка модулей

2.1. Установка скорости и пароля HC-06

ATOKAT+VERSIONOKlinvorV1.8AT+BAUD8OK115200

# Действия Примечание
1 Отправляем команду AT, модуль отвечает OK. Все в порядке, можно продолжать.

Должен быть выбран режим ввода Мониторе порта «Нет конца строки»!

AT

OK

2 Изменяем скорость обмена на 115200

Вводим команду AT+BAUD8

AT + BAUD8 устанавливает скорость обмена 115200 для модуля Bluetooth HC-06

AT+VERSIONBT SPP V3.0
AT+BAUD4
OK9600
ATOKAT+VERSIONOKlinvorV1.8AT+BAUD8OK115200
3 Изменяем пароль на 1234

Вводим команду AT+PIN1234

AT+PIN1234

OK1234

Примечание

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

2.2. Определение MAC-адреса HC-06

1 Переведите модуль BT HC-05 (ver.3.0 2017 20170601) во «второй» режим ввода команд. Для этого:

  • включите питание (не удерживая кнопку и не подавая питание на пин EN). Светодиод LED на модуле BT начинает быстро мигать.
  • подайте питание +3,5 В на пин EN (или нажмите и удерживайте кнопку). Светодиод будет продолжать быстро мигать, но теперь вы можете подключиться к устройству с настроенной скоростью передачи данных.
2 Выключите и включите BT HC-06
3 Откройте Монитор порта и запишите MAC-адрес устройств, которые обнаружил ваш «измерительный стенд» на базе bluetooth HC-05 (ver.3.0 2017 20170601)

2.3. Настройка HC-05 (ver. 4.0) и сопряжение BT-модуля

1 этап

1. Подключите BT-модуль в режиме AT-команд #1 (на контакт EN при включении подано напряжение 3,3 В)

AT#1-BT-USB-UART

Если вы успешно вошли в режим AT, то светодиод на BT будет медленно мигать, и вы сможете подключиться к модулю со скоростью 38400 бод с помощью загруженного скетча.
2 Подключитесь к модулю с помощью Монитора порта (или другой терминальной программы, например Termite) на скорости 38400
3 Настройте скорость и пароль модуля HC-05 (ver. 4.0) с помощью следующих AT-команд:

AT
AT+NAME=HC-05-20-4-BDD6A7
AT+PSWD=1234
AT+STATE?
AT + RMAAD
AT + ROLE= 1
AT + CMODE = 1
AT+UART=115200,0,0
AT+RESET

AT + CMODE = 1 — модуль в роли ведущего (HC-05) подключается к любому ведомому Bluetooth устройству. В нашем случае — и к HC-06

В качестве имени HC-05 удобно использовать MAC-адрес подключенного к нему HC-06

2 этап

1 Отключите питание BT HC-06 slave, к которому вы подключаете HC-05
2. Подключите модуль HC-05 к ПК в Режиме AT#2, пошагово как показано на рис. ниже.

AT#2_BT-USB-UART

3 Соедините HC-05 (ver.4.0) с HC-06

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

AT + PAIR = <addr>, <timeout>.

Введите команду

AT + PAIR = 20,4,BDD6A7,9

Если HC-05 не может соединиться с HC-06 в течение 9 секунд, вы получите сообщение об ошибке.

Если соединение прошло успешно, будет выведено «ОК».

MAC-адрес модуля HC-06 мы определили на предыдущем шаге 1.3 (2 этап). В нашем примере это 20,4,BDD6A7
4 Свяжите HC-06 (ver.4.0) с HC-05.

Привязка просходит с помощью команды

AT + BIND = <addr>

В нашем примере это будет команда

AT + BIND = 20,4,BDD6A7

5 Настройте HC-05 на подключение только к сопряженным устройствам.

Делаем это с помощью команды CMODE

AT + CMODE = 0

AT + CMODE = 0 — модуль в роли ведущего подключается только к тому Bluetooth устройству, адрес которого указан командой AT+BIND. В нашем случае HC-05 (ver.4.0) подключается к HC-06
6 Ссылка на HC-06

Используйте команду ссылки

AT + LINK = <addr>

В нашем случае

AT + LINK = 20,4,BDD6A7

Если все в порядке, вы получите ответ «ОК»

 

7
  • Для проверки соединения
  • 1. Подключите питание к вашему модуля BT HC-06. Светодиод на модуле начинает быстро мигать.
  • 2. Подключите питание к вашему модуля BT HC-05. Светодиод на модуле также начинает быстро мигать.
  • 3. Если вы все сделали правильно, то через 5-10 сек индикация изменится.
  • Светодиод на HC-05 (ver.4.0) будет мигать 2 раза подряд каждые 2 секунды.
  • Светодиод на HC-06 должен гореть постоянно.

Поздравляем Вы успешно настроили HC-05 и сопрягли его с HC-06!

Теперь HC-05 будет автоматически подключаться к HC-06 при каждом включении и входить в режим связи.

Если вы хотите продолжить работу в режиме AT, вам необходимо перезагрузить модуль с помощью контакта 34 HIGH или с замкнутым кнопочным переключателем.

3. Проверка работы пары HC05-HC-06

Осталось проверить работоспособность созданной пары Bluetooth модулей.

  1. Отключим питание slave-устройства HC-06.
  2. Отсоединим преобразователь USB-UART от компьютера и отсоединим провод «+3.3V — EN», больше мы в нем не нуждаемся. Master-модуль остается подключенным лишь четырьмя проводами к USB-UART, теперь это законченное устройство. Для удобства можно заменить провода на более короткие, скрепить изолентой.
1. Установите модуль HC-06 в плату LV. Включаем питание. Модуль часто замигал, он готов к новому сеансу связи. index
2 Извлеките и вновь установите «брелок» в USB ПК. Пара секунд, и светодиодная индикация изменилась. Работает!
3 Откройте mBlock и выберите номер порта, к которому подключен HC-05 (ver. 4.0).

Соединить | Serial Port | Номер COM-порта

(в нашем случае это COM13)

4
5 Выберите вкладку simpleBot Programm и нажмите на блок _on board BUZZER. В ответ вы должны услышать звук динамика на плате LV.

Это означате, что все в порядке!

6

Примечание

Обратите внимание, что компьютер вообще ничего не знает о существовании Bluetooth. Для него наш «брелок» — просто COM-порт. Соответственно, мы больше не нуждаемся ни в драйверах Bluetooth, ни в какой бы то ни было его настройке Bluetooth. И потраченное нами время с лихвой будет компенсировано во время занятий.


Примечание

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


HC05-HC06

  1. Речь идет об HC-05 версии 4.0-20190728
Опубликовано

Установка имени, скорости и пароля Bluetooth-модуля HC-06

По материалам руководства к набору “Знакомьтесь! Я — Робот. Робототехнический набор + КНИГА

Вы можете самостоятельно с помощью AT-команд установить для модуля Bluetooth имя, пароль и скорость обмена.

Для этого:

1. Подключите модуль к плате, как показано на рисунке ниже. Включите питание на плате с помощью ползункового переключателя (ON).

2. Откройте среду разработки Arduino IDE.

3. Выберите плату Arduino UNO (Инструменты | Arduino AVR Boards | Arduino Uno) и номер Порта.

4. Загрузите на плату скетч для ввода AT-команд в модуль Bluetooth.


Примечание

В строке mySerial.begin(9600) указана скорость передачи данных, установленная на модуле Bluetooth. Набор комплектуется модулем, для которого уже установлена «правильная» скорость — 115 200 бод. В новом Bluetooth-модуле HC-06 по умолчанию установлена скорость 9600 бод.


Листинг 1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "SoftwareSerial.h" // подключаем библиотеку
SoftwareSerial mySerial(9,10); // указываем пины tx и rx
 
void setup() {
pinMode(9,INPUT);
pinMode(10,OUTPUT);
Serial.begin(9600); // включаем hardware-порт
mySerial.begin(9600); // включаем software-порт
Serial.println("start setting");
}
 
void loop() {
if (mySerial.available()) {
char c = mySerial.read(); // читаем из software-порта
Serial.print(c); // пишем в hardware-порт
}
if (Serial.available()) {
char c = Serial.read(); // читаем из hardware-порта
mySerial.write(c); // пишем в software-порт
}
}

5. Откройте Монитор порта и выберите скорость обмена 9600 бод и режим ввода Нет конца строки.

6. Отправьте на модуль команду AT (без кавычек). Если модуль ответит OK, то всё в порядке, можно продолжать.

7. Для обмена Bluetooth-модуля HC-06 с приложением mBlock следует установить скорость модуля равной 115200 бод. Для этого в верхнем поле Монитора порта введите AT-команду

AT+BAUD8

и нажмите кнопку Отправить.

В ответ вы получите сообщение от модуля Bluetooth:

OK115200

Модуль готов к установке в стандартный разъём на плате робота.

В таблице ниже приведены AT-команды, доступные для модуля HC-06.

Список AT-команд для модуля HC-06

Назначение AT-команда Параметры Ответ от модуля
1 Изменение пароля AT+PIN1234 Здесь 1234 — пароль OK1234
2 Изменение имени AT+NAMEHC-06-1 Здесь HC-06-1 — новый пароль OKsetname
3 Узнать версию модуля AT+VERSION BT SPP V3.0
4 Изменение скорости AT+BAUDx BAUD1 – 1200 бод
BAUD2 – 2400 бод
BAUD3 – 4800 бод
BAUD4 – 9600 бод
BAUD5 – 19200 бод
BAUD6 – 38400 бод
BAUD7 – 57600 бод
BAUD8 – 115200 бод
BAUD9 – 230400 бод
OK1200

OK2400

OK4800

OK9600

OK19200

OK38400

OK57600

OK115200

OK230400

 


Совет

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

Опубликовано

Подключение робота к настольному компьютеру по каналу Bluetooth (Windows 11)

По материалам руководства к набору “Знакомьтесь! Я — Робот. Робототехнический набор + КНИГА

Для подключения робота к настольному персональному компьютеру (ПК) по каналу Bluetooth (без кабеля USB) вам потребуется приобрести внешний Bluetooth-адаптер, который подключается в USB-разъём ПК. В настоящее время в специализированных магазинах представлено большое количество подобных адаптеров. Мы тестировали подключение с недорогим адаптерами в ценовом диапазоне 250–300 руб.

Подключение осуществляется в четыре этапа:

  1. Установка драйверов для Bluetooth-адаптера.
  2. Сопряжение модуля Bluetooth HC-06 и компьютера.
  3. Настройка параметров.
  4. Подключение модуля HC-06 к компьютеру.

1. Установка драйвера адаптера Bluetooth

1. Установите Bluetooth-адаптер в разъём USB на настольном компьютере.

2. Практически во всех случаях для Windows 10/11 драйвер для Bluetooth установится автоматически, и в области уведомлений Windows появится значок Bluetooth .

3. В Диспетчере устройств должны появиться раздел Bluetooth и сам адаптер. Если адаптер не будет опознан и будет отображаться как неизвестное устройство (другое устройство), придётся устанавливать драйверы вручную.

2. Сопряжение модуля Bluetooth HC-06 и ПК

1. Установите модуль HC-06 на плату SPBot и включите питание. Светодиод на Bluetooth начинает часто мигать. Кабель USB подключать не надо.

2. Откроется окно Параметры | Bluetooth и другие устройства. Нажмите кнопку + Добавление Bluetooth или другого устройства.

3. Щёлкните по команде  Bluetooth.

4. Появится список устройств Bluetooth, обнаруженных компьютером поблизости. Среди обнаруженных устройств вы увидите и ваш модуль HC-06. Выберите его…

5. Введите пароль (обычно для HC-06 это 1234 или 0000) и нажмите кнопку Подключиться.

6. Появится сообщение «Ваше устройство готово к использованию!». Нажмите кнопку Готово внизу окна Добавить устройство. Светодиод на модуле Bluetooth HC-06 будет продолжать быстро мигать.

3. Настройка параметров

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

Установите флажки, как показано на рисунке справа.

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

Знание номеров портов вам понадобится, чтобы установить скорость 115 200 бод. Именно на этой скорости идёт обмен информацией с mBlock.

Примечание

По умолчанию для HC-06 установлена скорость 9600 бод. Для набора скорость увеличена до 115 200 бод с помощью AT-команд.

3. Откройте Диспетчер устройств.

4. В окне Диспетчер устройств в группе Порты (COM и LPT) вы увидите порты, выделенные для модуля HC-06. В нашем случае это COM32 и COM33.

5. Дважды щёлкните мышью по названию порта, в открывшемся окне Свойства выберите вкладку Параметры порта и установите параметр Бит в секунду в значение 115200.

Выполните эти действия для обоих портов (в нашем случае для COM32 и COM33).

4. Подключение HC-06 к компьютеру с помощью mBlock

1. В меню программы mBlock выберите команды Соединить | Блютус | Discover.

2. Компьютер начнёт поиск устройств Bluetooth, расположенных поблизости.

3. По окончании поиска на экране появится окно со списком всех обнаруженных устройств Bluetooth с указанием их имени и MAC-адреса. Выберите из списка наш модуль HC-06-20190901.

4. Появится окно Bluetooth Connected, и в течение 15–20 секунд будет осуществляться подключение HC-06 к роботу SPBot. По окончании соединения светодиод на модуле Bluetooth перестанет мигать. Закройте окно Bluetooth Connected.

5. Всё готово! Модуль HC-06 подключен к программе mBlock.

При повторном запуске приложения mBlock наш модуль уже будет прописан в меню программы Соединить | Блютус. Выберите HC-06-20190901 (00:21:06:08:51:05), и через 15–20 секунд модуль будет подключен.

Опубликовано

Подключение модуля Bluetooth HC-06 к ноутбуку (Windows 10/11)

По материалам руководства к набору “Знакомьтесь! Я — Робот. Робототехнический набор + КНИГА

Все современные ноутбуки оборудованы модулем Bluetooth (BT). Это позволяет подключиться к роботу по каналу BT без кабеля USB. Ниже это показано на примере ОС Windows 11.

Подключение осуществляется в три этапа:

  1. Сопряжение модуля Bluetooth HC-06 и ноутбука.
  2. Настройка COM-порта ноутбука на скорость 115 200 бод.
  3. Подключение модуля HC-06 к ноутбуку.

1. Сопряжение модуля Bluetooth HC-06 и ноутбука в Windows 11

1. Установите модуль HC-06 на плату SPBot и включите питание. Светодиод на Bluetooth начинает часто мигать. Кабель USB подключать не надо.

2. Откройте окно Параметры | Bluetooth и устройства. Нажмите на кнопку + Добавить устройство.

3. Щёлкните по команде  Bluetooth.

4. Появится список устройств Bluetooth, обнаруженных ноутбуком поблизости. Среди обнаруженных устройств вы увидите и ваш модуль HC-06. Выберите его…

5. Введите пароль (обычно для HC-06 это 1234 или 0000) и нажмите кнопку Подключиться.

6. Появится сообщение «Ваше устройство готово к использованию!». Нажмите кнопку Готово внизу окна Добавить устройство. Светодиод на модуле Bluetooth HC-06 будет продолжать быстро мигать.

7. Окно Добавить устройство закроется, и вы увидите, что ваш модуль BT HC-06 появился в списке устройств Bluetooth, которые сопряжены с вашим компьютером.

2. Настройка для COM-портов скорости на 115 200 бод

1. Прежде всего необходимо определить номер COM-порта, к которому подключен модуль HC-06. Для этого выберите команду Параметры | Bluetooth и устройства | Устройства | Дополнительные параметры Bluetooth.

2. В окне Параметры Bluetooth щёлкните по вкладке COM-порты, и вы увидите номера COM-портов, выделенных на ноутбуке для вашего HC-06.

3. Откройте Диспетчер устройств. Для этого щёлкните правой кнопкой мыши по логотипу Windows (меню Пуск) или нажмите сочетание клавиш <Win>+<X> и выберите Диспетчер устройств из списка параметров.

4. В окне Диспетчер устройств вы увидите в группе Порты (COM и LPT) порты, выделенные для модуля HC-06. В нашем случае это COM3 и COM4.

5. Дважды щёлкните мышью по названию порта, в открывшемся окне Свойства выберите вкладку Параметры порта и установите параметр Бит в секунду в значение 115200. Выполните эти действия для обоих портов (в нашем случае для COM3 и COM4).

3. Подключение HC-06 к ноутбуку с помощью mBlock

1. В верхнем меню программы mBlock выберите команды Соединить | Блютус | Discover.

2. Ноутбук начнёт поиск устройств Bluetooth, расположенных поблизости.

3. По окончании поиска на экране появится окно со списком всех обнаруженных устройств Bluetooth с указанием их имени и MAC-адреса. Выберите из списка наш модуль HC-06.

4. Появится окно Bluetooth Connected, и в течение 15–20 секунд будет осуществлять подключение HC-06 к роботу SPBot. По окончании соединения светодиод на модуле Bluetooth перестанет мигать. Закройте окно Bluetooth Connected.

5. Всё готово! Модуль HC-06 подключен к программе mBlock.

При повторном запуске приложения mBlock наш модуль уже будет прописан в меню программы Соединить | Блютус. Выберите HC-06 (00:20:04:BD:D3:A9), и через 15–20 секунд модуль будет подключен.

Опубликовано

Ходовая часть мобильных роботов

По материалам книги “Мобильные роботы на базе Arduino, 3-е изд.“, 3-е изд. (автор Михаил Момот) (глава 5. Ходовая часть)

Мобильные роботы на базе Arduino, 3-е изд.

Выбор двигателей

Итак, когда структура ходовой части выбрана, следует определить, какие двигатели будет использовать наш робот. На выбор: коллекторные двигатели постоянного тока с редуктором, сервопривод MG995 3600 постоянного вращения (скорость вращения задается сигналом на входе управления), шаговые двигатели. Их параметры представлены в табл. 5.1.

Таблица 5.1. Сравнительные параметры различных типов двигателей

Сравниваемые параметры Двигатель
постоянного тока с понижающим редуктором
Сервопривод MG995 3600 Шаговый
двигатель
Количество задействованных портов микроконтроллера для управления 2–3 1 2–3
Скорость реакции на поступившую команду, сек (чем больше, тем хуже) ~1/100 ~1/50 ~1/1000
Скорость вращения (с учетом понижающего редуктора), об/мин 10–240 1–60 0,1–300
Стоимость (за единицу принята стоимость двигателя постоянного тока с редуктором), сравниваются двигатели, равные по мощности 1 4 6
Минимальное количество портов управления ходовой частью для проекта колесного робота с двумя ведущими колесами 4 2 4+1
дополнительный контакт требуется для отключения всех моторов

Что мы здесь видим?

  • Коллекторные моторы с пластиковым редуктором — самые простые и самые дешевые.
  • Сервопривод MG995 3600 — наиболее экономичный по ресурсам контроллера Arduino. При его использовании хорошо регулируется скорость движения робота, если скорость колес нужно менять постоянно и держать в заданных пределах. Скорость оборота колеса, вращаемого сервоприводом, зависит только от установленного на порту управления значения сигнала, и при увеличении сопротивления (когда, например, робот движется в гору) меняется слабо, в то время как двигатель постоянного тока без обратной связи по скорости изменяет скорость своего вращения в зависимости от нагрузки.
  • Шаговый двигатель следует применять там, где нужна точность, и если это необходимо, обратитесь к книге «Мобильные роботы на базе ESP32 в среде Arduino IDE»[1], там как раз используются шаговые моторы в качестве ходовой части. Шаговым двигателем также можно держать постоянную скорость.

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

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

Драйверы двигателей

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

Таблица 5.2. Специализированные микросхемы драйверов двигателей (на платах)

Характеристики TB6612FNG
(рис. 5.6)
MX1508
(рис. 5.7)
L298N
(рис. 5.8)
Максимальный ток на канал, А 1,2 1,2 2
Количество подключаемых коллектроных моторов 2 2 2
Максимальное напряжение питания, В 13,5 10 35
Минимальное напряжение питания, В 2,5 2,5 6
Встроенная диодная защита от паразитных токов Есть Есть Есть

Все три платы драйверов подходят для управления направлением вращения и мощностью коллекторных двигателей постоянного тока. Они также могут применяться и для управления шаговыми двигателями.

Драйверы_2

Рис. 5.6. Плата драйвера TB6612FNG

Драйверы TB6612 и L298N имеют отдельные входы управления мощностью моторов (PWMA–PWMB и ENA–ENB соответственно), но если на эти входы подать высокое логическое напряжение (5 вольт), то управление драйверами TB6612, L298N и MX1508 будет осуществляться схоже по входам AIN1–AIN2 и BIN1–BIN2 — для TB6612, а также IN1–IN2 и IN3–IN4 — для L298N и MX1508. Именно такие режимы работы мы и будем использовать, чтобы наша программа вела себя одинаково и независимо от того, какой драйвер моторов вы решили использовать в своей модели.

5

Рис. 5.7. Плата драйвера MX1508

5

Рис. 5.8. Плата драйвера L298N

 

В табл. 5.3 приведены значения сигналов на входах и показана соответствующая реакция двигателя.

Таблица 5.3. Значения сигналов на входах и соответствующая реакция двигателя

IN1 (AIN1) IN2 (AIN2) Мотор A (направление вращения условное)
0 0 Отключен
0 1 Вал вращается против часовой стрелки
1 0 Вал вращается по часовой стрелке
1 1 Отключен

Таблица 5.3 (окончание)

IN3 (BIN1) IN4 (BIN2) Мотор B (направление вращения условное)
0 0 Отключен
0 1 Вал вращается против часовой стрелки
1 0 Вал вращается по часовой стрелке
1 1 Отключен

 

Сборка макета

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

Управляем двигателем без Arduino

Возьмем драйвер L298N (или MX1508), двигатели постоянного тока, аккумуляторы с боксом, провода, керамические конденсаторы 0,1 мкФ (маркируются числом 104) — они нужны для исключения электромагнитных наводок, которые возникают при работе двигателей и могут стать причиной сбоев в работе электроники робота, и паяльник. При пайке легко испортить поверхность стола, поэтому используйте фанеру или постелите на место работы с паяльником пару листов бумаги.

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

2017-01-28 12-10-46

Рис. 5.9. Двигатель постоянного тока, керамический конденсатор и провода

Обмотаем ножки конденсатора вокруг залуженных кончиков проводов, как показано на рис. 5.10, — теперь ножки конденсатора хорошо держатся на проводе, и их легко можно припаять (рис. 5.11).

2017-01-28 12-13-24 2017-01-28 12-14-34 (2)
Рис. 5.10. Ножки конденсатора обмотаны
вокруг оголенных концов провода
Рис. 5.11. Пайка конденсатора

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

Готовый к работе двигатель показан на рис. 5.13.

2017-01-28 12-16-20

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

5

Рис. 5.13. Двигатель с припаянными проводами и конденсатором

Картинка мотор+аккумул_bb

Рис. 5.14. Схема тестирования двигателя

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

Теперь, когда двигатели готовы, приступим к сборке схемы, изображенной на рис. 5.15. Перемычки на контактах ENA и ENB драйвера не убираем!

Картинка драйвер +мотор_стенд_bb

Рис. 5.15. Схема управления двигателями без контроллера Arduino

Двигатели подключаются к драйверу через винтовые зажимы, также подключается и аккумуляторный бокс, для контактов IN1–IN4 драйвера L298N лучше использовать провода с готовыми клеммами Dupont (см. главу 2), а для MX1508 требуется пайка.

Подключая 5 вольт к различным контактам IN1–IN4, можно проследить, как изменяется вращение двигателей M1 и M2 (используйте данные табл. 5.4).

Подсказка

Контакты IN1 и IN2 отвечают за работу двигателя М1, а IN3 и IN4 — двигателя М2.

Широтно-импульсная модуляция

Проведем наглядный эксперимент: отключим контакт IN1 мотора М1, а контакт IN2 будем руками быстро подключать к напряжению 5 вольт и отключать от него, — мотор станет вращаться с заметными рывками.

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

Мы в наших проектах будем использовать шкалу мощности от 0 до 255, где число — это относительная длительность импульса включения мотора за период (рис. 5.16). А чтобы иметь возможность изменять направление вращения, задействуем и отрицательную шкалу: –255…0…255, при этом изменяя вход драйвера, на который подается сигнал (при положительном вращении — на IN1, при отрицательном — на IN2 для мотора М1 и IN3/IN4 — для мотора М2).

рис 5_14

Рис. 5.16. Принцип работы ШИМ

Подключаем контроллер Arduino

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

Добавим к собранной схеме контроллер Arduino и научим его управлять двига-
телями. Дополнительно нам потребуется несколько проводов с клеммами Dupont.

l298nMP

Рис. 5.17. Схема управления двигателями для драйверов L298N и MX1508

На рис. 5.17 показана схема подключения драйверов L298N и MX1508, на рис. 5.18 и 5.19 — схема подключения TB6612FNG (она несколько сложнее).

Дело в том, что подключение драйвера TB6612FNG потребует немного больше соединений, т. к. нужно подать логическую единицу (5 вольт от Arduino) на контакты VCC, PWMA, PWMB и STBY, в остальном же схема схожа с подключением L298N и MX1508. Чтобы исключить на рисунках пересечение соединений и неверную их трактовку, схема подключения драйвера TB6612FNG разбита на две части: подключение силовой части (рис. 5.18) и логической части (рис. 5.19).

Удобно при этом задействовать дополнительные платы, которые упрощают реализацию соединений, — например Arduino Sensor shield V5.0 (для Arduino Uno) или NANO V3.0 Shield (для Arduino Nano).

Далее приведены примеры управления вращением двигателей при помощи программы, работающей на контроллерах Arduino UNO, Arduino Nano и Arduino Pro Mini.

23_tb6612fngPower_МП

Рис. 5.18. Схема управления двигателями для драйвера TB6612FNG (силовая часть)

23_tb6612fngCom_МП

Рис. 5.19. Схема управления двигателями для драйвера TB6612FNG (логическая часть)

Подключаем библиотеку mobrob3.zip и пишем тестовую программу

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


Электронный архив

Электронный архив, включающий библиотеку mobrob3.zip, можно скачать с сервера издательства «БХВ» по ссылке https://zip.bhv.ru/9785977517034.zip или со страницы книги на сайте https://bhv.ru/ (см. приложение).


Перед использованием библиотеку mobrob3.zip нужно добавить в Arduino IDE стандартным способом: Скетч | Подключить библиотеку | Добавить .ZIP библиотеку, и выбрать с диска файл mobrob3.zip. В результате все модули и примеры из этой книги (по главам) станут доступны в Arduino IDE. Для управления моторами в библиотеку включен модуль mobrob3xmotor.h, в котором учтены некоторые особенности управления моторами для генерации ШИМ, заключающиеся в том, что в качестве левых моторов будущего робота можно использовать только контакты GPIO 2 и 3 (менять их местами можно), а для правого мотора — только 4 и 5 (их также можно менять местами, чтобы добиться вращения в нужную сторону). Подобное ограничение связано с тем, что генерация ШИМ возможна только на контактах 3 и 5 GPIO.

Логика работы тестовой программы управления двигателями (листинг 5.1) следующая.

В бесконечном цикле:

  1. Отключаем оба двигателя.
  2. Ждем 1 секунду.
  3. Подключаем двигатель 1 на полную мощность по часовой стрелке.
  4. Ждем 1 секунду.
  5. Отключаем двигатель 1.
  6. Ждем 1 секунду.
  7. Подключаем двигатель 1 на полную мощность против часовой стрелки.
  8. Ждем 1 секунду.
  9. Отключаем двигатель 1.
  10. Возвращаемся на пункт 1.

Самостоятельно измените эту программу для управления двигателем 2.

Листинг 5.1. Тестовая программа управления двигателями

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// Контакты управления левого мотора только 2 и 3.
# define GPIO_1F 2
# define GPIO_1B 3
// Контакты управления правого мотора только 4 и 5.
# define GPIO_2F 4
# define GPIO_2B 5
 
// Подключаем библиотеку управления моторами.
#include &lt; mobrob3xmotor.h&gt;
void setup()
{
// Вызываем функцию инициализации моторов.
motor_setup();
}
 
// Основная программа.
void loop()
{
motors_power(0, 0); // Отключены оба.
delay(1000);
motors_power(255, 0); // Включен мотор 1 +
delay(1000);
motors_power(0, 0); // Отключены оба.
delay(1000);
motors_power(-255, 0); // Включен мотор 1 -
delay(1000);
// Проделайте те же операции для двигателя 2 самостоятельно.
// ....
}

Добавляем регулирование на основе ШИМ

Рассмотренная и подключенная в предыдущем разделе библиотека mobrob3.zip уже содержит модуль mobrob3xmotor.h, который может регулировать мощность моторов при помощи ШИМ.

Напомню, что значения ШИМ в Arduino могут изменяться от 0 до 255. На практике вал двигателя не сразу начнет вращаться — сначала (при малых значениях) двигатель станет гудеть и лишь по достижении определенного значения ШИМ начнет медленно увеличивать обороты, что связано с недостатком мощности для компенсации сил трения.

Тестовая программа управления двигателями с регуляцией на основе ШИМ

Логика работы этой тестовой программы (листинг 5.2) следующая.

В бесконечном цикле:

  1. Отключаем оба двигателя.
  2. Ждем 1 секунду.
  3. Далее в цикле через 100 миллисекунд увеличиваем мощность от 70 до 255 для обоих моторов.
  4. Далее в цикле через 100 миллисекунд уменьшаем мощность от 255 до 70 для обоих моторов.
  5. Возвращаемся к пункту 1.

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

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

Листинг 5.2. Тестовая программа управления двигателями с регуляцией на основе ШИМ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// Зададим номера контактов управления моторами.
// Контакты управления левого мотора только 2 и 3.
# define GPIO_1F 2
# define GPIO_1B 3
// Контакты управления правого мотора только 4 и 5.
# define GPIO_2F 4
# define GPIO_2B 5
// Подключаем библиотеку управления моторами.
#include &lt;mobrob3xmotor.h&gt;
void setup()
{
// Вызываем функцию инициализации моторов.
motor_setup();
}
//=================================================================
// Основная программа.
void loop()
{
motors_power(0, 0);
delay(500);
for (int i = 70; i &lt; 255; i++)
{
motors_power(i, i);
delay(100);
}
for (int i = 255; i &gt; 70; i--)
{
motors_power(i, i);
delay(100);
}
}

Выводы

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

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

  1. См. https://bhv.ru/product/mobilnye-roboty-na-baze-esp32-v-srede-arduino-ide/.
Опубликовано

Стабилизация электропитания

По материалам книги М.Момота “Мобильные роботы на базе Arduino, 3-е изд.” (глава 3. «Электропитание»)

Мобильные роботы на базе Arduino, 3-е изд.

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

рис3_3
Рис. 3.3. Бокс для элементов питания

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

Стабилизация напряжения

Самым доступным понижающим стабилизатором напряжения питания является микросхема КР142ЕН5А или ее аналог L7805CV. Схема подключения L7805CV показана на рис. 3.4: на вход поступает нестабилизированное напряжение 7 В или выше, а на выходе получаем стабильное постоянное напряжение 5 В.

а

 

б

Рис. 3.4. Стабилизация питания при помощи микросхемы L7805CV: а — схема соединений; б — электрическая схема

Существуют подобные стабилизаторы и на другое напряжение, а также настраиваемые стабилизаторы. Платы Arduino UNO и Nano содержат как минимум один стабилизатор напряжения на 5 и на 3,3 В.

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

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

рис3_5импульсный понижающий

Рис. 3.5. Понижающий импульсный стабилизатор на основе микросхемы LM2596

Существуют также повышающие импульсные стабилизаторы. Они могут, имея на входе 3,7 В, преобразовать это напряжение в нужные для питания электроники робота повышенные значения. Визуально они мало отличаются от понижающих стабилизаторов напряжения, но работают на микросхеме XL6009 (рис. 3.6).

Хорошо зарекомендовал себя в работе повышающий импульсный стабилизатор со входным напряжением от 2 В и стабилизированным выходным напряжением 5,1–5,2 В (рис. 3.7). Такие стабилизаторы удобны, если требуется сэкономить на массе элементов питания и размерах создаваемого прибора, применяя низковольтную батарею, — например, один литий-ионный аккумулятор на 3,7 В. Таким образом, если для электропитания нашей схемы необходимо 5 В и небольшой ток (не более 0,5 А), можно получить довольно компактное устройство.

рис3_6 повышающий Повышающий стабилизатор 5_2в
Рис. 3.6. Повышающий импульсный стабилизатор на микросхеме XL6009 Рис. 3.7. Повышающий импульсный стабилизатор на заданное
напряжение 5,2 В

 

Стабилизация электрического тока

В некоторых случаях может потребоваться получить не стабильное напряжение, а стабильный ток, — например, при подключении светодиодов. В этом случае используются стабилизаторы тока. Стабилизатор тока несложно построить на микросхеме LM317T (рис. 3.8). Значение стабилизируемого тока зависит от величины сопротивления R1.

C:\Users\Momot_1\YandexDisk\Книга про простых роботов\Book_5\Работа\Отработано\pic\03\03-08.jpg

Рис. 3.8. Источник тока на базе LM317T

 

Защита от короткого замыкания по питанию

Возьмите солевую или алкалиновую батарейку формата ААА и на небольшое время (4–5 секунд) замкните проводом положительный и отрицательный контакт батареи. Батарея начнет нагреваться и через весьма непродолжительное время выйдет из строя — это результат короткого замыкания по питанию. Мы выбрали для эксперимента именно батарейку формата ААА не случайно, дело в том, что она не рассчитана на генерацию тока, величина которого приведет к серьезным последствиям, — например, к возгоранию или расплавлению изоляции провода. Если подобное сделать с Li-ion аккумулятором, то вполне возможен настоящий пожар.
У меня лично дело доходило до расплавления изоляции проводов и бокса, в котором находились аккумуляторы, при этом стальные контакты аккумуляторов аккумуляторного отсека накалялись докрасна, что может стать причиной пожара или серьезных ожогов.

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

КЗ присутствует.png

Рис. 3.10. Короткое замыкание в электрической цепи

Как не допустить короткого замыкания?

  1. Профилактика.

Мы уже научились пользоваться мультиметром. Вынем из робота батарею/
аккумулятор и включим мультиметр в режим тестирования наличия соединения (режим ). Если у робота есть выключатель, установим его в положение «Включено». Затем присоединим одну измерительную клемму к положительному контакту питания робота, а вторую — к отрицательному контакту (рис. 3.11). Прибор может сразу показать наличие прямого соединения, а через несколько секунд начать показывать высокое сопротивление, — это нормально и означает, что заряжаются конденсаторы внутри робота. Если же и через несколько секунд наличие прямого соединения не ушло, значит, в цепи вашего робота имеется короткое замыкание, и устанавливать в него элементы питания нельзя до устранения аварии.

Профилактика КЗ_.png

Рис. 3.11. Схема замера мультиметром для профилактики короткого замыкания

предохранитель.png

Рис. 3.12. Установка предохранителя в цепь питания

  1. Предохранители.

В цепь питания, например до выключателя питания, добавляем предохранитель (рис. 3.12). Задача предохранителя — разорвать электрическую цепь, если ток через предохранитель превысит установленный для конкретного предохранителя лимит. Существуют плавкие предохранители и восстанавливающиеся (многоразовые). Плавкий предохранитель при протекании через него высокого тока плавится и размыкает цепь, восстанавливающийся предохранитель при протекании через него тока больше установленного значения нагревается и перестает проводить ток.

Защита от неверной установки элементов питания (переполюсовки)

На предшествующих рисунках в качестве нагрузки (потребителя) для блока питания мы приводили мотор постоянного тока — для него изменение направления
тока в цепи питания не страшно, вал мотора просто начнет вращаться в другую сторону. Но есть потребители электричества, неправильное подключение которых приведет к выходу их из строя, — к ним относятся электронные схемы, микро­контроллеры, умные датчики. Для защиты их от неправильного подключения можно установить диод или диод Шоттки (рис. 3.13). Диод проводит электрический ток только в одну сторону, благодаря чему неправильное подключение аккумуляторов приведет к тому, что устройство не включится, — на него просто не будет подано напряжение.

На диоде при нормальном включении происходит небольшое падение напряжения: для обычного диода примерно 0,5–0,6 вольта, для диода Шоттки — примерно 0,2 вольта. Из-за этого напряжение, подаваемое на вашу схему, будет немного меньше того, что выходит от источника питания.

Защита от переполюсовки_МП.png

Рис. 3.13. Схема с защитой от переполюсовки питания

Зарядка аккумуляторов на примере Li-ion и Li-pol

Разберемся, каким образом производится зарядка аккумуляторов, на примере Li-ion-аккумулятора формата 18650 с номинальным напряжением 3,7 вольта (мы планируем использовать для питания нашего робота именно их).

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

На рис. 3.14 представлено зарядное устройство на основе модуля TP4056 для аккумуляторов формата 18650 с номинальным напряжением 3,7 В. Такой зарядкой, если ее припаять к аккумуляторному боксу, можно заряжать аккумуляторы поочередно. Модуль подключается к обычному зарядному устройству от смартфонов с разъ-
емом micro-USB или USB Type-C (в зависимости от того, какая это версия модуля), а к его контактам B+ и B– подключается заряжаемый аккумулятор. Если к контактам OUT+ и OUT– подключить нагрузку, модуль дополнительно защитит аккумулятор от глубокого разряда (отключит аккумулятор заранее). Когда идет заряд, на модуле горит красный светодиод, после прекращении заряда загорается синий.

Зарядное устройство на основе модуля TP4056 для одного аккумулятора

Рис. 3.14. Зарядное устройство на основе модуля TP4056 для одного аккумулятора

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

Зарядное утройство для пары последовательно соединенных аккумуляторов 18650

Рис. 3.15. Зарядное утройство для пары последовательно соединенных аккумуляторов 18650

Выводы

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

В следующей главе мы обратимся к основам программирования контроллера Arduino, на котором строится система принятия решений робота, — его «компьютера».