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

Arduino & Pi

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

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

1025

Теплица на Ардуино-Мега.

Все мои истории с предысторией. Моя мать живет в собственном доме, но здоровье уже не позволяет ей возиться в огороде. А моя жена, кандидат наук, очень любит "отдохнуть", копаясь в верхнем слое планеты. В соседем от матери доме живет моя сестра с семьей. Так вот, муж моей сестры, зовут его Александр, ближе к концу лета (мой отпуск как раз был где-то на середине), позвал меня посмотреть на сконструированный им девайс. Это было устройство с роликами, шестеренками и большим круглым рулем. Александр пояснил, что девайс предназначен для того, чтобы гнуь металлический профиль в красивые ровные дуги. Устройство впечатляло своей основательностью, а он пояснил, что теперь страсть как хочется что-то гнуть, но, вроде как нечего, да и свободные средства отсутствуют. Я похвалил его и спокойно себе пошел в свой огород, помогать жене наслаждаться огородными работами. И тут жена спрашивает, видел ли я устройство, и не хочу ли я принять предложение Александра загнуть нам профилей на теплицу. Я понял, что хитрый родственник уже заинтересовал жену перспективами новой теплицы для огурцов. Я с кислой рожей стал говорить, что надо ее открывать-закрывать, поливать, а мы только на выходных... и т.д. А она мне и говорит: "Ну вот и сделай на Ардуине, чтоб она сама.. Или не по силам?"

Знает меня, подловила. Ну что ж, вызов принят. Сварочник у Александра в наличии, у меня в наличии деньги на материал. Сначала, использовав свои скупые знания в 3Д моделировании, нарисовал во FreeCad проект. Вот такой:

Кое-что, надо сказать, в процессе строительства я изменил, но по мелочи. Итак, затарился 6-ти метровым профилем 25х25мм, стенка 2мм, плоским шивером, и стройка началась. Вдвоем с женой сделали планировку местности - она всегда активно и с удовольствием помогает. Затем пришло время сварочных работ:

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

Пол в одной из грядок решил сделать с подогревом - пусть пораньше садят свои огурцы.

Засыпал, как положено, песочком, прикрыл металлической сеткой, утеплил наружний борт пеноплексом, а уж потом землю насыпали.

Установил бак на одну поливку (в него насос будет воду накачивать). Установил систему полива самодельную.

Дорожку к теплице выложил (вокруг газончик будет).

После этого занялся форточками. Алекандр, идейный вдохновитель, сварщик и любитель гнуть профили, (когда он говорил, как ему не терпится опробовать свой девайс и что-то гнуть, напомнил мне робота из м-ф "Футурама") еще и занимается ремонтом автомобилей. Поэтому подарил мне стаклоподъемник от какого-то иностранного автомобиля. Еще валялся  у меня от "Приоры". Вот они-то и были использованы для открывания форточек. Вот этот от иномарки, кажется от Субары:

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

Потом стал заниматься электонной частью, сделал коробочку:

Натолкал туда электроники

А тут уже и осень наступила. Написал код пробный, успел открывание и закрывание окон по температуре проверить, полив по времени.

Настроить не успел как следует. Сейчас пишу код, чтобы настройки с кнопочек вводить, на дисплее смотреть. Надеюсь что уже этой весной запущу. Длинновато получилось, но куда деваться? Баяномер неадекватен. Выдал много всего, включая А.М.Горького и спящих ежей.

Показать полностью 9 3
167

Скретчдуино - легкий путь в Ардуино-робототехнику для детей и начинающих.

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

И тут она достает из сумки коробку с роботом, и говорит, что надеется на мою помощь. А я программировал последний раз в далеком 1989 году, когда студентом писал лабораторные работы в институте на ПК ДВК-4, на Паскале. Причем изучать пришлось самому, в школах тогда информатику не проходили.

Ну что ж, установив ПО, я понял, что многое, оказывается, помню. Очень быстро робот начал выполнять несложные задания. Язык Скретч очень прост, визуализирован, программа составляется из блоков очень быстро. Вот пример простого кода. Робот доезжает до края стола, отъезжает от него и издает звук.

Клавиша "пробел" для экстренной остановки.

