Сообщество - Arduino & Pi

Arduino & Pi

1 493 поста 20 825 подписчиков

Популярные теги в сообществе:

104

Метеостанция на ESP8266

Как-то постигла меня участь сменить место жительства. Арендовали новую квартиру, перебрался в неё и заметил, что за окном нет термометра. Не то чтобы это было проблемой для меня, но иногда приходится посматривать на него, особенно в зимний период. Немного позднее было решено сообразить цифровой термометр, а еще немного позже сообразить не только термометр... Так в последствии и родился этот проект.
За основу было решено взять микроконтроллер ESP8266.

Поскольку проект "термометр" перерос в проект "метеостанция" помимо контроллера необходимы были еще 7-сегментный индикатор TM1637, датчик DS18B20 (для измерений комнатной температуры), датчик BME280 (для измерений уличной температуры, влажности воздуха и атмосферного давления), а чуть позже было решено добавить еще и часы реального времени на DS1307Z. В закупке на помощь пришла всем нам известная китайская интернет торговая площадка. Все комплектующие были закуплены там и через месяц горстью лежали у меня на столе.

Набросал принципиальную схему

И начался долгий процесс кодинга... Оно конечно можно и быстрее , но за основной работой не сильно быстро пишется, да и концепция проекта в ходе написания кода несколько раз менялась. Основу написал, по вечерам, за недельку, а дальше пошло ленивое допиливание проекта, добавление новых фитч, переписывание некоторых библиотек и многое другое. Затянулось это на долгих 10 месяцев.
Итак в завершении мы имеем следующие функции:
1. Измерение температур/влажности/давления
2. Возможность работы в домашней Wi-Fi сети и в режиме точки доступа
3. Вывод данных на 7-сегментный индикатор
4. Web интерфейс для просмотра данных с компьютера/ноутбука/телефона
5. Изменения настроек с помощью web интерфейса
6. Сохранение настроек в EEPROM памяти
7. Возможность отправки данных на ресурс Narodmon.ru
8. Часы с возможностью синхронизации с NTP серверами
9. Смена яркости свечения 7-сегментных индикаторов
*10. Так же была возможность отправки данных в Telegram, но из-за нехватки  ОЗУ ESP8266 пришлось отказаться от этой затеи. Функция работала нестабильно и вызывала частые перезагрузки или зависание. Если использовать ESP32, то должно все работать, но я еще не пробовал.

Больше всего времени пришлось потратить на написание web страниц. Если с С++ я еще дружу, то с HTML, CSS и JS я до этого времени особо не сталкивался. Да и HTML внедряется в код тут специфически.

Главная Web страница. На ней отображаются данные с датчиков. Автоматически страница обновляет данные каждые 5 минут, а так же изменяет цвет фона в зависимости от температуры на улице. При t<0 - синий оттенок, t=0..28 - зеленый, при t>28 оранжевый. Данный стиль страницы я, честно, где-то подсмотрел в интернете, но немножко переделал под свои нужды и добавил медиа-запросы, что позволило просматривать данную страницу на устройствах с маленькими дисплеями.

Что такое Narodmon.ru? Как гласит сайт проекта:

Народный мониторинг - это основанный в 2011 году краудфандинговый геоинформационный проект по отображению на карте мира и контролю (на ПК, смартфонах и других гаджетах) показаний датчиков своих участников (температуры, влажности, атм.давления, скорости и направления ветра, радиации, энергопотребления и любых других величин), а также частных и городских веб-камер для публичного или приватного просмотра.
Главная фишка в том, что данные с вашей метеостанции, с помощью данного ресурса, можно просматривать с любой точки мира через сайт или с помощью мобильного приложения (выше на фото скрины с официального приложения). Сервера сервиса хранят данные  до 1 года (среднечасовые показания). На основе показаний сервис строит тренды, что позволяет просматривать динамику их изменений в течении часа/дня/недели/месяца/года, а так же экспортировать данные в csv формате. Для бонуса к карме можно  предоставить данные вашей метеостанции для публичного просмотра.
Собственно для отправки данных на ресурс необходимо: подключение к беспроводной сети, включить данную функцию в настройках метеостанции, дождаться отправки данных на ресурс и в аккаунте narodmon добавить новое устройство. Добавление устройств проходил по MAC адресу, при старте метеостанции, она выводит его в монитор COM порта. 

