Рубрики
Схемы на Arduino

Передача текста с помощью Arduino и технологии Li-Fi

Li-Fi (Light Fidelity – «Световое качество») – это перспективная технология, которая позволяет передавать данные с помощью оптической связи, используя в качестве переносчика сигнала обычный свет. Данные в технологии Li-Fi передаются при помощи света, излучаемого каким-либо устройством (например, светодиодом), а на приемной стороне принимаются каким-либо светочувствительным элементом, например, фоторезистором или фотодиодом. Скорость передачи данных в технологии Li-Fi может быть до 100 раз выше чем в технологии Wi-Fi, поскольку частотная емкость оптического диапазона значительно больше, чем частотная емкость радиодиапазона.

В данном проекте мы осуществим Li-Fi связь между двумя платами Arduino. Мы будем передавать текстовые данные с помощью светодиода и клавиатуры (клавишной панели) 4×4. На приемной стороне мы будем декодировать эти сигналы с помощью фоторезистора (LDR).

Необходимые компоненты

  1. Плата Arduino Uno (купить на AliExpress).
  2. Плата Arduino Nano (купить на AliExpress).
  3. Фоторезистор (LDR) (купить на AliExpress).
  4. Клавиатура (Keypad, клавишная панель) 4×4 (купить на AliExpress).
  5. ЖК дисплей 16х2 с модулем интерфейса I2C для него (купить на AliExpress).
  6. Светодиод 5 mm (купить на AliExpress).
  7. Макетная плата.
  8. Соединительные провода.

Реклама: ООО «АЛИБАБА.КОМ (РУ)» ИНН: 7703380158

Краткое введение в технологию Li-Fi

Как уже упоминалось, Li-Fi является достаточно прогрессивной технологией и с ее помощью можно обеспечить связь в 100 раз более быструю, чем с помощью технологии Wi-Fi. Данные в технологии Li-Fi передаются с помощью света. Есть даже проекты организации высокоскоростного интернета с помощью технологии Li-Fi – представляет каким скоростным его можно было бы сделать.

Технология Li-Fi использует видимый свет в качестве среды переноса данных. Светодиод может выступать в качестве источника света, а фотодиод (фоторезистор) – в качестве приемника света. Управляя импульсами света на передающей стороне, мы можем передавать уникальные образцы данных. Эти процессы можно осуществлять на очень высокой скорости и на частотах света, невидимого человеческому глазу.

Передающая часть Li-Fi на основе платы Arduino

Структурная схема передающей части Li-Fi на основе платы Arduino представлена на следующем рисунке.

Как показано на рисунке, в качестве устройства ввода информации используется клавиатура (клавишная панель) 4х4 – то есть текст для передачи мы будем набирать на ней. Информация с клавиатуры поступает в управляющее устройство (control unit), роль которого в нашем проекте выполняет плата Arduino. Данная плата преобразует информацию, поступающую от клавиатуры, в бинарные (двоичные) импульсы, которые подаются на светодиод для их последующей передачи в виде импульсов света.

Схема передающей части Li-Fi на основе платы Arduino представлена на следующем рисунке.

Внешний вид собранной на макетной плате конструкции передающей части показан на следующем рисунке.

Приемная часть Li-Fi на основе платы Arduino

На приемной стороне фоторезистор (LDR) принимает импульсы света от передающей стороны и преобразует их в электрические импульсы, которые затем подаются в плату Arduino (Control unit). Плата Arduino отображает полученные данные на экране ЖК дисплея 16×2.

Схема приемной части Li-Fi на основе платы Arduino представлена на следующем рисунке.

Внешний вид собранной на макетной плате конструкции приемной части показан на следующем рисунке.

Объяснение программы для Arduino

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты. Рассмотрим последовательно фрагмента кода для передающей и приемной частей нашего проекта.

Объяснение программы для передающей части Li-Fi

В передающей части плата Arduino Nano взаимодействует с клавиатурой 4×4 и светодиодом. Первым делом нам необходимо скачать по следующей ссылке и установить в Arduino IDE библиотеку для работы с клавиатурой 4х4. Более подробно о подключении подобной клавиатуры к плате Arduino можно прочитать в этой статье. Далее подключим в программе заголовочный файл этой библиотеки.