Как видите, все легко и просто. Короче говоря, у нас получилось целое руководство пользователя (можно скачать). Быстро исчерпав возможности робота, управляеого с копьютера при помощи программы Скретчдуино, я очень легко перешел на программирование в Ардуино. Таким образом, Ардуино стало моим хобби.

Посмотреть на робота, которого продают, можно на официальном сайте.

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

Мне сразу же пришло в голову построить робота под эту программу на китайском клоне Ардуино, что я и сделал.

Что еще интересного хотелось бы рассказать об этом проекте. Чтобы не заморачиваться с установкой ПО, драйверов и так далее, можно скачать образ флешки с установленным Линуксом, где уже установлено все нужное ПО - Arduino IDE, Скретчдуино 2.0. После скачивания образа, останется лишь записать его на флешку с помощью, например Unetbootin и выбрав при загрузке компьютера загрузку с этой флешки, сразу подключать робота. Ну и линукс на флешке - можно попользоваться и носить свою систему с собой в кармане, запустить ее можно на любом компьютере.
К сожалению, в Windows программа не видит робота, если установлен китайский клон Ардуино. Но и не страшно - флешка же есть.

Теперь ссылки того, что можно найти в абсолютно свободном доступе:

Здесь можно посмотреть на учебные материалы.

Здесь можно скачать документацию для изготовления.

Здесь можно скачать образ флешки с линуксом и установленным ПО.

Это вики проекта.
Прошивка находится в Скретчдуино 2.0, она заливается автоматически при запуске программы.

Надо сказать, что я тестировал устройство на дочери 12 лет, она саостоятельно прочитала руководство и придумала собственные задания для робота. Вообще детям и подросткам нравится быстрый успех и программирование здесь не исключение. Хоть я далеко не подросток, но познакомившись с этим проектом, приобрел интересное хобби - Ардуино. Если кого-то заинтересует, готов отвечать на вопросы.

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

Метеостанция рукажопа.

Доброго времени суток, хочу поделится своим творением и как сказано в заголовке это метеостанция рукажопа, поэтому в данном проекте существует куча ошибок, но все равно работает.

Для начала компоненты:

Arduino Nano

ESP-01

Модуль соглосования логических уровней для ESP-01

Стабилизатор 3.3В

Экран 20x4

Модуль часов

Датчик температуры и влажности DHT22 и DHT11

Bluetooth модуль(хотя он немного лишний)

Блок питания на 9В

Модуль Реле (Двойной)


Что всё это умеет делать:

Включать\Выключать две розетки 220В

Показывать температуру и влажность за окном и в комнате

Показывать время и дату :)


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

Так как есть хостинг, я сделал на php API (если это можно так назвать) для общения с ардуиной.


Еще один момент не знаю почему, но мне пришлось прошить код общения с хостингом прямо в ESP-01 иначе не работало, причины я так и не нашел, поэтому ESP и Ардуина просто общаются через SerialPort.


ESP каждую секунду посылает GET запрос что бы узнать состояние розеток(которые хранятся в БД на хостинге) и за одно посылает температуру и влажность за окном.

На хостинге Cron бережно каждые пол часа берет присланные данные температуры и записывает в другую таблицу для составления графика.

В случае если состояние разеток меняется ESP отсылает команду Ардуине.


Ну а управление всем этим происходит с телефона на Андройде и с приложения на ПК.

Включение и выключение, а также синхронизация часов (Через bluetooth, и я знаю что можно было это и через WiFi сделать, но .. читайте заголовок):

График температуры и влажности:

Управление с Андройда, для графика использовал библиотеку "hellocharts"

У меня первая розетка это свет в аквариуме, а вторая обычная лампа настольная.

Вот так это выглядит:

Тут можно увидеть все компоненты и еще кнопку от компьютерной мышки(это Reset ESP), разные джамперы для включения отключения питания и пере прошивки ESP через Ардуину.

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


Все исходники тут Гугл Диск


Спасибо всем за внимание.

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

Метеостанция на arduino с выгрузкой статистики в IoT

Добрых суток!

Сегодня мы соберем метеостанцию с выгрузкой статистики в инет.

Для этого нам понадобятся:

- стабилизатор напряжения АМS1117-3.3 ($0.85/10шт);

- датчик температуры и влажности DHT11 ($0.80);

- датчик температуры и давления GY68 ($4);

- Arduino Pro Mini ($1.24);