Часы. В первых версиях проекта не было отдельного модуля RTC. Счет времени был организован с помощью отсчета времени самой ESP, а точнее с использованием библиотеки <Ticker.h>. Но есть небольшая проблема. При отключении питания время сбрасывается и если нет подключения к интернету, то придется устанавливать время вручную. В следствии этого было принято решение для счета времени использовать микросхему DS1307Z. Собственно модуль RTC представлен на фото выше. Точность хода ±1-3 секунды в час. Предусмотрена синхронизация с NTP сервером. Синхронизация произойдет если время метеостанции будет отличаться от серверного более чем на 1 минуту. Автоматический переход на летнее/зимнее время, пока, не предусмотрен. Для этого необходимо вручную изменить часовой пояс GMT и нажать клавишу "сохранить". Синхронизацию можно отключить и выставить время вручную. Поскольку на RTC модуле есть резервное питание, в виде батарейки LIR2032, можно не боятся, что время сбросится при отключении питания.

По окончанию написания программной части стал вопрос о том, как же это железо все слепить до кучи, ведь оставить все на проводках лежать на подоконнике не вариант. Решено было сделать конструкцию модульной, в виде конструктора. Для этого в Sprint-Layout были нарисованы 3 платы: общая переходная плата, плата с интерфейсными разъёмами под датчики (USB+Audio 3.5mm 4pin) и плата с разъёмом питания DC 5.5/2.1mm. Модуль RTC пришлось отдельно припаять на проводах прямо к ESP, но он неплохо вписался в общий вид модели.

Габариты конструкции получились ~75*30*60 (ш*в*г).

Для перенесения рисунка платы на текстолит использовал, впервые, фоторезист. Отмечу, что классная штука, тем кто еще не пробовал - советую.


Как писал выше, датчики решил сделать на разъемах. Для BME используется USB, для DS18B20 - Audio 3.5mm. На плате разъемы припаяны с разных сторон, для удобства и в силу того, что разъем 3.5 mm SMD типа. Так как у DS182B20 всего 3 провода для подключения, то можно не использовать 4-pin штекер (я использовал 4pin так как в магазине не было smd разъема на 3pin). Разводка платы такова, что пины 1 и 2 шунтированы и на них подается питающее напряжение, следовательно при распайке, как на рисунке ниже, можно использовать 3-pin штекер.

DS18B20 сразу заказал гильзованым и с кабелем.

BME280 продается в виде платы и без корпуса. Данный датчик должен размещаться на улице, следовательно необходимо его защитить от дождя, снега и прямых солнечных лучей (это скажется на измерениях температуры). Корпус сделал из подручных материалов - из шприца "20ки".

Шток шприца должен быть с резиновым наконечником. В резинке пробивается отверстие и через него протягивается кабель. Резина плотно прилегает к кабелю обеспечивая герметичность.

Под игольный конус необходимо убрать. Лучше всего вырезать чем-то горячим, например,  паяльником. Это обеспечит хороший доступ к атмосфере для измерения влажности и не даст скапливаться внутри шприца конденсату. Торчащую часть штока можно обрезать, но я не стал. В случае чего можно легко извлечь шток.

Датчик необходимо как-то разместить на улице. Можно крепить по классике жанра на откосе за окном, сделав из полоски металла крепеж. Так же необходимо сделать защиту от солнечных лучей.
Метеорологи размещают свое измерительное оборудование  в психотермометрической будке (она же будка Селянинова, она же будка Стивенсона, она же метеорологическая будка). Выглядит она примерно вот так:

