Блютуз термометр своими руками

Bluetooth термометр

Одним утром я проснулся и захотел узнать температуру на улице. Вместо того, чтобы идти в хозяйственный магазин и покупать стеклянный термометр, я решил сделать самодельный беспроводной термометр. В центре платы находится микроконтроллер PIC12F675 в корпусе SO8. В правой части платы находится линейный источник питания (LP2950), ниже центра находится 1-Wire датчик температуры DS18B20, а в левой части находится TTL Bluetooth модуль от Sure.

Предпочитая стандартные протоколы, я решил передавать данные о температуре по Bluetooth SPP (Serial Port Protocol, протокол последовательного порта), а не по XBee или по другой подобной беспроводной архитектуре. Несмотря на то, Bluetooth потребляет больше чем XBee модуль, его преимуществом является то, что для приема используется стандартное оборудование. Почти все современные ноутбуки имеют интегрированный Bluetooth модуль, что позволяет использовать их в качестве приемника сигнала.

Я нашел Bluetooth модуль от Sure, который я купил несколько лет назад для другого проекта. Для упрощения макетирования, модуль для поверхностного монтажа был установлен на самодельную печатную плату с BLS штырьками. Так как у меня нет паяльной станции с феном, чтобы отпаять модуль, я заказал ещё один модуль GP-GC021. Ниже показан модуль, с которым я изначально работал, а на фото выше показан недавно приобретённый модуль.

Я решил использовать микроконтроллер PIC12F675 только потому, что он был у меня. Изначально я хотел использовать внутренний генератор 4 МГц, но позже я узнал, что Bluetooth модуль передает данные со скоростью 9600 бит/сек, и основная частота системы должна быть 8 МГц, чтобы не отставать и передавать данные с нужной скоростью.

Как и во всех моих проектах, схема и печатная плата были сделаны в Altium Designer. За эти годы я попробовал работать в различных САПР (Система автоматизированного проектирования), включая Eagle, ExpressPCB, и EdwinXP, однако я считаю, что Altium на голову выше всех остальных программ. Если вы простой любитель, то возможно Altium будет слишком дорогой для вас, но многие колледжи и университеты покупают учебную лицензию. В колледже Оканаган есть плавающая лицензия, которая позволяет студентам использовать Altium на любом компьютере, независимо от того, находимся мы на территории университета или нет. Пока я не работал в Altium, я боролся с САПР на протяжении многих лет. С Altium у меня тоже были небольшие проблемы, но в целом, в нем приятно работать.

Примечания:
— программирование не является моей сильной стороной, поэтому прошивка написана в PicBasic. В архиве находятся готовые к прошивке HEX файлы, поэтому если вы хотите изменить прошивку, вам нужно иметь ProtonIDE для компиляции.
— если вы будете делать плату по прилагаемым Gerber файлам, обратите внимание на то, что контакты для F1 (предохранитель на линии VCC датчика) слишком маленькие.
— вся информация в статье предоставлена без гарантий. Автор не несет никакой ответственности.
— если вы будете использовать этот проект или его часть в своем проекте, то указывайте автора.

Читайте также:  Душевой поддон с трапом своими руками

Источник

Bluetooth-метеостанция на Arduino для начинающих

В данной статье я расскажу о том, как сделать первый шаг в мир Arduino и смастерить собственную метеостанцию. Метеостанция будет состоять из двух модулей: один модуль будет считывать информацию с подключенных датчиков, другой — выводить считанные данные на небольшой экран. Для передачи информации будем использовать Bluetooth.

Также приведу информацию по настройке BT-модулей для работы друг с другом.

С чего начать?

Начнем с того, что для того чтобы начать свои первые поделки на платформе Arduino не требуется обширных знаний. Всю информацию можно получить из интернета, в частности, очень помогли обучающие уроки от Amperka.ru.

Подготовка

Для изготовления прототипов устройств понадобятся следующие элементы:

  • Фоторезистор 500 кОм (x1)
  • Барометр BMP085 (x1)
  • BT-модуль HC-05 (x2)
  • LCD дисплей, ЖК экран LCM 1602 i2c (x1)
  • Набор эл. компонентов (макетная плата, резисторы, диоды) (x1)
  • Arduino UNO R3 (x2)

Для прошивки будем использовать родную Arduino IDE.

Хочу обратить внимание на то, что хотя бы один модуль должен быть HC-05 (не 06!), это важно. Дело в том, что HC-06 не поддерживает режим master, т.о. взяв оба модуля 06 нам не удастся настроить их на работу друг с другом. Я решил взять оба модуля HC-05 чтобы заодно избежать проблем с совместимостью, если таковые возникнут.

Нюансы настройки BT-модулей будут описаны ниже.

Оба модуля встроены в шилд, то есть проблем с подключением к плате Arduino возникнуть не должно.

Начинаем сборку

Подключаем фоторезистор

