В этом уроке мы поговорим о беспроводной связи между двумя платами Arduino. Это может быть очень полезно для передачи команд с одной ардуино на другую, или обменом информации между вашими самоделками. Возможность беспроводной передачи данных открывает новые возможности в создании своих проектов.
В этом уроке мы будем использовать модули XBee. Принцип работы будет не сильно отличаться от других модулей для беспроводной связи, таких как радио модули, bluetooth и WiFi.
В этом уроке используется:
Отличный набор для начинающих: | Купить |
Arduino Uno: | Купить |
Модуль беспроводной связи XBee: | Купить |
USB адаптер для XBee: | Купить |
Шилд для Arduino Uno XBee: | Купить |
Потенциометры с колпачками 5 шт: | Купить |
Серво-привод: | Купить |
Беспроводная связь с модулями XBee
Для начала работы с модулями беспроводной связи XBee необходимо прошить сами модули. Каждому модулю необходимо дать свой уникальный идентификатор, идентификатор общей сети и сообщить идентификаторы модулей с которыми необходимо поддерживать связь.
Что бы прошить наши модули, необходимо подключить их к компьютеру, используя USB адаптер или специальный шилд для Arduino Uno. Так же для удобства необходимо скачать программу PuTTY и посмотреть к какому COM порту подключен ваш модуль. Подробнее этот процесс показан в видео выше, поэтому расписывать как это делать я не буду. В виде это все равно нагляднее :).
После прошивки всех модулей XBee можно приступать к программированию ардуино. Для примера мы сделаем так, что одна ардуина будет считывать показания с потенциометра и передавать их на другую. А вторая ардуинка будет принимать и использовать значения для поворота сервопривода. Вот скетч для первой Arduino к которой подключен потенциометр:
// Аналоговый пин от потенциометра
int potPin = 0;
void setup() {
// Открываем соединение
Serial.begin(9600);
}
void loop() {
// Получаем и обрабатываем данные
int val map(analogRead(potPin), 0, 1023, 0, 9);
// Отправляем данные
Serial.println(val);
// Небольшая задержка для стабильности
delay(50);
}
Как видите скетч очень прост. Все что он делает это: получает значение с потенциометра, переводит в значение от 0 до 9 для простоты и отправляет по serial соединению. Следующий скетч тоже очень прост:
// Подключаем библиотеку
#include <Servo.h>
// Аналоговый пин сервопривода
int servoPin = 9;
// Создаем объект
Servo jeremysServo;
void setup() {
// Открываем соединение
Serial.begin(9600);
// Назначаем пин сервопривода
jeremysServo.attach(servoPin);
}
void loop() {
// ждем данные
while(Serial.avalable() == 0);
// получаем байт
int data = Serial.read() - '0';
// Переводим команду в угол поворота
int pos = map(data, 0, 9, 0, 180);
// на всякий случай
pos = constrain(pos, 0, 180);
// Поворачиваем серву
jeremysServo.write(pos);
// очищаем буфер
Serial.flush();
}
На этом все! Вот так мы очень просто организовали общение между двумя платами Arduino по воздуху. Позже в другой статье мы рассмотрим передачу данных по радио каналам, по блютус и вайфай.Но это будет уже не в рамках обучающего курса.