Но поскольку живу я в квартире, а не в своем доме, то городить такой "скворечник" на отливе за окном не было никакого желания. И если у вас, как и у меня, нет сверлильного инструмента, то сделать крепление для данного датчика можно из подручных средств.
Шприц очень хорошо входит в горлышко обычной пластиковой бутылки из под "минералки" или картонного пакета сока, а упоры для пальцев не дают ему провалиться в горлышко. Обрезается дно бутылки, укрывается непрозрачным светоотражающим материалом, например, фольгой, делаются окошки для вентиляции и ушки для крепления к отливу. Крепить можно на обычной скотч, предварительно вытерев отлив от грязи.

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

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

PS: если отправлять данные на narodmon и показатели температуры будут завышены относительно средних показателей по региону, то narodmon вышлет вам предупреждение и отключит публичный доступ у этого датчика. Конечно, через время можно снова подключить публичный доступ, но это лишние телодвижения. А оно вам надо?

Корпус метеостанции... Где же взять корпус? Можно купить у китайцев готовый пластиковый корпус под электронику и сделать в нужных местах отверстия для разъемов и индикатора. Я же решился заморочиться и сделать его сам. Не хотелось мне обыденности и черного пластика. Решил сделать из ламината (о чем в процессе пожалел). Довольно твердая штука оказался этот ламинат. При отсутствии инструмента и мастерской это не простая задача, но я справился.

PS: За время, что делался этот проект, было собрано два устройства. Одно в корпусе из фанеры и ламината (лицевая часть),  а другое в корпусе чисто из ламината. На фотках представлен уже второй вариант корпуса.

Для подключения к web интерфейсу метеостанции необходимо знать ее IP адрес. Он выводится при старте метеостанции в монитор СОМ порта и на индикаторе в виде бегущей строки. Если не знаете, забыли или роутер выделил новый адрес - перезагрузите метеостанцию и она покажет его на индикаторе.
Если это первый запуск и еще не настроены параметры сети или работа в режиме точки доступа, то адрес всегда будет фиксированный 192.168.4.1

Ну и собственно пример работы индикации. Время -- температура в помещении -- температура на улице -- атм.давление в мм.рт.ст. -- влажность в %.

Для тех кому интересна данная самоделка оставлю ссылку на github. Там сам скетч для Arduino IDE,  дополнительные библиотеки, драйвер для СН340, инструкция и разводка платы в формате lay.

Показать полностью 15 2
75

Сортировщик для LEGO с нейросетью собрали из LEGO :-)

Изобретатель Дэниел Вест (Daniel West) собрал универсальный LEGO-сортировщик: с помощью подключенного алгоритма компьютерного зрения он может распознать и отсортировать любую когда-либо созданную для конструктора деталь. Сам сортировщик состоит из более десяти тысяч LEGO-деталей, а скорость его работы — примерно полдетали в секунду. Подробности о работе устройства сообщает Engadget.


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

Разумеется, машины для сортировки деталей LEGO (очень полезное приспособление для тех, у кого очень много разных конструкторов в разобранном виде) делают из них же, а первое подобное устройство представили еще в 2012 году: для определения детали в нем используется открытый алгоритм для распознавания изображения, сравнивающий снимок одной детали с существующей у сортировщика базой данных.


Свой сортировщик инженер и изобретатель Дэниел Вест решил сделать чуть умнее и технологически современнее. Вся конструкция состоит из примерно десяти тысяч деталей, снабжена шестью LEGO-моторами и девятью сервоприводами. Детали загружаются на сортирующую ленту, которая затем выбрасывает их на трясущийся желоб: из-за тряски детали не попадают друг на друга и на следующий шаг сортировки попадают по одной.


