К книге
Цифровая электроника для начинающихСтраница 7
44%
Страница 7
7

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

Самостоятельная работа #1: сделать “вечернее освещение” с помощью Arduino и таймера, например, настроить зажигание светодиода с 23 вечера до 7 часов утра.

Самостоятельная работа #2: сделать “настольный будильник”, подключив к Arduino модуль RTC, “пищалку” и кнопку. Задать в коде срабатывание будильника в определенный час и минуту, кнопку использовать для остановки звучания.

2.11 Подключаем ультразвуковой дальномер HC-SR04

Еще одним популярным в любительской электронике прибором, является дальномер HC-SR04. Это недорогой прибор, стоимостью 2-4$ на eBay, позволяющий измерять расстояние до препятствий с помощью ультразвука.

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

Принцип использования HC-SR04 показан на рисунке.

Когда активируется запускающий сигнал (trigger signal), устройство посылает серию ультразвуковых импульсов, и в завершении формирует ответный сигнал, длительность которого пропорциональна расстоянию. Таким образом, для подключения достаточно всего двух проводов, для выходного и для входного импульсов.

Использование датчика весьма просто - для Arduino уже написаны готовые библиотеки, позволяющие получить расстояние. Вначале нужно скачать библиотеку по адресу https://github.com/JRodrigoTech/Ultrasonic-HC-SR04, ее необходимо распаковать в уже знакомую нам папку Документы\Arduino\libraries.

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

#include <Ultrasonic.h>

Ultrasonic ultrasonic(4,2); // (Trig,Echo)

void setup() {

Serial.begin(9600);

}

void loop()

{

Serial.print(ultrasonic.Ranging(CM));

Serial.println(" cm" );

delay(100);

}

Как можно видеть, создается объект Ultrasonic, в качестве параметров которого указываются номера выводов. Дальше функция ultrasonic.Ranging(CM) делает всю работу.

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

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

2.12 Подключаем плату управления моторами

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

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

Для примера рассмотрим драйвер на микросхеме L298N, его можно купить в виде готовой платы ценой 2-5$.

Плата имеет вполне неплохие для своей цены возможности. Левые и правые разъемы используются для подключения моторов. Плата также имеет стабилизатор напряжения, что позволяет использовать для питания моторов 12В, а выход 5В использовать для питания Arduino.

Описание комбинаций управляющих импульсов приведено в документации на микросхему (С и D - входы каждого канала).

Соответственно, линейка из 6 выводов имеет 2 переключателя ENA ENB (Enable A, B) для активации левого и правого моторов, 4 вывода IN1, IN2, IN3, IN4 используются для подачи управляющих импульсов.

Пример кода управления моторами показан ниже. Здесь входы EN1, EN2 используются для управления скоростью моторов уже рассмотренным ранее методом широтно-импульсной модуляции.

// Моторы M1, М2

int enA = 10, in1 = 9, in2 = 8;

int enB = 5, in3 = 7, in4 = 6;

void setup() {

pinMode(enA, OUTPUT);

pinMode(enB, OUTPUT);

pinMode(in1, OUTPUT);

pinMode(in2, OUTPUT);

pinMode(in3, OUTPUT);

pinMode(in4, OUTPUT);

}

void runMotors() {

// Запустить мотор А

digitalWrite(in1, HIGH);

digitalWrite(in2, LOW);

// Установить скорость 200 (диапазон 0~255)

analogWrite(enA, 200);

// Запустить мотор B

digitalWrite(in3, HIGH);

digitalWrite(in4, LOW);

// Установить скорость 200 (диапазон 0~255)

analogWrite(enB, 200);

delay(2000);

// Изменить направление

digitalWrite(in1, LOW);

digitalWrite(in2, HIGH);

digitalWrite(in3, LOW);

digitalWrite(in4, HIGH);

delay(2000);

// Остановить моторы

digitalWrite(in1, LOW);

digitalWrite(in2, LOW);

digitalWrite(in3, LOW);

digitalWrite(in4, LOW);

}

void loop() {

runMotors();

delay(5000);

}

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

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

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

Стоимость такой платформы составляет от 20$ до 100$ в зависимости от размера, мощности моторов и качества изготовления.

2.13 Multiwii - делаем квадрокоптер

Платы Arduino имеют весьма неплохие возможности и вычислительную мощность, что позволяет не только мигать светодиодом, но даже сделать вполне функциональный дрон, способный летать в разных режимах, делать фотосъемку местности, удерживать высоту полета и пр. Для этого используется популярный проект с открытым исходным кодом Multiwii. Его название произошло от давно популярного контроллера Wii Nunchuck, имеющего внутри гироскоп и акселерометр. Соединив его с Arduino и платой управления моторами, можно было получить вполне летающий квадрокоптер. Позже появились уже готовые платы со всеми датчиками на борту.

