Радиозвонок на Ардуино
Цель проекта:
Состав:
- Радиомодуль fs1000a - 1 шт.
- Arduino Nano - 2 шт.
- Кнопка - 1 шт.
- Резистор - 1 шт.
- Провода для соединения
- Breadboard - 2 шт.
Решение:
Передатчик радиомодуля, подключенный к ардуино нано с кнопкой с одной стороны, и приемник радиомодуля, подключенный к другой ардуино нано с зуммером на другой стороне. При нажатии на кнопку загорается светодиод, и отправляется кодовый сигнал. Приемник принимает этот кодовый сигнал, и если он совпадает с тем, что мы ожидаем,то загорается светодиод и начинает играть мелодия. После проигрыша мелодии светодиод выключается.
Передатчик:
Схема:
Скетч:
#include <RH_ASK.h> // Подключаем библиотеку radioHead для работы с FS1000A
#include <SPI.h> // Необходим для успешной компиляции
RH_ASK driver; // Создаем объект для работы с передатчико
int button = 2; // Кнопка звонка на 2 входе
int led = 13; // Светодиод на 13 выходе
const char *msg = "123"; // Отправляемый сигнал
void setup() {
driver.init(); // Инициализация передатчика
pinMode(button, INPUT); // Установка вывода кнопки в режим входа
pinMode(led, OUTPUT); // Установка вывода светодиода в режим выхода
}
void loop() {
int buttonState = digitalRead(button); // Читаем состояние кнопки
if (buttonState == HIGH) { // Проверяем состояние кнопки, если нажата
digitalWrite(led, HIGH); // то, включаем светодиод
driver.send((uint8_t *)msg, strlen(msg)); // Загрузка и начало отправки сигнала
driver.waitPacketSent(); // Ждем пока сигнал отправиться полностью
delay(200); // Задержка для продления свечения светодиода
}
digitalWrite(led, LOW); // Выключаем светодиод
}
Приёмник:
Схема:
Скетч:
#include <RH_ASK.h> // Подключаем библиотеку radioHead для работы с FS1000A
#include <SPI.h> // Необходим для успешной компиляции
RH_ASK driver; // Создаем объект для работы с передатчиком
uint8_t signal[] = { 0x31, 0x32, 0x33 }; // Ожидаемый код от приемника = 123
int led = 13; // Светодиод на 13м выводе
const int SPEAKER = 4; // Динамик подключен на 4 вывод
// массивы для мелодии "Имперский марш"
int notes[] = {
392, 392, 392, 311, 466, 392, 311, 466, 392,
587, 587, 587, 622, 466, 369, 311, 466, 392,
784, 392, 392, 784, 739, 698, 659, 622, 659,
415, 554, 523, 493, 466, 440, 466,
311, 369, 311, 466, 392
};
int times[] = {
350, 350, 350, 250, 100, 350, 250, 100, 700,
350, 350, 350, 250, 100, 350, 250, 100, 700,
350, 250, 100, 350, 250, 100, 100, 100, 450,
150, 350, 250, 100, 100, 100, 450,
150, 350, 250, 100, 750
};
uint8_t buf[3]; // Объявляем 3х байтовый массив
uint8_t buflen = sizeof(buf); // и размер массива
void setup() {
driver.init(); // Инициализация передатчика
pinMode(led, OUTPUT); // Установка режима вывода светодиода на выход
}
void loop() {
if (driver.recv(buf, &buflen)) // Наполняем байтовый массив принятыми байтами
{
if (memcmp(signal, buf, 3) == 0) { // Сравниваем принятые байты с ожидаемыми
digitalWrite(led, HIGH); // Включаем светодиод
// Проигрываем мелодию
for (int i = 0; i < 39; i++) {
tone(SPEAKER, notes[i], times[i] * 2);
delay(times[i] * 2);
noTone(SPEAKER);
}
}
}
digitalWrite(led, LOW); // Выключаем светодиод
}
Итог:
Автор: Степан Храпов
Товары
- Комментарии