Реализовать связь Visible Light с помощью Arduino
Я хочу реализовать простую систему связи на основе VLC с использованием двух ардуино и отправлять сообщения/данные/файлы между двумя ПК. Для этого у меня есть простая схема передатчика со светодиодом на стороне Tx и фототранзистором на стороне приемника. Коды, которые я использую для передачи и приема, прилагаются ниже, также изображение схемы прилагается ниже, но я не могу обеспечить какую-либо связь между двумя ПК, сторона передатчика работает нормально, так как светодиод мигает, указывая, что данные передаются, но они не принимаются фототранзистором. Я не знаю, что я делаю не так. Любая помощь будет оценена по достоинству, я делаю это как часть своей академической деятельности. Код передатчика :
void setup()
{
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
// Clear Timer on Compare Match (CTC) Mode
bitWrite(TCCR1A, WGM10, 0);
bitWrite(TCCR1A, WGM11, 0);
bitWrite(TCCR1B, WGM12, 1);
bitWrite(TCCR1B, WGM13, 0);
// Переключите OC1A и OC1B на Compare Match.
bitWrite(TCCR1A, COM1A0, 1);
bitWrite(TCCR1A, COM1A1, 0);
bitWrite(TCCR1A, COM1B0, 1);
bitWrite(TCCR1A, COM1B1, 0);
// Нет предварительной
bitWrite(TCCR1B, CS10, 1);
bitWrite(TCCR1B, CS11, 0);
bitWrite(TCCR1B, CS12, 0);
OCR1A = 210;
OCR1B = 210;
Serial.begin(2400);
}
void loop()
{
Serial.println("testing testing testing");
delay(500);
}
Код приемника:
void setup()
{
Serial.begin(2400);
pinMode(13, OUTPUT);
}
void loop()
{
// если входящий последовательный
if (Serial.available()) {
readSerial();
digitalWrite(13, HIGH);
}
else {
digitalWrite(13, LOW);
}
delay(500);
}
void readSerial() {
char val = Serial.read();
Serial.print(val);
}
передатчик работает нормально, но приемник ничего не принимает, я не знаю, что я делаю не так.
@D_batmaniac, 👍1
Обсуждение3 ответа
Амплитуда сигнала на фотоприемнике невелика. Лучше использовать АЦП для чтения.
Проблема еще более фундаментальна - не только не используется жизнеспособная схема кодирования, но и вообще не передаются данные., @Chris Stratton
Ваш приемник(ldr) может быть недостаточно точным, поэтому попробуйте использовать светодиод в качестве приемника. Затем вам просто нужно будет усилить сигнал чем-то вроде резистора 1 Мом параллельно с принимающим светодиодом.
Вы также можете использовать что-то вроде этого, не пробовали, но похоже, что это сработает: http://www.instructables.com/id/Arduino-Communication/ может быть, просто резистор 1 Мом вместо резистора 1 Ком
@LookAlterno не измеряет свет, а обнаруживает свет, как фототранзистор. Например: https://www.sparkfun.com/news/2161, https://makezine.com/projects/make-36-boards/how-to-use-leds-to-detect-light, https://www.edn.com/design/led/4363842/Use-LEDs-as-photodiodes, @Megladon
нет, он использует светодиод в качестве фотодиода, если светодиод получает фотоны, он действует как фотодиод, ссылки описывают, как вы можете использовать светодиод в качестве фотодиода, @Megladon
Я думаю, что у вас проблемы с аппаратной стороной. Я хотел бы предложить несколько вещей; может быть, это сработает.
Передатчик
Вместо обычного светодиода используйте ИК-светодиод, потому что он имеет преимущества перед обычным светодиодом для передачи данных, такие как более безопасная, поддержка максимальной скорости передачи, меньшее энергопотребление и многое другое. Для передатчика сигнала используйте следующую схему. Я использовал TSOP1738 для приемника, поэтому нам нужно генерировать модулированный ИК-сигнал 38 кГц. Вы можете использовать любой TSOP, но вам нужно генерировать ИК соответствующей частоты в качестве TSOP. Поэтому используйте таймер 555 в нестабильном режиме для колебания ИК-излучения на частоте 38 кГц. Как известно, частота колебаний таймера 555 определяется резисторами R1, R2 и конденсатором С1. Мы использовали конденсаторы 1k R1, 20K R2 и 1nF для генерации частоты ок. 38 кГц. Его можно рассчитать по следующей формуле: 1.44/((R1+2*R2)*C1)
а вместо кнопки можно использовать транзистор или МОП-транзистор в качестве переключателя, который будет управляться контроллером.
Приемник
Я не знаю, какой фототранзистор вы используете, но я предлагаю использовать TSOP17XX. TSOP17XX принимает модулированные инфракрасные волны и изменяет свой выход. TSOP доступен во многих частотных диапазонах, таких как TSOP1730, TSOP1738, TSOP1740 и т.д. Последние две цифры представляют частоту (в кГц) модулированных ИК - лучей, на которые реагирует TSOP. Как, например, TSOP1738 реагирует, когда получает ИК-излучение, модулированное на частоте 38 кГц. Это означает, что он обнаруживает ИК-излучение, которое включается и выключается со скоростью 38 кГц. Выход TSOP активно низкий, это означает, что его выход остается ВЫСОКИМ, когда нет ИК-излучения, и становится низким, когда он обнаруживает ИК-излучение. TSOP работает на определенной частоте, так что другие IRS в окружающей среде не могут вмешиваться, кроме модулированного IR определенной частоты.
Для получения данных вот несколько простых схем:
Вместо светодиода подключите этот вывод к контроллеру приемника; вы получите сигнал правильно. Надеюсь, это сработает для вас.
Пожалуйста, попробуйте выполнить наш эксперимент в бесшумной (ИК-свободной) среде, чтобы получить правильный результат.
Ссылка: https://circuitdigest.com/electronic-circuits/ir-transmitter-and-receiver-circuit
- Скетч мигания ESP8266 не мигает светодиодом
- Как автоматически сбросить nrf24l01+ с кодом?
- 4-битный счетчик вверх и вниз
- Многоканальная связь с Arduino и передатчиком HC-12
- SIM800L GSM-модуль, нет сигнала сети RSSI
- Акцептант векселей ИКТ
- Как запрограммировать nodeMCU через OTA с помощью GPRS?
- Отдельный ATmega 2560 - включение одного светодиода - устранение неполадок
И как именно вы подключаете эти компоненты?, @Majenko
Я думаю, что светодиод может быть слишком слабым для этого. Вы пытались использовать фонарик, чтобы проверить, получил ли вы какой-либо ответ от более мощного источника? Вы проверяли, нет ли помех? Вы передаете его в темной комнате или в освещенной комнате? Я бы посоветовал вам попробовать сделать более простую схему только с фототранзистором и платой arduino, а затем распечатать выход фототранзистора на последовательный, чтобы вы могли знать, как он ведет себя., @rvbarreto
Я сделал простое соединение, Rx к фототранзистору и через резистор к контакту 13. , @D_batmaniac
@D_batmaniac Я тебя не понимаю. Пожалуйста, нарисуйте полную схему *обоих* концов., @Majenko
Вы пробовали использовать RadioHead (преемник VirtualWire)? Это должно сработать из коробки для такого простого случая., @Kwasmich
Я голосую за то, чтобы закрыть этот вопрос, поскольку он был оставлен, так и не представив попытки, которая на самом деле что - то делает-предполагаемый код передачи здесь не передает никакой информации, в лучшем случае он просто мигает светодиодом с постоянной скоростью, и никакой жизнеспособный код приема не был предоставлен. Повторные запросы на проводку не были удовлетворены., @Chris Stratton