- модуль Wi-Fi на ESP-8266 (ESP-01) ($1.9);

- сопротивления 4,7к и 10к;

- электролиты 100 и 1000 мФ на 10+В;

Итого: около $9 (225грн);

Все легко находится на алиэкспрессе, так что ссылок не будет.


Начнем мы с нашего WiFi модуля ESP-01:

Питание: 3.0 - 3.6 В;

Ток: 60-220 мА (в зависимости от режима 802.11 и настроек энергосбережения);

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

Как подключить модуль, подробно написано здесь.

Конкретно про обновлении прошивки - здесь.


Я использовал прошивку с АТ-командами версии 0.25. Между версиями существуют небольшие различия, так что решайте сами, что вам проще: изменить код скетча или прошить модуль.

Распиновка такая:

ESP-01  >  Arduino

Tx > 10

Rx >  11

CH_PD > через 10 кОм на +3.3В

Vcc > +3.3

Gnd >  Gnd

Для проверки заливаем в ардуину скетч из примеров SoftwareSerial.ino, проверив чтобы строка

SoftwareSerial mySerial(10, 11); // RX, TX

соответствовала наши ногам ардуины. Напомню, что выводы данных подключаются крест-накрест, Rx->Tx и Tx->Rx

Теперь нам понадобится программа ESP8266 Config. Подключаемся к порту с модулем на скорости 115200. Если вместо картинки

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

Firmware builder: esp8266.ru

ready

Вводим в том же окне команду тестовую АТ. Нам должен придти ответ ОК. Если ответ приходит, читаем дальше, нет - отписываемся в комментах, помогу чем смогу.


Далее, нам нужно установить нужные нам скорость порта по-умолчанию и параметры сети.

1. Параметры порта, команда вида AT+UART_DEF=<baudrate>,<databits>,<stopbits>,<parity>,<flow control>. Параметры можно посмотреть в диспетчере устройств->свойства порта

т.е. наша команда будет такой AT+UART_DEF=9600,8,1,0,0

вводим, получаем ОК, перегружаем модуль и переподключаемся со скоростью 9600.

2. В окне ESP8266 Config нажимаем List AP, получаем список всех доступных сетей. Выбираем нужную, вводим пароль, жмем Join AP. В консоли должно появиться

AT+CWJAP="SSID","PASSWD"

WIFI CONNECTED

WIFI GOT IP

OK

Для получения адреса у меня в роутере включен DHCP с раздачей IP по МАС.

Формат всех команд можно посмотреть в файле "ESP8266 AT Instruction Set_v0.25"

DHT11: Довольно хреновый датчик, иногда выдающий данные с сильным разбросом (лучше возьмите DHT22, он еще и от 3.3+В питается (об этом ниже) - я брал просто самый дешевый с измерением влажности).

Питание: 3.5 - 5.5 В;

Ток до 0.3 мА;


Диапазон измерений:

- влажность 20-95% (+-5%). Если влажность больше (96-100%), модуль все равно покажет 95%:

- температура 0-50 гр. (+-2 гр.). По факту ниже +3-4 гр. не покажет даже при сильном морозе.

- время между считываниями показаний не меньше 10 сек (иначе будет выдавать практически рандом).


При длине провода больше 20 м или напряжении питания меньше 5 В нужен подтягивающий резистор в 4,7 кОм на сигнальную линию. Я решил поставить, на всякий случай.

GY69: датчик давления и температуры на основе чипа BMP-180.

Питание: 1.68 - 3.6 В;

Ток около 5 мкА (мало верится, но сам не мерял);

Диапазон измерений:

- давление: 300-1100 гПа (-500 - 9000 м над ур.моря);

- температура: -40 ... +85 гр. (при температуре меньше ноля падает точность);

- время замера 4,5 ... 25 мкс;

По даташиту нужно сигнальные линии (SDA/SCL) нужно подтянуть к питанию резисторами по 4,7 кОм, но я не заморачивался.


Питание я взял от старой ЮСБ-зарядки, 5В 250мА. Т.к. оказалось, что ESP-01 очень требователен к питанию (предыдущий отладочный вариант питался от аккума на 3.7 В и сгорел через неделю), то отталкиваться будем именно от него - понижать напряжение до 3.3 В. Однако это меньше, чем нужно DHT11, поэтому его придется запитать от 5В.