На следующем шаге сортировки снимается видео деталей — его обрабатывает Raspberry Pi и отправляет далее для анализа на другой компьютер по беспроводной связи. На компьютере заснятые на видео детали анализируются с помощью алгоритма, в основе которого лежит сверточная нейросеть, обученная на трехмерных моделей всех существующих LEGO-деталей. Каждой детали присваивается вероятность принадлежности к какой-либо категории, после чего результат отправляется на сортировочную станцию устройства. Наконец, система, состоящая из нескольких двигающих ворот, направляет деталь в необходимую коробочку. Всего коробочек 18: это больше, чем количество возможных деталей, но для каждой коробочки можно выбрать набор попадающих в нее деталей. Одну деталь устройство может отсортировать примерно за две секунды.

Показать полностью 1
14

Нужна помощь в подключении приемника 433 мГц и сдвигового регистра на ардуино

Уважаемые пикабушники! Никак не могу разобраться с феноменом. Есть плата Iskra Mini (аналог ардуино нано), подключенный к ней китайский модуль приемника на 433 мГц и два сдвиговых регистра 74HC595. Подключаю к плате. Тестирую. По отдельности все работает, как часы, но стОит только оба модуля запустить одновременно, как сдвиговый регистр начинает включать и выключать пины в случайном порядке. Сперва грешил на наводки, притянул пины и резисторами и конденсатором( все по-разному советуют) - не помогло. Тогда я оставил только код, который циклично по очереди включает и выключает пины регистра, и стал расскоменчивать код построчно и заливать его до того момента, пока ошибка вновь не появится. Таким образом, экспериментально я выяснил, что проблема с регистром начинается в тот момент, когда я задаю скорость передачи для приемника (библиотека VirtualWire, метод vw_setup(2000) . Именно эта строка кода и является причиной хаотичного поведения пинов сдвигового регистра. Уважаемые пикабушники, то-нибудь сталкивался с подобной проблемой? Или может быть кто-то знает пути решения? Буду очень признателен за любую помощь!

77

Самый простой способ воспроизведения видео на LED P Panel при помощи  Falcon Player - FPP на Raspberry Pi

Делал по этой инструкции https://www.instructables.com/id/P5-LED-Panel-With-Raspberry...

У меня получился вот такой комплект https://amperka.ru/product/rgb-led-matrix-driver-cap?utm_sou...

Для платы адаптера от Амперки нужны вот такие настройки в Falcon Player.

Далее  нужно любое видео перекодировать в формат.

И добавить в xLights64 вот-так.

Затем загрузить в  FPP и добавить в плейлист.

Да забыл сказать, видео которое будет в формате xLights64 это просто анимация без звука, но в плейлист можно добавит mp3 файл от этого же видео, и воспроизвести одновременно. Для воспроизведения звука с Raspberry Pi понадобится любая  внешняя USB звуковая карта т.к. встроенная используется для подключения LED панели.

Показать полностью 5
114

Подключение PIR(датчика движения) к RaspberryPi.

В одном из своих постов я описывал как сделать умное зеркало. В комментариях поступило предложение подключить датчик движения. Опишу процесс подключения датчика,может быть кому-то будет полезна эта информация

Контакты на датчике:

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

Подключение датчика к GPIO:
GND-2 пин GPIO
OUT-11 пин GPIO
+5V-6 пин GPIO

Создание скрипта на питоне:

Теперь мы делаем скрипт python.
Создаем файл в каталоге MagicMirror с расширением .py(я назвал pir.py). Открываем этот файл любым текстовым редактором и прописываем туда следующие строки :

#!/usr/bin/env python

import sys
import time
import RPi.GPIO as io 
import subprocess

io.setmode(io.BOARD)
SHUTOFF_DELAY = 600 # секунды
PIR_PIN=11

def main():
    io.setup(PIR_PIN, io.IN)
    turned_off = False
    last_motion_time = time.time()
    while True:
        if io.input(PIR_PIN):
            last_motion_time = time.time()
            sys.stdout.flush()
            if turned_off:
                turned_off = False
                turn_on()
        else:
if not turned_off and time.time() > (last_motion_time + SHUTOFF_DELAY):
                turned_off = True
                turn_off()
            if not turned_off and time.time() > (last_motion_time + 1):
        time.sleep(.1)
def turn_on():
    subprocess.call("sh /home/pi/MagicMirror/monitor_on.sh", shell=True)

def turn_off():
    subprocess.call("sh /home/pi/MagicMirror/monitor_off.sh", shell=True)

if __name__ == '__main__':
    try:
        main()
    except KeyboardInterrupt:
        io.cleanup()
Проверяем скрипт. Если датчик не улавливает движения в течение 600с(10мин), то монитор выключается. Всё работает
Теперь сделаем так, чтобы скрипт запускался автоматическое при запуске системы. Для этого Переходим по этому адресу ~/.config/lxsession /, открываем LXDE-pi в текстовом редакторе и добавляем эту строку :
@sudo / usr / bin / python /home/pi/MagicMirror/pir.py
Сохраняем изменения, выходим и перезагружаем raspberry pi.
Мои посты:

Умное зеркало на Raspberry pi 4

Процесс создания умного зеркала на raspberry pi.

Показать полностью 2
870

Процесс создания умного зеркала на raspberry pi.

Что нам потребуется :
-raspberry pi 2-4(в моем случае raspberry pi 4)
-Карта памяти не меньше 8гб
-блок питания 5В
-монитор, чем больше тем лучше (я использовал 24-х дюймовый монитор)
-зеркало гизелла или стекло с наклеенной зеркальной плёнкой
-рамка для зеркала
-hdmi провод
-провод питания для raspberry pi и для монитора

6)Дожидаемся окончания установки операционной системы.
7)После перезагрузки видим установленный Raspbian

