Ардуино для начинающих. Урок 13. Беспроводная связь.

В этом уроке мы поговорим о беспроводной связи между двумя платами 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 по воздуху. Позже в другой статье мы рассмотрим передачу данных по радио каналам, по блютус и вайфай.Но это будет уже не в рамках обучающего курса.

Ардуино