После успешной установки библиотеки укажем число столбцов и число строк в используемой нами клавиатуре.

Далее укажем к каким контактам платы Arduino подключены контакты строк и столбцов клавиатуры (клавишной панели). В нашем случае мы использовали контакты A5, A4, A3 и A2 для подключения к контактам R1, R2, R3, R4 клавиатуры, и контакты A1, A0, 12, 11 для подключения к контактам C1, C2, C3 и C4 клавиатуры соответственно.

Внутри функции setup() для контакта 8 (к которому подключен светодиод) устанавливается режим работы на вывод данных и на него затем подается напряжение низкого уровня (светодиод выключен).

Внутри функции loop с помощью функции customKeypad.getKey() происходит считывание значений, поступающих с клавиатуры и далее с помощью операторов if формируются условия, позволяющие сформировать уникальный набор световых импульсов для каждой нажатой клавиши. Для формирования уникальных импульсов мы использовали различные временные интервалы действия импульсов.

Объяснение программы для приемной части Li-Fi

На приемной стороне к плате Arduino подключены фоторезистор и ЖК дисплей. Фоторезистор соединен последовательно с обычным резистором, таким образом они образуют схему делителя напряжения. Аналоговое напряжение с выхода делителя напряжения подается на плату Arduino в качестве входного сигнала. В нашем проекте мы используем модуль интерфейса I2C для подключения ЖК дисплея чтобы уменьшить число контактов платы Arduino, используемых для подключения ЖК дисплея – в нашем случае мы используем только 2 контакта для передачи данных (SCL/SDA) и 2 контакта для подачи питания.

Первым делом в программе необходимо подключить используемые библиотеки: Wire.h для связи по интерфейсу I2C, LiquidCrystal_I2C.h – для управления ЖК дисплеем по интерфейсу I2C. Эти библиотеки по умолчанию присутствуют в Arduino IDE, поэтому скачивать и устанавливать их не нужно.

Для управления ЖК дисплеем с помощью модуля I2C объявим объект класса LiquidCrystal_I2C. Для этого объекта необходимо указать адрес, число столбцов и строк дисплея, в нашем случае эти параметры будут равны 0x3f, 16 и 2 соответственно.

Внутри функции setup() зададим режим работы для контакта, с которого будем считывать принимаемый сигнал. Также покажем на экране дисплея приветственное сообщение.

Внутри функции loop мы будем определять длительность импульса, поступающего от фоторезистора, с помощью функции pulseIn. Тип импульса в нашем случае будет LOW. Значение длительности импульса будет выводиться в окно монитора последовательной связи для целей отладки.

В нашем случае мы будем иметь 16 различных длительностей импульса (число клавиш на нашей клавиатуре). Сравнивая полученную длительность импульса с различными временными интервалами (возможными диапазонами длительности импульсов) мы сможем определить какой символ передавался. Фрагмент кода для приема клавиши 1 в этом случае будет выглядеть следующим образом:

Тестирование работы проекта

После сборки аппаратной части проекта и загрузки кодов программы в обе платы Arduino вы можете приступить к тестированию работы проекта. Нажимайте произвольные клавиши на клавиатуре в передающей части проекта и вы увидите как нажатые символы (клавиши) будут высвечиваться на экране ЖК дисплея 16×2 в приемной части проекта. Более подробно эти процессы можно посмотреть в видео, приведенном в конце статьи.

Исходный код программы (скетча)

Код программы для передающей части

Код программы для приемной части

Видео, демонстрирующее работу проекта

2 ответа к “Передача текста с помощью Arduino и технологии Li-Fi”

Здравствуйте! Можно ли использовать лазерный модуль ky-008 или Лазерный диод (RCK353000), чтобы увеличить расстояние приема?

Добрый вечер. Да, конечно можно если плата Ардуино потянет по току управление ими со своего контакта — мы же не делаем здесь какой то хитрой модуляции, а просто включаем и выключаем светодиод. Если не потянет, то можно через MOSFET попробовать подключить, или через обычный транзистор если высокие скорости не нужны.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *