
Sb99180
.pdf
int val;
void setup() { pinMode(redpin, OUTPUT); pinMode(bluepin, OUTPUT); pinMode(greenpin, OUTPUT); Serial.begin(9600);
}
void loop()
{
for(val = 255; val > 0; val--)
{
analogWrite(redpin, val); //set PWM value for red analogWrite(bluepin, 255 - val); //set PWM value for blue analogWrite(greenpin, 128 - val); //set PWM value for
green
Serial.println(val); //print current value delay(1);
}
for(val = 0; val < 255; val++)
{
analogWrite(redpin, val); analogWrite(bluepin, 255 - val); analogWrite(greenpin, 128 - val); Serial.println(val);
delay(1);
}
KY-002 Датчик вибраций
Пример кода микропрограммы (скетч) для KY-002 и Arduino UNO:
21

int Led = 13; // define the LED Pin int shock = 3 // define the sensor Pin
int val; // define a numeric variable val void setup () {
pinMode (Led, OUTPUT); // LED pin as output pinMode (shock, INPUT); // input from KY-002 sensor
}
void loop () {
val = digitalRead (shock); // read the value from KY-002
if (val == HIGH ) {// when sensor detects shock, LED flashes
digitalWrite(Led, LOW); } else {
digitalWrite (Led, HIGH);
}
}
KY-011 Датчик с двухцветным светодиодом
KY-011 |
Breadboard |
Arduino |
|
|
Pin 10 |
G |
330Ω resistor |
|
|
|
Pin 11 |
R |
330Ω resistor |
|
|
|
GND |
Y |
− |
Пример кода микропрограммы (скетч) для KY-011 и Arduino UNO: int redpin = 11; // pin for red signal
int greenpin = 10; // pin for green signal int val;
void setup() { pinMode(redpin, OUTPUT);
22
pinMode(greenpin, OUTPUT); |
|
} |
|
void loop() { |
{ |
for(val = 255; val > 0; val--) |
|
analogWrite(redpin, val); |
//dim red |
analogWrite(greenpin, 255 |
- val); // brighten green |
delay(15); |
|
} |
{ |
for(val = 0; val < 255; val++) |
|
analogWrite(redpin, val); |
//brighten red |
analogWrite(greenpin, 255 |
- val); //dim green |
delay(15); |
|
} |
|
} |
|
2.4. Содержание отчета
Отчет по лабораторной работе должен содержать:
–титульный лист;
–задание на лабораторную работу;
–скетч (текст микропрограммы) с поясняющими комментариями;
–примеры запуска скетча (информация, выводимая на монитор порта);
–фотографии микроконтроллера с подключенными к нему датчиками.
2.5.Контрольные вопросы
1.Какие существуют правила написания кода в среде разработки
Arduino IDE?
2.Какие функции присутствуют в любом скетче (микропрограмме)?
3.Что обычно декларируется в функции setup()?
4.Что обычно декларируется в функции loop()?
5.В чем принципиальные отличия функции setup() от функции loop()?
6.Для чего нужен «Монитор порта» в среде разработки Arduino IDE?
7.Что дает кнопка «reset» на плате Arduino UNO?
8.Что извещает о правильности (исполнимости) загруженного скетча на
плату?
9.Какими способами можно подключить внешние устройства к Arduino
UNO?
23
3. РАЗДЕЛЕНИЕ ЗАДАЧ МЕЖДУ ПЛАТАМИ ARDUINO
Цель работы − получить практические навыки по соединению двух и более плат Arduino по радиоканалу ISM-диапазона, используя радиомодуль nRF24L01 на расстоянии до 30 м.
3.1. Общие сведения
При реализации сложных проектов требуется разделить выполняемые задачи между несколькими платами. Радиомодуль nRF24L01 − один из самых популярных беспроводных модулей для интернета вещей. Модули стоят недорого, и на их основе можно организовать многоканальную защищенную связь между контроллерами Аrduino и устройствами. Также данный радиомодуль отличается низким энергопотреблением, что очень важно при создании сетей на базе интернета вещей. Один модуль способен поддерживать связь сразу с шестью приемниками или передатчиками, т. е. можно объединить семь устройств в общую радиосеть на частоте 2,4 ГГц.
Преимущества взаимодействия по радиоканалу:
●Отсутствие проводного соединения между датчиками и платами.
●Высокая скорость передачи данных − до 2 Мбит/с – выше, чем у шин
I2C и UART.
●Полудуплексная связь, и режимы работы модулей (приемник/передатчик) можно менять в процессе их функционирования.
●Высокая помехозащищенность. Данные в пакетах принимаются с проверкой CRC на основе избыточного циклического кода.
●Контроль доставки данных. Приемник отправляет передатчику сигнал подтверждения приема данных (без смены режима работы).
●Возможность выбора одного из 128 каналов связи. Шаг каждого канала равен 1 МГц (от 2,400 ГГц до 2,527 ГГц).
●Возможность одновременной работы до шести передатчиков на одном канале.
Недостатки взаимодействия по радиоканалу:
●Модуль nRF24L01 работает в радиочастотном диапазоне ISM (Industrial Scientific Medical) 2,4 ГГц, на котором работают Wi-Fi, Bluetooth и
другие устройства, например, радиотелефоны и даже СВЧ-печи. Эти устройства могут «глушить» некоторые каналы данного диапазона. Поэтому вблизи таких устройств дальность связи между модулями на некоторых каналах резко уменьшается. Увеличить дальность можно, сменив канал связи
24