Чтобы собрать квадрокоптер на базе Multiwii, потребуется:

- Специальная плата Multiwii, имеющая “на борту” процессор и набор датчиков.

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

- 4 бесколлекторных мотора и 4 регулятора скорости, выводы которых подключаются к площадкам D12, D3, D9, D10.

- 4 пропеллера разного направления вращения.

- Литий-полимерный аккумулятор для авиамоделей (они способны отдавать большие токи, в отличие например, от телефонных)

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

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

Готовый самодельный квадрокоптер может выглядеть примерно так:

Все детали (раму, пропеллеры, моторы, контроллер) можно приобрести на специализированных сайтах RC-моделей, например на www.hobbyking.com.

Когда квадрокоптер собран, плату необходимо подключить к компьютеру. С помощью Arduino IDE в нее необходимо загрузить программу управления, скачать которую можно по адресу https://github.com/multiwii/multiwii-firmware.

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

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

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

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

2.14 Выходим в интернет: Serial to WiFi

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

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

Подключение платы к Arduino весьма несложно, достаточно 4х проводов. Для использования платы есть готовая библиотека ESP8266WiFi, найти которую можно на сайте https://github.com/esp8266/Arduino/tree/master/libraries/ESP8266WiFi.

Пример кода для подключения к домашней сети WiFi показан ниже.

#include <ESP8266WiFi.h>

const char* ssid = "MYFI_HOME";

const char* password = "12345678;

void setup() {

Serial.begin(115200);

delay(10);

Serial.print("Connecting to ");

Serial.println(ssid);

WiFi.mode(WIFI_STA);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {

delay(500);

Serial.print(".");

}

Serial.println("");

Serial.println("WiFi connected");

Serial.println("IP address: ");

Serial.println(WiFi.localIP());

}

void loop() {

...

}

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

Интересно заметить, что появление модулей ESP, цена которых составляет всего лишь 1-5$ произвели настоящую “революцию” в сфере любительской электроники. Теперь практически любой модуль получил возможность не только работать автономно, но и принимать или отправлять данные в сеть. Датчики температуры, реле, термостаты, часы, сигнализации - список устройств, для которых это актуально, весьма велик.

На этом мы закончим главу про Arduino и в третьей части рассмотрим модули ESP более подробно. Четвертая часть будет посвящена Linux и Raspberry Pi.

Часть 3. Выходим в Web: платы ESP32

3.1 Общее знакомство

Платы Arduino в свое время стали настоящей находкой для радиолюбителей - просто и без особых сложностей можно использовать различные компоненты, датчики, писать логику программы. Но увы, во-первых, 8-битный процессор, работающий на частоте 16МГц, не позволяет запускать более-менее сложные алгоритмы. Во-вторых, современный мир - это мир Интернета. Практически для любого устройства возможность обмена данными становится критически важной.

Итак, настала пора предоставить героя нашей следующей главы - плату ESP32.

Всего за 6$ мы получаем 32-разрядный процессор, работающий на частоте 240МГц, 520Кб памяти, 4Мб флеш-памяти и поддержку Bluetooth и WiFi.

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

Для этого нужно:

- Скачать по адресу https://git-scm.com/download/win и установить программу контроля версий Git.

- В папке Документы\Arduino создать папку hardware\espressif\.

- Скачать библиотеки и компилятор для ESP32. Для этого нужно открыть консоль (Win+R - cmd), перейти в папку (cd C:\Users\Имя пользователя\Documents\Arduino\hardware\espressif\) и выполнить команду

git clone --recurse-submodules -j8 https://github.com/espressif/arduino-esp32.git (вместо консоли можно также воспользоваться Git GUI). Библиотеки будут устанавливаться довольно долго, около 10 минут.

- По окончании установки, нужно зайти в папку hardware\espressif\arduino-esp32\tools и запустить файл get.exe, который скачает недостающие файлы. Процесс также может занять несколько минут.

После этого заново запустим Arduino IDE - мы увидим, что количество доступных типов плат увеличилось, выберем ESP32 Dev Module.

Теперь можно подключить плату, и испытать какие-нибудь примеры. Поскольку, возможность работы с WiFi и Bluetooth является одним из основных преимуществ платы, это мы и проверим. Выберем в меню File-Examples-WiFi scan. Запускаем компиляцию… и получаем сообщение об ошибке. Оказывается, библиотека WiFi.h, идущая в комплекте с ESP32 SDK, конфликтует с уже имеющейся в папке "C:\Program Files (x86)\Arduino\libraries" библиотекой с тем же названием. Удаляем папку WiFi оттуда, перезапускаем Arduino IDE, после этого компиляция происходит нормально.

Предыдущая главаГлава 7 из 16Следующая глава