Сопротивление фоторезистора зависит от света, попадающего на него. Используя фоторезистор в связке с обычным резистором, мы получаем делитель напряжения, в котором напряжение проходящее через фоторезистор, изменяется, в зависимости от уровня освещенности.

Механизм получения полезной информации от датчика очень прост: функция analogRead(pin_number) вернет значение, которое будет представлять степень освещенности. Чувствительностью датчика можно управлять играясь с резисторами разных номиналов; на мой взгляд, 10кОм — оптимальный номинал.

Датчик давления и температуры

Для измерения температуры, давления, а также высоты над уровнем моря будем использовать барометр BMP085.

Для подключения датчика BMP085 к Arduino нам понадобится 4 контакта:

  • Vcc – подключаем к питанию +5в
  • SDA – SDA на плате Arduino (A4)
  • SCL – SCL на плате Arduino (A5)
  • GND – подключаем к земле

Для снятия значений с датчика необходимо подключить билиотеку Adafruit.

Подключение дисплея

Контакты дисплея LCD1602 подключаются аналогично, как и для BMP085:

  • ЖК SDA -> Arduino SDA (A4)
  • ЖК SCL -> Arduino SCL (А5)
  • ЖК GND -> Arduino GND
  • ЖК VCC -> Arduino 5V

Подключение Bluetooth

А теперь самое интересное. «Насаживаем» наши шилды с bt-модулем на нашу Arduino:

Master-устройство будет подключаться к Slave-устройству, которое будет ждать входящего подключения. На одной из плат устанавливаем переключатель в H, это и будет наш master. На другой плате — в L, это будет slave.

Прикрепив модули к Arduino можно начинать настройку. Для настройки master-a нужно будет послать некоторый набор команд в bt-модуль, будем делать это с помощью Serial Monitor (Ctrl+Shift+M). При обмене сообщениями рекомендуется выставить Baud rate -> 38400 & «Both NL&CR».

Послав команду «AT» и нажав отправить, мы ожидаем ответ «OK». Если это так — плата подключена правильно, можно продолжать. Если нет — стоит вернуться на пару шагов назад и проверить корректность подключения bluetooth-модуля.

Читайте также:  Грумминг йорка своими руками

Несколько важных АТ-команд, которые нам могу пригодиться:

AT — просто вернет «OK», значит всё в порядке
AT+NAME? — вернет имя модуля. Мы также можем задать своё имя, послав, например, AT+NAME=WEATHER_MONITOR
AT+ROLE? — одна из ключевых команд, вернет роль устройства, master/slave. Задать значение можно с помощью AT+ROLE=0 — перевести в режим slave, либо AT+ROLE=1 — режим master.
AT+PSWD? — вернёт пин-код, используемый для подключения.
AT+ADDR? — вернёт адрес устройства, например «14:2:110007». Стоит заметить, что при использовании адреса в посылаемых AT-командах двоеточия «:» нужно заменять запятыми «,», т.о. «14:2:110007» -> «14,2,110007».

Настройка Slave’a

Тут никаких телодвижений не требуется, поэтому просто подключаем плату к питанию.

Настройка Master’a

Этап первый. Конфигурация.

  1. Посылаем AT+ORGL, тем самым возвращая модуль к его изначальной конфигурации
  2. Имя модуля можно изменить, послав AT+NAME=myname.
  3. AT+RMAAD — удаляем информацию о предыдущих «спариваниях».
  4. AT+PSWD=1234 — устанавливаем пароль
  5. AT+ROLE=1 — говорим устройству, что оно будет работать в master режиме.
  6. AT+CMODE=1 — говорим устройству, что оно будет подключаться к любым адресам.

Этап второй. Подключение.

  1. Отправляем команду AT, чтобы удостовериться, что модуль подключен и готов к работе.
  2. AT+INIT — инициализация. Если в ответ получаем ERROR(17) — ничего страшного, значит команда инициализации уже посылалась, продолжаем работу.
  3. AT+INQ — начинаем поиск доступных BT-устройств, ответ будет содержать список из адресов
  4. AT+LINK= — тут происходит непосредственно подключение к slave-устройству. Команда на подключение может, например, выглядеть так: AT+LINK=14,2,110007.

После выполнения последней команды диоды начнут мигать с меньшей частотой, что говорит об успешном подключении.

Финишная прямая

На этом почти всё. Остается написать скетчи, в которых мы считываем-отправляем-принимаем-отображаем погодные данные. При желании можно отказаться от макетной платы и приступить к пайке, а затем поместить конструкции в корпуса.

Источник

Создаем беспроводной термометр на Arduino

Узнайте, как использовать RF модуль 433 МГц совместно с ATMega328P-PU. В данной статье мы соберем схему из датчика DHT11 и радиочастотного передатчика. А также соберем приемное устройство с радиоприемником 433 МГц и LCD дисплеем.

