Программирование систем реального времени на Arduino

Содержание

Слайд 3

Симулятор Arduino

Зарегистрироваться в системе [1,2]
1. https://www.tinkercad.com
2. Создание схемы в Tinkercad
3. Программируем

Симулятор Arduino Зарегистрироваться в системе [1,2] 1. https://www.tinkercad.com 2. Создание схемы в
скетч виртуального Arduino

https://zen.yandex.ru/media/id/5d0992b0a0412200b1332b91/tinkercad-arduino--luchshii-onlain-simuliator-arduino-na-russkom-5f2ac22d7f7edb5a704063b3
https://lectmania.ru/1x8d89.html
Джереми Блум. Изучаем Arduino- инструменты и методы технического волшебства.

Слайд 4

Arduino

Функция digitalWrite () устанавливает состояние выходного контакта: 5В или 0В. Если светодиод

Arduino Функция digitalWrite () устанавливает состояние выходного контакта: 5В или 0В. Если
подсоединен к контакту через резистор, то установка значения логической " 1" позволит зажечь светодиод.
Первый параметр функции digitalWrite() — номер контакта, которым требуется управлять. Второй параметр— значение, которое нужно задать: high (5 В) или low (О В). Контакт остается в этом состоянии, пока не будет изменен следующей командой digitalWrite.
Подключая светодиоды, необходимо соблюдать правильную полярность. Положительный вывод светодиода называется анодом, отрицательный— катодом.
Определить назначение контактов светодиода можно визуально: вывод катода короче, чем анода. Ток через светодиод течет только в одном направлении: от анода к катоду.
Поскольку ток протекает от положительного полюса к отрицательному,
анод светодиода следует подключить к источнику тока (цифровой выход +5 В), а катод —к земле.

Слайд 5

Простейшая схема маяка

// C++ код
int led = 12;
void setup()
{
pinMode(led, OUTPUT);
}
void loop()
{
digitalWrite(led,

Простейшая схема маяка // C++ код int led = 12; void setup()
HIGH);
delay(1000); // Wait for 1000 millisecond(s)
digitalWrite(led, LOW);
delay(1000); // Wait for 1000 millisecond(s)
}

Слайд 6

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

Задача.
Написать программу, которая плавно увеличивает и уменьшает яркость

Широтно-импульсная модуляция с помощью analogWrite Задача. Написать программу, которая плавно увеличивает и
светодиода.
Генерация аналоговых значений на цифровых контактах с помощью широтно-импульсной модуляции (ШИМ). Для некоторых контактов Arduino сформировать ШИМ-сигнал можно командой analogWrite.
Контакты, которые могут выдавать ШИМ-сигнал на определенные периферийные устройства, помечены символом ~ на плате Arduino. На Arduino Uno контакты 3, 5,6, 9, 10, 11 поддерживают выдачу ШИМ-сигнала.
ШИМ представляет собой изменение скважности (отношения периода к длительности импульса) прямоугольной последовательности импульсов. Скважность можно трактовать как процент времени, когда прямоугольный импульс имеет уровень
high, ко всему периоду повторения. Скважность 50% означает, что половину периода сигнал имеет высокий уровень, а половину — низкий.

Слайд 7

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

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

Слайд 8

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

Напряжение, подаваемое на светодиод, на самом деле не

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

Слайд 9

Эффект «дребезга кнопок»

Эффект «дребезга кнопок»

Слайд 10

Эффект «дребезга кнопок»

Написать программу для кнопки с дребезгом, которая фиксирует изменение состояния

Эффект «дребезга кнопок» Написать программу для кнопки с дребезгом, которая фиксирует изменение
кнопки, некоторое время ждет и затем снова читает состояние переключателя.

Слайд 11

MQTT

С развитием промышленности увеличивается количество устройств, которые нужно контролировать и получать от

MQTT С развитием промышленности увеличивается количество устройств, которые нужно контролировать и получать
них различные данные. Для решения проблем взаимодействия большого количества устройств и проблем объединения устройств в одну сеть была создана концепция Интернета вещей (англ. Internet of Things, IoT) – это когда устройства объединяются по какому-то признаку в одну сеть, потом уже несколько подобных сетей объединяются в другую большую сеть и так далее.
Устройства в таких сетях взаимодействуют друг с другом по средствам различных интерфейсов и протоколов передачи данных. Так как мы говорим о промышленном применении концепции IoT, в которой должны использоваться промышленное оборудование со своими протоколами и аппаратными средствами, то мы переходим к концепции IIoT (Промышленного Интернета вещей).

Слайд 12

MQTT

Что такое MQTT?
MQTT или Message Queue Telemetry Transport – это легкий, компактный

MQTT Что такое MQTT? MQTT или Message Queue Telemetry Transport – это
и открытый протокол обмена данными созданный для передачи данных на удалённых локациях, где требуется небольшой размер кода и есть ограничения по пропускной способности канала. Вышеперечисленные достоинства позволяют применять его в системах M2M (Машинно-Машинное взаимодействие) и IIoT (Промышленный Интернет вещей).
Также существует версия протокола MQTT-SN (MQTT for Sensor Networks), ранее известная как MQTT-S, которая предназначена для встраиваемых беспроводных устройств без поддержки TCP/IP сетей, например, Zigbee.
Основные особенности протокола MQTT:
Асинхронный протокол
Компактные сообщения
Работа в условиях нестабильной связи на линии передачи данных
Поддержка нескольких уровней качества обслуживания (QoS)
Легкая интеграция новых устройств
Протокол MQTT работает на прикладном уровне поверх TCP/IP и использует по умолчанию 1883 порт (8883 при подключении через SSL).

Слайд 14

MQTT

Семантика топиков
Топики представляют собой символы с кодировкой UTF-8. Иерархическая структура топиков имеет

MQTT Семантика топиков Топики представляют собой символы с кодировкой UTF-8. Иерархическая структура
формат «дерева», что упрощает их организацию и доступ к данным. Топики состоят из одного или нескольких уровней, которые разделены между собой символом «/».
Пример топика в который датчик температуры, расположенный в спальной комнате публикует данные брокеру:
/home/living-space/living-room1/temperature
Подписчик может так же получать данные сразу с нескольких топиков, для этого существуют wildcard. Они бывают двух типов: одноуровневые и многоуровневые. Для более простого понимания рассмотрим в примерах каждый из них:
Одноуровневый wildcard. Для его использования применяется символ «+»
К примеру, нам необходимо получить данные о температуры во всех спальных комнатах:
/home/living-space/+/temperature
В результате получаем данные с топиков:
/home/living-space/living-room1/temperature
/home/living-space/living-room2/temperature
Многоуровневый wildcard. Для его использования применяется символ «#»
В результате получаем данные с топиков:
/home/living-space/living-room1/temperature
/home/living-space/living-room1/light1

Слайд 15

MQTT

Web клиент Mqtt
http://www.hivemq.com/demos/websocket-client/
static MqttClient client;
static void Subscribe()
{
// create client instance (both host

MQTT Web клиент Mqtt http://www.hivemq.com/demos/websocket-client/ static MqttClient client; static void Subscribe() {
name and IP address work nicely)
client = new MqttClient("broker.mqtt-dashboard.com");
// register to message received
client.MqttMsgPublishReceived += Client_MqttMsgPublishReceived;
string clientId = Guid.NewGuid().ToString();
client.Connect(clientId);
// subscribe to the topic "/home/temperature" with QoS 2
client.Subscribe(new string[] { "home/temperature" }, new byte[] { MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE });
}