Перейти к содержанию
VALKNUT

Ардуино в помощь аквариуму

Рекомендуемые сообщения

VALKNUT    3969

Собратья и сосёстры, дратути!
Хочу поделиться прошивкой для LUX метра, на основе датчика VEML7700 и микроконтроллера ARDUINO NANO (и то и другое дешевле на алике в 2-4 раза)
Это очень простое в реализации решение, но есть нюансы.
1. Гермитизировать сам датчик от воды
2. Придумать корпус для устройства
3. Воплотить в граните =)

У меня есть 2 "поциента" :ap: (семейство @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

Один концепт готов..
Без экрана, без батарей, без повышаек и контроллеров зарядки... просто и надежно.

Датчик + контроллер + приложение на смартфоне (Любое из семейства USBTerminal)..
image.jpg.8602e3482d39fdc5bdfb7577c93fb511.jpg

Так же на компе, используя любой терминал, я предпочитаю PuTTY
image.jpg.ca630c168d38186dd2d9c142d3eafc46.jpg

image.jpg.a27428463cbc653479cc1df8fe93f7f4.jpg

Что "показывает" датчик:
LUX: освещенность (амбиент)
WHT: только белый свет
ALS: рассеянный свет, закос под восприятие человеческим глазом

  • Лайк 2

Поделиться сообщением


Ссылка на сообщение
VALKNUT    3969

Провел тестирование.. датчиков: залитый прозрачной эпоксидкой и "голый" датчик //в одинаковых условиях.
Отличие на улице 8,7%, отличие в помещении 11,8%, то есть грубо говоря 10% съедает эпоксидка. 
Убрал лишнее WHT и ALS, они используются для корректировок LUX, в зависимости от освещенности и практической пользы для конечного пользователя не имеют.

image.jpg.b5af1c110ae6c141bda70129ae52b336.jpg
Это под лампой на рабочем месте =)

  • Лайк 2

Поделиться сообщением


Ссылка на сообщение
Lx671    410
18 часов назад, VALKNUT сказал(а):

Датчик + контроллер + приложение на смартфоне (Любое из семейства USBTerminal)..

Над народом не издевайся)) Для них это "темный лес".

WEB-лист простейший как сервак пропиши вместо дисплея. И не надо ни приложений ни шнурков странных...

Поделиться сообщением


Ссылка на сообщение
AlexLi    6505
5 минут назад, Lx671 сказал(а):

Над народом не издевайся)) Для них это "темный лес".

 

Батл назревает)))

  • Хи-хи-хи 2

Поделиться сообщением


Ссылка на сообщение
VALKNUT    3969
24 минут назад, Lx671 сказал(а):

WEB-лист простейший как сервак пропиши вместо дисплея. И не надо ни приложений ни шнурков странных...

Алексей, я искренне уважаю ваш опыт (мамай клянус), но иногда я просто не понимаю что Вы пишите. Буквы понимаю, содержание нет.

Веб-лист.. что за нах Веб-лист???? Какой нафиг "сервак" для пользователя со знанием электроники (науки о контактах) ниже ПТУ, зачем давать ЛИШНЕЕ?
Вот Вы (честно, реально, 100%) для меня являетесь "тем самым" (Киано Ривз - Матрица) в своих изысканиях - Вы очень молодец! (откровенно).
Но у нас есть сообщество, которое может (если захочет) изучить предоставляемый нами с вами "трэш" (типа информацию) и попытается что-то сделать своими руками..

Алексей, положите руку на сердце или на любое другое место (по выбору) и скажите, только честно.. с нулевыми знаниями Вы (как участник форума) бы стали повторять свои же собственные наработки "с кембриками" и транзисторами "МП42"?  Понимаете к чему я веду?

Дайте НАРОДУ повторяемый "ништяк" и помогите реализовать, а не дайте ЛУЗЕРАМ неповторимость своего превосходства.
Надо ПОМОГАТЬ, а не ВИНОВАТИТЬ (что не понимают).

Грубо говоря, Вы ведете себя крайне эгоцентрично.

Мы тут, между прочим - сообщество = банда! Не можете подтянуть, не опускайте. Я всё сказал.  

20 минут назад, AlexLi сказал(а):

Батл назревает)))

Я со своего форума трех попов изжил знанием темы, баттла не будет, не тот "потенциал разности напряжений" :ap:
Хотя... я давно попов не изгонял из светского форума :blush2: лет 10...

Поделиться сообщением


Ссылка на сообщение
AlexLi    6505
12 минут назад, VALKNUT сказал(а):

