Универсальный внешний накопитель для всех iOS-устройств, совместим с PC/Mac, Android
Header Banner
8 800 100 5771 | +7 495 540 4266
c 9:00 до 24:00 пн-пт | c 10:00 до 18:00 сб
0 Comments

Содержание

Взаимозаменяем потенциометр, джойстик и энкодер в схемах на Arduino (Часть I)

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

Приветствую всех поклонников и поклонниц Arduino на сайте магазина Amperkot.ru. С этой статьи я начинаю интересную тему “Взаимозамена потенциометра, джойстика и энкодера в различных проектах”. Этот большой и структурированный объем материала будет полезен начинающим и более продвинутым пользователям.

На примере простых проектов будет разобрано и изучено много полезного материала, но самое главное, что после прочтения всего цикла, 95% из Вас будут знать намного больше, чем ранее.

Ваш покорный слуга будет намеренно моделировать проблемы (которые могут встретиться и в реальной жизни), чтобы подтянуть гибкость и остроту мышления читателя в теме Arduino!

В этом цикле статей Вас будут ждать:
– Интуитивно понятное объяснение основ написания скетчей для Arduino;
– Разбор схем подключения;
– Поиск интересных и самых разнообразных способов решения проблем в проектах на аппаратном, программном и “колхозном” уровнях.

Введение

Итак, потенциометр, джойстик и энкодер. Всё на первый взгляд просто.

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

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

Я рассмотрю несколько несложных схем (управление яркостью светодиода, изменение мощности двигателя, навигация по меню LCD дисплея) и подробно объясню, как пишется код во всех случаях. В некоторых случаях мы неизбежно будем сталкиваться с трудностями, которые только сильнее приблизят нас к истине и пониманию некоторых тем!

А теперь кратко о трех наших героях!

Немного теории

Потенциометр — он же переменный резистор, он же “какая-то крутилка с ручкой”, предлагает нам пропорционально изменять сопротивление внутри устройства в зависимости от положения ручки. На его выходе получаем напряжение (в зависимости от подключения контактов питания, в крайних положениях ручки, получаем значения 0 и 5 вольт, так как плата Arduino выдает максимальное напряжение 5 вольт) которое с помощью Ардуино преобразуется в цифровые значения от 0 до 1023. Оперируя ими, можно влиять на параметры различных устройств.

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

Джойстик — устройство для ввода данных по двум осям: OX и OY, а также с помощью встроенной кнопки. В состоянии покоя напряжение на этих контактах равняется 2,5 вольтам, а с помощью перемещению стика изменяется в диапазоне от 0 до 5 вольт. Основное отличие джойстика от энкодера и потенциометра — выходные значения не сохраняются, так как стик не фиксируется и всегда возвращается в исходное положение

Подготовимся заранее

Прежде, чем начать практическим путем получать полезные навыки, подготовим компоненты, которые нам понадобятся. Купить их Вы можете на сайте интернет-магазина Amperkot.ru по вполне себе демократичным ценам!

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

А если Вы живете в одной из двух столиц России: Санкт-Петербурге или Москве, то сможете получить необходимое в течение дня (самовывоз). Очень даже удобно!

Вот список компонентов, которые нам понадобятся в этих уроках:

– Плата Arduino Uno + usb кабель в комплекте для подключения к компьютеру
– Беспаечная макетная плата (число точек не принципиально важно)
– Потенциометр на 10кОм
– Модуль энкодера (либо обычный энкодер, но тогда будете дольше и усерднее его подключать к плате)
– Модуль джойстика
– Резисторы 220 Ом
– Резисторы 10 кОм
– Керамические конденсаторы на 100 мкФ (?)
– Перемычки “папа-папа” и “папа-мама” (по 20 штук каждого типа будет достаточно).
– Светодиоды 5 мм

А теперь к практике

Наша с Вами задача — научиться находить нестандартные выходы из любых проблем и не опускать руки, поэтому смоделируем эти самые ситуации и поработаем с кодом!

Пример 1.1: Регулировка яркости светодиода потенциометром

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

Обратите внимание, что в схеме не используется подтягивающий резистор. Такие резисторы (чаще всего номиналом от 10 до 30 кОм) используются для уменьшения помех в данных, передаваемых через аналоговый сигнал. Но многие забывают, что в плату Arduino уже встроены такие резисторы на каждый контакт. В данной же ситуации использовать его нет смысла, так текущая задача не требуется высокой точности значений. Но в следующих частях этого большого ликбеза эта тема обязательно будет освещена!

Настало время написать код. В следующих нескольких абзацах я позволю себе написать небольшое руководство по структуре написания кода на Arduino, чтобы начинающие не чувствовали себя некомфортно:) Все, кто уже обладают этими базовыми навыками, — можете пропустить этот текст, либо постараться почерпнуть для себя что-нибудь новое.

Для начала посчитаем, сколько устройств ввода и вывода информации мы используем в нашей схеме: их два — переменный резистор и светодиод. Теперь обозначим их в коде.

Сделаем это с помощью констант (ячейки памяти в контроллере). Используя директиву #define, мы создаем ячейку памяти, в которой будет храниться значение пина платформы Arduino, которому соответствует подключенное устройство.

Чтобы понимать, где будет храниться информация, и легко к ней обращаться в будущем, назовем каждую из констант удобными словами (led, pot), а после оператора присваивания (‘=’) записываем данные, которые будем хранить в конкретной ячейке. В нашем случае, это номера пинов платы Arduino, к которым подключаются наши устройства. Выглядит это так:

Далее в коде идут две обязательные функции — void setup() и void loop(). В первой пишется то, что контроллер обработает только один раз (сразу после подачи питания), а во второй прописываются уже конкретные действия, которые мы хотим выполнять с нашими устройствами на протяжении всей работы кода. Код обрабатывается сверху вниз, однако после выполнения последней команды в void loop() контроллер возвращается в начало функции void loop() и продолжает выполнять те же самые действия в том же самом порядке. Так и проявляется цикличность. Не зря loop переводится с английского, как “петля”.

Ранее мы выяснили, что в нашей схеме будет два устройства. Им мы дали имена при помощи констант. Теперь определимся с тем, что они должны будут выполнять. Поставим задачу — пропорциональное изменение яркости светодиода при вращении ручки потенциометра.

Теперь классифицируем устройства по их назначению: устройства ввода и вывода данных (относительно платы Arduino конечно же). Когда мы крутим ручку потенциометра, то мы лично изменяем значения на его сигнальном контакте, которые затем считываются на аналоговом пине и обрабатываются контроллером. Это те данные, которые поступают/вводятся в контроллер, а значит и потенциометр будет устройством ввода данных.

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

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

В функции void loop() прописываем цикличные действия: считывание данных с контакта потенциометра, регулировка яркости светодиода.
Работу с контактами на плате Arduino можно преобразовать для лучшего понимания в такую простую схему:

Имеются два типа контактов: цифровые (могут выдавать только два значения: 1 и 0, как реле или выключатель) и аналоговые (диапазон значений от 0 до 1023). Есть еще ШИМ контакты (это некоторые цифровые контакты, но со встроенным аналого-цифровым преобразователем, обозначаются на плате вот таким значком ~): они могут работать в обоих режимах. Все зависит от того, как Вы это пропишете в коде.

Далее самые распространенные функции ввода (чтения) и вывода (написания команды) данных — Write и Read. Запомнить их очень просто: если мы хотим считать данные с пина контроллера, то иначе говоря, хотим прочесть их (как с открытой книги), а значит пишем после типа контакта (digital или analog) слово Read (с английского языка “читать”). В случае вывода данных можно представить, что мы прописываем команду нашему устройству сделать то или иное действие (в нашем случае — команда светодиоду включиться). Писать с английского языка “write”.

Так и получаются эти функции путем объединения двух различных слов: digitalWrite, digitalread, analogWrite, analogRead.

Для функций с чтением данных прописываем в скобках только один параметр (номер пина, с которого происходит считывание): analogRead (pot).

Для функций с выводом данных прописываем в скобках два параметра: номер пина и значение сигнала. Таким образом яркость светодиода будет настраиваться функцией analogWrite (номер пина, к которому подключен светодиод, логическое значение). Не забывайте, что для цифровых пинов допустимо на месте второго параметра писать значения 1 или HIGH (высокий логический уровень) и 0 или LOW (низкий логический уровень), а для аналоговых или цифровых с поддержкой ШИМ число от 0 до 255 (на выводе Arduino может генерировать только такой диапазон значений).

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

Чтобы эти данные было удобнее использовать в процессе работы кода, их нужно сохранить в новую ячейку памяти — переменную. Она создается также, как и константа, только вместо #define пишется тип переменной (который определяет ее размер). Какие бывают типы переменных можно посмотреть в любой табличке в Яндекс Картинках. Нам будет достаточно целочисленного типа int. Создадим переменную с названием val (от английского value — “значение”) и присвоим ей значения с вывода потенциометра. Теперь у нас появилась ячейка, в которой будут храниться эти данные. В любой момент мы можем обратиться к ней, чтобы выполнить с данными какие-либо действия.

Так как на выходе Arduino может генерировать значения от 0 до 255, то нужно пропорционально уменьшить значения с потенциометра: уменьшить их в четыре раза. Полученный результат сохраним в новую целочисленную переменную “brightness”. А затем значения из этой переменной выставим в качестве второго параметра в функции analogWrite (led, brightness) — теперь на пин, которому мы дали название led, подается напряжение от 0 до 5 вольт, которое пропорционально значения с потенциометра. Задача выполнена!

