Jump to content
Korean Random

kharlashkin

User
  • Content Count

    829
  • Joined

  • Last visited

  • Days Won

    7

Everything posted by kharlashkin

  1. Прошивка скетча в Arduino подключенного к маршрутизатору с помощью flask+avrdude. P.S. Рассказал бы кто на пальцах как Github подключить...
  2. Есть сподвижки, сейчас вот так: Но прошивка не происходит, адруинка молчит потом как убитая. В порт ничего не шлет. Заработало! root@OpenWrt:/kharlashkin/tmp# avrdude -p m328p -P /dev/ttyUSB0 -b 57600 -c ardu ino -U flash:w:blink_serial.ino.hex avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.01s avrdude: Device signature = 0x1e950f avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed To disable this feature, specify the -D option. avrdude: erasing chip avrdude: reading input file "blink_serial.ino.hex" avrdude: input file blink_serial.ino.hex auto detected as Intel Hex avrdude: writing flash (1990 bytes): Writing | ################################################## | 100% 0.66s avrdude: 1990 bytes of flash written avrdude: verifying flash memory against blink_serial.ino.hex: avrdude: load data flash data from input file blink_serial.ino.hex: avrdude: input file blink_serial.ino.hex auto detected as Intel Hex avrdude: input file blink_serial.ino.hex contains 1990 bytes avrdude: reading on-chip flash data: Reading | ################################################## | 100% 0.52s avrdude: verifying ... avrdude: 1990 bytes of flash verified avrdude: safemode: Fuses OK (E:00, H:00, L:00) avrdude done. Thank you. root@OpenWrt:/kharlashkin/tmp# python test.py Led Up! Led Down! Led Up! Led Down! Теперь под Flask страничку загрузки прошивок буду делать.
  3. Чего-то не взлетело у меня, а информации в интернете маловато. При проверке скетча в Arduino IDE, компилируется прошивка в нескольких вариантах, находятся в папке /tmp/arduino_build_XXXXXX/: blink_serial.ino.elf blink_serial.ino.hex blink_serial.ino.with_bootloader.hex Пробовал с первым и вторым файлом следующие манипуляции - копирую на маршрутизатор в папку, устанавливаю avrdude, пробу. прошить следующими командами с выводом: root@OpenWrt:/kharlashkin/tmp# avrdude -p m328p -P /dev/ttyUSB0 -c avrispmkII -U flash:w:blink_serial.ino.elf avrdude: stk500v2_ReceiveMessage(): timeout avrdude: stk500v2_ReceiveMessage(): timeout avrdude: stk500v2_ReceiveMessage(): timeout ^C root@OpenWrt:/kharlashkin/tmp# avrdude -p m328p -P /dev/ttyUSB0 -c avrispmkII -U flash:w:blink_serial.ino.hex avrdude: stk500v2_ReceiveMessage(): timeout avrdude: stk500v2_ReceiveMessage(): timeout avrdude: stk500v2_ReceiveMessage(): timeout ^C root@OpenWrt:/kharlashkin/tmp# avrdude -p m328p -P /dev/ttyUSB0 -c arduino -U fl ash:w:blink_serial.ino.hex avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x00 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x00 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x00 ^C root@OpenWrt:/kharlashkin/tmp# avrdude -p m328p -P /dev/ttyUSB0 -c arduino -U fl ash:w:blink_serial.ino.elf avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x00 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x00 ^C Нашел инструкцию по заливке с помощью picocom, нужно будет попробовать.
  4. Я его всё таки нашел! Готовый модуль для Arduino, позволяющий плавно управлять нагрузкой. Правда цена кусается - $25, буду со своим земноводным договариваться ;)
  5. 2. Подключаем накопитель к OpenWRT. Идем на веб страничку установки пакетов: Обновляем список доступных пакетов, кнопка Update list: Устанавливаем пакеты - kmod-usb-core kmod-usb-ohci kmod-usb2 kmod-usb-storage block-mount нажимаем и перегружаемся System - Reboot - Perform reboot Заходим в настройки точек монтирования System - Mount points и видим нашу флешку, ставим галочку напротив нашего раздела для установки пакетов и жмем кнопку Edit: Ставим галочку подключать диск, UUID оставляем тот же: Переходим на вкладку Advanced Settings и выбираем нашу файловую систему из выпадающего меню: Перегружаемся, после перезагрузки все наши настройки сбросятся, но мы увидим что наш раздел для установки стал намного больше: Опять устанавливаем нужные пакеты kmod-usb-core kmod-usb-ohci kmod-usb2 kmod-usb-storage block-mount, и подключаем теперь уже swap раздел и домашний каталог по аналогии.
  6. “Не было бы счастья, да несчастье помогло” Так вышло, что у родителей вышел из строя HDD, флешку мою, забытую у них в спутниковом тюнере, мне не привезли. Пришлось вытягивать из маршрутизатора и делать из неё загрузочную - чтобы установить ОС на новый HDD, соответственно первоначальную настройку делать сначала. Таким образом появилась эта инструкция. 1. Подготовка носителя в GParted. Открываем программу и выбираем нашу флешку: Отмонтируем нашу флешку от ОС, ПКМ - Отмонтировать: Удаляем все что есть на ней, клавиша "delete" или ПКМ - Удалить: Я решил, что под установочные пакеты отдам 1000 МиБ, под swap раздел 256 МиБ, остальное под мои файлы. Создаем разделы на флешке как мы задумали: , клавиша "insert" или ПКМ - Новый, для разделов под программы и мои файлы выбираем файловую систему "Ext3", под раздел подкачки "linux-swap": Применяем нужные нам изменения: Соглашаемся с применением изменений, ждём окончания операций. Закрываем GParted и вытягиваем флешку из ПК.
  7. Пример вывода данных из sqlite на web-страничку с автоматическим обновлением с помощью json+jquery: И сама страничка: Расширение base.html: Ну и как это выглядит:
  8. А как же красивости в виде графиков? Почасово, посуточно и т.д. Прошу прощения.
  9. Тем более что avrdude уже есть в репозитории OpenWRT.
  10. Пример сбора данных от Arduino в базу данных sqlite3. Сначала создадим нужную нам нам базу данных, с помощью скрипта create_db.py: import sqlite3 sqlite_file = 'db_sensor.db' conn = sqlite3.connect(sqlite_file) curs_db = conn.cursor() curs_db.execute("create table sensor (id integer primary key, cur_time datetime, temperature float, humidity float, co2ppm float)") conn.commit() conn.close() Теперь файл который будет наполнять БД значениями, считываемыми по параллельному порту: import sqlite3 import serial import datetime ser = serial.Serial('/dev/ttyUSB0', 57600) sqlite_file = 'db_sensor.db' while True: data = ser.readline() sensor_data = data.decode('ascii').split(',') humidity, temperature, co2ppm = [float(s) for s in sensor_data] cur_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M") conn = sqlite3.connect(sqlite_file, detect_types=sqlite3.PARSE_DECLTYPES) curs_db = conn.cursor() curs_db.execute("insert into sensor(cur_time, humidity, temperature, co2ppm) values(?, ?, ?, ?)", (cur_time, humidity, temperature, co2ppm)) conn.commit() conn.close()
  11. Как всегда - "Весело!". При попытке собрать и залить прошивку в адруинку вывалилась ошибка: root@OpenWrt:/mnt/pio# platformio run --target upload [Fri Apr 14 01:30:29 2017] Processing nanoatmega328 (platform: atmelavr, board: nanoatmega328, framework: arduino) -------------------------------------------------------------------------------- PlatformManager: Installing atmelavr Downloading [####################################] 100% Unpacking [####################################] 100% atmelavr @ 1.4.5 has been successfully installed! The platform 'atmelavr' has been successfully installed! The rest of packages will be installed automatically depending on your build environment. PackageManager: Installing toolchain-atmelavr @ ~1.40902.0 Error: Could not find a version that satisfies the requirement '~1.40902.0' for your system 'linux_mips' Если я правильно понял, для того чтобы иметь возможность компилировать прошивку прямо на девайсе - нужно пересобрать Toolchain под Linux MIPS платформу. Учитывая что инструмент этот хоть и может быть полезным в некоторых случаях, но несколько избыточен для того чтобы пару раз залить скетч. Так что решил пока отложить использование Platformio "на потом". Может кто подскажет/поможет с реализацией Toolchain.
  12. Полностью рабочий скетч, пока без датчика пыли. Крутился у меня круглосуточно и доказал свою стабильность и правподобность: #include "DHT.h" #include "RBD_Timer.h" #define dhtPin 2 #define dhtTuype DHT22 #define co2Pin 4 DHT dht(dhtPin, dhtTuype); RBD::Timer timer; long highlevel_co2, lowlevel_co2; float ppmco2 = 0; float humidityIn, temperatureIn, humidityOut, temperatureOut; int valco2; void setup() { Serial.begin(57600); dht.begin(); pinMode(co2Pin, INPUT); timer.setTimeout(5000); timer.restart(); } void loop() { if (timer.getValue() == 2000) { humidityIn = dht.readHumidity(); temperatureIn = dht.readTemperature(); Serial.print("HumidityIn:"); Serial.println(humidityIn); Serial.print("TemperatureIn:"); Serial.println(temperatureIn); } if (timer.getValue() == 3000) { do { valco2 = digitalRead(co2Pin); highlevel_co2 = pulseIn(co2Pin, HIGH, 1004000) / 1000; lowlevel_co2 = 1004 - highlevel_co2; ppmco2 = 5000 * (highlevel_co2 - 2) / (highlevel_co2 + lowlevel_co2 - 4); } while (highlevel_co2 == 0); Serial.print("CO2Concentration:"); Serial.println(ppmco2); } if (timer.isExpired()) { timer.restart(); } }
  13. Прошил в свою Arduino Nano 3.0 (специально покупал под проект мониторинга воздуха) следующий скетч: void setup() { Serial.begin(57600); pinMode(LED_BUILTIN, OUTPUT); } void loop() { digitalWrite(LED_BUILTIN, HIGH); Serial.println("Led On"); delay(1000); digitalWrite(LED_BUILTIN, LOW); Serial.println("Led Off"); delay(1000); } То есть мигаем светодиодом и шлем сообщения. Подключил к маршрутизатору арудинку. Набросал проверочную программку: import serial ser = serial.Serial('/dev/ttyUSB0', 57600) while True: line = ser.readline() print line Скопировал её в папку на маршрутизаторе /mnt/test/ с помощью WinSCP. Что получилось: Никаких перерезаний дорожек и т.п. не потребовалось (тьфу-тьфу, может в будущем нужно будет). Кстати, у меня нормально так и не получилось подключаться к файловой системе маршрутизатора под Ubuntu. Так что я скачал портативную версию WinSCP распаковал в папку домашнего каталога и тупо запускаю её - через Wine все работает. Появилась мысль удаленного железного контроля Arduino. Заливка прошивки, монитор порта и т.д. и т.п. Сказано, сделано - нашелся проект Platformio, и был успешно установлен на маршрутизатор. Пока глубоко не копал и не совсем представляю что с ним делать - но команда platformio serialports monitor -b 57600 грузит процессор почти на 40% но выдает то же что и выше на скриншоте (python скрипт почти не грузит процессор, встроенные счетчики нагрузки в OpenWRT не фиксируют изменений). Для отладки скетчей самое то, прикрутить бы ещё форму заливки скетчей...
  14. До утра сидел за ноутом, сегодня половину рабочего дня "гуглил" на работе - решил попробовать OpenWRT, так как в ней вроде есть нужный драйвер для китайских ардуин... Если чуть позже запал не пройдет - буду пробовать собрать драйвер для dd-wrt. Изначально боялся что придется всё делать в консоли, но оказалось есть неплохой веб-интерфейс. До этого только один раз устанавливал OpenWRT родителям дома из-за глючности заводской прошивки TP-Link, а других вариантов не было. Подключил флешку, при чем делается проще чем в dd-wrt - практически всё через web. Установил драйвер для китайской Arduino: Поставил python, pip, flask, pyserial. вывел себе в браузер "Hello world!" - красота ;)
  15. Под простеньким сайтом имелось ввиду внутренний домашний, в моем случае мониторинг воздуха дома. Когда-то у меня дома стоял D-Link DNS-313 который тоже настраивал как и маршрутизатор и могу сказать что скорость работы с ним была на уровне Asus Wl-520GU. Если сейчас посмотреть на характеристики и цены NAS и маршрутизаторов - думаю не всё так однозначно будет - потому как цены на NAS начинаются от $100. Если выпускать наружу сайтик - то лучше уж что нибудь из "пирогов" или VPS за символическую плату. Тут у меня другая проблема - оказалось под dd-wrt нет драйвера для китайских Arduino с чипом ch340g.
  16. Подключаем флешку/hdd к dd-wrt. Небольшое отступление. Так как у меня уже есть отдельный постоянно включенный "домашний ПК", мне не понадобиться файлообменник, торрентокачалка, медиа-сервер на маршрутизаторе. Хотя несколько лет назад это всё у меня прекрасно работало, был подключен портативный 2,5" HDD объемом на 1 ТБ к usb и были установлены: Transmission; Samba; Twonky; OpenVPN. Все это несколько лет прекрасно крутилось в круглосуточном бесшумном режиме. Конечно было заметно слабенький процессор - скорость закачки торрентов ≈ 2 МБ/сек, работа с сетевыми папками ≈ 6 МБ/сек. Затем был куплен большой стационарный ПК под телик, туда установлен HDD на 4 ТБ, а портативный HDD подарен. Как вспомню как, что делалось - дополню темку. Сейчас появилась необходимость сделать свой web-интерфейс типо "вумного дома" и чтобы не городить дополнительно сервер с Raspberry/Orange/Banana Pi пробую завести это все дело на маршрутизаторе ;) Имеется флешка на 8 ГБ, её и будем использовать. Разметил я её в GParted под Ubuntu как два раздела Ext3, один на 1000 МиБ под /opt раздел - сюда будем устанавливать наши пакеты, второй всё что осталось как /mnt - сюда буду складывать, что там мне может понадобиться. Для Windows можно использовать её же как LiveCD. Идем в интерфейс маршрутизатора и выставляем нужные галочки. Подключаем флешку в порт устройства и перегружаем его. Проверить подключилась ли флешка придется из консоли, как выше генерировали ключи сертификаты. Проверяем что у нас включен доступ к маршрутизатору через Telnet-протокол, вкладка "Services - Services" Включаем в Windows поддержку этого протокола. ПКМ на Пуск - Панель управления - Программы и компоненты - Клиент Telnet. Запускаем консоль и вводим: telnet 192.168.1.1 Маршрутизатор спросит у нас логин, и пароль - вводим что там выставлено при первоначальной настройке. Проверяем подключилась ли наша флешка: dmesg|grep lun Ответ должен быть таким: /dev/scsi/host0/bus0/target0/lun0: p1 p2 И теперь подключаем наши разделы на флешке как и было задумано, первый к /opt и второй к /mnt: mount -o noatime /dev/discs/disc0/part1 /opt mount -o noatime /dev/discs/disc0/part2 /mnt Проверить правильно ли все смонтировалось можно командой "df". Для подключения и отключения наших разделов нужно пройти на вкладку "Administration - Commands" и добавить команды в загрузочный скрипт и выключения: Следующим этапом мы установим Python на наш маршрутизатор, поднимем простенький сайт на нем и подключим его к Arduino.
  17. Добрый день всем! Так сложилось, что уже довольно давно использую свой домашний Asus RT-N16 не только по "прямому" назначению. Хочу здесь публиковать свои изыскания относительно использования таких коробочек. Я как-то уже спрашивал нашу скромную компанию - "Стоит ли делиться опытом?". Конечно стоит! Так сложилось что мне пришлось обновлять прошивку. Соответственно нужно опять запускать OpenVPN и раз так заодно поделюсь этим опытом с форумчанами. 1. Почему именно DD-WRT? Как показывает практика, все производители домашних маршрутизаторов спустя рукава относятся к программному обеспечению, установленному на свои железки. А если говорить о таких вещах, как тонкая настройка множества параметров - заводские прошивки не представляют никаких инструментов от слова вообще. Хотя есть некоторые исключения в виде командной строки, но для этого нужно обложиться учебниками и справочниками, "курить манюалы", много гуглить и т.п. По закону подлости, всего не предусмотришь и часто что-то делая через shh и telnet ошибка приводит к отсутствию интернета так как роутер не может корректно загрузиться и раздать интернет, а практически никто не имеет дома резервный (или открытый соседский) канал интернета для допиливания конфигураций маршрутизатора из консоли. Я пробовал практически все альтернативные прошивки для своего Asus и только вышеназванная мною имеет возможность редактировать множество параметров "из коробки" в web-интерфейсе. Особенно это касается следующего пункта. 2. Почему OpenVPN? Тут все довольно просто - приведу пример. Вы с находитесь в гостевой сети (учеба/работа/интернет-кафе и т.п.) где суровым системным администратором запрещено почти всё - он-лайн игры, скачивание торрентов, просмотр потокового видео и т.д. Стандартные VPN обычно используют тоже известные порты и протоколы, таким образом очень сомневаюсь что тот, который настраивал доступ в интернет так же оставил Вам возможность использовать для обхода что-то типа PPTP/L2TP/PPPoE. Но у нас же есть предварительно настроенный OpenVPN, который работает на любом порте и TCP/UDP транспорте. Как пример если наше соединение работает по 443 порту (https) и используется TCP-транспорт, то для маршрутизатора, который нам дает доступ в интернет это будет выглядеть как будто мы просто просматриваем сайт (как google.com или koreanrandom.com). Трафик весь шифруется, и даже с помощью специальных утилит никто не увидит что же мы на этом сайте делаем. 3. Прошивка маршрутизатора. Идем в соответствующий раздел, вводим название производителя маршрутизатора и нам вываливаются список моделей которые можно прошить. Небольшое отступление. Так сложилось что мой первый домашний роутер был Asus WL-520gU и первый провайдер предоставлял доступ к интернет с PPPoE Dual Access (Russian PPPoE) - т.е. доступ к локальным ресурсам и отдельно доступ к сети интернет. При чем мой работодатель так же был подключен к этому провайдеру, соответственно я мог получать доступ к своему терминальному рабочему месту (1С, почта, файловое хранилище) и сайту (периодически наполнял его интересными статьями) из дома с наивысшей скоростью, как по локальной сети. Просидев пару вечеров допоздна с dd-wrt я так и не смог корректно настроить одновременную работу интернета и локальной сети провайдера. Вернулся на заводскую прошивку, но всё решил случай. В один летний день грянул гром, т.е. ожидалась гроза и провайдер выключил интернет - на тот момент кое-где между домами использовалась витая пара, и в целях сохранности своего оборудования этот поставщик услуг просто выключал физически электричество на всей своей сети. Поискав доступные беспроводные сети я нашел какую-то соседскую без пароля, подключившись увидел что там доступ к интернету имеется. Зайдя на маршрутизатор соседа глянул что там прописано в настройках - оказалось что другой провайдер, доступный в моем доме, не имеет вышеозначенных проблем с медными кабелями, а раздает интернет статическим адресом. И я просто сменил провайдера ;) А для доступа к ресурсам работодателя подключил себе услугу "Статический IP-адрес" за $2 и попросил системных администраторов разрешить мне доступ извне с этого IP. Имея статический адрес захотелось получать доступ к домашним ресурсам и более-менее простую установку и настройку как раз можно сделать с помощью OpenVPN и обсуждаемой альтернативной прошивки. В будущем когда стал выбор покупки маршрутизатора, сразу смотрел поддержку устройства на сайте. На страничке с прошивками для роутеров, мы видим прошивку для первого раза с заводской и несколько других с расширенным функционалом - инструкций для перепрошивки достаточно, я не буду тут описывать что к чему. 4. Подготовка OpenVPN. Так как большинство используют Windows, сборку ключей и сертификатов будем делать под этой ОС. Сначала идём на официальную страницу загрузки и качаем нужную версию. Установка ничем особо не отличается, кроме необходимости поставить галочку в нужном месте: Запускаем консоль Windows - ПКМ (правая кнопка мыши) на Пуск - выполнить - "cmd". Переходим в папку с установленной программой: cd C:\Program Files\OpenVPN\easy-rsa и последовательно выполняем команды: init-config.bat vars.bat clean-all.bat vars.bat build-ca.bat vars.bat build-dh.bat vars.bat build-key-server.bat "имя сервера" vars.bat build-key.bat "имя клиента" Под полями "имя сервера" и "имя клиента" вводите свои имена для маршрутизатора и подключаемых к нему потом устройств. При создании сертификатов/ключей у нас будут постоянно спрашивать всякое-разное, я вводил ответы "как оно есть". В итоге у нас в папке C:\Program Files\OpenVPN\easy-rsa\keys множество нам нужных ключей и сертификатов. И мы можем переходить к настройке маршрутизатора. 5. Настройка маршрутизатора. Идем на web-интерфейс нашего маршрутизатора и переходим на вкладку Services - VPN и включаем наш OpenVPN Daemon: Затем поочередно заполняем соответствующие поля нашими сертификатами и ключами из папки, просто открывая в текстовом редакторе: CA Cert - C:\Program Files\OpenVPN\easy-rsa\keys\ca.crt; Public Client Cert - C:\Program Files\OpenVPN\easy-rsa\keys\"имя сервера".crt; Private Client Key - C:\Program Files\OpenVPN\easy-rsa\keys\"имя сервера".key; DH PEM - C:\Program Files\OpenVPN\easy-rsa\keys\dh1024.pem; В поле OpenVPN Config, записываем конфигурацию, это пример моей: mode server tls-server daemon server 192.168.66.0 255.255.255.0 port 443 proto tcp-server dev tun0 ca /tmp/openvpn/ca.crt cert /tmp/openvpn/cert.pem key /tmp/openvpn/key.pem dh /tmp/openvpn/dh.pem push "redirect-gateway def1" push "dhcp-option DNS 192.168.66.1" push "dhcp-option WINS 192.168.66.1" keepalive 10 120 client-to-client persist-key persist-tun verb 3 6. Настройка клиента Windows. Так как у нас уже есть установленная версия, на ОС под которой мы создавали ключики и сертификаты, то просто редактируем с помощью блокнота "C:\Program Files\OpenVPN\sample-config\client.ovpn" и сохраняем конфигурационный файл в папку "C:\Program Files\OpenVPN\config". client dev tun proto tcp-client remote "myIP" 443 resolv-retry infinite nobind persist-key persist-tun ca "C:\\Program Files\\OpenVPN\\easy-rsa\\keys\\ca.crt" cert "C:\\Program Files\\OpenVPN\\easy-rsa\\keys\\"имя клиента".crt" key "C:\\Program Files\\OpenVPN\\easy-rsa\\keys\\"имя клиента".key" verb 3 Где "myIP" - это статический адрес нашего маршрутизатора или имя маршрутизатора через службу Динамического DNS. А "имя клиента" то же что и выше. 7. Собственно и всё. Запускаем OpebVPN GUI нажимаем ПКМ на иконке и подключаемся. После успешной авторизации значек заполниться зеленым, значит весь ваш интернет-трафик зашифрован и идет через домашний маршрутизатор, то есть никто не сможет увидеть куда вы ходите и что делаете в интернете. Ну кроме просмотра трафика после маршрутизатора.
  18. Итак два датчика DTH22, один в КСД (камеры статического давления) на подачу воздуха после кондера, второй на рециркуляцию, библиотека для DTH, два резистора на 10кОм. Собственно код: Нашлась неплохая библиотека управления событиями по таймеру - Timer. Как говорится "то, что доктор прописал" ;) Скетч для температурных датчиков: #include "DHT.h" #include <RBD_Timer.h> #define dhtInPin 2 #define dhtOutPin 3 #define dhtTuype DHT22 DHT dhtIn(dhtInPin, dhtTuype); DHT dhtOut(dhtOutPin, dhtTuype); RBD::Timer timer; void setup() { Serial.begin(115200); dhtIn.begin(); dhtOut.begin(); timer.setTimeout(4000); timer.restart(); } void loop() { if(timer.getValue() == 2000) { float humidityIn = dhtIn.readHumidity(); float temperatureIn = dhtIn.readTemperature(); Serial.print("HumidityIn: "); Serial.println(humidityIn); Serial.print("TemperatureIn: "); Serial.println(temperatureIn); } else if(timer.isExpired()) { float humidityOut = dhtOut.readHumidity(); float temperatureOut = dhtOut.readTemperature(); Serial.print("HumidityOut: "); Serial.println(humidityOut); Serial.print("TemperatureOut: "); Serial.println(temperatureOut); timer.restart(); } }
  19. Просто как-то хотелось сделать чуть ли не систему реального времени, а записывать в базу уже средние значения раз в минуту например, но видимо не судьба;)
  20. Ну в общем всё не так. И скетч не правильный, непонятно почему меня никто не ткнул носом в мою необразованность. По-порядку. Контроллер не умеет работать в несколько потоков и параллельно выполнять разные функции. Т.е. при выполнении например этого: duration = pulseIn(dustPin, LOW); Код будет ожидать окончания импульса, а в даташите указываются длины импульсов 10-90 мс (страница 3), таким образом весь процесс будет тормозиться. А для этого: highlevel_co2 = pulseIn(co2Pin, HIGH, 1004000) / 1000; // Получение длины импульса HIGH в мс Мы вообще тормозим всё на 1004 мс. Т.е. мне пришлось переделывать почти всё (благо пример для mh-z19 pwm был изначально правильно написан), пока не проверю получаемый данные в паре и по отдельности датчиков выкладывать не буду. У всех прошу прощения за ввод в заблуждение. Сейчас крутиться тестовый скетч, но через сутки начинает врать датчик СО2. Приехали датчики температуры и влажности dth-22 (даташит). Но все примеры и поиск на github построены с помощью delay(), а это значит что придется опять "изобретать велосипед". С другой стороны, никто не мешает мне вызывать функции в определенное время, т.е. сначала выполняем подсчет пыли, потом меряем СО2, затем температуру и т.п.
  21. Апну темку, приехали датчик уровня СО2 и пыли (MH-Z19 и DSM501A). Несколько вечеров копался в коде/игрался настройками, собственно результат ниже: Жду остальные посылки с температурными датчиками и т.д. P.S. Заметил глюк, в датчике СО2 стоит LED-нагреватель, который периодически включается/выключается. Во время его работы + так же запитан датчик пыли (тоже со встроенным нагревателем), светодиоды на ардуинке заметно тускнеют - питание просаживается. Если в этот момент времени идет передача данных в Serial - следующее значение ppmco2 будет равно -10, т.е. импульс не был посчитан. Хорошо что блок питания 5В у меня отдельный будет для автоматики ;)
  22. Добавил в сообщение о модернизации серв фото процесса, прошу камнями сильно не кидать - снимал на телефон.
  23. Спасибо, @Pavel3333! Хотел отметить, что обычным паяльником я бы туда не подлез никак, так что для мелких деталюшек китайская usb-поделка самое оно. Осталось самое интересное теперь - довести до ума платформу, т.е. модернизировать сервы для отдачи значений в Blender, закрепить датчики на основе и платформе. Оформить инструкцию и визуализацию. Вчера просидел весь вечер с магнитометром, думаю нужно калибровать его ручками и немного изменять математику Arduino скетча. Кстати хорошая ссылка на инструкцию по калибровке. Если все получиться с датчиками, подумываю следующим этапом зачудить отслеживание движений человека ;)
  24. Сегодня получил обратную связь от сервопривода. Фотографии не стал пока делать - буду перепаивать остальные сделаю обязательно. Подопытный с коробком спичек для оценки размера Вскрыл крышку сервы на 4-х длинных саморезах. Запустил тестовый скетч "Sweep" из примеров и мультиметром поискал контакт с плавающим значением. Повезло и попал с первого раза :) Место припайки С припаянным проводком Припаял проводок на платку, вывел наружу вместе с остальными 3-мя, опять проверил мультиметром - все работает, показывало плавающие значения по памяти вроде от 0,7 до 2,1 В. Собственно проверочный код: #include <Servo.h> Servo myservo; int pos = 0; int analogPin = 3; int val = 0; void setup() { myservo.attach(9); Serial.begin(9600); } void loop() { for (pos = 0; pos <= 180; pos += 1) { myservo.write(pos); val = analogRead(analogPin); Serial.println(val); delay(50); } for (pos = 180; pos >= 0; pos -= 1) { myservo.write(pos); val = analogRead(analogPin); Serial.println(val); delay(50); } } И вывод в порт: Учитывая, что аналоговый вход в ардуинке понимает 0 В как 0, а 5 вольт как 1023, то можно рассчитать, что забираются с сервы значения от 0,53 до 2,2 вольт или получается точность 0,53 градуса. Видно из лога, что есть неточности - но учитывая стоимость серв лучшего и ждать нельзя было ;)
  25. Так успешно или не успешно ;)
×
×
  • Create New...