Что нам потребуется

  • компьютер с установленной Arduino IDE (я использую версию 1.6.5);
  • библиотека VirtualWire (ссылка ниже);
  • Arduino Mega;
  • ATMega328P;
  • программатор AVR MKII ISP;
  • LCD дисплей;
  • датчик температуры и относительной влажности воздуха DHT11;
  • радиочастотные модули 433 МГц;
  • перемычки;
  • макетная плата;
  • компоненты из перечня элементов, приведенного ниже.

Введение

В данной статье я покажу вам, как собрать устройство, которое измеряет температуру и относительную влажность воздуха и посылает измеренные значения с помощью стандартного радиочастотного модуля 433 МГц. Датчик температуры и влажности, используемый в устройстве, – это DHT11.

Существует множество способов передачи небольшого объема данных с помощью Arduino или контроллеров ATMega. Один из них использует уже готовую библиотеку, подобную RCSwitch, Radiohead или VirtualWire. Кроме того, можно отправить необработанные данные с помощью встроенного в микроконтроллер модуля UART. Но использовать встроенный модуль UART не рекомендуется, так как приемник будет собирать и все помехи, и микроконтроллер будет работать не так, как предполагалось. В данной статье для передачи и приема данных я использую библиотеку VirtualWire. Эта библиотека работает с Arduino IDE 1.6.2 и 1.6.5.

Читайте также:  Как сделать перила для мостика своими руками

Модуль передатчика 433 МГц, когда не передает данные, всё равно излучает радиочастотные колебания и передает шум. Он также может создавать помехи другим радиочастотным устройствам. Чтобы не допустить этого, я включаю его, когда необходимо передать данные, и выключаю его, когда передача закончена.

Аппаратная часть

Нам необходимы две структурные схемы. Одна для передающего устройства, вторая для приемного.

Передатчик

  • способ прошивки микроконтроллера → ISP;
  • датчик для измерения температуры и влажности → DHT11;
  • микроконтроллер для обработки данных → ATMega32p;
  • способ беспроводной передачи данных → радиочастотный модуль 433 МГц.

Приемник

  • способ приема радиосигнала → радиочастотный модуль 433 МГц;
  • способ обработки принятых данных → Arduino Mega;
  • способ отображения температуры и влажности → 16×2 LCD.

Принципиальные схемы

Передатчик

В данном примере я не буду выводить неиспользуемые выводы микроконтроллера на внешние контакты термометра, после чего их можно было бы использовать для дальнейшего усовершенствования устройства. Здесь мы рассматриваем лишь идею для устройства и соберем его только на макетной плате.

Приемник

Пожалуйста, обратите внимание, что приемник построен на базе платы Arduino Mega, которая не изображена на схеме. Для подключения платы Arduino Mega соедините с ней радиочастотный модуль и LCD дисплей согласно метка на схеме.

Перечень элементов

Передатчик

Приемник

Программа

Программа передатчика

Сперва рассмотрим программу передающей части:

Для передачи влажности и температуры в одном сообщении я соединяю их вместе. Сначала данные считываются в переменную как целые числа, потом целые числа преобразовываются в массив символов, а затем они соединяются друг с другом. На приемной стороне данные будут разделены на отдельные символы. Делая это, я ограничиваю себя двумя цифрами градусов. Если датчик находится в среде с температурой менее 10°C, я буду получать на дисплее символы мусора. Например, если температура составляет 20°C, а влажность – 45%, то будет передаваться сообщение 2045, и всё хорошо. Если температура равна 9°C, а влажность – 78%, то передастся сообщение 978x, где «x» – случайный символ. Поэтому, если вы будете собирать данный беспроводной термометр, я советую вам изменить программу для передачи правильных данных, когда температура будет меньше 10°C.

Программа приемника

Интересный способ использования библиотеки LiquidCrystal – это создание пользовательских символов. С помощью createChar я создал символ градусов. Таким же способом вы можете создать и свои собственные символы. Чтобы создать пользовательский символ или значок, вам необходимо объявить его, как массив из восьми байт, и «нарисовать», какие пиксели будут включены (1 – включен, 0 – выключен).

В функции setup() вы создаете его с помощью createChar . createChar принимает два аргумента: номер позиции для хранения символа и массив байт, в котором определено, какие пиксели будут отображаться. В нашем случае это lcd.createChar(1, degreesymbol) . Затем символ выводится на LCD с помощью функции lcd.write .

Заключение

В данной статье я использовал датчик температуры и влажности DHT11. Температура и влажность были преобразованы в массив символов, а затем переданы с помощью передатчика 433 МГц. На приемной стороне массив символов был разделен на пары и выведен на LCD. Для получения символа градусов я использовал функцию createChar библиотеки LiquidCrystal.

Загрузки

  • Библиотека VirtualWire версия 1.6 (библиотека для Arduino для организации связи через радиомодули с использованием амплитудной манипуляции).
  • Описание библиотеки VirtualWire.

Фото и видео

Передатчик

Приемник

Видео

Источник

Оцените статью