Виды и примеры ардуино модулей
Содержание
- 1 Подключение SPI к Ардуино
- 2 Как подключить к Ардуино датчик TA12-100
- 3 Примеры работы для Arduino
- 4 Описание библиотеки для работы с датчиком. Пример скетча
- 5 Подключение BMP280 к Arduino по I2C/TWI
- 6 Работа схемы
- 7 Преимущества и недостатки SPI
- 8 Распиновка
- 9 KY-009, модуль RGB SMD светодиода
- 10 Зачем нужен модуль для Ардуино
- 11 5Подключение датчика тока и напряжения INA219 к Arduino
- 12 3Скетч Arduino для инфракрасного датчика препятствий
- 13 Подключение датчика давления
- 14 Как подключить датчик движения к Ардуино
- 15 Элементы платы
- 16 Собираем робота
- 17 Вводная информация
- 18 Принцип работы ультразвукового дальномера
- 19 Выводы
Подключение SPI к Ардуино
Плата Arduino уже содержит специальные выводы для подключения интерфейса SPI. Эти же выводы повторены в отельном разъеме ICSP. На этом разъеме отсутствует SS – изначально предусмотрено, что микроконтроллер Ардуино будет выступать в роли ведущего устройства. Если нужно использовать его в качестве ведомого, можно использовать любой цифровой вывод в качестве SS.
На данной иллюстрации представлен вариант подключения OLDE-экрана по SPI к ардуино.
Для каждой модели Ардуино существую свои выводы для SPI. Эти выводы:
- Uno: MOSI соответствует вывод 11 или ICSP-4, MISO – 12 или ICSP-1, SCK – 13 или ICSP-3, SS (slave) – 10.
- Mega1280 или Mega2560: MOSI – 51 или ICSP-4, MISO – 50 или ICSP-1, SCK – 52 или ICSP-3, SS (slave) – 53.
- Leonardo: MOSI – ICSP-4, MISO –ICSP-1, SCK –ICSP-3.
- Due: MOSI – ICSP-4, MISO –ICSP-1, SCK –ICSP-3, SS (master) – 4, 10, 52.
Последний контроллер Arduino Due расширяет возможности пользователя и позволяет реализовать больше задач, чем на остальных микроконтроллерах. Например, можно автоматически управлять ведомым устройством и автоматически выбирать различные конфигурации (тактовая частота, режим и другие).
Как подключить к Ардуино датчик TA12-100
Схема подключения к Arduino датчика тока TA12-100
Данный датчик используется только для измерения переменного тока и является аналоговым. Для подключения к плате вам потребуется два провода (хотя на модуле имеется три контакта) — один провод подключается к GND, а второй к аналоговому входу. Провод, где вы хотите измерить силу тока, должен проходить через катушку модуля. Соберите схему, как на картинке и загрузите следующий скетч.
Счетч для датчика тока Arduino TA12-100
#define sensorTA12 A0 // назначаем пин для подключения датчика float nVPP; // напряжение на резисторе float nCurrThruResistorPP; // пиковый ток на резисторе float nCurrThruResistorRMS; // среднеквадратичное значение тока на резисторе float nCurrentThruWire; // актуальное среднекватратичное значение тока void setup() { Serial.begin(9600); pinMode(sensorTA12, INPUT); } void loop() { // узнаем напряжение на резисторе с помощью функции getVPP() nVPP = getVPP(); // используем закон Ома для расчета тока на резисторе nCurrThruResistorPP = (nVPP / 200.0) * 1000.0; // преобразуем значения тока в среднекватичное значение nCurrThruResistorRMS = nCurrThruResistorPP * 0.707; // коэффициент трансформатора 1000:1, поэтому ток умножается на 1000 nCurrentThruWire = nCurrThruResistorRMS * 1000; // выводим все данные на мониторе порта Serial.print("Volts Peak : "); Serial.println(nVPP, 3); Serial.print("Current Through Resistor (Peak) : "); Serial.print(nCurrThruResistorPP, 3); Serial.println(" mA Peak to Peak"); Serial.print("Current Through Resistor (RMS) : "); Serial.print(nCurrThruResistorRMS, 3); Serial.println(" mA RMS"); Serial.print("Current Through Wire : "); Serial.print(nCurrentThruWire, 3); Serial.println(" mA RMS"); Serial.println(); } // следующая функция узнает пиковое значение за одну секунду float getVPP() { float result; int readValue; int maxValue = 0; uint32_t start_time = millis(); while ((millis() - start_time) < 1000) { readValue = analogRead(sensorTA12); if (readValue > maxValue) { maxValue = readValue; } } result = (maxValue * 5.0) / 1024.0; return result; }
Примеры работы для Arduino
Подключение датчика
К платформе Arduino сенсорный модуль удобнее подключать через плату расширения: например, через Troyka Shield.
При помощи трёхпроводных шлейфов подключите модуль к питанию и и к пинам шины I²C — и .
Получение данных с датчиков линии
Попробуем получить значения с датчиков сборки и вывести полученные значения на монитор serial-порта. Для этого создадим объект для работы с датчиком, выставим чувствительность фотоприёмников и настроим яркость свечения инфракрасных светодиодов.
- folowSensorSimple.ino
-
// библиотека для работы с модулями I²C #include <Wire.h> // библиотека для работы cо сборкой датчиков линии #include <Octoliner.h> // создаём объект для работы с датчиками линии Octoliner octoliner(42); void setup() { // открываем Serial-порт Serial.begin(115200); // начало работы с модулями I²C Wire.begin(); // начало работы с датчиками линии octoliner.begin(); // выставляем чувствительность фотоприёмников в диапазоне от 0 до 255 octoliner.setSensitivity(200); // выставляем яркость свечения ИК-светодиодов в диапазоне от 0 до 255 octoliner.setBrightness(255); } void loop() { // считываем значение с датчиков линии for (int i = ; i < 8; i++) { // выводим значения в Serial-порт Serial.print(octoliner.analogRead(i)); Serial.print("\t"); } Serial.println(); // ждём пол секунды delay(500); }
Поиск линии
Теперь научим датчики определять нахождение линии. Будем использовать диапазон от –1 до 1:
- –1 — линия в крайнем левом положении модуля.
- 1 — линия в крайнем правом положении модуля.
- 0 — линия посередине модуля.
- folowSensorMapLine.ino
-
// библиотека для работы с модулями I²C #include <Wire.h> // библиотека для работы cо сборкой датчиков линии #include <Octoliner.h> // создаём объект для работы с датчиками линии Octoliner octoliner(42); void setup() { // открываем Serial-порт Serial.begin(115200); // начало работы с модулями I²C Wire.begin(); // начало работы с датчиками линии octoliner.begin(); // выставляем чувствительность фотоприёмников в диапазоне от 0 до 255 octoliner.setSensitivity(200); // выставляем яркость свечения ИК-светодиодов в диапазоне от 0 до 255 octoliner.setBrightness(255); } void loop() { // массив для хранения показателей с датчиков линии int dataSensors8; // считываем значение с датчиков линии for (int i = ; i < 8; i++) { // выводим значения в Serial-порт dataSensorsi = octoliner.analogRead(i); Serial.print(octoliner.analogRead(i)); Serial.print("\t"); } Serial.println(octoliner.mapLine(dataSensors)); Serial.println(); // ждём пол секунды delay(500); }
Для плавной езды по линии рекомендуем использовать сборку датчиков совместно с ПИД-регулятором.
Описание библиотеки для работы с датчиком. Пример скетча
Для работы с датчиком BMP180 существуют различные библиотеки, упрощающие работу. К ним относятся SFE_BMP180, Adafruit_BMP085. Эти же библиотеки подходят для работы с датчиком BMP080. Для датчика bmp280 используется похожая библиотека Adafruit_BMP280.
Первый пробный скетч будет заставлять датчик считывать показания давления и температуры. Код подойдет как для датчика BMP180 , так и для BMP280, нужно только подключить правильную библиотеку и указать верные контакты, к которым подключен модуль. В первую очередь в коде нужно подключить все библиотеки и инициализировать работу датчика. Для определения давления нужно сначала узнать температуру. Для этого используется следующий элемент кода.
status = pressure.startTemperature();// Считываются данные с датчика о температуре if(status!=0){ delay(status); // Ожидание status = pressure.getTemperature(T); // Сохранение полученных данных о температуре if(status!=0){ Serial.print("Temperature: "); // Выведение на экран слова «Температура» Serial.print(T,2); // Вывод на экран значения температуры. Serial.println("deg C, "); //Печать символа градуса Цельсия.
Затем нужно получить информацию об атмосферном давлении.
status = pressure.startPressure(3); // происходит считывание давления if(status!=0){ delay(status); // Ожидание status = pressure.getPressure(P,T); // получение давления, сохранение if(status!=0){ Serial.print("Absolute pressure: "); // Вывод на экран слов «Атмосферное давление» Serial.print(P,2); // Вывод на экран значения переменной mBar Serial.print(" mbar, "); // Вывод на экран текста "mBar" Serial.print(P*0.7500637554192,2); // вывод на экран значения в mmHg (мм.рт.ст.) Serial.println(" mmHg");} // вывод на экран единицы измерения давления "mmHg" (мм. Рт.ст.).
После загрузки скетча в окне мониторинг порта появятся данные о температуре и атмосферном давлении.
Датчик BME280 также показывает давление и температуру, дополнительно он может считывать показания о влажности, который по умолчанию выключен. При необходимости можно произвести настройки датчика и начать считывать показания о влажности. Диапазон измерения от 0 до 100%. Библиотека, которая нужна для работы с датчиком, называется Adafruit_BME280.
Код похож на тот, что описан выше, только к нему еще добавляются строки для определения влажности.
void printValues() { Serial.print("Temperature = "); Serial.print(bme.readTemperature()); Serial.println(" C"); //определение температуры, вывод ее на экран в градусах Цельсия. Serial.print("Pressure = "); Serial.print(bme.readPressure() / 100.0F); Serial.println(" hPa"); //определение давления, вывод его на экран Serial.print("Humidity = "); Serial.print(bme.readHumidity()); Serial.println(" %"); //определение влажности в процентах, вывод измеренного значения на экран. Serial.println(); }
Подключение BMP280 к Arduino по I2C/TWI
Так как датчик может работать по I2C и SPI, подключение можно реализовать двумя методами. При подключении по I2C нужно соединить контакты SDA и SCL.
Схема подключения BMP280 к Arduino
Для подключения понадобятся сам датчик BMP280, плата Ардуино, соединительные провода. Схема подключения показана на рисунке ниже.
Землю с Ардуино нужно соединить с землей на датчике, напряжение 3.3 В — на 3.3 В, SDA — к пину А4, SCL — к А5. Контакты А4 и А5 выбираются с учетом их поддержки интерфейса I2C.
Существуют несколько модулей с этим датчиком. Первый вариант — это модуль для работы в 3.3 В логике, данные модули будут подешевле; второй вариант — для работы в 5.0 В логике, на нём присутствуют: линейный стабилизатор напряжения на 3.3 В и преобразователи уровней 3.3/5.0 В на линиях SCK/SCL и SDI(MOSI)/SDA. Первый подойдёт для ардуин работающих от 3.3 В и Raspberry Pi / Orange Pi / Banana Pi и т.д., а второй — для обычных ардуин на 5.0 В.
Подключение BMP280 с встроенными стабилизатором напряжения на 3.3 В и преобразователями уровней 3.3/5.0 В на линиях SCK/SCL и SDI(MOSI)/SDA к Arduino.
Arduino Mega | Arduino Uno/Nano/Pro Mini | BMP280 модуль | Цвет проводов на фото |
---|---|---|---|
GND | GND | GND | Черный |
5V | 5V | Vin | Красный |
20 (SDA) | A4 | SDA/SDI | Зелёный |
21 (SCL) | A5 | SCL/SCK | Жёлтый |
Подключение BMP280 без встроенного стабилизатора напряжения на 3.3 В к Arduino. В данном случае нужно использовать внешний преобразователь уровней на линиях SCK/SCL и SDI(MOSI)/SDA.
Arduino Mega | Arduino Uno/Nano/Pro Mini | BMP280 модуль | Цвет проводов на фото |
---|---|---|---|
GND | GND | GND | Черный |
3.3V | 3.3V | VCC/3.3V | Красный |
20 (SDA) | A4 | SDA/SDI | Зелёный |
21 (SCL) | A5 | SCL/SCK | Жёлтый |
Примеры скетча
После запуска вы можете инициализировать датчик с помощью:
if (!bmp.begin()) {
Serial.println(«Could not find a valid BMP280 sensor, check wiring!»);
while (1);
}
1 |
if(!bmp.begin()){ Serial.println(«Could not find a valid BMP280 sensor, check wiring!»); while(1); } |
вернет True, если датчик был найден, и False, если нет. В случае с False, проверьте соединение датчика с платой Arduino!
Считать температуру и давление легко, просто вызовите функции:
bmp.readTemperature(); // Температура в градусах Цельсия.
bmp.readPressure(); // Атмосферное давление в гПа
1 |
bmp.readTemperature();// Температура в градусах Цельсия. bmp.readPressure();// Атмосферное давление в гПа |
Копируйте и скомпилируйте нижеприведённый скетч в Arduino IDE.
#include <Adafruit_BMP280.h>
Adafruit_BMP280 bmp280;
void setup() {
Serial.begin(9600);
Serial.println(F(«BMP280»));
while (!bmp280.begin(BMP280_ADDRESS — 1)) {
Serial.println(F(«Could not find a valid BMP280 sensor, check wiring!»));
delay(2000);
}
}
void loop() {
float temperature = bmp280.readTemperature();
float pressure = bmp280.readPressure();
float altitude = bmp280.readAltitude(1013.25);
Serial.print(F(«Temperature = «));
Serial.print(temperature);
Serial.println(» *C»);
Serial.print(F(«Pressure = «));
Serial.print(pressure);
Serial.println(» Pa»);
Serial.print(F(«Altitude = «));
Serial.print(altitude);
Serial.println(» m»);
Serial.println();
delay(2000);
}
1 |
#include <Adafruit_BMP280.h> Adafruit_BMP280bmp280; voidsetup(){ Serial.begin(9600); Serial.println(F(«BMP280»)); while(!bmp280.begin(BMP280_ADDRESS-1)){ Serial.println(F(«Could not find a valid BMP280 sensor, check wiring!»)); delay(2000); } } voidloop(){ floattemperature=bmp280.readTemperature(); floatpressure=bmp280.readPressure(); floataltitude=bmp280.readAltitude(1013.25); Serial.print(F(«Temperature = «)); Serial.print(temperature); Serial.println(» *C»); Serial.print(F(«Pressure = «)); Serial.print(pressure); Serial.println(» Pa»); Serial.print(F(«Altitude = «)); Serial.print(altitude); Serial.println(» m»); Serial.println(); delay(2000); } |
Результат
Температура рассчитывается в градусах Цельсия, вы можете преобразовать ее в градусы Фаренгейта, используя классическое уравнение F = C * 9/5 + 32.
Давление возвращается в единицах СИ Паскалей. 100 Паскалей = 1 гПа = 1 миллибар. Часто барометрическое давление сообщается в миллибарах или миллиметрах ртутного столба. Для дальнейшего использования 1 паскаль = 0,00750062 миллиметров ртутного столба или 1 миллиметр ртутного столба = 133,322 Паскаля. Таким образом, если вы возьмете значение паскаля, скажем, 100734 и разделите на 133,322, вы получите 755,57 миллиметров ртутного столба.
Также возможно превратить BMP280 в альтиметр. Если вы знаете давление на уровне моря, библиотека может рассчитать текущее атмосферное давление в высоту.
Работа схемы
Схема устройства представлена на следующем рисунке.
Как вы можете видеть из представленной схемы выходы компараторов напрямую подсоединены к цифровым выводам Arduino 2 и 3. Входные контакты драйвера мотора 2, 7, 10 и 15 соединены с цифровыми контактами Arduino 4, 5, 6 и 7 соответственно. Один из двигателей подсоединен к выходным контактам драйвера мотора 3 и 6, а второй двигатель – к его контактам 11 и 14.
Всю конструкцию нашего робота, движущегося вдоль линии, можно условно разделить на 3 части: модуль датчиков, модуль управления и модуль движения.
Модуль датчиков содержит инфракрасные диоды, потенциометр, компаратор (на операционном усилителе) и светодиоды. Потенциометр используется для установки опорного напряжения на первом входе компаратора, а инфракрасные датчики – для формирования напряжения на втором входе компаратора. Компаратор сравнивает эти два напряжения и в результате этого формирует соответствующий цифровой сигнал на своем выходе. В нашей конструкции мы использовали два подобных компаратора на основе микросхемы LM358, которая имеет в своем составе два малошумящих операционных усилителя.
Модуль управления построен на основе платы Arduino Pro Mini, которая будет контролировать весь процесс движения робота. Выходы компараторов подсоединены к цифровым контактам 2 и 3 платы Arduino. Плата Arduino считывает эти сигналы и посылает команды управления модулю движения.
Модуль движения состоит из драйвера мотора и двух двигателей постоянного тока. Драйвер мотора необходим в связи с тем, что Arduino не обеспечивает необходимые значения напряжения и тока для управления двигателями. Arduino будет давать команды драйверу мотора, а он будет их исполнять.
Принцип работы робота, следующего вдоль линии, достаточно прост. Датчики робота обнаруживают (чувствуют) линию и передают соответствующие сигналы на Arduino. А плата Arduino в соответствии с этими сигналами управляет двумя моторами, движущими робота.
Если ни один из датчиков не будет обнаруживать черную линию, то робот будет двигаться прямо. Эта ситуация показана на нижеприведенном рисунке.
Если левый датчик обнаруживает черную линию, то робот поворачивает влево.
Если правый датчик обнаруживает черную линию, то робот поворачивает вправо..
Если оба датчика обнаруживают черную линию, робот останавливается.
В нашем проекте мы использовали два инфракрасных датчика (сенсора), которые мы назовем левым датчиком и правым датчиком. Когда оба датчика видят перед собой белый цвет робот движется прямо.
Преимущества и недостатки SPI
Преимущества интерфейса SPI:
- Возможность передавать большие данные, не ограниченные длиной в 8 бит.
- Простота в реализации программного обеспечения.
- Простота аппаратной реализации.
- Выводов нужно меньше, чем для параллельных интерфейсов.
- Только быстродействие устройств ограничивает максимальную тактовую частоту.
Недостатки:
- Большое количество выводов по сравнению с I2C.
- Slave не может управлять потоком информации.
- Отсутствие стандартного протокола обнаружения ошибок.
- Большое количество способов реализации интерфейса.
- Отсутствие подтверждения приема информации.
Распиновка
Пины питания
- VIN Пин для подключения внешнего источника напряжения в диапазоне от 5 до 18 вольт.
- 5V: Для обратной совместимости с проектами на Arduino Nano пин 5V оставили на месте, но на плате отсутствует стабилизатор напряжения на 5 вольт и пин висит в воздухе. Чтобы получить активную линию питания на 5 вольт, вам понадобится спаять перемычку для площадок VUSB и подвести внешнее питание 5 вольт через USB-порт.
- 3V3 Пин от стабилизатора напряжения с выходом 3,3 вольта и максимальных током 1,2 А. Регулятор обеспечивает питание чипа и другой вспомогательной логики платы.
- GND Выводы земли.
Порты ввода/вывода
В отличии от большинство плат Arduino, родным напряжением Arduino Nano 33 BLE Sense является 3,3 В, а не 5 В. Выходы для логической единицы выдают 3,3 В, а в режиме входа ожидают принимать не более 3,3 В. Большее напряжение может повредить микроконтроллер!
Будьте внимательны при подключении периферии: убедитесь, что она может корректно функционировать в этом диапазоне напряжений.
-
Цифровые входы/выходы 22 пина: –
Логический уровень единицы — 3,3 В, нуля — 0 В. Максимальный ток выхода — 15 мА. К контактам подключены подтягивающие резисторы, которые по умолчанию выключены, но могут быть включены программно. -
-
I²C пины и
Для коммуникации платы Arduino с другими платами расширения и сенсорами по параллельному интерфейсу. -
I²C1 пины и
Используется для общение с беспроводным модем .
-
I²C пины и
-
-
Serial/SerialUSB пины: и
Выводы шины соединены с USB-разъёмом платы. Используется для прошивки и отладки платформы через ПК. -
Serial1 пины: и
Для коммуникации платы Arduino с другими платами расширения и сенсорами по последовательному интерфейсу.
-
Serial/SerialUSB пины: и
KY-009, модуль RGB SMD светодиода
Модуль RGB SMD светодиода |
Заменяется на модуль 2020 или 5050 RGB SMD. Стоимость начинается от 1 р за штуку, высылается правда большими партиями, но если поискать то можно найти и поштучно, сам же модуль от 50 р. |
Довольно привлекательный модуль для начинающих. Позволяет работать с RGB матрицей и получать буквально все цвета светового спектра используя ШИМ выходы контроллера. Поставляется БЕЗ токоограничивающих резисторов, поэтому при установке не забудьте их установить. Возможно заменить на обычный RGB светодиод, все зависит от предназначения и места установки. Недостаток- занимает сразу 3 ШИМ выхода микроконтроллера для полноценной работы. Достоинства- можно визуализировать процесс переключением цветов светодиода. Например: зеленый- работа, красный- остановка или аварийный стоп, синий- настройка и т.д. Кроме того в устройствах с температурными датчиками можно визуализировать степень нагрева термоэлемента. Т.е. чем большую температуру имеет датчик тем «краснее» светодиод и наоборот, чем холоднее- тем «синее». |
Зачем нужен модуль для Ардуино
Для начала стоит понять, зачем вообще подобная модульность необходима. Ведь, казалось бы, Ардуино – это всего лишь микроконтроллер, к которому можно приспособить любой сторонний датчик. Но на деле всё не так просто, как раз из-за программной части и других особенностей системы, поэтому, для расширения функционала, и присутствуют специальные Аrduino модули, позволяющие приспособить МК к любым потребностям человека, который его использует. Это основная функция, объясняющая необходимость модульности, помимо неё, присутствуют и другие причины такого решения:
- Стандартизированный набор датчиков с одинаковыми характеристиками позволяет писать универсальные решения для различных ситуаций. Таким образом, захотев воплотить в жизнь какой-то проект, вам не нужно самостоятельно изучать язык программирования и создавать уникальную электросхему. В большинстве случаев, уже готовая система или какие-то её части присутствуют в свободном доступе, инженеру лишь остается их правильно скомпоновать, что значительно экономит время при реализации задумок.
- Простота работы с Ардуино. Уже описанная выше стандартизация, позволяет быть уверенным, что купленный вами датчик или специальный модуль, не нужно будет подключать с помощью дополнительных шлейфов или переходников. Хоть иногда и появляется необходимость самостоятельно паять платформу под Ардуино, но, в большинстве случаев, вы можете приобрести уже готовую, под конкретные модули и потребности. Более того, существуют универсальные платы, полностью раскрывающие возможности модульной системы.
5Подключение датчика тока и напряжения INA219 к Arduino
Для начала пойдём простым путём: скачаем готовую библиотеку, загрузим в Arduino и посмотрим на результат. Существует несколько библиотек для работы с нашим датчиком. Предлагаю воспользоваться вот этой популярной библиотекой для INA219 от Adafruit. Скачаем её, установим стандартным образом и загрузим в Arduino скетч из примеров getcurrent.
Если скетч не компилируется, а в сообщениях об ошибках присутствуют какие-то недостающие компоненты (например, Adafruit_I2CDevice.h или Adafruit_BusIO_Register.h, то необходимо доустановить их. Проще всего это сделать так. Для этого способа требуется подключение к интернету на компьютере, где запущена среда разработки. Открыть в среде Arduino IDE менеджер библиотек: в меню Tools Manage Libraries…. Откроется окно Library Manager. В поле поиска следует ввести adafruit busio. Когда библиотека будет обнаружена и покажется в списке, нажать кнопку Install.
Установка недостающих библиотек через менеджер библиотек Arduino IDE
Подключим модуль GY-219 к Arduino по следующей схеме. SDA и SCL датчика можно подключить как к аналоговым входам A4 и A5 Arduino, так и к специально выделенным портам SDA и SCL (если они есть на вашей плате).
Схема подключения датчика INA219 к Arduino
В качестве нагрузки может быть любой источник, например, электромотор, лампа или просто мощный резистор. У меня это 5 соединённых параллельно 5-ваттных 16-омных резисторов. В качестве источника питания также может выступать любой из имеющихся у вас источников. Я буду использовать лабораторный источник питания.
Датчик INA219 подключён к Arduino
В результате выполнения скетча получится следующий вывод:
Результат работы скетча «GetCurrent» для датчика тока INA219
Отлично! Всё работает! Как говорится, бери – и пользуйся.
Данная библиотека позволяет также проводить калибровку датчика INA219 при необходимости. Подробности – в описании библиотеки и в самих исходниках (в файле Adafruit_INA219.cpp библиотеки даётся большое число пояснений).
3Скетч Arduino для инфракрасного датчика препятствий
Скетч для работы с инфракрасным сенсором препятствий также предельно простой: мы будем читать показания с выхода модуля и выводить в монитор порта. А также, если ИК модуль обнаружил препятствие, будем сообщать об этом.
const int ir = A7; void setup() { Serial.begin(115200); } void loop() { int r = analogRead(ir); // r в диапазоне от 0 до 1023 Serial.println(r); if (r < 100) { // т.к. используется аналоговый пин Arduino Serial.println("Detected!"); } delay(100); }
Напомню, в Arduino используется 10-разрядный АЦП, поэтому значение аналогового сигнала кодируется числом в диапазоне от 0 до 1023. При использовании аналогового входа Arduino предельные значения «0» или «1023» мы вряд ли получим с датчика, поэтому лучше использовать некоторый порог, например, равный 100 (поэтому в скетче r < 100). При использовании же цифрового вывода Arduino для чтения показаний инфракрасного датчика, можно можно написать (r == LOW) или (r == 0) или (r < 1).
Хорошая статья про аналоговые измерения на Arduino.
Думаю, довольно понятно, как найти применение такому модулю в ваших проектах. Необходимо периодически опрашивать состояние на выходе модуля, и как только напряжение меняется с HIGH на LOW, предпринимать необходимые действия: менять направление движения робота, включать свет в помещении и т.п.
Подключение датчика давления
Часто в деле предсказания погоды или определения высоты подъёма над уровнем моря требуется решить задачу измерения давления. Здесь на помощь приходят электронные барометры на технологии МЭМС: тензорометрический или пьезорезизстивный метод, связанный с переменностью сопротивления прибора при приложении деформирующих материал сил.
Наиболее популярен датчик BMP085; помимо барометрического давления он регистрирует и температуру. Ему на смену выпустили BMP180, он обладает теми же характеристиками:
- Чувствительность в диапазоне: 300-1100 гПа (если в метрах — 9000 — 500 м над уровнем моря );
- Разрешение : 0,03 гПа или 0,25 м;
- Рабочая температура датчика -40 +85°C, точность измерения в указанном диапазоне — ±2°C;
- Подключение по стандарту i2c;
- V1 использует 3.3 В для питания и логики;
- V2 использует 3.3-5 В для питания и логики.
Подключение датчиков к Ардуино в этом случае стандартно. Понадобится Unified Sensor Driver — его обновлённая версия обеспечивает более высокую точность показаний; кроме того, позволяет работать с несколькими разными подключёнными датчиками давления одновременно. Необходимо также установить Adafrut_Sensor library.
Как подключить датчик движения к Ардуино
Для занятия нам понадобятся следующие детали:
- плата Arduino Uno / Arduino Nano / Arduino Mega;
- PIR датчик движения;
- беспаечная макетная плата;
- 1 светодиод и резистор 220 Ом;
- провода «папа-папа», «папа-мама».
Схема подключения PIR датчика к Ардуино Уно
Распиновка датчиков движения Ардуино у разных производителей может отличаться, но рядом с контактами есть надписи (см. фото выше). Поэтому, перед подключением внимательно изучите модуль. Один выход идет к GND, второй к питанию 5 Вольт (VCC), а третий выход (OUT) выдает цифровой сигнал с PIR сенсора. Соберите схему, как на фото выше, подключите светодиод к пину 12 на Ардуино и загрузите следующий скетч.
Скетч для датчика движения Ардуино
#define PIR 2 #define LED 12 void setup() { pinMode(PIR, INPUT); pinMode(LED,OUTPUT); } void loop() { int pirVal = digitalRead(PIR); if (pirVal == HIGH) { digitalWrite(LED, HIGH); delay(2000); } else { digitalWrite(LED,LOW); delay(2000); } }
- с помощью директивы для портов 2 и 12 мы назначили соответствующие имена PIR и LED. Это сделано лишь для нашего удобства;
- в условном операторе if использовано двойное равенство: . Согласно языку программирования Ардуино, двойное равенство является оператором сравнения.
Скетч для светильника с датчиком движения
#define LED 3 // назначаем порт для светодиода #define PIR 2 // назначаем порт для PIR sensor unsigned long counttime; // выделение памяти для счетчика void setup() { pinMode(LED, OUTPUT); pinMode(PIR, INPUT); } void loop() { // если есть движение включаем светодиод if (digitalRead(PIR) == HIGH) { digitalWrite(LED, HIGH); } // включаем счетчик на 1 минуту counttime = millis(); // если нет движения и прошла 1 минута if (digitalRead(PIR) == LOW && millis() - counttime > 60000) { // если нет движения в течении 1 минуты выключаем светодиод digitalWrite(LED, LOW); } }
Элементы платы
Плата крепится к роботу при помощи шести ушек, которые сделаны под размер винтов М3.
Микроконтроллер STM32F030F4P6
Мозг сенсорной сборки — мощный 32-разрядный микроконтроллер STM32F030F4P6 с вычислительным ядром ARM Cortex M0.
Контроллер считывает данные с восьми датчиков линии и передаёт управляющей платформе по интерфейсу I²C/TWI.
Микросхема MCP6004
На борту модуля расположены два четырёхканальных операционных усилителя MCP6004, при помощи которых можно отрегулировать чувствительность сразу восьми сенсоров.
Понижающий DC-DC
Преобразователь NCP582LSQ33 с выходом 3,3 В обеспечивает питание логической части модуля. Максимальный выходной ток 150 мА.
Светодиодная индикация
На плате расположены два светодиода — индикаторы данных и питания.
Имя светодиода | Назначение |
---|---|
ACT | Отвечает за обмен данными между управляющей платформой и сенсорной сборкой. При обмене данными индикатор мигает. |
PWM | Показывает чувствительность датчиков: чем больше чувствительность, тем ярче горит светодиод. |
Troyka-контакты
На модуле выведен разъём Troyka-контактов:
- Питание (V) соединяет с рабочим напряжением микроконтроллера.
- Земля (G) соединяет с пином GND микроконтроллера.
- Сигнальный (D) — пин данных шины I²C. Подключается к SDA-пину микроконтроллера.
- Сигнальный (C) — пин тактирования шины I²C. Подключается к SCL-пину микроконтроллера.
Входной сенсорный канал
На модуле расположено восемь датчиков линии на оптопаре TCRT5000.
Оптопара TCRT5000 — это светодиод и фототранзистор, собранные в одном корпусе. Светодиод излучает инфракрасный свет, длина волны 950 нм. Световой поток отражается от поверхности и попадает на фототранзистор, где преобразуется в электрический сигнал. Чем светлее поверхность, тем больше отражается света. Чем темнее — тем меньше.
Показания датчика зависят не только от цвета линии, но и от расстояния сенсора до поверхности. Если расстояние менее 3 мм, то перегородка между ИК-излучателем и приёмником мешает транзистору принимать отражённый свет. При расстоянии более 15 мм отражённый свет рассеивается и не доходит до приёмника.
Собираем робота
Сначала соберём робота, установим всю механику и электронику.
Собираем платформу
Для начала прикрепим колёса к мотрорам.
Затем с помощью пластиковых П-образных креплений прикручиваем моторчики к платформе
Обратите внимание на взаимное расположение крепления и моторчики: в креплении есть небольшие углубления, так что если всё соединить правильно, то моторчики будут крепко держаться и никуда не выскочат.
Теперь крепим балансировочный шар.
Отлично! Платформа собрана. Если вам кажется, что колёсам отведено слишком мало места и они трутся о платформу, то скорее всего вам нужно посильнее надавить на колёса, чтобы они плотнее сели на вал мотора.
Крепим сенсоры
Закрепим их, как показано на фото:
Можно было бы выбрать и другое место. Это могло бы сделать контроль проще или сложнее, а самого робота более или менее эффективным. Оптимальное расположение — вопрос серии экспериментов. Для этого проекта просто был выбран такой способ крепления.
Крепим Arduino
Arduino закрепим с противоположной стороны двумя винтиками и гайками.
Опять же, можно выбрать и другое место. Например над колёсами, если приподнять Arduino на латунных стойках. Это изменило бы положение центра масс и повлияло бы на эффективность робота в лучшую или худшую сторону.
Крепим Motor Shield и соединительные провода
Установим Motor Shield на Arduino и подсоединим соединительные провода
Обратите внимание, чтобы соотвествовать программному коду из примера ниже, моторчики соединены с Motor Shield так: правый — к клеммам M1 с прямой полярностью (плюс к плюсу), а левый — к M2 с обратной (плюс к минусу)
В этом проекте, для экономии времени концы соединительных проводов просто скручены с контактами моторов. При работе «начисто» стоит жёстко припаять провода к моторам.
Крепим Troyka Shield
Присоединяем сверху Troyka Shield и подключаем датчики к 8 и 9 цифровым контактам. В итоге получаем следующую конструкцию:
Вводная информация
Если раньше существовали специализированные конструкторы с ограниченными наборами функций и жёстко заданными параметрами, то сегодняшнее разнообразие конструкторов просто поражает: настоящие микропроцессорные системы, собираемые на коленке, имеют практически неограниченный функционал. Богатая фантазия, широкая элементная база, большие комьюнити фанатов и инженеров и поддержка производителем — основные отличительные особенности таких востребованных рынком наборов для робототехники.
Один из них и наиболее популярный, что естественно, — Ардуино. Конструктор моментальной сборки электронных автоматических устройств любой степени сложности: высокой, средней и низкой. Эту платформу называют иначе «physical computing» за плотное взаимодействие с окружающей средой. Печатная плата с микропроцессором, открытый программный код, стандартные интерфейсы и подключение датчиков к Ардуино — слагаемые его популярности.
Система Ардуино — плата, которая объединяет все нужные компоненты, обеспечивающие полный цикл разработки. Сердце этой платы — микроконтроллер. Он обеспечивает управление всей периферией. Датчики, подключаемые к системе, позволяют системе «общаться» и взаимодействовать с окружением: анализировать, отмечать изменять.
Принцип работы ультразвукового дальномера
Принцип действия ультразвукового дальномера.
Дальномер ультразвуковой работает путем направления испускаемого звука на какой-то предмет, который, в свою очередь, отражает его. Дальномер улавливает приемным блоком. Этот ультразвук не слышим окружающим. Скорость звука напрямую зависит от плотности воздуха, что способствует более точному расчету расстояния.
В процессе внедрения новых технологий и производственных возможностей конструктора добились усовершенствования конструкции аппарата. Это позволило создать новый прибор, более точно направленный звуковым пучком. Был создан ультразвуковой дальномер с лазерной указкой. Такой аппарат значительно увеличил точность измерений и облегчил проведение работ.
Приобрести ультразвуковой дальномер на сегодня можно на любых торговых точках, занимающихся измерительными приборами.
Такой аппарат имеет значительные недостатки. Главным минусом является точность замера, так как она определяется с учетом окружающей среды, в которой будет распространяться звук. Параметры и значения (главным из которых является плотность) не могут быть постоянными и имеют способность изменяться в период работ. Немаловажным недостатком считается и ограничение длины измерений, так как пределы расстояния – от 30 см до 20 м.
В связи с этим использовать ультразвуковые приборы можно в том случае, когда не требуется точных замеров и замеров не более допустимых пределов. В иных случаях лучше приобрести дальномер лазерный, хотя он стоит немного дороже, но имеет лучшие технические характеристики.
Выводы
Подключение датчиков к Ардуино — это превращение алгоритмизированного робота, управляемого автоматически или в ручном режиме, в полноценную среду взаимодействия устройств и схем с окружающей средой. Не стоит забывать — это не панацея от всех бед. И не конечный высокотехнологичный продукт или конечная область применения. Ардуино — это комплекс аппаратных и программных решений, который поможет:
- освоить системы алгоритмизации начинающим инженерам;
- освоить базовые навыки конструирования;
- научиться программировать.
Вне зависимости от вашего уровня подготовки, ваших знаний, всегда можно подобрать для себя задачи по силам. Можно собрать простенькое решение автоматизации какой-либо несложной задачи без пайки вместе со школьником; а можно поставить глобальную задачу, где требуются помимо знаний и логики ещё и умение качественно паять и верно чертить и читать чертежи. А активные сообщества, форумы и базы знаний по системе Ардуино помогут решить практически любой вопрос.