Установка MagicMirror:
Здесь все предельно просто.
открываем окно терминала и вводим эту команду

bash -c "$(curl -sL https://raw.githubusercontent.com/MichMich/MagicMirror/maste...)"

Началась установка MagicMirror.

После установки запустится окно умного зеркала,чтобы его свернуть нажимаем Ctrl+M.

Включение русского языка:
1)Переходим по адресу /home/pi/MagicMirror/config и открываем config.js(далее просто конфиг) в текстовом редакторе. В строке language заменяем значение "en" на "ru". Сохраняем файл config.js.

2)Разворачиваем окно MagicMirror и перезапускаем его сочетанием клавиш Ctrl+R. Теперь все модули, кроме комплиментов и новостей, переведены на русский язык.

Настройка погоды:
1)По этой ссылке скачиваем архив городов, распаковываем его и находим свой город.
2)Регистрируемся на Openweathermap.org по этой ссылке и получаем api_key
3)Открываем конфиг, ищем модули "currentweather", "weatherforecast". В поле location указываем ваш город. В поле locationID указываем ID города из скачанного архива. В поле appid указываем api_key, который мы получили на openweathermap.org.

Сохраняем все изменения и перезагружаем MagicMirror. Теперь модуль погоды показывает погоду вашего города

Настройка календаря :
Открываем конфиг и ищем модуль "calendar". В поле header указываем название календаря, оно будет отображаться в зеркале . В поле URL вы можете указать URL своего календаря Google, Icloud или любого другого календаря.

Сохраняем конфиг и перезапускаем приложение MagicMirror.

Настройка новостей :
В конфиге находим модуль "newsfeed". В поле title изменяем название источника новостей, а в поле URL указываем ссылку на источник новостей rss.

Сохраняем конфиг и перезапускаем приложение MagicMirror. Теперь модуль новостей показывает новости из источника, который вы указали.

Модуль комплиментов :
Лично я отключил этот модуль(удалил в конфиге). Кому-то понравится этот модуль, поэтому опишу процесс изменения английских комплиментов на русские.
Переходим по адресу home/pi/MagicMirror /modules/default/compliments/ и Открываем файл compliments.js в текстовом редакторе. Находим строку compliments, ниже указаны комплименты на английском, заменяем на свои и сохраняем файл. Перезапускаем приложение MagicMirror. Теперь текст в модуле комплименты отображается на русском языке.