на любой из 128 доступных модулю nRF24L01.
●При выборе скорости 2 Мбит/с задействуются сразу два канала (выбранный и следующий за ним).
●Модуль питается от напряжения 3,3 В постоянного тока. Также модуль можно запитать от 5 В через адаптер nRF24L01.
3.2. Предварительная подготовка к работе
Для выполнения лабораторной работы необходимы две платы Arduino UNO, два модуля nRF24L01, комплект соединительных проводов.
3.3. Порядок выполнения работы
Подключите модуль nRF24L01 к плате Arduino. Подробная распиновка модуля представлена на рис. 3.1 и 3.2. Обратите внимание, что подключение необходимо осуществлять с обратной стороны платы беспроводного модуля
(рис. 3.2).
Рис. 3.1. Распиновка модуля nRF24L01
Рис. 3.2. Обратная сторона модуля nRF24L01 25

Для связи двух плат Arduino UNO к ним обеим нужно подключить радиомодуль RF24 по указанной выше схеме. Один радиомодуль нужно настроить в режим приемника (receiver), а второй − в режим передатчика (transmitter). Для этого в соответствующие платы Arduino нужно запрограммировать представленные ниже скетчи (микропрограммы) (с
помощью Arduino IDE).
Для работы представленных ниже скетчей нужно установить библиотеку RF24 (http://iarduino.ru/file/27.html). Библиотека находится в zip-
архиве, но извлекать файлы из архива не требуется, так как среда программирования Arduino IDE сама может распаковывать архивы и размещать библиотеки в нужных папках (рис. 3.3).
Рис. 3.3. Порядок действий для подключения библиотеки
Код передатчика (transmitter). Каждые 10 мс с передатчика отправляются числа от 0 до 255.
#include <SPI.h> // библиотека для работы с шиной SPI #include "nRF24L01.h" // библиотека радиомодуля #include "RF24.h" // еще одна библиотека радиомодуля
RF24 radio(9, 10); // «создать» модуль на пинах 9 и 10
byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб
26
byte counter;
void setup() {
Serial.begin(9600); //открываем порт для связи с ПК
radio.begin(); //активировать модуль radio.setAutoAck(1);//режим подтверждения приема, 1 вкл 0
выкл |
15); |
//(время |
между |
попыткой |
|||
radio.setRetries(0, |
|||||||
«достучаться», число попыток) |
//разрешить |
отсылку |
данных |
в |
|||
radio.enableAckPayload(); |
|||||||
ответ на входящий сигнал |
|
//размер пакета, в байтах |
|
||||
radio.setPayloadSize(32); |
|
||||||
radio.openWritingPipe(address[0]); |
|
//мы |
- |
труба |
0, |
||
открываем канал для передачи данных |
канал (в |
котором нет |
|||||
radio.setChannel(0x60); |
//выбираем |
||||||
шумов!) |
|
|
|
|
|
|
|
radio.setPALevel |
(RF24_PA_MAX); |
//уровень |
мощности |
передатчика. На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
radio.setDataRate (RF24_250KBPS); //скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS
//должна быть одинакова на приемнике и передатчике!
//при самой низкой скорости имеем самую высокую чувствительность и дальность!
radio.powerUp(); //начать работу
radio.stopListening(); //не слушаем радиоэфир, модуль в режиме «передатчик»
}
void loop() {
Serial.print("Sent: "); Serial.println(counter); radio.write(&counter, sizeof(counter)); counter++;
delay(100);
}
Код приемника (receiver). Сообщения посылаются в последовательный порт, поэтому приемник должен оставаться подключенным к персональному
27
компьютеру. Просматривать сообщения, отправляемые на компьютер, можно в мониторе порта среды Arduino IDE.
#include <SPI.h> #include "nRF24L01.h" #include "RF24.h"
RF24 radio(9,10); // «создать» модуль на пинах 9 и 10
Byte address[][6] = {"1Node","2Node","3Node","4Node","5Node", "6Node"}; //возможные номера труб
void setup(){
Serial.begin(9600); //открываем порт для связи с ПК
radio.begin(); //активировать модуль |
|
|
|
||
radio.setAutoAck(1); |
|
//режим подтверждения приема, |
|||
1 вкл 0 выкл |
|
//(время |
между |
попыткой |
|
radio.setRetries(0,15); |
|||||
«достучаться», число попыток) |
//разрешить отсылку |
данных в |
|||
radio.enableAckPayload(); |
|||||
ответ на входящий сигнал |
|
//размер пакета, в байтах |
|||
radio.setPayloadSize(32); |
|||||
radio.openReadingPipe(1,address[0]); |
|
//прослушивание |
|||
трубы 0 |
|
//выбираем |
канал |
(в котором нет |
|
radio.setChannel(0x60); |
|||||
шумов!) |
|
|
|
|
|
radio.setPALevel |
(RF24_PA_MAX); |
//уровень |
мощности |
передатчика. На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
radio.setDataRate (RF24_250KBPS); //скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS
//должна быть одинакова на приемнике и передатчике!
//при самой низкой скорости имеем самую высокую чувствительность и дальность!
radio.powerUp(); //начать работу
radio.startListening(); //начинаем слушать эфир, модуль в режиме «приемный модуль»
}
void loop() {
28
byte pipeNo, gotByte; |
|
|
|
while( radio.available(&pipeNo)){ |
// |
слушаем |
эфир со |
всех труб |
|
); |
// |
radio.read( &gotByte, sizeof(gotByte) |
читаем входящий сигнал
Serial.print("Recieved: "); Serial.println(String(gotByte));
}
}
3.4. Содержание отчета
Отчет по лабораторной работе должен содержать:
–титульный лист;
–задание на лабораторную работу;
–скетч (текст микропрограммы) с поясняющими комментариями;
–примеры запуска скетча (информация, выводимая на монитор порта);
–фотографии модулей, подключенных к платам Arduino.
3.5.Контрольные вопросы
1.Для чего нужен радиомодуль nRF24L01?
2.На какой частоте работает радиомодуль nRF24L01?
3.Можно ли менять режим работы модулей в процессе их работы?
4.Сколько передатчиков может работать на одном канале?
5.Как необходимо питать радиомодуль?
6.Какие особенности работы модулей необходимо соблюдать при их настройке на прием и передачу?
7.Укажите место в коде, где происходит конфигурация модуля, и объясните, что выполняет каждая функция.
8.Что в коде описывает данная строка:
byte address [][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"};?
9. Укажите место в коде, где происходит прием/передача данных между модулями, и объясните, что выполняет каждая функция.
29

4. УДАЛЕННЫЙ КОНТРОЛЬ ЧЕРЕЗ СЕТЬ ИНТЕРНЕТ
Цель работы − познакомиться с возможностями микроконтроллера
ESP8266, имеющего модуль Wi-Fi.
4.1. Общие сведения
Плату ESP8266 можно контролировать из локальной сети Wi-Fi или из Интернета (после переадресации портов). Модуль ESP-01 на чипе ESP8266 имеет контакты GPIO («интерфейс ввода/вывода общего назначения», англ. general-purpose input/output), которые могут быть запрограммированы для включения или выключения светодиода или реле через сеть Интернет (рис. 4.1). Модуль можно запрограммировать с помощью конвертера Arduino USB-to-TTL через последовательные контакты (RX, TX).
Рис. 4.1. Пример использования модуля ESP-01
4.2. Предварительная подготовка к работе
Для выполнения работы необходимо установить ESP-плату в Arduino IDE. Для этого запускаем программу и выбираем пункт меню «Файл» -> «Настройки». В новом открытом окне в поле «Дополнительные ссылки для Менеджера плат:» добавляем ссылку (рис. 4.2):
http://arduino.esp8266.com/stable/package_esp8266com_index.json
30