Для включения ESP-01 необходимо подать через резистор 10 кОм питание на ногу CH_PD. Однако из-за того, что у микрухи самого WiFi распаяны не все ноги (они "висят в воздухе"), она сильно греется даже в отсутствие передачи данных. Ну а т.к. передавать статистику мы будем раз в 10 минут, нам совершенно не нужно держать модуль постоянно включенным (и расходовать заряд аккума, если питание от него).

Поэтому CH_PD мы подключим к 13й ноге контроллера и для включения связи будем подавать на неё высокий уровень.

Схема подключения стабилизатора напряжения AMS1117-3.3 (ток до 1А) особой оригинальностью не отличается и взята из даташита.

Итого, имеем схему (да,я знаю про fritzing, но мне лень в ней разбираться):

Для проверки схему нужно залить скетч test_sensors.ino (ссылка на архив в конце поста). В порт должны полететь данные о температуре/давлении/влажности.


Выгрузка статистики.

Регистрируемся на сайте thingspeak.com.

Создаем новый канал

Тут выставляем по полю на каждый измеряемый параметр.

Кроме этого, можно настроить видимость канала (все/только вы), высоту нашей станции над уровнем моря, координаты и т.д. Создаем.

Далее идем в Channel Settings и переписываем Channel ID, идем в API keys и переписываем Write API Key. По двум этим параметрам мы будем писать данные.

Проверить работоспособность канала можно, перейдя в броузере по адресу 184.106.153.149/update?key=[ВАШ_Write_API_Key]&field1=0

Откроется страница с номером текущей порции данных (для первого раза 0, потом 1, и т.д.).

Открываем скетч WiFiMeteostationIoT.ino и исправляем строки:

14 String remote_key = "KEY";// passkey

на ваш Write API Key.

105 dps.init(MODE_STANDARD, N, true);

N замените на вашу текущую высоту (в МЕТРАХ, несмотря на то, что в даташите написано про сантиметры) - это нужно для точно определения давления. Узнать ее можно либо с помощью GPS, либо на  этой страничке.


Для отправки одной "порции" данных нужно отправить на модуль WiFi команды:

AT+CIPSTART=2,"TCP","184.106.153.149",80 //создать соединение №2, протокол ТСР, адрес, порт

AT+CIPSEND=2,N //через соединение №2 отправить пакет длинной в N байт

GET /update?key=[ВАШ_Write_API_Key]&field1=25 //сам пакет

AT+CIPCLOSE=2 //закрыть соединение

Обратите внимание на переносы строк \r\n в коде. Так надо.


Скетч в архиве.


Сам канал по мере заполнения примет такой вид:

Схема потребляет около 80 мА при передаче данных и 15-20 мА при простое.


Что можно улучшить:

- заменить DHT-11 на что-нибудь получше, тот же DHT-22;

- сделать фильтрацию замеренных значений (по тому же Калману (пост) ).

- отсылать на статистику не сразу после включения, а через 10 минут, предварительно отфильтровав;

- подтянуть GPIO ESP-01 на питание через 10 кОм;

- подтягивать DHT-11 по-хорошему надо было не на +5, а на +3.3 В;

- не заставлять ардуину впустую гонять delay(), а сделать полноценный сон с "разбудкой" по таймеру;

- оба датчика потребляют намного меньше допустимой нагрузки на ногу ардуины (40 мА), можно запитать их через контроллер и включать только по надобности;


GoogleDrive c архивом


P.S. первый, и, скорее всего, крайний пост - не подписывайтесь ;)

Показать полностью 7
118

Прошивка arduino по воздуху: WIFI ESP8266

Бывает собрал что-то на Arduino, упаковал в корпус, и тут в прошивке  решил что-то чуток подправить, придется лезть, доставать, разбирать, подключать... А если поделка встроена куда-то в новый ремонт, то вообще атас.

О том, как прошивать arduino по воздуху, статей написано не мало, большинство решений - прошивка по bluetooth.

Я предлагаю дешевый и простой способ - использовать для этих целей WIFI модуль ESP-01.

На гифке устройство на arduino (замок, с доступом по RFID), которое как раз будет вмонтировано глубоко и на долго и я позаботился о том, чтобы доступ к ардуинке был удаленно (вдруг надо будет добавить RFID метку).