Пример 1.2: Регулировка яркости светодиода джойстиком

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

Будем считывать значения с джойстика по оси OX, а затем при помощи функции map() преобразуем их в значения для яркости светодиода в качестве параметра функции analogWrite(). Джойстик подключим без использования обвязки, так как в случае с джойстиком помехи в данных будут меньше, а в случае со светодиодом они роли не играют. Но Вы должны помнить об этом на будущее. Контакты с плавным напряжением подключим через резисторы. Схема подключения представлена на картинке ниже:

По такой же логике, как и в примере 1.1 напишем код. Получаем то, что на картинке ниже:

Здесь у нас также 2 устройства, но джойстик в отличие от потенциометра позволяет считывать значения с трех разных контактов (по оси OX, по оси OY и со встроенной кнопки), поэтому введем 4 константы. В остальном — всё то же самое.

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

Заключение первой части

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


Данная статья является собственностью Amperkot.ru. При перепечатке данного материала активная ссылка на первоисточник, не закрытая для индексации поисковыми системами, обязательна.


Перспективы развития микропроцессорной платформы Arduino, её применение и пример реализации на основе пожарной сигнализации

В настоящее время существует множество микроконтроллеров и платформ для осуществления управления физическими процессами применительно к микропроцессорным комплексам. Большинство этих устройств объединяют разрозненную информацию о программировании и заключают её в простую в использовании сборку.

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

Платформа Arduino может стать основным элементом для исследования и решения задач в областях мехатроники и робототехники.

Целью статьи является анализ возможностей аппаратной вычислительной платформы Arduino и реализация системы пожарной сигнализации на основе Arduino.

Задачи:  ознакомление с функциональным описанием и техническими характеристиками на примере платы Arduino UNO, составление сравнительной характеристики наиболее популярных плат Arduino и определение перспектив применения данного устройства.

Основные достоинства и описание платформы:

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

Это платформа, предназначенная для управления физическими процессами с использованием ЭВМ с открытым программным кодом, построенная на простой печатной плате с современной средой для написания программного обеспечения.

Платы Arduino строятся на основе микроконтроллеров фирмы Atmel, а также элементов обвязки для программирования и интеграции с другими схемами. На платах присутствует линейный стабилизатор напряжения +5В или +3,3В. Тактирование осуществляется на частотах 8,16 или 87Мгц кварцевым резонатором. [4]

В микроконтроллер предварительно прошивается загрузчик, поэтому внешний программатор не нужен. На концептуальном уровне все платы программируются через RS-232.

Интегрированная среда разработки Arduino – это кросплатформенное приложение на Java, включающее в себя редактор кода, компилятор и модуль передачи прошивки в плату.

Среда разработки основана на языке программирования Processing и спроектирована для программирования новичками не знакомыми близко с разработкой ПО. Строго говоря, это язык C++, дополненный некоторыми библиотеками. [3]

Программы образовываются с помощью препроцессора, а затем компилируются с помощью AVR-GCC.

Преимуществами плат семейства Arduino являются:

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

2) Наличие плат расширения, предназначенных для увеличения функционала и выполнения конкретизированных технических задач без необходимости самостоятельного проектирования дополнительной периферии (платы для управления двигателями, датчиковые платы, беспроводные интерфейсы, в том числе Wi-Fi Bluetooth и GPS, дисплеи, устройства ввода) – несколько десятков видов, более 300 вариантов исполнения. Если использовать Arduino совместно с другими электрическими и цифровыми устройствами, то можно получить бесконечное количество вариантов исполнения.

3) Полностью адаптированная для конечного пользования среда программирования, подходящая для всей линейки плат Arduino и их клонов, включая ПО для программирования контроллеров для OC Android.

4) Свободная, бесплатная лицензия на устройства и ПО.

5) Существует полный русский перевод языка Arduino, предназначенный для преодоления языкового барьера при распространении платформы по России.

Функциональное описание и технические характеристики на примере платы Arduino UNO:

Arduino UNO – этот контроллер построен на ATmega328. Платформа имеет 14 цифровых входов/выходов (6 из которых могут использоваться как входы ШИМ (Широтно-импульсная модуляция)), 6 аналоговых входов, кварцевый генератор 16Мгц, разъем USB, силовой разъем ICSP м кнопку перезагрузки. Для работы необходимо подключить платформу к компьютеру с помощью USB, либо подать питание при помощи адаптера AC/DC или батареи/аккумуляторов. [2]

Пример применения Arduino в пожарной безопасности – детектор дыма

Устройство разработано для предупреждения о повышении концентрации угарного газа и включения сигнала тревоги в случае превышения порогового значения.

Чувствительным элементом детектора выступает датчик широкого спектра газов MQ-2.

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

  1. Платформы: Arduino Uno, Iskra Neo, Troyka Slot Shield.
  2. В качестве базы для компонентов схемы – Slot Box.
  3. Датчик широкого спектра газов MQ-2.
  4. Два светодиода.
  5. Пьезопищалка.

Этапы разработки устройства:

Первый этап работы – написание алгоритма работы устройства.

Второй этап – сбор схемы.

Третий этап – написание кода программы (скетча). Для этого с официального сайта необходимо скачать Arduino IDE (ПО для написания программного кода и загрузки его на любую плату Arduino) и библиотеку для работы с датчиком дыма TroykaMQ. [1]

Четвертый этап – прошивка контроллера скетчем.

Пятый этап – запуск устройства.

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

Вывод:

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

 

Оригинал публикации (Читать работу полностью): Перспективы развития микропроцессорной платформы Arduino, её применение и пример реализации на основе пожарной сигнализации

Arduino и Windows 10 – Windows IoT

  • Статья
  • Чтение занимает 2 мин
Были ли сведения на этой странице полезными?

Оцените свои впечатления

Да Нет

Хотите оставить дополнительный отзыв?

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

Отправить

В этой статье

Важно!

группа Windows 10 IoT больше не обслуживает Arduino.

Arduino и Windows 10 совместная работа, чтобы помочь вам сделать замечательные проекты. приступайте к работе, щелкнув одну из ссылок ниже. Наши технологии поддерживают Arduino УНО и мегасимволов, а также новые Arduino 101.

Arduino провода для устройств Windows 10 IoT Базовая

чтобы обеспечить использование привычного языка Arduino для устройств IoT Core, предоставляется шаблон проекта Visual Studio для Arduinoной привязки. Шаблон проекта Arduino провода позволяет разрабатывать, развертывать и выполнять отладку Arduinoных набросков на поддерживаемых устройствах IoT Core.

Приступая к работе с Arduino провода

Windows Remote Arduino

