Модули и решения «умного дома» на Ардуино
Основным элементом умного дома является центральная плата микроконтроллера. Две и более соединенных между собой плат, отвечают за взаимодействие всех элементов системы.
Существует три основных микроконтроллера в системе:
Arduino UNO – средних размеров плата с собственным процессором и памятью. Основа — микроконтроллер ATmega328. В наличии 14 цифровых входов/выходов (6 из них можно использовать как ШИМ выводы), 6 аналоговых входов, кварцевый резонатор 16 МГц, USB-порт (на некоторых платах USB-B), разъем для внутрисхемного программирования, кнопка RESET. Флэш-память – 32 Кб, оперативная память (SRAM) – 2 Кб, энергонезависимая память (EEPROM) – 1 Кб.
Arduino UNO
Arduino NANO – плата минимальных габаритов с микроконтроллером ATmega328. Отличие от UNO – компактность, за счет используемого типа контактных площадок – так называемого «гребня из ножек».
Arduino Nano
Arduino MEGA – больших размеров плата с микроконтроллером ATMega 2560. Тактовая частота 16 МГц (как и в UNO), цифровых пинов 54 вместо 14, а аналоговых 16, вместо 6. Флэш-память – 256 Кб, SRAM – 8 Кб, EEPROM – 4.
Arduino Mega
Arduino UNO – самая распространённая плата, так как с ней проще работать в плане монтажных работ. Плата NANO меньше в размерах и компактнее – это позволяет разместить ее в любом уголке умного дома. MEGA используется для сложных задач.
Сейчас на рынке представлено 3 поколение плат (R3) Ардуино. Обычно, при покупке платы, в комплект входит обучающий набор для собирания StarterKit, содержащий:
- Шаговый двигатель.
- Манипулятор управления.
- Электросхематическое реле SRD-05VDC-SL-C 5 В.
- Беспаечная плата для макета MB-102.
- Модуль с картой доступа и и двумя метками.
- Звуковой датчик LM393.
- Датчик с замером уровня жидкости.
- Два простейших устройства отображения цифровой информации.
- LCD-дисплей для вывода множества символов.
- LED-матрица ТС15-11GWA.
- Трехцветный RGB-модуль.
- Температурный датчик и измеритель влажности DHT11.
- Модуль риал тайм DS1302.
- Сервопривод SG-90.
- ИК-Пульт ДУ.
- Матрица клавиатуры на 16 кнопок.
- Микросхема 74HC595N сдвиговый регистр для получения дополнительных выходов.
- Основные небольшие компоненты электроники для составления схемы.
Можно найти и более укомплектованный набор для создания своими руками умного дома на Ардуино с нуля. А для реализации иного проекта, кроме элементов обучающего комплекта, понадобятся дополнительные вещи и модули.
Сенсоры и датчики
Чтобы контролировать температуру и влажность в доме и в подвальном помещении, потребуется датчик измерения температуры и влажности. В конструкторе умного дома это плата, соединяющая в себе датчики температуры, влажности и LCD дисплей для вывода данных.
Плата дополняется совместимыми датчиками движения или иными PIR-сенсорами, которые определяют присутствие или отсутствие человека в зоне действия, и привязывается через реле к освещению.
Датчик Arduino
Газовый датчик позволит быстро отреагировать на задымленность, углекислоту или утечку газа, и позволит при подключении к схеме, автоматически включить вытяжку.
Газовый датчик Arduino
Реле
Компонент схемы «Реле» соединяет друг с другом электрические цепи с разными параметрами. Реле включает и выключает внешние устройства с помощью размыкания и замыкания электрической цепи, в которой они находятся. С помощью данного модуля, управление освещением происходит также, если бы человек стоял и самостоятельно переключал тумблер.
Реле Arduino
Светодиоды могут указывать состояние, в котором реле находится в данным момент времени. Например, красный – освещение выключено, зеленый – освещение есть. Схема подключение к лампе выглядит так.
Для более крупного проекта лучше применять шину реле, например, восьмиканальный модуль реле 5V.
Контроллер
В качестве контроллера выступает плата Arduino UNO. Для монтажа необходимо знать:
описание элементов;
распиновку платы;
принципиальную схему работы платы;
распиновку микроконтролеера ATMega 328.
Программная настройка
Программирование подключенных элементов Ардуино происходит в редакторе IDE. Скачать его можно с официального сайта. Для программирования можно использовать готовые библиотеки.
Или воспользоваться готовым скетч решением Ardublock – графический язык программирования, встраиваемый в IDE. По сути, вам нужно только скачать и установить ПО, а затем использовать блоки для создания схемы.
Что такое Arduino?
Как я уже сказал, Arduino — это микроконтроллер, для того чтобы быть микрокомпьютером ему не хватает многих компонентов. Он очень прост и гибок, поэтому подходит для разработки различных проектов.
Arduino воспринимает окружающую среду с помощью различных кнопок, датчиков и других сенсоров. Также можно воздействовать на окружение путем контроля светодиодов, моторов, сервоприводов и реле. Проекты Arduino могут оставаться автономными или взаимодействовать с программным обеспечением, установленным на компьютере. Они могут взаимодействовать с другими Arduino, Raspberry Pi, NodeMCU и любыми другими устройствами.
Микроконтроллер Arduino очень сильно упрощает процесс создания проекта, даже если вы раньше не делали ничего в сфере программируемой электроники. В сети есть тысячи руководств среди которых вы сможете найти то, что нужно.
В дополнение к простоте Arduino, эта плата стоит достаточно дешево и имеет открытый исходный код. Самая популярная модель arduino для начинающих — Arduino Uno, основная на микроконтроллере ATMEGA 16U2 от фирмы Atmel. Есть много различных моделей, которые отличаются размером, мощностью, спецификациями и другими параметрами.
Схемы публикуются под лицензией Creative Commons, поэтому опытные электронщики и производители могут делать свои версии Arduino, это приводит к очень низкой стоимости распространения устройств.
Как прошить Arduino UNO на примере Blink.
Запустить приложение Arduino IDE (подойдет любая версия).
Во вкладке Инструменты/Плата: выберите пункт “Arduino/Genuino Uno”
Подключите Arduino UNO к компьютеру с помощью USB кабеля.
Используйте для прошивки короткий кабель, который идет в комплект с платой! Потому что при использовании кабеля длинной более 30 сантиметров могут возникать помехи, из-за чего загрузка скетчей будет не возможна!
Во вкладке Инструменты выбрать порт, к которому подключена плата Arduino UNO.
В моем случае это COM7, у вас может быть другой! Выберите тот который появился при подключении платы!
Теперь откройте тестовый скетч во вкладке Файл/Примеры/Basics/Blink
Или скопируйте этот скетч и вставьте его в чистое окно редактирования приложения Arduino IDE.
В скетче прописана задержка 1 секунда delay(1000); между командами включить и выключить светодиод, можете отредактировать его на свое усмотрение, и нажмите загрузить.
Скетч загрузится, и на плате будет мигать светодиод с той периодичностью которую вы указали в скетче.
Справочник языка Ардуино
Операторы
Синтаксис
Битовые операторы
|
ДанныеТипы данных
sizeof() Библиотеки
|
ФункцииЦифровой ввод/вывод
Аналоговый ввод/вывод
Только для Due
Расширенный ввод/вывод
Время
Математические вычисления
Тригонометрия
Случайные числа
Биты и байты
Внешние прерывания
Прерывания
|
Платы и модули для функционала
Существует много плат Arduino, описание которых говорит о различиях в объеме памяти, портах, питании, тактовой частоте и др. Одни предназначены для решения простых задач, другие — для решения более сложных.
К популярным платам относятся следующие виды:
- Arduino Uno. Наиболее распространенная плата. Есть большой выбор уроков. Плата допускает замену контроллера. Оснащена 14 цифровыми вводами-выводами (6 ШИМ), 6 аналоговыми входами, флеш-памятью 32 Кб (ATmega328), из которых 0,5 Кб использует загрузчик.
- Arduino Mega 2560. Создана на базе микроконтроллера ATmega2560. Флеш-память — 256 Кб, из которых 8 Кб использует загрузчик. Имеет 54 цифровых вводов-выводов (14 ШИМ), 16 аналоговых входов, 8 Кб оперативной памяти. Среди всех плат «Ардуино» у этой самый большой размер.
- Arduino Due. Оснащена 54 цифровыми вводами-выводами (12 ШИМ), 12 аналоговыми входами (2 выходами). Создана на базе микроконтроллера AT91SAM3X8E с рабочим напряжением 3,3 В и флеш-памятью 512 Кб.
- Arduino Pro Mini 3.3V. Самая миниатюрная плата в семействе Arduino. Напряжение — 3,3 В. Требует использования внешнего программатора. Память данных составляет 2 Кб. Создана на базе микроконтроллера ATmega328P. Количество цифровых выводов — 14 линий (6 из которых — ШИМ), аналоговых — 6.
- Arduino Pro Mini 5V. Аналог предыдущей модели с напряжением 5 В.
- Arduino Nano V3.0. Создана на базе ATmega328. Сдержит 32 Кб памяти, из которых 2 Кб использует загрузчик. Имеет 14 цифровых вводов-выводов (6 ШИМ), 6 аналоговых входов, встроенный порт USB. Напряжение — 5 В.
- Arduino Micro. Разновидность платы c возможностью имитировать различные USB-устройства при подключении к ПК. Оснащена 20 цифровыми вводами-выводами (7 ШИМ), 12 аналоговыми входами.
Кроме того, существуют дополнительные модули и датчики с нужными ответвлениями:
- Датчики. Системы, считывающие, отправляющие и обрабатывающие информацию. Расширяют аппаратные функции проекта.
- Модули. Дополнения, которые позволяют расширить вычислительные мощности проекта. К ним относят карты памяти, вспомогательные процессы.
Датчики можно разделить на категории:
- Устройства получения информации. Датчики и сканеры, позволяющие получить сведения об окружающей среде: давлении, температуре, влажности, расстоянии до объектов. Есть возможность вводить параметры, зависящие от этих показаний. С помощью датчика расстояния можно создавать роботы-пылесосы, которые передвигаются по комнате, избегая препятствий.
- Устройства обработки информации. Реализуются отдельно или совместно с предыдущими датчиками. Используются для совершения промежуточных операций.
- Устройства вывода информации. Это ЖК-экраны, светодиодные индикаторы, сенсорные экраны, динамики и т. д.
Среди наиболее популярных модулей «Ардуино» можно выделить:
- Ультразвуковой дальномер HC-SR04. Датчик, позволяющий с помощью ультразвука измерить расстояние от 2 см до 4 м.
- Инфракрасный дальномер Sharp. Измеряет расстояние от 20 см до 1,5 м посредством инфракрасного излучения.
- Модуль температуры и влажности DHT11. Измеряет температуру в диапазоне от 0 до +50°C и влажность от 20 до 90%. Используется для теплиц или в качестве комнатного термометра. Часто приобретается для умного дома.
- Датчик влажности почвы FC-28. Измеряет влажность почвы или другой среды. Нужен для автоматизированного полива растений.
- Bluetooth HC-06. Помогает организовать беспроводную связь с другими устройствами.
Таблица. Типы данных Ардуино
Тип | Занимаемый размер (байт) | Минимальное значение | Максимальное значение |
boolean | 1 | false | true |
byte | 1 | 255 | |
char | 1 | -128 | 127 |
int, short | 2 | -32768 | 32767 |
unsigned int | 2 | 65535 | |
long | 4 | -2147483648 | 2147483647 |
unsigned long | 4 | 4294967295 | |
float, double | 4 | -3.4028235E+38 | 3.4028235E+38 |
char
Тип позволяет хранить 1 алфавитно-цифровой символ и занимает 1 байт, диапазон допустимых значений — от -128 до 127. В памяти хранится число, соответствующее символу в таблице ASCII, поэтому можно производить арифметические действия.
int
Пожалуй самый популярный тип для хранения целых чисел. Занимает 2 байта памяти и может хранить числа от -32768 до 32767.
long
Тип long служит для хранение больших целых чисел. Диапазон значений от -2147483648 до 2147483647, занимает в памяти переменная 4 байта.
unsigned long
Без знаковое целое число расширенного диапазона может хранить значения от 0 до 4294967295, занимает в памяти переменная 4 байта.
float
Тип данных с плавающей запятой. Используется для нецелых расчетов. Диапазон значений от -3.4028235E+38 до 3.4028235E+38, занимает переменная 4 байта.
Модели Ардуино
Платы Arduino
Вот мы и добрались до самих плат Ардуино, которых на данный момент появилось великое множество благодаря открытости платформы: все схемы и исходные коды находятся в открытом доступе, и вы можете сделать свою версию платы и продавать её, чем активно занимаются китайцы. Единственный пункт: слово Arduino – зарегистрированная торговая марка, и свою плату вам придется назвать как-то по-другому, отсюда и появились всякие Искры, Бузины и прочие так называемые Arduino совместимые платы. Разновидностей плат очень много, но используют они одни и те же модели микроконтроллеров. От модели микроконтроллера зависит объем памяти и количество ног, ну и есть некоторые специальные фишки. На большинстве моделей Arduino стоят 8-битные МК от AVR с кварцевым генератором на 16 МГц (либо ниже), то есть по производительности платы на ATmega не отличаются, отличаются только объемом памяти, количеством ног и интерфейсов/таймеров. Модели Ардуино с МК от производителя ARM, например Arduino DUE, в разы мощнее своих собратьев за счёт 32-битного процессора, но это совсем другая история.
Параметр | ATtiny85 | ATmega328 | ATmega32u4 | ATmega2560 |
Кол-во ног | 8 | 32 | 44 | 100 |
Из них доступны | 5 | 23 | 24 | 86 |
Flash память | 8 Kb | 32 Kb | 32 Kb | 256 Kb |
EEPROM память | 512 bytes | 1 Kb | 1 Kb | 4 Kb |
SRAM память | 512 bytes | 2 Kb | 2.5 kB | 8 Kb |
Каналов АЦП | 3 (4 с rst) | 6 (8 в SMD корпусе) | 12 | 16 |
Каналов PWM | 3 | 6 | 7 | 15 |
Таймеры | 2х 8bit | 2х 8bit | 2х 8bit | 2х 8bit |
1х 16bit | 2х 16bit | 4х 16bit | ||
Serial интерфейс | Нет | х1 | х1 | х4 |
I2C интерфейс | Нет | Да | Да | Да |
Прерывания | 1 (6 PCINT) | 2 (23 PCINT) | 5 (44 PCINT) | 8 (32 PCINT) |
Платы на его основе | Digispark, LilyTiny | Uno, Nano, Pro Mini, Lilypad, Strong | Leonardo, Micro, Pro Micro, BS Micro | Mega, Mega Pro |
Таким образом вы должны сразу понять, что, например, Ардуино Уно=Нано=Про Мини=Лилипад по своим возможностям и взаимозаменяемости. Или Леонардо=Про Микро. Ссылки на недорогие китайские Ардуины вы можете найти у меня на сайте. Точно там же вы найдёте ссылки на кучу датчиков, модулей и другого железа, которое можно подключить к Arduino. О возможностях ардуино по работе с другими железками поговорим в одном из следующих уроках.
Понятие «Ардуино»
Arduino представляет собой устройство, состоящее из одной печатной платы, оснащенное контроллером. Оно позволяет передавать и получать сигналы, управлять датчиками, внешними устройствами: освещением, электродвигателями.
Условно его разделяют на мозг и руки. В качестве мозга выступает микроконтроллер AVR семейства ATmega, чаще всего ATmega328.
«Ардуино» предоставляет такие же возможности, как и любая другая классическая плата с микроконтроллером, но управление реализовано гораздо проще, поэтому устройство доступно начинающим. На плате есть все, что необходимо для управления контроллером: тактирующее устройство, питание, сброс, различные подтяжки.
«Руками» служат электрические выводы. Их разное количество в зависимости от модели ардуино. Выводы бывают цифровыми и аналоговыми, назначение которых различается: на цифровой вывод подается логическая единица (3-5 В) или ноль (0-1,5 В), а аналоговые могут принимать сигнал с любым напряжением от 0 до 5 В и измерять его. Работают они по принципу 10-разрядного АЦП, разбивая диапазон на 1024 цифровых значения. Это позволяет измерять сигналы с аналоговых датчиков (термопары, фотодиода и т. д.) и осуществлять управление с плавной регулировкой.
Resources and Going Further
I’m going to leave it here for now. I hope I’ve demonstrated clearly the benefits of using appropriate data types for your variables. The next tutorial will go into some of the really ugly pitfalls that are hiding in mixing data types and using INAPPROPRIATE data types — for instance, data types that are too small for the largest number that you may encounter.
All of the context for these operations comes from the compiler, and the directions for the context get to the compiler from the user. You, the programmer, tell the compiler that THIS value is an integer and THAT value is a floating point number. The compiler, then, is left trying to figure out what I mean when I say «add this integer to that floating point». Sometimes that’s easy, but sometimes it’s not. And sometimes it SEEMS like it SHOULD be easy, but it turns out to yield results you might not anticipate.
Here’s some further reading you may want to explore with your new knowledge of data types:
- Digital Logic
- How to read a schematic
- Logic Levels
- Binary
Номенклатура плат Arduino
Arduino производит разные платы, каждая из который имеет собственные особенности. Кроме того, Arduino придерживаются модели open source, благодаря чему другие могут модифицировать и производить клоны Arduino, расширять и изменять их функционал и форм-фактор. Ниже приведены короткие сведения о различных моделях Arduino.
Arduino Uno (R3)
Arduino Uno — отличный выбор для начинающих. Очень сбалансированная плата, на которой есть, все, что вам может понадобиться и минимум лишнего. На плате 14 цифровых пинов, которые работаю на вход и на выход (6 из них поддерживают ШИМ-модуляцию), 6 аналоговых входов. Подключается плата с помощью USB. Есть джек для отдельного источника питания, кнопка сброса и т.п. Для начала работы с микроконтроллером достаточно подключить плату к компьютеру с помощью USB кабеля.
LilyPad Arduino
Основная плата в линейки LilyPad Arduino! LilyPad разработана в первую очередь для использования на одежде. Пины соединяются с периферийными устройствами с помощью токопроводящей нити. Есть куча дополнительных плат расширений для LilyPad. Большинство из них спроектированы таким образом, что не боятся влаги.
RedBoard
Разработка SparkFun, которая программируется с помощью USB Mini-B кабеля в оболочке Arduino IDE. Основными преимуществами производитель называет: стабильность работы под ОС Windows 8 благодаря драйверам с необходимой цифровой подписью. На плате используется чип USB/FTDI, который меньше по габаритам по сравнению с чипом на Arduino UNO. Для заливки скетча на плату в IDE выбирается модель Arduino UNO. Регулятор напряжения рассчитан на питание в диапазоне от 7 до 15 вольт.
Arduino Mega (R3)
Arduino Mega — словно старший брат Uno. На плате много (54!) цифровых входов/выходов (14 из них поддерживают ШИМ-модуляцию). Благодаря большому количеству пинов, плата используется для комплексных проектов, в которых подключается большое количество периферии (например, сведодиодов или кнопок). Подключение к компьютеру реализуется таким же кабелем как и на Arduino Uno. Естественно, предусмотрен джек для адаптера.
Arduino Leonardo
Leonardo — первая разработка Arduino, в которой используется один микроконтроллер со встроенным USB. Это значит, что плата становится проще и дешевле. Так как плата подключается непосредственно к USB без конвертера, есть библиотеки, которые позволяют эмулировать компьютерную мышь, клавиатуру и многое другое!
Arduino или AVR?
Думаю, не ошибусь, если скажу, что каждый начинающий радиолюбитель, еще не имеющий опыта работы ни с одной платформой для разработки электронных устройств, затрудняется в своем выборе. Новички советуют одно, профи – другое. На форумах мнения разделяются. Так сложилось, что мы начали развитие темы прикладного программирования с создания устройств на AVR микроконтроллерах. И если для более опытных электронщиков изучение AVR не становится проблемой, то у начинающих появляется море вопросов. Переход к созданию своих устройств на практике бывает затруднен. Но решение есть. Оно довольно простое и не очень затратное. Многие, думаю, слышали о такой платформе под названием “Arduino”.
Arduino – это электронный модуль-конструктор, имеющий в своем составе МК AVR, который является мозгом всего этого конструктора. Отличие от самого МК AVR – это упрощенное программирование, большое количество дешевых периферийных устройств, которые можно купить без проблем, а также простая и безопасная “заливка” программы в МК.
Блок-схема платы Arduino до боли проста:
Периферийными устройствами в данном случае являются разные датчики контроля, а также исполняемые устройства. Всем этим винегретом заправляет МК AVR, который установлен посередине платы
Вот некоторые из периферийных устройств.
В процессе изучения мы будем знакомиться с ними поближе
Этапы настройки Arduino
- Во-первых, установите IDE. Вы можете скачать IDE с сайта Arduino.
- Установите программное обеспечение на свой компьютер.
- Теперь запустите .exe файл Arduino IDE. IDE выглядит так:
- Напишите в редакторе кода свою программу и загрузите её в Arduino. Чтобы сделать это, необходимо подключить Arduino к компьютеру, используя USB кабель.
- В IDE выберите тип Arduino, который вы используете, через меню Tools (Инструменты) → Boards (Платы).
- Теперь проверьте свой код, нажав на значок «галки» вверху окна IDE, затем нажмите на соседний значок «стрелка вправо», чтобы скомпилировать и загрузить код в Arduino.
Внимание: возможно, вам понадобится установить драйвера, если ваша система не обнаружит Arduino
Что такое Arduino
Микрокомпьютеров для инженеров и программистов-разработчиков существует множество. И одной из самых популярных физически-программных платформ является Arduino. Она привлекает особенной простотой, совместимостью с большинством операционных систем и низкой стоимостью. А мы помогаем разобраться в том, что представляет собой платформа Arduino.
Arduino — это открытая электронная платформа, основанная на простых в использовании железе и программном обеспечении.
Платы с микроконтроллером Arduino способны считывать входящую информацию (загоревшаяся лампочка сенсора, палец на кнопке или сообщение в Твиттер), а зачем переформировывать её в исходящее действие — активировать двигатель, зажечь светодиод или опубликовать что-то в сети.
На протяжении нескольких лет платформа использовалась для создания многих тысяч проектов, начиная от конструирования простых бытовых девайсов до разработки сложных научных инструментов. Вокруг платформы построилось сообщество студентов, учёных и просто интересующихся со всего мира. И выбирают именно эту платформу за удобство и многофункциональность.
Программное обеспечение для Arduino
Для работы с платформой Arduino вам не обязательно будет ставить себе определённое программное обеспечение. Начать программировать можно с Arduino Web Editor, позволяющим сохранять скетчи в облачном хранилище. Инструмент постоянно обновляется онлайн, ничего скачивать и переустанавливать не приходится. Но для работы, конечно, потребуется постоянное интернет-соединение.
Однако, если вы предпочитаете программировать оффлайн, вам следует скачать последнюю версию приложения для рабочего стола Arduino. Это открытое программное обеспечение, совместимо со следующими операционными системами:
- Windows;
- Mac OS (Lion или более ранние версии);
- Linux 32 bit;
- Linux 64 bit;
- Linux ARM.
Актуальная версия приложения для рабочего стола будет работать с любой версией микрокомпьютера Arduino, никакие дополнительные программы под определённое железо устанавливать не нужно.
Главное преимущество всей этой открытой платформы именно в её простоте.
Если вы только начинаете работать с Arduino, вас наверняка порадует огромное количество понятных инструкций, официально переведённых даже на русский язык.
Преимущества платформы Arduino
Для физического программирования существует множество микрокомпьютеров и платформ, в том числе популярный и дешёвый Raspberry Pi. Большинство существующих программ помогает облегчить работу и обучение программированию, Arduino не становится исключением. Но у этой платформы есть множество весомых преимуществ перед рядом конкурентов:
- Низкая цена в сравнении с большинством подобных платформ.
- Кроссплатформенность. С Arduino работать можно хоть на Windows, хоть на Mac OS, тогда как большинство платформ разрабатывается исключительно под Windows.
- Простая программная обстановка. Платформа отлично подходит для новичков, а подробных уроков в сети великое множество.
- Открытый ресурс и расширяемое программное обеспечение. Продвинутые программисты могут без проблем самостоятельно расширять под себя ПО (и даже железо).
Чтобы начать пробовать свои силы на платформе Arduino, достаточно приобрести необходимые физические компоненты. Подбор железа будет зависеть от ваших целей в программировании. Если вы ищете вдохновения, вам на помощь всегда готовы прийти программисты со всего мира, образовавшие вокруг платформы целое сообщество.
Тестируем разные типы данных (Умножение/Деление)
Теперь давайте взглянем что будет в случае «более сложных» математических операций — умножение и деление.
Ниже представлены несколько скриншотов результатов операции умножения:
Оцените затраченное время: 4 миллисекунды для byte, 8 для int или long и 12 для float. Итак, умножение явно поддерживается на уровне встроенных инструкций в нашем процессоре на Arduino. В результате операция умножения обрабатывается достаточно быстро. А что же будет с делением?
Упс. Деление сданных типа byte не так уж критично по времени — 16 миллисекунд, но long тянет 48?! Как-то не очень впечатляет. Оказывается, в процессоре Atmega, которым оснащается Arduino, нет встроенных инструкций для операций деления и компилятору приходится каждый раз ее генерировать. Так что наш последний урок при работе с разными типами данных Arduino: не все математические операции отрабатывают по подобным алгоритмам. Операция деления занимает гораздо больше времени чем умножение или нахождение суммы (или операция нахождения разности, хотя это по сути тоже, что и сложение только со знаком минус). А более сложные операции вроде нахождения квадратного корня или синуса угла займут еще больше времени. Порой обработка результатов длится настолько долго, что гораздо проще просто получить список необходимых значений с помощью Arduino, передать их на персональный компьютер и уже там найти нужные вам синусы, косинусы, тангенсы, квадратные корни и т.д. и т.п.
Надеемся, что эта статья на наглядных примерах помогла вам разобраться с базовыми типами данных, которые используются для программирования плат Arduino.
Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!
Преобразование String в массив char
Тип данных Char позволяет объявлять текстовые строки несколькими способами:
- char myStr1; – в данном случае объявлен массив определенного размера.
- char myStr2 = {‘a’, b, ‘c’, ‘d’, ‘e’}; – объявлен сам массив. Конечный символ не записанявно, его прибавит сам компилятор.
- char myStr3 = {‘a’, b, ‘c’, ‘d’, ‘e’’/0’}; – объявлен массив, при этом в конце прописан признак окончания строки.
- char myStr4 = “abcde”; – инициализация массива строковой постоянной. Размер и завершающий символ добавляются автоматически компилятором.
- char myStr5 = “abcde”; – инициализация массива с точным указанием его размера.
- char myStr 6 = “abcde”; – аналогично, но размер указан больше для возможности использования строк большей длины.
Еще раз напомним, что в типе данных char строковые константы нужно записывать в двойные кавычки «Abcde», а одиночные символы – в одинарные ‘a’.
Конвертировать строку в массив сhar array можно при помощи следующего кода:
String stringVar = “111”;
char charBufVar;
stringVar.toCharArray(charBufVar, 20);
Можно сделать обратное преобразование – char to string.
char[] chArray = “start”;
String str(chArray);
Пример преобразования String to const char*. Указание звездочкой char*означает, что это массив указателей.
String stringVar=string (`start);
Char charVar;
stringVar.toCharArray(charVar, sizeof(charVar));
Функции с возвращаемыми значениями
До сих пор мы использовали только переменные, которые так или иначе зависели
только от номера вызова функции , т.е. так или иначе зависящие от
времени, прошедшего с момента старта Arduino.
Это интересно, но не даёт таких возможностей к написанию программ, как
получение значений из-вне. Допустим, к Arduino подключён какой-то сенсор:
датчик освещённости, датчик газа, простой потенциометр или что-то ещё. Как
получить его показания и использовать их в программе для чего-то полезного?
Если говорить о сенсорах с аналоговым сигналом, для
получения показаний с них существует встроенная функция .
Давайте воспользуемся ей, чтобы сделать программу для устройства, которое
изменяет яркость свечения светодиода, подключённого к 5-му пину в зависимости
от поворота ручки потенциометра, подключённого к пину .
#define LED_PIN 5 #define POT_PIN A0 void setup() { pinMode(LED_PIN, OUTPUT); } void loop() { int value = analogRead(POT_PIN); analogWrite(LED_PIN, value 4); }
Первое, что мы видим — это макроопределение пина с потенциометром:
#define POT_PIN A0
В качестве значения используется не просто число, а нечто с именем . Оно
написано большими буквами, поэтому можно предположить, что это встроенное
макроопределение. И это действительно так! для Arduino Uno, например,
определено как . Для других плат значение может быть другим. Мы не
хотим помнить об этих тонкостях, поэтому просто использовали . Это
всегда означает «нулевой аналоговый вход».
Таким образом в качестве значения макроопределения мы использовали другое
макроопределение. Так делать можно и это довольно распространённая практика.
Теперь рассмотрим . В первой строке определяется переменная ,
а в качестве значения ей присваивается значения выражения
. Но ведь это вызов функции, а не арифметическое
выражение!
Совершенно верно. Некоторые функции помимо того, что делают что-то полезное
умеют так же возвращать значение обратно, в вызывающий код. Функции вроде
или не возвращают ничего, по задумке их автора, а
вот возвращает некоторое целочисленное значение.
Чтобы понять какие аргументы функция принимает, возвращает ли она что-нибудь и
если возвращает, то что, следует обращаться к документации на эту функцию.
Что касается , она принимает один аргумент: номер пина, с
которого необходимо считать значение аналогового сигнала. А возвращает эта
функция значение от 0 до 1023, где:
-
Входное напряжение в 0 В возвращается как
-
2 В возвращается как
-
2,5 В возвращается как
-
И так далее, до напряжения в 5 В, которому ставится в соответствие
Таким образом в первой строке мы просто считываем сигнал с
потенциометра, получая угол поворота его ручки в виде целого числа в пределах
от 0 до 1023.
Как мы помним, функция , которой мы пользуемся для управления
яркостью светодиода ожидает целое число от 0 до 255 в качестве второго
аргумента. Но у нас оказалась переменная с другим диапазоном. Что делать?
Просто поделить значение на 4. Так наш диапазон будет смасштабирован до того,
который подходит для . Максимуму из одного диапазона равному 1023
станет соответствовать максимум из другого диапазона: 1023 / 4 = 255.
Вспоминая о компактной записи, мы можем сделать наш чуть лаконичнее:
void loop() { analogWrite(LED_PIN, analogRead(POT_PIN) 4); }
Итак, вы научились работать со сложными выражениями, макроопределениями и
переменными. Использовать функции с возвращаемыми значениями и встраивать
вычисления. Этих знаний уже достаточно для создания нехитрых устройств.
Пробуйте, экспериментируйте, учитесь!
3Цифровые и аналоговые выводы
Не все выводы у Arduino одинаковые. Есть выводы цифровые, а есть аналоговые. Принципиальная разница между ними в том, что на цифровых выводах может быть только два значения: либо логическая «1» (TRUE, от 3 до 5 вольт), либо логический «0» (FALSE, от 0 до 1,5 вольт), а на аналоговых выводах диапазон от логической «1» до «0» поделён на множество мелких участков.
Зачем это нужно? Давайте рассмотрим такой наглядный пример. Если подключить к цифровому выводу Arduino светодиод и подать на вывод логическую «1», то светодиод загорится с максимальной яркостью; если подать «0» – светодиод погаснет. Никаких промежуточных вариантов нет. Если светодиод подключить к аналоговому выводу, то яркостью светодиода можно управлять плавно. На практике к аналоговым выводам чаще всего подключаются какие-либо аналоговые датчики.