Алексей, я искренне уважаю ваш опыт (мамай клянус), но иногда я просто не понимаю что Вы пишите. Буквы понимаю, содержание нет.

Веб-лист.. что за нах Веб-лист???? Какой нафиг "сервак" для пользователя со знанием электроники (науки о контактах) ниже ПТУ, зачем давать ЛИШНЕЕ?
Вот Вы (честно, реально, 100%) для меня являетесь "тем самым" (Киано Ривз - Матрица) в своих изысканиях - Вы очень молодец! (откровенно).
Но у нас есть сообщество, которое может (если захочет) изучить предоставляемый нами с вами "трэш" (типа информацию) и попытается что-то сделать своими руками..

Алексей, положите руку на сердце или на любое другое место (по выбору) и скажите, только честно.. с нулевыми знаниями Вы (как участник форума) бы стали повторять свои же собственные наработки "с кембриками" и транзисторами "МП42"?  Понимаете к чему я веду?

Дайте НАРОДУ повторяемый "ништяк" и помогите реализовать, а не дайте ЛУЗЕРАМ неповторимость своего превосходства.
Надо ПОМОГАТЬ, а не ВИНОВАТИТЬ (что не понимают).

Грубо говоря, Вы ведете себя крайне эгоцентрично.

Мы тут, между прочим - сообщество = банда! Не можете подтянуть, не опускайте. Я всё сказал. 

я мало что понял по существу, но по ощущениям ты прав на 100%!)))

главное, что я понял: мы-банда, и это радует!

  • Хи-хи-хи 2

Поделиться сообщением


Ссылка на сообщение
Lx671    410
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
1 час назад, Lx671 сказал(а):

При чем тут "опускать".  Я много другого не знаю, обои клеить не умею вообще))

Я к тому, что надо подсказать КАК, а не рассказать почему только ТЫ можешь.
Почувствуй разницу.
Надо нести ЗНАНИЯ в массы (примеры, для повторения), а не делать из себя "форму для феонита, чтоб как брилиант".. понятно объясняю?

Если кратко, народам нужен воспроизводимый эксперимент, а не "мазоль" от ника, который как божество с кембриками и дурацкими "Вебинтерфесами".
Прошу прощения, считаю Ваши наработки интересными, но убогими, в плане реализации/привлекательности. Я бы, себе подобные вашим "интерфейсы" занулил на стадии разработки.
Надо делать такое, что повторить могла и милфа.

Поделиться сообщением


Ссылка на сообщение

VALKNUT    3969
13 часов назад, Lx671 сказал(а):

Теперь по существу. --Эта ветка начиналась с настройки среды под ESP...у которых на борту Wi-Fi

Если уж по существу, то тема называется (дословно) "Ардуино в помощь аквариуму:ap:

13 часов назад, Lx671 сказал(а):

а на кой вы начали грузить более старой платой?

Эта "более старая плата" называется Arduino Nano, что даже в большей мере соответствует теме, чем те же контроллеры ESP.  Более того, производство и поддержка этих контроллеров продолжается и они востребованы многими разработчиками, что в переводе с буржуйского "спрос рождает предложение". 
Более того, выбирая тот или иной контроллер для определенной задачи, лучше руководствоваться здравым смыслом. Для конкретно этой задачи: - "получить данные с датчика VEML7700 и предоставить их пользователю" я выбрал самый простой и доступный контроллер Arduino Nano. У меня есть и ESPшки разного калибра и Ардуинки (Уно и Мега), но забивать гвозди микроскопом = такое себе...

Поделиться сообщением


Ссылка на сообщение
AlexLi    6505

@VALKNUT а говорил, что батла не будет, обманщик)))

  • Хи-хи-хи 2

Поделиться сообщением


Ссылка на сообщение
VALKNUT    3969

Немного допилил код для 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)

Спойлер

image.thumb.png.4901528bfc304e639f3c2d40af05eae2.png
На скрине:
- запуск приложения
- чтение коррекции из памяти (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" /бесплатная программа/
image.thumb.png.792b57ee48f191c8a37b4c475260327b.png

Позволяет и читать и писать в порт и подключаться не сложно, в общем.. покажу на скриншотах..
Настройка порта
image.jpg.0b0a91509fa87975532012244efd1050.jpg

Подключение и работа
image.thumb.png.cda5d54dd8e0771f92bb9d1dae8c5a3b.png

 

 

 

Поделиться сообщением


Ссылка на сообщение

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

×