Windows Remote Arduino — это библиотека среда выполнения Windows с открытым исходным кодом, которая позволяет руководителям управлять Arduino с помощью Bluetooth, USB, Wi-Fi или подключения Ethernet. он позволяет разработчикам включать датчики Arduino в свои Windows проекты или даже отгружать ресурсоемкие вычислительные работы из Arduino в Windows. Windows удаленную библиотеку Arduino можно использовать с любыми языками WinRT (C++/cx, C# и JavaScript).

просмотр Windows удаленных Arduino на GitHub

Купить Arduino

Истории успешных людей

• Идея «Будиста» пришла мне в 2005 году, а реализовать ее удалось в 2011-м. У меня с 2002 года была web-студия, мы создавали сайты на заказ, интернет был нашей профессией. Но я был молод, а мир — не готов к этой безумной идее… В 2011 году я собрал команду, рассказал о задумке. Они сказали: «Супер, давай делать!» И мы сделали.

• На сегодня в проект вложено $4,5 млн. Пока он не окупается. Это венчурный бизнес — как Facebook, Twitter, Google, Instagram. В такие проекты какое-то время инвестируют, и потом они окупаются в сотни и тысячи раз.

• Деньги на развитие бизнеса нам дают венчурные фонды. Сначала я потратил свои — обанкротил web-студию. Когда первые деньги закончились, решил продать машину, посчитал и понял, что так смогу продлить жизнь сервиса на шесть дней. И в тот же день, когда я все просчитал, о нас вышла статья в Forbes, и мне написал венчурный бизнес-ангел Стас Тихонов: «Господа, у вас интересный проект, я бы хотел инвестировать». Мы увиделись и через день получили $400 тысяч. Затем был еще один раунд, он был уже более сложный. Но мы встретили фантастический венчурный фонд Leta Capital, на мой взгляд, единственный в России, который готов инвестировать в по-настоящему новое. Потому что в России в основном делают клоны западных успешных проектов, а у этой штуки нет аналогов, никто не доказал, что она взорвет мир. Cледующий раунд уже очевидно будет не в России, а в США.

• В «Будисте» все довольно просто. Например, есть ­лимит разговоров — две бесплатные минуты. И этого времени людям часто не хватает. Разговор можно продолжить, но за деньги. Самое клевое, что мы сделали за последнее время, — запустили будильник со звездами. Мы садимся со знаменитостью в студии, делаем 30 записей. И известный человек рекламирует эту ­функцию у своей аудитории: ребята, покупайте мой будильник. А периодически кого-то будит вживую. Ты поставил будильник, ждал, что тебе придет автоматическое сообщение, а там — кумир. Это магия!

• Я слышал много отзывов: да я бы послал, если бы мне позвонили рано утром, я был бы злой! Но на самом ­деле оказывается, что вдруг человек, например, из Канады, вас будит. У него нет никаких интересов познакомиться, он даже не знает, кому он звонит — мужчине или женщине, он просто решил сделать доброе дело: подарить вам улыбку, помочь проснуться, добиться чего-то в этот день. Человек абсолютно бескорыстно помогает. Это безумное чувство: весь мир такой злой, все люди меркантильные, а тут человек делает что-то просто так. У вас утро начинается с пары минут доброго честного разговора без подоплек. И вы лежите, вы вроде бы невыспавшийся, но улыбаетесь. Ни один будильник не подарит настроение, веру в себя, в то, что мир не так плох.

• Желающих быть разбуженными, конечно, больше, процентов 70. Это пассивная функция, она проще. Зато те, кто будит, делают в среднем около 40 звонков в месяц. Но у нас есть люди, которые разбудили 30 тысяч человек.

• Я заметил: люди будят ради «­спасибо». Когда незнакомый человек искренне ­говорит: «Спасибо огромное, я очень рад, что поговорил с тобой», он дарит ощущение, что все не зря. И на это подсаживаются! То есть люди начинают звонить, пытаться сделать человеку особенно приятно, ­чтобы тот особенно искренне сказал «спасибо». Это обмен энергиями без ­других подоплек.

• Сегодня на «Будисте» срабатывают около 100 тысяч будильников в сутки. Каждый из них — это два собеседника, которые звонят по телефону, и мы оплачиваем эти минуты. Это достаточно дорого.

• С первого дня мы не делали никакой рекламы. Все пользователи узнали о нас через сарафанное радио. Сейчас 1,5 млн пользователей. И нам это нравится. Это означает, что мы даем людям что-то, чем хочется пользоваться, делиться.

• Сервис работает во всем мире, но на русском языке. ­Наша следующая задача — запуск по всему миру. Ближайший состоится в четырех странах: США, Канаде, ­Сингапуре и Великобритании.

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

• Сервис не предназначен для знакомств, и мы это сравниваем с естественным течением жизни. Вы пошли в магазин, стоите в очереди за хлебом, и там может состояться неожиданная встреча. Но вы шли не за встречей, а за хлебом. Вот здесь тоже — вы хотели проснуться, а тут неожиданно голос вашей мечты. Так бывает каждый день. Мы знаем про десяток свадеб после таких разговоров.

• Мы не даем никаких инструментов для того, чтобы ­люди находили друг друга. Они делают это сами путем каких-то сумасшедших трудозатрат. Пишут в ­интернете: «Я сегодня говорил с человеком…» Все подключаются, ­помогают, ­начинают искать.

• Одну помолвку будистов мы провели в прямом эфире. Мальчик и девочка никогда вживую не встречались, но уже несколько месяцев общались, переписывались «ВКонтакте». Они из разных городов, и у них не было возможности увидеться. Мы пригласили девочку в студию, а мальчика привели туда секретно. И вот он неожиданно выходит, встает на одно колено и делает ей предложение. И она соглашается — в прямом эфире!

Данила Антоновский

Человек-стартап, придумавший сеть парикмахерских Chop Chop, митбол-кафе Meatball Company и сайт TheLocals, оценил проекты наших героев.

Что такое Arduino, как это работает и что можно делать с Arduino – Circuit Schools

Сегодня мы собираемся объяснить , что такое Arduino , а также основные характеристики, которые его определяют. Это одна из самых популярных материнских плат в мире разработчиков, но, в отличие от Raspberry Pi, она не имеет единой модели, а предлагает открытые аппаратные базы, чтобы другие производители могли создавать свои собственные платы.

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

Что такое Arduino

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

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

Бесплатное программное обеспечение – это компьютерная программа , код которой доступен любому , так что любой желающий может использовать и изменять его.Arduino предлагает платформу Arduino IDE (интегрированная среда разработки), которая представляет собой среду программирования, с помощью которой любой может создавать приложения для плат Arduino, чтобы им можно было предоставить все виды утилит.

Происхождение Arduino, проект

Этот проект Arduino появился на свет в 2003 году. Его создали несколько студентов из Института интерактивного дизайна в Ивреа, Италия. Они сделали это для того, чтобы у студентов-электронщиков была более дешевая альтернатива популярному BASIC Stamp, платам, которые в то время стоили более ста долларов. Так что не все могли себе их позволить.

Результатом тяжелой работы стала Arduino, плата со всеми необходимыми элементами для подключения периферийных устройств к входам и выходам микроконтроллера , которая может быть запрограммирована как в Windows, так и в macOS и GNU / Linux. Проект, который продвигает философию «обучения на практике», что означает, что лучший способ учиться – это практически перевернуть проект.

Как работает Arduino

Arduino – это плата на базе микроконтроллера ATMEL AVR.Микроконтроллеры – это интегральные схемы , в которых могут быть записаны инструкции , которые вы пишете на языке программирования, который можно использовать в среде Arduino IDE. Эти инструкции позволяют создавать программы, которые взаимодействуют со схемой на плате.

Наиболее часто используемые микроконтроллеры на платформах Arduino – это Atmega168, Atmega328, Atmega1280, ATmega8 из-за их простоты, но он расширяется до микроконтроллеров Atmel с 32-битной архитектурой ARM, а также до микроконтроллеров Intel.

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

С другой стороны, Arduino предоставляет нам программное обеспечение, состоящее из среды разработки (IDE) , которая реализует язык программирования Arduino, инструментов для передачи прошивки на микроконтроллер и загрузчика, выполняемого на плате.Основная особенность программного обеспечения и языка программирования – его простота и удобство использования.

Arduino обещает стать простым способом реализации интерактивных проектов для всех. Для тех, кто хочет создать проект, процесс заключается в загрузке и установке IDE, небольшом поиске в Интернете и просто «вырезании и вставке» интересующего нас кода и его загрузке в нашу HW. Затем выполните соответствующую проводку с периферийными устройствами, и у нас уже есть программное обеспечение, взаимодействующее с оборудованием. И все это с минимальными экономическими вложениями: стоимостью Arduino и периферийных устройств.

Arduino – это проект, а не конкретная модель платы, что означает, что разделяя его базовую конструкцию, вы можете найти различных типов плат . Существуют различные формы, размеры и цвета для нужд проекта, над которым вы работаете, есть простые или с улучшенными функциями, Arduinos, ориентированные на Интернет вещей или 3D-печать, и, конечно же, в зависимости от этих функций вы найдете переменный диапазон цен.

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

Для чего используется Arduino? что вы можете сделать, если у вас есть Arduino.

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

С Arduino можно автоматизировать что угодно, чтобы создавать автономных агентов (если хотите, мы можем называть их роботами).Для управления освещением и устройствами или чем-то еще, что вы можете придумать, вы можете выбрать решение на основе Arduino, особенно при разработке устройств, подключенных к Интернету.

Arduino – это технология с быстрой кривой обучения и базовыми знаниями в области программирования и электроники, которая позволяет разрабатывать проекты в области умных городов, Интернета вещей, носимых устройств, здравоохранения, досуга, образования, робототехники и т. Д.

Важность сообщества Arduino

Есть еще один важный фактор успеха Arduino – это сообщество, которое поддерживает все эти разработки, делится знаниями, разрабатывает библиотеки для облегчения использования Arduino и публикует свои проекты, чтобы их можно было воспроизвести, улучшить или стать основой для другой родственный проект.

Итого:

Arduino = HW + SW + Сообщество

Arduino = HW + SW + Сообщество

Ниже показано, как выглядит первый официальный Arduino

Arduino упрощает работу с микроконтроллерами и предлагает следующие преимущества: дешевизна, мультиплатформенность, простая среда программирования, бесплатное и расширяемое программное обеспечение через библиотеки C ++, бесплатное и расширяемое оборудование.

При работе с Arduino априори обрабатываются различные технологические концепции, которые не имеют ничего общего друг с другом, а объединяют их: цифровая и аналоговая электроника, электричество, программирование, микроконтроллеры, обработка сигналов, протоколы связи, архитектура процессора, механика, двигатели, электроника. дизайн платы и т.д…

Важность Arduino в мире оборудования

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

По этой ссылке можно найти исследование состояния индустрии оборудования в 2016 году. Все больше компаний разрабатывают инновационные продукты, и у нас есть более совершенные инструменты для создания прототипов и производства. Доступ к этим инструментам и знания о них становятся все более универсальными. Из этих инструментов выделяются Arduino, Raspberry Pi и 3D-принтеры.

Будущее за Arduino. Где сейчас Ардуино и где она… | Суйог Гунджал

Где сейчас Arduino и куда она пойдет в будущем?

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

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

Итак, что ждет Arduino в будущем?

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

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

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

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

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

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

Проприетарная электроника, такая как платы, управляющие вашей стиральной машиной, безусловно, может быть нарушена Arduino. Вместо того, чтобы быть заложником компании, которая хочет взимать большие деньги за замену, вы также можете заменить вышедший из строя компонент специальной платой Arduino.Или вы можете использовать плату Arduino, чтобы точно определить, что не так с вашей стиральной машиной, гораздо проще, чем в противном случае. Возможно, компания, производящая стиральную машину, продаст вам «планер», а сообщество разработчиков ПО с открытым исходным кодом разработает для него систему управления. Таким образом, мы, вероятно, увидим системы управления для потребительских устройств, которые будут намного более настраиваемыми и удобными для пользователя, разработанными сообществом разработчиков открытого исходного кода и совместимыми с сетью. Будет намного проще использовать и делать то, что мы хотим, без необходимости выяснять, какие 20 кнопок нажимать.И вы сможете удаленно контролировать свою технику и управлять ею.

Конкретные приложения, которые Arduino может нарушить, включают:

ПЛК – Программируемые логические контроллеры общеизвестно дороги и имеют очень ограниченную функциональность с точки зрения того, что они могут делать. Arduino, хотя в настоящее время не адаптирован для промышленных сред, во многих отношениях гораздо более эффективен.

Системы SCADA – часто системы SCADA имеют дорогое собственное оборудование в удаленных местах.Arduino может выполнять мониторинг и управление гораздо более экономичным способом.

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

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

– Брайан Фельдман

Arduino Uno R3

Обзор

Arduino Uno R3 – это аппаратная вычислительная платформа с открытым исходным кодом. Использует ATmega328 микроконтроллер. Плата также включает ATmega16u2, который действует как встроенный преобразователь USB в последовательный.

Arduino Uno R3 может использоваться для разработки приложений, работающих в автономной или подключенной среде.Устройство программируется с использованием интегрированной среды разработки Arduino (IDE).

Макет платы


  • Микроконтроллер ATmega328
  • Входное напряжение от 7 до 12 В
  • 14 цифровых входов, 6 из которых обеспечивают выход с ШИМ (широтно-импульсной модуляцией)
  • 6 аналоговых контактов
  • Постоянный ток 40 мА на контакт ввода / вывода
  • 50 мА постоянного тока для 3. Контакт 3V
  • Флэш-память 32 КБ (0,5 КБ используется загрузчиком
  • 2 КБ SRAM
  • 1 КБ EEPROM
  • Тактовая частота 16 МГц

Вы можете запитать плату Arduino через разъем USB или через разъем питания постоянного тока. Разъем питания с центральным питанием 2,1 мм.

Для питания платы можно использовать от 6 до 20 В постоянного тока.Рекомендуется не опускаться ниже 7 В, чтобы допустить падение напряжения. через регулятор мощности. Если вы установите слишком низкое значение, выход регулятора может упасть ниже 5 В, и это может вызвать проблемы с работой плат.

Также рекомендуется не превышать 12 В. Регулятор мощности может перегреться и вызвать повреждение платы.

Штифты используются следующим образом:

  • 5 В: это регулируемый выход встроенного регулятора напряжения.Это питание будет поступать от входного разъема USB или постоянного тока. Это подается на бортовой стабилизатор напряжения 5В. К этому выводу подключен выход регулятора. Вы используете этот вывод для подачи 5 В на компоненты питания. подключен к плате Arduino. Максимальный потребляемый ток составляет около 400 мА через USB-порт и выше при использовании разъема питания постоянного тока.
  • 3,3 В: это регулируемый выход встроенного регулятора напряжения.К этому выводу подключен выход регулятора 3,3 В. Вы используете это вывод для подачи 3,3 В на компоненты питания, подключенные к плате Arduino. Максимальный потребляемый ток составляет 50 мА
  • Вы можете запитать плату, подключив регулируемый источник 5 В к контакту 5 В или 3,3 В к контакту 3,3 В. Власть будет зайти прямо в микроконтроллер ATMega328. Встроенные регуляторы мощности отключены.Если здесь что-то пойдет не так, вы легко можете повредить микросхему ATMega328. Arduino советует не включать плату таким образом.

  • GND: Заземление платы, подключенное к контактам заземления на входном разъеме постоянного тока и разъеме USB. Используйте это заземление для компонентов, подключенных к Плата Arduino.
  • VIN: этот контакт подключен к входу бортовых регуляторов напряжения.Независимо от того, какой входной постоянный ток подается на плату от Входной разъем постоянного тока также появится на контакте VIN. Вы также можете подключить питание к плате, используя этот контакт вместо входного разъема USB или постоянного тока. Потому что он подключен к входу регуляторов напряжения, на плату будет подаваться регулируемое напряжение 5 В и 3,3 В постоянного тока.
  • css

На плате Arduino 16 цифровых контактов.Их можно использовать как входы или выходы. Они работают при 5 В и имеют максимальное потребление тока 40 мА. У них есть внутренний подтягивающий резистор, который по умолчанию отключен. Подтягивающие резисторы составляют от 2 до 50 кОм и могут быть включены с помощью программного обеспечения.

Мы можем управлять выводами цифрового ввода / вывода с помощью функций pinmode (), digitalWrite () и digitalRead.

Некоторые цифровые выводы ввода / вывода имеют дополнительные функции:

  • Последовательный: контакт 0 (RX) и 1 (TX).Эти контакты используются для передачи и приема последовательных данных TTL (5 В). Эти булавки также подключен к Atmega16u2 USB к последовательному TTL чипу на плате Arduino.
  • PWM: выводы 3, 5, 6, 9, 10 и 11. Выводы могут обеспечивать 8-битный выходной сигнал с ШИМ (широтно-импульсной модуляцией). Мы используем функцию analogWrite () со значением от 0 до 255 для управления рабочим циклом выхода.
  • SPI: контакты 10 (SS), 11 (MOSI), 13 (SCK) используются для обеспечения связи SPI (последовательный периферийный интерфейс) с использованием библиотеки SPI
  • Внешние прерывания: контакты 2 и 3 могут быть настроены для запуска прерывания при понижении уровня сигнала или при повышении или понижении уровня сигнала. край.Мы используем функцию attachInterrupt (), чтобы разрешить прерывания.
  • Светодиод
  • : к контакту 13 подключен светодиод. Когда на выходе 13 высокий уровень, светодиод включается. Светодиод будет выключен, когда выходной сигнал низкий.

Arduino Uno имеет 6 аналоговых входов с обозначениями от A0 до A5. Каждый из этих аналоговых выводов имеет разрешение 10 бит, что означает от 0 до 1024 различных значений. ценности.По умолчанию они измеряют от земли до 5 вольт. Можно расширить диапазон, используя вывод AREF и функцию analogReference (). Некоторые из этих булавок имеют дополнительный функционал.

  • TWI: контакт A4 или SDA и контакт A5 или SCL. Эти контакты используются для поддержки связи TWI с использованием Проволочная библиотека.
  • AREF: Используется для обеспечения опорного напряжения для аналоговых входов.Используется с analogReference ().
  • СБРОС: переводя эту строку в НИЗКОЕ состояние, выполняется сброс микроконтроллера ATMega328. Может быть подключен к экранам чтобы обеспечить кнопку сброса, когда кнопка сброса на Arduino Uno заблокирована экраном.

Использование аналоговых выводов в качестве цифровых

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

  • A0 => Цифровой контакт 14
  • A1 => Цифровой контакт 15
  • A2 => Цифровой контакт 16
  • A3 => Цифровой контакт 17
  • A4 => Цифровой вывод 18
  • A5 => Цифровой контакт 19

Теперь мы можем использовать команду pinmode для определения вывода как INPUT или OUTPUT. Таким образом, для вывода AO мы будем использовать значение 14 в качестве значения вывода. Написать в pin, мы будем использовать digitalWrite с соответствующим значением цифрового вывода, как показано в списке выше.

Arduino имеет несколько режимов связи.

  • USB: Arduino Uno использует встроенный ATmega16U2 для подключения последовательных выводов TX и RX на ATmega 328. 16u2 заменяет микросхему USB FTTI, используемую на другие доски.Эти последовательные данные отправляются микросхемой USB и появляются как виртуальный COM-порт на компьютере, подключенном к порту USB. Последовательный порт IDE Arduino Монитор также использует порт USB для отправки последовательных данных на плату Arduino и с нее. Светодиоды TX и RX будут мигать, когда данные отправляются и принимаются через порт USB.
  • Последовательный TTL: Плата Arduino Uno имеет последовательную связь с уровнем TTL (5 В) на цифровых выводах 0 (RX) и 1 (TX). Он также может быть подключен к микросхеме RS232 или RS484. для обеспечения последовательной связи с другим устройством.Примечание: встроенные светодиоды TX и RX НЕ будут мигать при использовании последовательной связи на цифровых контактах 0 и 1. Эти светодиоды предназначены только для USB-порта.
  • Связь
  • I2C и SPI: Arduino Uno поддерживает оба этих формата последовательной связи. Используйте библиотеку Wire для шины I2C. Используйте библиотеку SPI для шины SPI.

На плате Arduino есть сбрасываемый предохранитель, который защищает порт USB от короткого замыкания и перегрузки по току.Если ток более 500 мА снимается с USB-порт, который он сработает, сработает и прервет соединение с питанием USB. Как только перегрузка по току будет устранена, предохранитель перезапустится.

Разработка

Arduino с помощью CLion: от хобби к профессиональному проекту. Часть I

Советы и хитрости

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

Что мы собираемся построить

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

Мы начнем с создания классического проекта – барометра, сделанного своими руками, – и будем использовать:

  • Датчик давления воздуха Bosch BMP085 .Мы будем использовать модуль GY-65 , хотя его можно заменить на BMP180 ( GY-68 ).
  • Плата Arduino Uno. Мы используем DFRduino UNO R3 из-за его красочных разъемов 🙂
  • Электронный бумажный экран Waveshare с диагональю 4,2 дюйма.
  • Провода, USB-кабель, несколько пластиковых стоек для печатных плат, болты M3 и гайки.
  • Пластиковая подставка для планшета IKEA, для крепления всех частей прототипа вместе.

Звучит весело? Давайте начнем!

Начиная с прототипа

Настройка электроники

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

Экранный модуль e-Paper использует однонаправленный интерфейс SPI (CS, MOSI, SCK), два входных управляющих сигнала (RESET, DC) и выходной сигнал BUSY. Модуль поставляется вместе с 8-проводным кабелем, который я подключил к Arduino с помощью концевых разъемов 2,54 мм. Чтобы свести к минимуму количество используемых заголовков, мы подключаем линии питания дисплея к выводам питания заголовка внутрисхемного последовательного программирования (ICSP) Atmega8.Датчик давления использует интерфейс I2C (SCA, SCL) и подключается с помощью стандартных перемычек F-M.

Все подключения описаны в таблице ниже:

Пришло время написать код нашего прототипа Arduino.

Вывести датчик давления в онлайн

Официальное руководство Arduino подробно объясняет разработку эскиза Arduino. Итак, мы просто кратко рассмотрим настройку:

  1. Создайте новый проект и дайте ему имя.
  2. Затем добавьте библиотеку Adafruit_BMP085 с помощью пункта меню Sketch -> Включить библиотеку… -> Управление библиотеками… .
  3. Пришло время добавить реальный код, например этот.
  4. После этого вы можете подключить свой Arduino, загрузить эскиз и убедиться, что он работает, с помощью последовательного монитора Arduino.

Вывести экран онлайн

Для этого проекта я использовал код, предоставленный WaveShare, поставщиком экранов, на GitHub, и я добавил еще несколько кодов для запуска и работы нашего экрана. Вы можете ознакомиться с окончательным кодом проекта здесь. А теперь давайте запустим!

Эскизы Arduino

«Скетч» – это имя, которое Arduino использует для программы. Это единица кода, которая загружается и запускается на плате Arduino. В скетчах Arduino используются языки C и C ++. Точнее, можно написать набор функций C / C ++, а затем он подвергнется некоторой предварительной обработке, как, например, при добавлении одного или нескольких специфичных для Arduino предложений #include . Наконец, результат передается напрямую компилятору C / C ++ (avr-g ++). Вы можете прочитать о процессе сборки Arduino в официальной документации.

Поскольку в конечном итоге используется только C ++, для написания кода можно использовать любую универсальную среду разработки C ++.Использование IDE, отличного от Arduino, требует некоторых ручных действий, которые вы можете извлечь из официального описания процесса сборки. Но давайте посмотрим, сможете ли вы получить взамен какую-то выгоду!

Чем может помочь CLion

Если вас интересует встраиваемая разработка и вы ищете проект, чтобы опробовать его, Arduino – хорошее место для начала. У него огромное и гостеприимное сообщество, богатая инфраструктура и десятки различных примеров кода и библиотек. Он идеально подходит для тех, кто хочет сделать свои первые шаги во встроенном мире, или для тех, кто хочет воплотить в жизнь простую идею.По мере роста проекта он начинает требовать больше усилий, более сложный код, более высокую производительность встроенного процессора, больше памяти MCU и больше периферийных устройств. На этом этапе инструменты разработки, такие как IDE, становятся полезными для поддержания качества нашего кода и помогают нам развиваться более продуктивно. Давайте посмотрим, чем может помочь CLion.

Более умный редактор кода с широким охватом

Если вы не знакомы с этим, CLion – это универсальная кроссплатформенная IDE для C и C ++.Он понимает код на C и C ++ и использует эти знания для предоставления действий в редакторе. Действия навигации, которые могут выполнять поиск использований контекста или переходить к классу, файлу или символу одним нажатием клавиши, быстрое всплывающее окно с интеллектуальной документацией и подсказки по именам параметров помогают разработчикам читать и лучше понимать код . Автозаполнение, живые шаблоны, рефакторинг (например, извлечение функции, параметра или переменной, встроенный и, конечно, переименование и изменение сигнатуры) – все это поможет вам, , быстрее писать код .А когда дело доходит до качества кода , встроенные инструменты статического анализа и динамического анализа являются незаменимыми помощниками. Цена ошибки в мире разработки встраиваемых систем может быть намного выше, чем где-либо еще, поскольку ошибки часто обнаруживаются во время выполнения, когда программное обеспечение работает на оборудовании. Таким образом, обнаружение ошибок прямо во время ввода кода, очевидно, сокращает количество хлопот, с которыми вы можете столкнуться.

Еще одна прекрасная возможность, которую предоставляет CLion, – это возможность отлаживать ваш код.Он позволяет вам построчно следить за выполнением кода, проверять значения переменных, следить за содержимым периферийных регистров и т. Д. Все это может быть выполнено либо в эмуляторе, либо прямо на реальном MCU, в зависимости от того, существует ли правильный эмулятор и каковы возможности отладки MCU.

Вы можете загрузить CLion с нашего сайта и следовать этому руководству по быстрому запуску, чтобы легко начать работу с ним. Также есть два видеоролика, с которых мы рекомендуем начать – CLion Quick Tour и это более подробная (и, следовательно, более длинная) демонстрация производительности.

Вы также можете узнать, как настроить CLion в Windows, включая необходимые инструменты для компиляции и отладки, из этого специального руководства. В нашем случае с Arduino вам потребуется установить MinGW.

Поделитесь своими проектами со всем миром

По мере развития хобби-проекта он обычно заканчивается размещением на GitHub, GitLab, Bitbucket или где-то еще, что позволяет присоединиться большему количеству участников. Публикация в VCS, обработка запросов на вытягивание, распределение работы между несколькими ветвями – все это основные задачи можно выполнять прямо в CLion.Что касается редактирования кода, то незафиксированные изменения выделяются в редакторе, и доступны аннотации авторов. Все эти функции уменьшают необходимость переключения контекстов, экономя ваше время на проработку новых идей.

Есть хороший обзорный видеоролик о поддержке VCS во всех IDE на основе IntelliJ, таких как CLion.

Между прочим, при публикации в VCS не забудьте добавить файл Readme.md , который позволит другим узнать, о чем проект, и подробно расскажет, как с ним работать (какая настройка требуется, какой набор инструментов использовать и т. д.). CLion поставляется с поддержкой Markdown из коробки, поэтому вы легко получите предварительный просмотр своего файла Readme.md :

Миграция на PlatformIO

PlatformIO.org – это обширная экосистема для встраиваемой разработки, которая поддерживает различные типы целевого оборудования, компиляторы и фреймворки, включая проекты Arduino.

Давайте посмотрим, как вы можете начать работу с PlatformIO в CLion:

  1. Прежде всего, вам необходимо установить PlatformIO Core.
  2. И плагин PlatformIO для CLion (Настройки / Предпочтения | Плагины).

Теперь мы готовы создать новый проект PlatformIO, и в нашем случае мы выберем Arduino Uno. Нажмите File-> New Project и выберите Arduino Uno в качестве цели вместе с местоположением проекта. Поскольку в списке много досок, вы можете начать просто набирать «Uno», а затем использовать клавиши со стрелками для навигации по списку досок. Во избежание сбоев в дальнейшем мы не рекомендуем использовать в локации международные символы, специальные символы или пробелы.

Следующим шагом будет включение нашей библиотеки датчиков.Откройте platformio.ini в редакторе CLion и добавьте строку « lib_deps = Adafruit BMP085 Library » в раздел [env: uno] , затем вызовите Tools | PlatformIO | Повторная инициализация.

Пришло время добавить код в наш проект. Скопируйте все файлы заголовков из папки эскиза Arduino в папку проекта , включая , и скопируйте все исходные файлы и файлы .ino из папки эскиза Arduino в папку проекта src . Вы можете удалить пустой файл main.c – нам это не нужно.

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

  1. Преобразуйте скетч в C ++. Для этого вы можете просто переименовать (Shift + F6) основной файл .ino в .cpp . В этом случае файлы CMake будут автоматически обновлены CLion. А после вам нужно только перезагрузить проект CMake: Инструменты | CMake | Перезагрузите проект CMake .
  2. Откройте arduino-barograph.cpp и добавьте #include в самое начало файла.

Теперь вы можете построить проект! Приступим.

Подключите электронное устройство к компьютеру, затем запустите конфигурацию запуска Platformio Upload . Прошивка теперь прошита на MCU, и наше устройство снова работает. Это было просто!

Давайте сделаем шаг назад и посмотрим, чего нам удалось достичь на данный момент:

  1. Мы начали использовать дополнительное программное обеспечение (PlatformIO, CLion), чтобы получить более мощную встраиваемую среду и воспользоваться преимуществами продуктивных функций C ++ IDE.
  2. Благодаря подходу PlatformIO приложение можно легко перенести на многие другие аппаратные платформы с ограниченными усилиями.
  3. Мы сделали обслуживание жизненного цикла проекта более удобным, используя интеграцию VCS и поддержку Markdown в CLion.

Взятие под контроль проекта

PlatformIO был действительно полезен, но что, если вы хотите получить полный контроль над проектом и настроить шаги сборки? Теперь мы преобразуем наш проект в чистый проект CMake.Это потребует использования CLion IDE, системы сборки CMake, набора инструментов GCC для AVR и утилиты для прошивки avrdude .

Мы продолжим использовать библиотеки Arduino. Набор инструментов AVR можно загрузить с сайта Microchip, а утилиту avrdude – из Саванны.

В CLion набор инструментов и профиль CMake настроены следующим образом:


Код самого проекта можно найти на GitHub. Это тот же код PlatformIO с библиотеками Arduino, вручную скопированными в исходники проекта.Не стесняйтесь клонировать и использовать его. Однако вы должны быть осторожны, когда дело доходит до этих зависящих от пользователя параметров в файле CMakeLists.txt:

  • avrdude расположение
  • Имя COM-порта Arduino
  • Специальная цель сборки FLASH .

Когда все настроено правильно, вы можете запустить действие Build в CLion (не Run!), И оно попытается прошить ваш Arduino:

Давайте посмотрим, как это соотносится с нашей предыдущей настройкой с PlatformIO:

  1. Нам нужно позаботиться о дополнительных настройках, таких как имена COM-портов, местоположение avrdude и т. Д.
  2. Теперь мы полностью контролируем процесс сборки и можем настроить его в соответствии с нашими потребностями.
  3. Приложение можно перенести на другие аппаратные платформы (даже те, которые не поддерживаются PlatformIO).

Что дальше?

Теперь у нас есть ранний прототип, который использует минимальное количество компонентов и имеет ограниченные функциональные возможности. Как мы можем это улучшить?

  1. Лучшее представление
    На этом большом экране текущие данные о погоде и времени могут отображаться с использованием гораздо более крупных цифр.Это требует больше ПЗУ для шрифтов. У Arduino по-прежнему довольно много свободной флэш-памяти, и мы, вероятно, сможем реализовать более крупный шрифт с текущими настройками оборудования.
  2. График давления
    Атмосферное давление важно для прогнозирования погоды, но отслеживание его изменений во времени на самом деле даже более полезно. У нас довольно большой экран, и график давления на него точно помещается. Чтобы нарисовать такую ​​диаграмму, нам нужна схема часов реального времени (RTC), потому что встроенный генератор недостаточно точен для измерения времени.
    Arduino имеет только 2 КБ памяти, но черно-белый экран размером 400 * 300 требует 15 КБ памяти (400 * 300/8 = 15 КБ) для манипуляций с графикой вне экрана. Это дает нам идею заменить MCU. Обратите внимание, что некоторые современные микроконтроллеры действительно недороги и содержат как ОЗУ, так и RTC на кристалле.
  3. Питание от аккумулятора
    Устройство такого типа можно оптимизировать по потребляемой мощности, и если все сделано правильно, очень маленькая батарея может позволить ему проработать несколько месяцев подряд. К сожалению, у Arduino есть переходник USB-UART и постоянно светящийся индикатор питания.Итак, чтобы снизить потребление, нам нужно либо сделать нашу собственную плату, либо сделать некоторые аппаратные модификации платы, которая у нас уже есть. Если мы изменим электронику, мы сможем переключиться на другой MCU или плату, которые будут более энергоэффективными. Микроконтроллеры AVR были разработаны некоторое время назад, и современные электронные технологии намного лучше с точки зрения энергопотребления.
  4. Процесс разработки
    Для поддержки всех улучшений, упомянутых выше, нам нужно написать дополнительный код. И нам обязательно нужно это проверить! Как правило, микроконтроллеры Arduino и AVR дают нам возможность отправлять диагностические данные только через UART.Однако многие другие микроконтроллеры в настоящее время могут предложить здесь больше вариантов. Например, встроенные функции отладки позволяют разработчику следить за выполнением кода и значениями переменных, пока код выполняется на реальном MCU.

Продолжение следует…

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

Ваша команда CLion
JetBrains
Стремление к развитию

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

Для любителей электроники чипсет BeagleBoard с открытым исходным кодом, обладающий такой же мощностью, как процессор смартфона, может показаться ключом к раю.

Тем не менее, внимание домашних мастеров привлек 8-битный микроконтроллер Arduino с относительно низкой производительностью.

Arduino начиналась как проект в Италии в 2005 году и с тех пор превратилась в движение за аппаратное обеспечение с открытым исходным кодом. Сегодня существуют тысячи проектов Arduino, таких как электрические счетчики, гитарные усилители и гаджеты на базе Arduino, которые могут сказать вам, когда вашим растениям нужна вода.

Сообщество Arduino насчитывает не менее 100 000 пользователей. Но не только.

Другие проекты с открытым исходным кодом, такие как BeagleBoard, которыми руководит Texas Instruments, пытаются привлечь поклонников Arduino.

Beagleboard – это маломощный одноплатный компьютер, последняя версия которого основана на том же процессоре ARM Cortex A8 с тактовой частотой 1 ГГц, который используется сегодня в самых сложных смартфонах. Это дает ему гораздо большую вычислительную мощность, чем Arduino. Тем не менее, BeagleBoard не вызвал у аппаратных хакеров такой же отклик, как Arduino.

«Доска BeagleBoard не для новичков», – говорит Фил Торроне, старший редактор журнала Make и креативный директор Adafruit, компании, занимающейся продажей электроники и комплектов для дома.«С Arduino вы можете получить мигание светодиода за считанные минуты».

По сути, BeagleBoard и Arduino – это две разные системы: первая – это одноплатный компьютер, а Arduino – всего лишь 8-битный микроконтроллер. BeagleBoard-xM включает в себя процессор с тактовой частотой 1 ГГц, встроенный Ethernet, пять портов USB 2.0 и 512 МБ памяти.

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

Вот пять причин, по которым Arduino более популярна, чем BeagleBoard:

Starter Projects

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

Вот где BeagleBoard проигрывает. «У него практически нет примера приложения, которое можно было бы просто скопировать и взломать, чтобы учиться», – говорит Массимо Банци, один из соучредителей проекта Arduino.

У Arduino есть сотни проектов и идей, которые придуманы и распространены пользователями.Например, просмотрите этот список из 40 проектов Arduino, который включает в себя такие идеи, как эспрессо-машина, управляемая Wiimote, куртка для велосипедистов, мигающая указателем поворота, и беспроводной монитор электричества, который отслеживает ваше энергопотребление.

Для BeagleBoard это проблема курицы и яйца. Если не будет больше примеров кода, привлечь аудиторию будет сложно. А без аудитории сложно привлечь в сообщество достаточное количество примеров проектов.

Стоимость и долговечность

При цене 30 долларов за штуку Arduino – недорогое вложение для тех, кто хочет попробовать.«Это цена нескольких бутербродов», – говорит Торроне.

Сравните это с BeagleBoard-xM, которая стоит 180 долларов.

Одна из причин того, почему Arduino такая дешевая, заключается в том, что ее легко клонировать. Микроконтроллер является полностью открытым исходным кодом, поэтому «все компоненты являются товаром», – говорит Торроне.

Что такое Ардуино?

Что такое Ардуино?

Что такое Ардуино?

Связанный продукт: Комплект для начинающих для Arduino

Что такое Arduino?
Arduino – это платформа для создания прототипов электроники с открытым исходным кодом, основанная на гибком, простом в использовании аппаратном и программном обеспечении.Он предназначен для художников, дизайнеров, любителей и всех, кто интересуется созданием интерактивных объектов или разработкой среды.

Arduino может определять окружающую среду, получая входные данные от датчиков, и взаимодействовать с окружающей средой, управляя освещением, двигателями или другими исполнительными механизмами. Интегрированная среда разработки (IDE) Arduino – это кроссплатформенное приложение, написанное на Java, которое является производным от IDE для языка программирования Processing и проектов проводки. Он может работать независимо и взаимодействовать с другим программным обеспечением, таким как Flash, Processing, MaxMSP и другими.Arduino IDE имеет открытый исходный код, поэтому вы можете бесплатно загружать тысячи интерактивных проектов и делиться ими!

Вот несколько проектов Arduino, чтобы дать вам представление о задачах, которые он может выполнить.
// сделать звуковое уведомление, когда кофе готов
// уведомление по электронной почте через мобильный телефон
// мигающая мягкая игрушка
// кресло-каталка профессора X в стиле панк с распознаванием голоса и функцией подачи напитков
// ручное оружие Star War
// монитор пульса для хранения данных во время езды на велосипеде
// робот, который может бегать по снегу и рисовать изображения на полу

История
Arduino стартовал в 2005 году как проект для студентов Института дизайна взаимодействия Ивреа в Иврея, Италия.В то время студенты, изучающие программирование, использовали в своих проектах «BASIC Stamp». Это стоило 100 долларов, что считалось дорогим для студентов.


Массимо Банци, один из основателей Arduino, преподавал в Иврее. Название «Ардуино» происходит от бара в Иврее, где раньше встречались некоторые из основателей проекта. Сам бар был назван в честь Ардуино, маркграфа Ивреи и короля Италии с 1002 по 1014 год.

Колумбийский студент Эрнандо Барраган выступил с дипломной работой по проектированию электропроводки.После того, как монтажная платформа была завершена, исследователи работали над тем, чтобы сделать ее легче, дешевле и доступной для сообщества разработчиков ПО. В конце концов, школа закрылась, и эти исследователи, в том числе человек по имени Дэвид Куартьелес, продвигали идею. Эта идея должна была стать Arduino, какой мы ее знаем сегодня.

Arduino UNO
Теперь давайте внимательно посмотрим на микроконтроллер Arduino и попытаемся найти порты ввода / вывода (ввод / вывод) и встроенные светодиоды.

◆ Контакты ввода / вывода, цифровые контакты 0-13, аналоговые контакты 0-5.
◆ 2 источника питания. Один из них – это порт USB, который может потреблять питание от USB-соединения. Другой – разъем питания, через который подается постоянный ток напряжением 6–12 вольт.
◆ 4 светодиода и кнопка сброса. L – встроенный светодиод, который соединяется с цифровым контактом 13. TX и RX – индикаторы передаваемого и принятого сигналов. Когда мы загружаем скетч в Arduino, эти два индикатора мигают, указывая на то, что данные передаются и принимаются.

Первое использование

1.Загрузите Arduino IDE

Перейдите на http://arduino.cc/en/Main/Software, чтобы загрузить установочный файл в соответствии с вашей операционной системой.
Для пользователей Windows следуйте приведенным ниже инструкциям. Пользователи Mac и Linux могут напрямую использовать эскиз Arduino, просто щелкнув файл.


2. Установите драйверы

Установка драйверов для Arduino UNO с Windows 7, Vista или XP: Подключите плату и дождитесь, пока Windows начнет процесс установки драйвера.Через несколько секунд, несмотря на все усилия, процесс не удастся, но не паникуйте! Щелкните меню «Пуск» и откройте панель управления.
Найдите неизвестное устройство, затем щелкните правой кнопкой мыши и выберите «Обновить программное обеспечение драйвера».
Выберите «Найти драйверы на моем компьютере» для поиска драйверов вручную.
Нажмите «Обзор» и найдите директорию Arduino IDE, в которой находятся установочные файлы. Внутри этого директора будет еще один режиссер по имени Драйверы.выберите его и нажмите «Далее».
Это диалоговое окно указывает на успешную установку. Надеюсь, это то, что вы увидите! е не перепроверяйте свои шаги и не трогайте снова.
Если вы вернетесь в диспетчер устройств, устройство Arduino теперь должно быть распознано вашим компьютером.

Перейдите в «Диспетчер устройств»> «Порты (COM и LPT)» . Вы должны увидеть «Arduino no (COM #)» . Это COM-порт, который ваш компьютер использует для передачи данных на Arduino. В нашем примере компьютер связывается с Arduino через COM36.
Запомните свой COM-номер, он понадобится вам позже.

4. Загрузите программу Blink.

Откройте Arduino IDE и потратьте немного времени, чтобы навести курсор мыши на каждый значок, чтобы ознакомиться с их функциями. Здесь мы будем использовать очень простой пример кода «
Blink », чтобы пройти весь процесс и проверить, работает ли контроллер.
Откройте пример скетча мигания светодиода. Вы найдете его в
“Файл> Примеры> 01.Basics> Blink” .
Щелкните
«Проверить» , чтобы скомпилировать код.IDE преобразует код из текста в инструкции, понятные компьютеру. Этот процесс называется компиляцией .

Готово!

В используемом нами коде не должно быть ошибок, поскольку это пример кода. Если в коде есть ошибки, его не удастся проверить.
Пора загрузить код в свой Arduino! Выберите свой микроконтроллер, выбрав «
Board> Arduino UNO ».
Затем выберите свой COM-порт, выбрав «
Serial Port » и выбрав номер COM-порта, который вы видели ранее.В нашем примере используется COM36.

Нажмите «Загрузить», чтобы отправить инструкции через USB-кабель в Arduino.
После его завершения Arduino выполнит код автоматически, и встроенный светодиод начнет мигать, как и было запрограммировано!


Обзор:
Чтобы загрузить код, мы должны выполнить следующие шаги:
Проверить код> Выбрать плату и порт> Загрузить
…тогда ваш скетч будет загружен.
Следующие 15 руководств по ардуино, я буду использовать стартовый комплект для ардуино, чтобы шаг за шагом сделать несколько проектов ардуино, надеюсь, этот стартовый комплект для ардуино будет вам полезен.
Связанная категория: комплекты arduino> учебные комплекты

Следующее руководство Arduino 1: мигание светодиодов

Связанные блоги

Недавние блоги

Учебное пособие по директивам препроцессора Arduino

– ifdef & endif

Первоначально опубликовано 6 июня 2017 г.

Содержание

  1. Введение
  2. Что мне нужно для начала?
  3. Как это работает
    1. После того, как вы нажали «Загрузить»
    2. Основы препроцессора
    3. Добавление дополнительного кода: директива #include
    4. Определение вещей: директива #define
    5. Условная компиляция: директивы #if
    6. Предоставление обратной связи: директивы #warning и #error
  4. Заключение
  5. Статьи по теме


Введение

В облегченной библиотеке Arduino для оценочного комплекта датчиков ROHM я представил RohmMultiSensor – библиотеку Arduino, которая позволяет легко взаимодействовать с несколькими датчиками из оценочного комплекта датчиков ROHM.Одна из основных особенностей этой библиотеки заключается в том, что размер программы заметно минимизируется за счет компиляции только тех частей библиотеки, которые содержат код, специфичный для датчика, который вы хотите использовать. Это означает, что при использовании меньшего количества датчиков общий размер программы и использование памяти будут меньше. Но как именно это происходит? И что на самом деле происходит за кулисами, когда вы #include библиотеки, а затем нажимаете кнопку «Загрузить»?

Что мне нужно для начала?

Практически каждый, кто когда-либо использовал Arduino, использовал библиотеку.Это одна из причин, почему программирование Arduino так легко для новичков – вам не нужно иметь глубокое понимание того, как работает датчик; библиотеки сделают за вас большую часть работы. Разделение кода на отдельные файлы также является хорошей практикой программирования. Гораздо проще организовать, отладить и поддерживать несколько разделенных файлов, чем огромный кусок кода.

Новички в Arduino уже должны быть знакомы с #include , который «добавляет» библиотеку к основному скетчу.Чтобы понять, как именно это происходит, мы сначала должны быстро взглянуть на то, как исходный код C / C ++ компилируется в программу. Не волнуйтесь, это звучит намного сложнее, чем есть на самом деле. Давайте посмотрим, как работает компиляция.

Как это работает

1. После нажатия «Загрузить»

Давайте сначала проведем небольшой эксперимент: запустите Arduino IDE, откройте один из примеров кодов (например, «Blink») и нажмите кнопку «Проверить».Предполагая, что в программе нет синтаксических ошибок, консоль внизу должна распечатать некоторую информацию о размере программы и памяти. Что ж, вы только что успешно скомпилировали исходный код C ++ в двоичный файл. Во время компиляции произошло несколько вещей:

  1. Arduino IDE выполнила так называемую «синтаксическую проверку», чтобы убедиться, что написанное вами действительно является исходным кодом C / C ++. Это момент, когда компиляция остановится, если вы неправильно написали функцию или забыли точку с запятой.
  2. После проверки синтаксиса Arduino IDE запускает другую программу, называемую препроцессором . Это очень простая программа, которой все равно, является ли файл исходным кодом C / C ++. Поскольку мы поговорим об этом шаге позже, мы просто предположим, что результатом является файл с именем «расширенный исходный код», который остается просто текстовым файлом.
  3. Затем расширенный исходный код был передан другой программе под названием компилятор . Компилятор (в случае Arduino IDE это avr-gcc ) принимает текстовый источник и создает файл сборки.Это более низкий язык программирования, который по-прежнему удобен для чтения человеком, но гораздо ближе к машинному коду – в основном это просто инструкции для процессора. Эта часть является причиной того, почему вы должны выбрать правильную плату Arduino перед началом компиляции скетча – разные платы имеют разные процессоры, которые, в свою очередь, имеют разные наборы инструкций.
  4. Следующая программа, обрабатывающая ваш скетч, называется ассемблер . Он генерирует «объектный файл». В основном это машинный код, но он также может содержать «ссылки» на объекты в других объектных файлах.Это позволяет Arduino IDE «предварительно компилировать» некоторые библиотеки, которые всегда будут использоваться при написании скетча Arduino, что значительно ускоряет весь процесс.
  5. Заключительный этап называется компоновкой и выполняется другой программой, что неудивительно – linker . Компоновщик берет объектный файл и добавляет все, чего не хватает, чтобы превратить его в исполняемый файл – в основном символы из других объектных файлов. После этого программа полностью конвертируется в машинный код и может быть запрограммирована на плату.

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

2. Основы препроцессора

В приведенном выше тексте я упоминал, что препроцессор по сути очень прост: он просто принимает ввод текста, выполняет поиск по некоторым ключевым словам, выполняет некоторые операции в соответствии с тем, что он находит, а затем выводит другой текст.Несмотря на то, что он очень простой, он также чрезвычайно эффективен, поскольку позволяет делать вещи, которые в противном случае были бы очень сложными – если не невозможными – на простом языке C / C ++.

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

https: // gcc.gnu.org/onlinedocs/cpp/Index-of-Directives.html#Index-of-Directives.

В следующем тексте я сосредоточусь в основном на #include , #define и условных директивах, так как они наиболее полезны в Arduino, но если вы хотите узнать больше о некоторых более «экзотических» директивах, например, #assert или #pragma , здесь можно получить официальную информацию.

3. Добавление дополнительного кода: #include директива

Это, вероятно, самая известная директива препроцессора не только среди энтузиастов Arduino, но и в программировании на C / C ++ в целом.Причина проста: он используется для включения библиотек. Но как именно это происходит? Точный синтаксис выглядит следующим образом:

 #include <файл> 

или

 #include "файл" 

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

Когда препроцессор находит файл, он просто копирует и вставляет его содержимое в исходный код вместо директивы #include. Однако, если такой файл не может быть найден ни в одном из каталогов, это вызовет фатальную ошибку и остановит компиляцию.

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

 #include 

void setup () {

}

#include 

void loop () {

} 

В скетче Arduino действительно мало чего происходит. Обратите внимание, что мы включаем файл с именем « ExampleLibrary.h », и что мы включаем его дважды.

 // Это пример библиотеки

int a = 0;

// Конец примера библиотеки 

И это то, что находится внутри ExampleLibrary.h. Опять же, ничего особенного, за исключением одной целочисленной переменной. Так что же происходит, когда мы пытаемся скомпилировать этот скетч Arduino?

Ошибка показывает, что переменная a объявляется дважды, что приводит к сбою компиляции. Так выглядит исходный код после завершения препроцессора.

 // Это пример библиотеки

int a = 0;

// Конец примера библиотеки

void setup () {

}

// Это пример библиотеки

int a = 0;

// Конец примера библиотеки

void loop () {

} 

Теперь очевидно, что ни одна библиотека не должна включаться более одного раза, но как этого добиться, не полагаясь на пользователя? Стандартное решение – обернуть всю библиотеку следующей конструкцией:

 #ifndef _EXAMPLE_LIBRARY_H
#define _EXAMPLE_LIBRARY_H

// Это пример библиотеки

int a = 0;

// Конец примера библиотеки

#endif 

Теперь, когда библиотека включается впервые, препроцессор проверяет, есть ли что-то определенное с именем « _EXAMPLE_LIBRARY_H ».Поскольку ничего подобного еще не существует, он переходит к следующей строке и определяет константу с именем « _EXAMPLE_LIBRARY_H ». Затем код библиотеки копируется в эскиз.

При включении библиотеки во второй раз препроцессор снова проверяет наличие константы с именем « _EXAMPLE_LIBRARY_H ». Однако на этот раз константа уже определена из предыдущего #include , поэтому в эскиз ничего не добавляется. Теперь компиляция успешно завершена.Директивы #ifdef и #endif являются условными директивами, которые будут рассмотрены позже.

4. Определение вещей: #define directive

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

 #define macro_name macro_body 

Большинство новичков в Arduino несколько сбиты с толку макросами. Если я определю макрос вроде следующего:

 #define X 10 

в чем точное отличие от объявления некоторой переменной, как показано ниже?

 int Y = 10; 

Опять же, все сводится к тому, что препроцессор работает только с текстом. Когда он найдет директиву #define , он выполнит поиск в остальной части исходного кода и заменит все вхождения «X» на «10».Это означает, что, в отличие от переменных, значение макроса никогда не изменится. Кроме того, вы должны иметь в виду, что препроцессор ищет только остаток исходного кода после строку с #define на нем . Давайте посмотрим, что произойдет, если мы попытаемся использовать макрос до того, как он будет определен.

 int Y = X;
#define X 10
int Z = X;

void setup () {

}

void loop () {

} 

Компиляция приведенного выше кода даст нам следующую ошибку:

Код после предварительной обработки будет выглядеть так:

 int Y = X;
int Z = 10;

void setup () {

}

void loop () {

} 

Первая строка содержит X , что интерпретируется как переменная, однако эта переменная никогда не объявлялась, поэтому компиляция останавливается.

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

 int min (int a, int b) {
if (a 

Или проще с тернарным оператором:

 int min (int a, int b) {
return ((a 

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

 #ifndef MIN
#define MIN (A, B) (((A) <(B))? (A): (B))
#endif 

Теперь каждое появление «MIN (A, B)» будет заменено на «(((A) <(B))? (A): (B))», где «A» и «B» могут быть либо число, либо переменная. Обратите внимание, что #define заключен в ту же защитную конструкцию, которая не позволяет пользователю определять макрос дважды.

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

 #ifndef НЕСКОЛЬКО
# определить НЕСКОЛЬКО (A, B) A * B
#endif

// какой-то код ...

int результат = НЕСКОЛЬКО (2-0, 3); 

Значение result должно быть 6, так как 2-0 равно 2, а 2 * 3 равно 6, верно? Что, если я скажу вам, что результат будет 2? Фактически компилируется следующее:

 int result = 2-0 * 3; 

Поскольку умножение имеет приоритет над вычитанием, теперь очевидно, что результат должен быть 2, потому что 3 * 0 равно 0, а 2-0 все еще равно 2.Правильная версия будет выглядеть так:

 #ifndef НЕСКОЛЬКО
#define НЕСКОЛЬКО (A, B) ((A) * (B))
#endif 
5. Условная компиляция: #if директивы

В предыдущих примерах я использовал директиву #ifndef , которая позволяла мне проверять, была ли уже включена библиотека. Эту директиву можно использовать только для достижения того, что было бы невозможно с точки зрения языка C / C ++: условного синтаксиса. Эти директивы имеют следующий синтаксис:

 #if выражение

 // компилируем этот код

#elif different_expression

// компилируем этот другой код

#еще

// компилируем этот совершенно другой код

#endif 

Самый распространенный способ использования условного синтаксиса - проверить, определен ли макрос.Для этого вы можете использовать несколько специализированных директив:

 #ifndef имя_макроса

 // компилируем этот код, если macro_name не существует

#endif 

Мы уже знакомы с вышеизложенным, поскольку мы использовали эту директиву, чтобы проверить, была ли уже включена библиотека. Вы также можете использовать это условие:

 #ifdef имя_макроса

 // компилируем этот код, если macro_name существует

#endif 

Вышеупомянутое является сокращением для #if defined , которое можно использовать для проверки нескольких макросов в одном условии.Обратите внимание, что каждое условие должно заканчиваться директивой #endif , чтобы указать, какие части кода затронуты условием, а какие нет.

Давайте посмотрим на практический пример. Предположим, вы написали библиотеку и хотите, чтобы она корректно работала как на Arduino UNO, так и на Arduino Mega. Это кажется хорошей идеей, правда? Переносимый код всегда легче использовать, чем адаптировать уже работающую библиотеку для другой платы. Но что, если, например, ваша библиотека использует шину SPI? Эта шина расположена на контактах 11-13 на Arduino UNO, но на Mega она перемещена на контакты 50-52.

Как вы можете сказать компилятору, что он должен использовать правильные контакты, независимо от того, на какую плату вы сейчас загружаете? Как вы уже догадались - условный синтаксис! В зависимости от того, какую плату вы выбрали в Arduino IDE в меню «Инструменты»> «Плата», среда IDE будет определять различные макросы, позволяя вам выбирать части кода, которые будут компилироваться только для определенной платы! Это невероятно мощно, потому что позволяет делать что-то вроде этого:

 #if defined (__ AVR_ATmega168__) || определено (__ AVR_ATmega328P__)

// это будет скомпилировано для Arduino UNO, Pro и более старых плат
int _sck = 13;
int _miso = 12;
int _mosi = 11;

#elif defined (__ AVR_ATmega1280__) || определено (__ AVR_ATmega2560__)

// это будет компилироваться для Arduino Mega
int _sck = 52;
int _miso = 50;
int _mosi = 51;

#endif 

Видите его красоту? Всего с тремя строчками кода мы создали многоплатформенную портативную библиотеку! Кстати, именно так библиотека RohmMultiSensor (из Lightweight Arduino Library for ROHM Sensor Evaluation Kit ) знает, какие части кода должны быть скомпилированы для каждого выбранного датчика.Если вы заглянете внутрь заголовочного файла RohmMultiSensor.h , вы увидите только несколько директив #ifdef и некоторые #include . Поскольку весь код конкретного датчика хранится в отдельных файлах .cpp , легко добавлять новые датчики в библиотеку - просто создайте другой файл, а затем создайте ту же структуру #ifdef - #include - #endif для других датчиков использовать. Выполнено!

6. Отправка отзыва: #warning и #error Директивы

Последние директивы, которые мы рассмотрим: #warning и #error .Оба они говорят сами за себя, поэтому вот синтаксис:

 #warning "message" 

и

 #error "message" 

Когда препроцессор найдет эти директивы, он напечатает сообщение в консоль Arduino IDE. Разница между ними в том, что после #warning компиляция продолжается как обычно, а #error полностью останавливает компиляцию.

Мы можем использовать это в нашем предыдущем примере:

 #if defined (__ AVR_ATmega168__) || определено (__ AVR_ATmega328P__)

 // это будет скомпилировано для Arduino UNO, Pro и более старых плат
int _sck = 13;
int _miso = 12;
int _mosi = 11;

#elif defined (__ AVR_ATmega1280__) || определено (__ AVR_ATmega2560__)

// это будет компилироваться для Arduino Mega
int _sck = 52;
int _miso = 50;
int _mosi = 51;

#еще

#error «Выбрана неподдерживаемая плата!»

#endif 

Таким образом, когда пользователь пытается скомпилировать библиотеку для какой-либо другой платы Arduino (например,грамм. Yún, LilyPad и т. Д.) Компиляция завершится ошибкой, вместо того, чтобы вообще не определять контакты SPI.

Заключение

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

  1. При написании библиотеки обязательно заключите ее в конструкцию #ifndef - #define - #endif , которую мы видели несколько раз.Это может избавить вас от неприятностей. То же самое следует делать при определении макросов, подобных функциям.
  2. Напишите код таким образом, чтобы его можно было легко перенести на другие платы Arduino. Поверьте мне, гораздо проще думать наперед, чем пытаться выяснить, что вызывает проблемы несовместимости.
  3. Разделяй и властвуй! Несколько файлов меньшего размера лучше, чем один файл длиной более 1000 строк.

Статьи по теме

Хотите узнать больше о DIY-проектах Arduino? Почему бы не ознакомиться с другими нашими замечательными статьями, например:

  1. Как управлять Arduino с компьютера под управлением Windows
  2. Держите кошек на расстоянии с помощью автоматического спуска струи воды и мощности Arduino Uno
  3. Как использовать модуль NRF24l01 + с Arduino
.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *