433 МГц отправка не принимается
Я пытаюсь отправить данные, используя эти дешевые детали. Когда я проверяю напряжение на порту передачи данных передатчика, я вижу, что я ожидаю, 1,2 и 0,6 колеблются во время отправки. Но когда я проверяю приемник, я получаю 0. У меня есть 3 набора, и я перепробовал их все. Также попробовал это с включением передатчика на 11 В для получения дополнительной мощности. Я добавил светодиод к передатчику, чтобы видеть, когда он передает, и я добавил не очень хорошую антенну к обоим, хотя во время моих тестов они находились всего в 5 см друг от друга.
Буду признателен за любой совет.
Приемник
FS1000A с LR433A
#include <VirtualWire.h>
const int led_pin = 6;
//const int transmit_pin = 12;
const int receive_pin = 11;
//const int transmit_en_pin = 3;
void setup()
{
delay(1000);
Serial.begin(9600); // Только для отладки
Serial.println("setup");
// Инициализировать ввод-вывод и ISR
//vw_set_tx_pin(transmit_pin);
vw_set_rx_pin(receive_pin);
//vw_set_ptt_pin(transmit_en_pin);
//vw_set_ptt_inverted(true); // Требуется для DR3100
vw_setup(1000); // Бит в секунду
vw_rx_start(); // Запуск PLL приемника
}
void loop()
{
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
if (vw_get_message(buf, &buflen)) // Неблокирующий
{
int i;
digitalWrite(led_pin, HIGH); // Мигает индикатор, чтобы показать полученное хорошее сообщение
// Получено сообщение с хорошей контрольной суммой, распечатайте его.
Serial.print("Got: ");
for (i = 0; i < buflen; i++)
{
Serial.print(buf[i], HEX);
Serial.print(' ');
}
Serial.println();
digitalWrite(led_pin, LOW);
}
}
Передатчик
#include <VirtualWire.h>
const int led_pin = 11;
const int transmit_pin = 12;
const int receive_pin = 2;
const int transmit_en_pin = 3;
void setup()
{
// Инициализировать ввод-вывод и ISR
vw_set_tx_pin(transmit_pin);
vw_set_rx_pin(receive_pin);
vw_set_ptt_pin(transmit_en_pin);
vw_set_ptt_inverted(true); // Требуется для DR3100
vw_setup(1000); // Бит в секунду
}
byte count = 1;
void loop()
{
char msg[7] = {'h','e','l','l','o',' ','#'};
Serial.println("sending");
msg[6] = count;
digitalWrite(led_pin, HIGH); // Мигает индикатор, чтобы показать передачу
vw_send((uint8_t *)msg, 7);
vw_wait_tx(); // Подождите, пока все сообщение не исчезнет
digitalWrite(led_pin, LOW);
delay(1000);
count = count + 1;
}
@Thijs, 👍1
Обсуждение2 ответа
Лучший ответ:
То, что я принял за приемник, оказалось передатчиком. Теперь я заслужил свою медаль нуба :) Чип с установленным на нем номером LR433A является передающим устройством.
Приведенный выше код и проводка - все в порядке!
Я так и сделаю, мне придется подождать целый день, чтобы сделать это :), @Thijs
Поздравляю с вашей медалью - у меня их целая куча вот такой высоты ^, @AMADANON Inc.
Если вы ничего не получаете на приемник, то проблема, безусловно, в приемнике. Эти устройства будут увеличивать коэффициент усиления до тех пор, пока не получат какой-то сигнал, любой сигнал.
Вы должны иметь возможность включить приемник + и GND (у меня есть один, который работает на 5 В, я не вижу, совпадают ли они), и подключить мультиметр от GND к данным, и вы должны получить примерно половину Vcc, возможно, немного колеблясь. Если вы посмотрите на то же самое с помощью осциллографа, оно должно сильно колебаться между 0 и Vcc вольт. Все это должно работать и без передатчика, и без Arduino (вам понадобится источник питания для приемника).
Примечание: это по памяти, у меня здесь нет моей, чтобы проверить.
Как только вы получите "случайные данные" (фоновый шум), вы можете перейти к отправке сигнала.
Обратите внимание, что вы должны сбалансировать свои "1" и "0", чтобы получить четкий сигнал - проверьте манчестерскую кодировку (она кодирует "1" как "1,0", а 0 как "0,1", так что будет идеальный баланс). Возможно, вы также захотите отправить сигнал 1010101010 в начале - это дает приемнику возможность настроить усиление на правильный уровень. Или вы можете использовать некоторую кодировку на основе ширины (например, "медленный 1, медленный 0" для "1" и "быстрый 0, быстрый 1" для "0").
Когда я подключаю мультиметр к данным и GND к приемнику, результат 0 колеблется от -0, и вы ожидаете увидеть 50% входного сигнала Vcc, то есть около 2,5 вольт? Я попрошу у кого-нибудь осциллограф, поскольку у меня самого его нет. Спасибо за совет по кодированию сигнала, я надеюсь, что смогу добраться до этого в ближайшее время., @Thijs
Я допустил ошибку новичка, как вы можете прочитать ниже. Просто хотел сообщить вам, что вы правы насчет половины Vcc при получении данных + GND и спасибо за вашу помощь., @Thijs
На случай, если кто-нибудь еще увидит ваш комментарий выше, -0 означает, что в другом направлении течет 0 вольт. Это не редкость, когда по проводам не течет электричество, небольшие случайные колебания могут вызвать это. Если напряжение меньше -0 (например, -2,5 вольт), это означает, что питание течет в другом направлении (или у вас неправильно установлены датчики на мультиметре)., @AMADANON Inc.
- Измерение расстояния с использованием (1 или 2) Arduino Nano.
- Проблема с клавиатурой Arduino и радиочастотным передатчиком 433 МГц
- Подключение считывателя microSD и электронного бумажного дисплея к Nano одновременно?
- FS100A работает, когда Arduino подключен к ПК, но не работает при подключении к Raspberry Pi.
- avrdude ser_open() can't set com-state
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Какое максимальное энергопотребление Arduino Nano 3.0?
- Как навсегда изменить скорость передачи данных ESP8266 (12e)?
братан, основываясь на (вы должны иметь возможность подключать приемник + и GND, у меня есть один, который работал на 5 В, я не вижу, совпадают ли они, и подключите мультиметр от GND к данным, и вы должны получить около половины Vcc), он говорит , что проблема не в модуль проблема связана с библиотекой, @nitra ss