Добавление других модулей:
1)Переходим по ссылке, выбираем интересующий вас модуль и скачиваем его.
2)скачанный модуль перемещаем по адресу :home/pi/MagicMirror /modules/
3)Изучаем файл Readme и редактииуем конфиг согласно инструкции.
4)Сохраняем все изменения и перезапускаем MagicMirror.

Автозапуск MagicMirror при перезагрузке raspberry pi:
1)Открываем окно терминала и вводим эти команды:

sudo npm install -g pm2

sudopm2 startup

cd ~
nano mm.sh

Откроется редактор текста, добавляем следующие строки:

cd ~/MagicMirror
DISPLAY=:0 npm start

Сохраняем изменения и закрываем, используя сочетания клавиш CTRL+O и CTRL+X.

Далее поочерёдно вводим эти команды :

chmod +x mm.sh

pm2 start mm.sh

pm2 save

Закрываем окно терминала и перезагружаем RaspbianOS. Теперь при перезагрузке MagicMirror запускается автоматически

Отключение сна :
Открываем окно термина и вводим команду:

sudo nano /etc/xdg/lxsession/LXDE-pi/autostart

Добавляем строки в конец файла
@xset s noblank
@xset s off
@xset -dpms

Выходим, сохраняя изменения и вводим новую команду:

sudo nano /etc/lightdm/lightdm.conf

В текстовом редакторе прокручиваем вниз до раздела  [SeatDefaults] и находим xserver-command. Измените строку, чтобы она выглядела так:
xserver-command=X -s 0 -dpms
Нажимаем CTRL+X затем Y.

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

Спасибо всем кто дочитал этот пост до конца попытался описать все наиболее подробно и понятно.

Показать полностью 16
586

Умное зеркало на Raspberry pi 4

Всех приветствую.
Несколько месяцев назад наткнулся на очень интересный проект на базе raspberry pi "MagicMirror", решил сделать себе такое зеркало. Мне кажется, что получилось достаточно неплохо. Может кто-то подскажет как ещё можно использовать raspberry pi 4 параллельно с зеркалом чтобы максимально использовать ресурсы компьютера?

Умное зеркало на Raspberry pi 4

На просторах русскоязычного интернета не нашёл информации по созданию такого зеркала, если кому-то интересно опишу все действия.

Показать полностью 1
31

Мини-компьютер Pocket P.C. с клавиатурой на основе Linux

Команда Popcorn Computer представила проект компьютера небольшого форм-фактора Pocket P.C., приём заказов на который начнётся 24 ноября в рамках краудфандинговой кампании.

Устройство получит корпус моноблочного типа. В его нижней части расположится клавиатура с раскладкой QWERTY, наделённая подсветкой с 256 цветовыми оттенками. Верхнюю половину займёт 4,95''-дисплей с разрешением Full HD (1920 × 1080 точек) и поддержкой сенсорного управления.

Основой послужит четырёхъядерный процессор с архитектурой ARM Cortex-A53, работающий на тактовой частоте до 1,2 ГГц. Объём оперативной памяти — 2 Гбайт, вместимость флеш-накопителя eMMC — 32 Гбайт.


Предусмотрен слот microSD, адаптеры беспроводной связи Wi-Fi (2,4 ГГц) и Bluetooth 4.0, а также четыре порта USB Type-C, один из которых обеспечит возможность подзарядки гаджетов (USB Power Delivery).

Питание мини-компьютер будет получать от аккумуляторной батареи ёмкостью 3200 мА·ч. Заявлена поддержка операционной системы Debian 10 на ядре Linux.


На начальном этапе цена Pocket P.C. составит от $200. Поставки планируется организовать в мае следующего года.


Источник 3dnews.ru

Показать полностью 2
Отличная работа, все прочитано!