VALKNUT 3969 Жалоба Опубликовано 4 марта Собратья и сосёстры, дратути! Хочу поделиться прошивкой для LUX метра, на основе датчика VEML7700 и микроконтроллера ARDUINO NANO (и то и другое дешевле на алике в 2-4 раза) Это очень простое в реализации решение, но есть нюансы. 1. Гермитизировать сам датчик от воды 2. Придумать корпус для устройства 3. Воплотить в граните =) У меня есть 2 "поциента" (семейство @shkush и @Камень), которым я сделаю этот девайс и отошлю, но это не серийное производство, да и не ширптреб, оно нужно тем, кто знает ЧТО с ним делать.. Понадобится (по минималке): 1. датчик VEML7700 2. контроллер Arduino NANO 3. дисплей SH1106 4. готовый код и шнурок USB Спойлер #include <Arduino.h> #include <U8g2lib.h> #include "Adafruit_VEML7700.h" #include <Wire.h> U8G2_SH1106_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); Adafruit_VEML7700 veml = Adafruit_VEML7700(); unsigned long previousMillis = 0; const long interval = 2000; void setup() { Serial.begin(115200); Serial.println(F("Start!")); u8g2.begin(); u8g2.setDisplayRotation(U8G2_R2); u8g2.clearBuffer(); u8g2.setFont(u8g2_font_luIS19_tf); u8g2.firstPage(); do { u8g2.setCursor(16, 40); u8g2.print(F("AQLUX")); } while ( u8g2.nextPage() ); u8g2.sendBuffer(); delay(2000); veml.begin(); if (veml.begin() == false) { StartErr(); while (1); } else { StartUp(); opros(); } } void StartErr() { u8g2.setFont(u8g2_font_smart_patrol_nbp_tf); u8g2.firstPage(); do { u8g2.setCursor(24, 20); u8g2.print(F("VEML7700")); u8g2.setCursor(40, 40); u8g2.print(F("ERROR")); } while ( u8g2.nextPage() ); } void StartUp() { u8g2.setFont(u8g2_font_smart_patrol_nbp_tf); u8g2.firstPage(); do { u8g2.setCursor(24, 20); u8g2.print(F("VEML7700")); u8g2.setCursor(40, 40); u8g2.print(F("FOUND")); } while ( u8g2.nextPage() ); } void opros() { float lux = veml.readLux(VEML_LUX_AUTO); Serial.print("LUX: "); Serial.print(lux); Serial.print(", WHT: "); Serial.print(veml.readWhite()); Serial.print(", ALS: "); Serial.println(veml.readALS()); u8g2.firstPage(); do { u8g2.setFont(u8g2_font_smart_patrol_nbp_tf); u8g2.setCursor(90, 12); u8g2.print(F("-WHT")); u8g2.setCursor(2, 12); u8g2.print(veml.readWhite()); u8g2.setCursor(90, 52); u8g2.print(F("-ALS")); u8g2.setCursor(2, 52); u8g2.print(veml.readALS()); u8g2.setCursor(2, 32); u8g2.print(F("Lx")); u8g2.setFont(u8g2_font_profont29_mn); u8g2.setCursor(28, 37); if (lux > 99 ) { u8g2.print(lux, 0); } else { u8g2.print(lux); } } while ( u8g2.nextPage() ); } void loop() { unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; opros(); } } На максималках можно добавить аккумулятор, DC-DC повышайку и зарядку аккумулятора от USB (мой прототип так и сделан) Основная проблема, это гермитизация датчика, чтоб его можно было опустить под воду и получит данные там, где это востребовано. Свой "прототип" я долго держал в столе и никак его не юзал, но прикупив прозрачную эпоксидку, решил возобновить эксперименты.. удачно! На данном этапе нужно произвести юстировку "в смоле"/"as is". То есть сделать поправку на потери LUX в эпоксидной смоле и программно эту разницу компенсировать. 3 Поделиться сообщением Ссылка на сообщение
VALKNUT 3969 Жалоба Опубликовано 5 марта Один концепт готов.. Без экрана, без батарей, без повышаек и контроллеров зарядки... просто и надежно. Датчик + контроллер + приложение на смартфоне (Любое из семейства USBTerminal).. Так же на компе, используя любой терминал, я предпочитаю PuTTY Что "показывает" датчик: LUX: освещенность (амбиент) WHT: только белый свет ALS: рассеянный свет, закос под восприятие человеческим глазом 2 Поделиться сообщением Ссылка на сообщение
VALKNUT 3969 Жалоба Опубликовано 6 марта Провел тестирование.. датчиков: залитый прозрачной эпоксидкой и "голый" датчик //в одинаковых условиях. Отличие на улице 8,7%, отличие в помещении 11,8%, то есть грубо говоря 10% съедает эпоксидка. Убрал лишнее WHT и ALS, они используются для корректировок LUX, в зависимости от освещенности и практической пользы для конечного пользователя не имеют. Это под лампой на рабочем месте =) 2 Поделиться сообщением Ссылка на сообщение
Lx671 410 Жалоба Опубликовано 6 марта 18 часов назад, VALKNUT сказал(а): Датчик + контроллер + приложение на смартфоне (Любое из семейства USBTerminal).. Над народом не издевайся)) Для них это "темный лес". WEB-лист простейший как сервак пропиши вместо дисплея. И не надо ни приложений ни шнурков странных... Поделиться сообщением Ссылка на сообщение
AlexLi 6505 Жалоба Опубликовано 6 марта 5 минут назад, Lx671 сказал(а): Над народом не издевайся)) Для них это "темный лес". Батл назревает))) 2 Поделиться сообщением Ссылка на сообщение
VALKNUT 3969 Жалоба Опубликовано 6 марта 24 минут назад, Lx671 сказал(а): WEB-лист простейший как сервак пропиши вместо дисплея. И не надо ни приложений ни шнурков странных... Алексей, я искренне уважаю ваш опыт (мамай клянус), но иногда я просто не понимаю что Вы пишите. Буквы понимаю, содержание нет. Веб-лист.. что за нах Веб-лист???? Какой нафиг "сервак" для пользователя со знанием электроники (науки о контактах) ниже ПТУ, зачем давать ЛИШНЕЕ? Вот Вы (честно, реально, 100%) для меня являетесь "тем самым" (Киано Ривз - Матрица) в своих изысканиях - Вы очень молодец! (откровенно). Но у нас есть сообщество, которое может (если захочет) изучить предоставляемый нами с вами "трэш" (типа информацию) и попытается что-то сделать своими руками.. Алексей, положите руку на сердце или на любое другое место (по выбору) и скажите, только честно.. с нулевыми знаниями Вы (как участник форума) бы стали повторять свои же собственные наработки "с кембриками" и транзисторами "МП42"? Понимаете к чему я веду? Дайте НАРОДУ повторяемый "ништяк" и помогите реализовать, а не дайте ЛУЗЕРАМ неповторимость своего превосходства. Надо ПОМОГАТЬ, а не ВИНОВАТИТЬ (что не понимают). Грубо говоря, Вы ведете себя крайне эгоцентрично. Мы тут, между прочим - сообщество = банда! Не можете подтянуть, не опускайте. Я всё сказал. 20 минут назад, AlexLi сказал(а): Батл назревает))) Я со своего форума трех попов изжил знанием темы, баттла не будет, не тот "потенциал разности напряжений" Хотя... я давно попов не изгонял из светского форума лет 10... Поделиться сообщением Ссылка на сообщение
AlexLi 6505 Жалоба Опубликовано 6 марта 12 минут назад, VALKNUT сказал(а): Алексей, я искренне уважаю ваш опыт (мамай клянус), но иногда я просто не понимаю что Вы пишите. Буквы понимаю, содержание нет. Веб-лист.. что за нах Веб-лист???? Какой нафиг "сервак" для пользователя со знанием электроники (науки о контактах) ниже ПТУ, зачем давать ЛИШНЕЕ? Вот Вы (честно, реально, 100%) для меня являетесь "тем самым" (Киано Ривз - Матрица) в своих изысканиях - Вы очень молодец! (откровенно). Но у нас есть сообщество, которое может (если захочет) изучить предоставляемый нами с вами "трэш" (типа информацию) и попытается что-то сделать своими руками.. Алексей, положите руку на сердце или на любое другое место (по выбору) и скажите, только честно.. с нулевыми знаниями Вы (как участник форума) бы стали повторять свои же собственные наработки "с кембриками" и транзисторами "МП42"? Понимаете к чему я веду? Дайте НАРОДУ повторяемый "ништяк" и помогите реализовать, а не дайте ЛУЗЕРАМ неповторимость своего превосходства. Надо ПОМОГАТЬ, а не ВИНОВАТИТЬ (что не понимают). Грубо говоря, Вы ведете себя крайне эгоцентрично. Мы тут, между прочим - сообщество = банда! Не можете подтянуть, не опускайте. Я всё сказал. я мало что понял по существу, но по ощущениям ты прав на 100%!))) главное, что я понял: мы-банда, и это радует! 2 Поделиться сообщением Ссылка на сообщение
Lx671 410 Жалоба Опубликовано 6 марта 1 час назад, VALKNUT сказал(а): но иногда я просто не понимаю что Вы пишите. Буквы понимаю, содержание нет. Ну вы не парьтесь с этим. У меня IQ такое низкое, что за 30 лет в связи мне обычно сливали чужестранные разработки, которые должны стыковаться с нашими, в общем вы правы, я в банде не работаю)) Ни кто не понимает)) 1 час назад, VALKNUT сказал(а): что за нах Веб-лист???? Какой нафиг "сервак" для пользователя со знанием электроники Теперь по существу. --Эта ветка начиналась с настройки среды под ESP...у которых на борту Wi-Fi, а на кой вы начали грузить более старой платой? Если вы кидаете исходник, то его должны загрузить с компа, при этом установить правильно среду и плагины. 1 час назад, VALKNUT сказал(а): Дайте НАРОДУ повторяемый "ништяк" и помогите реализовать, Ну вы хотите, чтобы неподготовленный народ припаял датчик к плате, нашел шнур телефон-плата, а перед этим прошил с компа другим шнуром, как я понял. У многих компа нет(( Повторяемый - это вы спаиваете, прописываете, присылаете. Может в коробку засунуть смогут. Вот страница для сервера - https://rvideo-kaluga.ru/sho/ba0525a.htm она переспрашивает сама себя (с платы ESP), ее можно несложно переделать под люксы. А для соединения с телефоном, ESP можно просто включить через зарядник. А в телефоне найти Wi-Fi от платы ESP (вы его вводите) и в браузере просто набрать IP, который вы пропишите. 2 часов назад, VALKNUT сказал(а): Не можете подтянуть, не опускайте. ??? У каждого свое направление. Профессии разные. При чем тут "опускать". Я много другого не знаю, обои клеить не умею вообще)) Поделиться сообщением Ссылка на сообщение
VALKNUT 3969 Жалоба Опубликовано 6 марта 1 час назад, Lx671 сказал(а): При чем тут "опускать". Я много другого не знаю, обои клеить не умею вообще)) Я к тому, что надо подсказать КАК, а не рассказать почему только ТЫ можешь. Почувствуй разницу. Надо нести ЗНАНИЯ в массы (примеры, для повторения), а не делать из себя "форму для феонита, чтоб как брилиант".. понятно объясняю? Если кратко, народам нужен воспроизводимый эксперимент, а не "мазоль" от ника, который как божество с кембриками и дурацкими "Вебинтерфесами". Прошу прощения, считаю Ваши наработки интересными, но убогими, в плане реализации/привлекательности. Я бы, себе подобные вашим "интерфейсы" занулил на стадии разработки. Надо делать такое, что повторить могла и милфа. Поделиться сообщением Ссылка на сообщение
VALKNUT 3969 Жалоба Опубликовано 7 марта 13 часов назад, Lx671 сказал(а): Теперь по существу. --Эта ветка начиналась с настройки среды под ESP...у которых на борту Wi-Fi Если уж по существу, то тема называется (дословно) "Ардуино в помощь аквариуму" 13 часов назад, Lx671 сказал(а): а на кой вы начали грузить более старой платой? Эта "более старая плата" называется Arduino Nano, что даже в большей мере соответствует теме, чем те же контроллеры ESP. Более того, производство и поддержка этих контроллеров продолжается и они востребованы многими разработчиками, что в переводе с буржуйского "спрос рождает предложение". Более того, выбирая тот или иной контроллер для определенной задачи, лучше руководствоваться здравым смыслом. Для конкретно этой задачи: - "получить данные с датчика VEML7700 и предоставить их пользователю" я выбрал самый простой и доступный контроллер Arduino Nano. У меня есть и ESPшки разного калибра и Ардуинки (Уно и Мега), но забивать гвозди микроскопом = такое себе... Поделиться сообщением Ссылка на сообщение
AlexLi 6505 Жалоба Опубликовано 7 марта @VALKNUT а говорил, что батла не будет, обманщик))) 2 Поделиться сообщением Ссылка на сообщение
VALKNUT 3969 Жалоба Опубликовано Thursday в 11:11 Немного допилил код для Arduino Nano (без собственного экрана, с выводом на смартфон/компьютер) - Добавил возможность внести коррекцию из консоли терминала в % и сохранить значение в энергонезависимую память (EEPROM). // Коррекция нужна для датчиков в "подводном" исполнении, т.к. любой прозрачный материал между датчиком и источником света является преградой для света и данные от "открытого" и "залитого" датчиков будут разными. Код для Arduino IDE (среда разработки) для простейшего контроллера Arduino Nano. Тем, кто хочет сам поиграться и/или модифицировать под свои нужды. Спойлер #include <EEPROM.h> #include "Adafruit_VEML7700.h" #define LOAD_VALUE_PARAMNAME_1 EEPROM.read(0) #define SAVE_VALUE_PARAMNAME_1(value) EEPROM.update(0, value) Adafruit_VEML7700 veml = Adafruit_VEML7700(); unsigned long previousMillis = 0; long interval = 2000; byte myPrc = 10; void setup() { Serial.begin(115200); Serial.setTimeout(5); veml.begin(); if (veml.begin() == false) { Serial.println(F("VEML7700 not found!")); while (1) ; } else { Serial.println(F("AQLUX start, VEML7700 found!")); loadParams(); // Чтение из EEPROM showParams(); // Отображение прочитанного в мониторе порта opros(); } } void loadParams() { myPrc=LOAD_VALUE_PARAMNAME_1; } void showParams() { Serial.println("Correction: " + String(myPrc) + "%"); } void opros() { float lux = veml.readLux(VEML_LUX_AUTO); Serial.print(F("LUX: ")); if (myPrc == 0) { Serial.println(lux); } else { Serial.println(lux + (lux * myPrc / 100)); } } void loop() { if (Serial.available()) { String s = Serial.readStringUntil("%"); myPrc = s.toInt(); if (s.toInt() > 255) myPrc = 100; if (s.toInt() < 100) { SAVE_VALUE_PARAMNAME_1(myPrc); } else { Serial.println(F("ERROR: <100%!!!")); myPrc = 100; } showParams(); } unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; opros(); } } На смартфоне я использую такое вот приложение. (Simple Serial Port) Спойлер На скрине: - запуск приложения - чтение коррекции из памяти (Correct: 15%) - вывод данных датчика - отправка новой коррекции в терминал "11%" /происходит и запись в память/ - чтение коррекции из памяти (Correct: 11%) - вывод данных датчика На компе (стандартными средствами) сложней передать данные для коррекции, но прочитать очень легко. Спойлер Чтоб читать данные из порта, на котором висит "устройство" необходимо: 1. Узнать номер этого COM порта. Нажимаем [Win]+[R], вводим в форму cmd и нажимаем [Enter]. Откроется консоль Windows, в которую можно вставить следующий текст команды (здесь можно скопировать, а вставляется текст в консоль однократным щелчком правой кнопки мышки) reg query HKLM\HARDWARE\DEVICEMAP\SERIALCOMM После выполнения команды (по кнопке [Enter] Получаем список активных портов.. C:\Users\***>reg query HKLM\HARDWARE\DEVICEMAP\SERIALCOMM HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM \Device\Serial0 REG_SZ COM1 \Device\VCP0 REG_SZ COM9 C:\Users\***> Нужный порт COM9 2. Не закрывая консоль вводим команду настройки порта. Скорость, четность, битность, градус, оборот... /и нажимаем [Enter] mode COM9 BAUD=115200 PARITY=n DATA=8 Выйдет вот такая техническая информация C:\Users\***>mode COM9 BAUD=115200 PARITY=n DATA=8 Состояние устройства COM9: --------------------------- Скорость: 115200 Четность: None Биты данных: 8 Стоповые биты: 1 Таймаут: OFF XON/XOFF: OFF Синхронизация CTS: OFF Синхронизация DSR: OFF Чувствительность DSR: OFF Цепь DTR: ON Цепь RTS: ON C:\Users\***> 3. И теперь, чтоб получить данные с устройства вводим в ту же консоль /и нажимаем [Enter] TYPE COM9 Теперь в консоль сыпятся данные от устройства.. для отключения от COM порта используется команда [Ctrl]+[C] C:\Users\***>TYPE COM9 AQLUX start, VEML7700 found! Correction: 0% LUX: 147.65 LUX: 147.17 LUX: 146.70 LUX: 147.17 LUX: 147.17 Операция ввода/вывода была прервана из-за завершения потока команд или по запросу приложения. C:\Users\***> Сторонние приложения более гибкие, но уже не являются стандартными средствами. Спойлер Например приложение "Serial Port Terminal" /бесплатная программа/ Позволяет и читать и писать в порт и подключаться не сложно, в общем.. покажу на скриншотах.. Настройка порта Подключение и работа Поделиться сообщением Ссылка на сообщение