Для начала нужно прошить модуль прошивкой esp-link, сделаем это простым USB-TTL конвертера.

Прошивку качаем отсюда: https://github.com/jeelabs/esp-link/releases/download/v2.2.3...

Прошивка представляет из себя несколько файлов, из них понадобятся 3: boot_v1.5.bin, user1.bin и blank.bin.

Прошиваем с помощью https://github.com/nodemcu/nodemcu-flasher

бинарники заливаем по следующим адресам:


boot_v1.5.bin - 0x00000

user1.bin - 0x1000

blank.bin - 0x3FE000


Устанавливаем на ПК драйвер виртуального COM - порта, например этот: http://tibbo.ru/products/item/9/42/


И далее следуя инструкциям в видео настраиваем:

И  наконец подключение ESP-01 к arduino:

Esp-01 - arduino

TX - RX

RX - TX

GPIO0 - rst

Gnd - gnd

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

Выход ардуинки из сна по таймеру

Сегодня предлагаю рассмотреть возможность ардуинки уходить в режим сна и выходить из него по таймеру в целях экономии энергопотребления.


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

Детальнее о прерываниях и о том, какие входа можно использовать под прерывания можно прочитать здесь  https://www.arduino.cc/en/Reference/AttachInterrupt

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


Следующая возможность ардуинки - уходить в сон для сбережения энергопотребления. Детальнее о режимах сна и потреблениях тока в разных режимах можно прочитать здесь https://www.gammon.com.au/forum/?id=11497


Самый экономный режим - это SLEEP_MODE_PWR_DOWN : 0.36 mA

Теперь рассмотрим каким образом можно выйти из сна.

Выход из может осуществлятся двумя методами:

1) WatchDog Timer - грубо говоря внутренний таймер. Максимальное время сна от 7-9 секунд. Можно использовать и его, как таймер. Например если вам надо, чтобы ардуинка выполняла какое-то деуствие каждый час, а между этим спала, то можно просыпаться каждые 7-9 секунд, суммировать время сна и если набежал час, то выполнять действие. Недостатком этого метода является то, что нужно часто просыпаться и время сна 7-9 секунд не является константой, а колебается постоянно в этих пределах, соответственно на большом отрезке времени будет большая ошибка суммарного времени.

2) по внешнему прерыванию (нажатие кнопки, геркон и т.д.)

Об этих методах вы также можете прочитать здесь https://www.gammon.com.au/forum/?id=11497


В методе рассмотреном  в данном посте мы будем использовать внешнее прерывания и модуль часов (RTC DS3231), который будет выполнять функцию будильника.


Собираем схемку как показано на картинке

Выход ардуинки из сна по таймеру

Модуль RTC DS3231 работает по I2C и на нем можно запрограммировать будильники (возможно установить 2 будильника). В обычном режиме на выходе SQW сигнал HIGH, при срабатывании будильника сигнал будет LOW - это мы и будем использовать на прерывании.


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


Для работы с будильниками нужно скачать библиотеку https://github.com/jarzebski/Arduino-DS3231


И пример моего кода я выложил тут http://paste.ofcode.org/7DPT3ZmdjEe5NjqS2jrEX2


Вот то, что вы должны видеть в мониторе последовательного порта


21-02-2000 00:58:52 - Wednesday

Sleep

Wake UP

21-02-2000 00:59:52 - Wednesday

Sleep


таймер выставляется в минутах тут

setSleepTimer(1); - в данном случае стоит 1 минута


также, если вам нужно, чтобы платка перезагружалась после выхода из сна и заново выполнялся бы setup(), вы можете раскомментировать строку resetFunc();


В данном посте я не рассматривал примеры работы с модулем RTC DS3231, для этого есть примеры в библиотеке. Но если нужно, могу ответить на вопросы или сделать пост.


В следующем посте собираюсь описать возможности прошивки WiFi модуля ESP8266

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

Пробуем Sonoff, как переключатель для "Умного дома"

Краткий обзор, прошивка и переделка модуля sonoff на ESP8266, для использования в системе "Умный дом". Для прошивки используем скетч из этого видео:

https://www.youtube.com/watch?v=nE01vCcdudo&t=1s

так как подключение реле совпадает с тем, как я подключал его в своём WIFI-реле. Датчик температуры и влажности подключаем к GPIO14 ESP8266.

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