2. Прошивку в формате hex, вряд ли кто то будет ковырять, а вот скетч, в формате ino, могли бы посмотреть.
3. Попробуйте подключить один датчик bme 280 без всяких прибамбасов, залить тестовый скетч и проверить показания датчика в мониторе порта, к примеру...
#include <Wire.h>
#define BME280_ADDRESS 0x76
unsigned long int hum_raw,temp_raw,pres_raw;
signed long int t_fine;
uint16_t dig_T1;
int16_t dig_T2;
int16_t dig_T3;
uint16_t dig_P1;
int16_t dig_P2;
int16_t dig_P3;
int16_t dig_P4;
int16_t dig_P5;
int16_t dig_P6;
int16_t dig_P7;
int16_t dig_P8;
int16_t dig_P9;
int8_t dig_H1;
int16_t dig_H2;
int8_t dig_H3;
int16_t dig_H4;
int16_t dig_H5;
int8_t dig_H6;
void setup()
{
uint8_t osrs_t = 1; //Temperature oversampling x 1
uint8_t osrs_p = 1; //Pressure oversampling x 1
uint8_t osrs_h = 1; //Humidity oversampling x 1
uint8_t mode = 3; //Normal mode
uint8_t t_sb = 5; //Tstandby 1000ms
uint8_t filter = 0; //Filter off
uint8_t spi3w_en = 0; //3-wire SPI Disable
uint8_t ctrl_meas_reg = (osrs_t << 5) | (osrs_p << 2) | mode;
uint8_t config_reg = (t_sb << 5) | (filter << 2) | spi3w_en;
uint8_t ctrl_hum_reg = osrs_h;
Serial.begin(9600);
Wire.begin();
writeReg(0xF2,ctrl_hum_reg);
writeReg(0xF4,ctrl_meas_reg);
writeReg(0xF5,config_reg);
readTrim(); //
}
void loop()
{
double temp_act = 0.0, press_act = 0.0,hum_act=0.0;
signed long int temp_cal;
unsigned long int press_cal,hum_cal;
readData();
temp_cal = calibration_T(temp_raw);
press_cal = calibration_P(pres_raw);
hum_cal = calibration_H(hum_raw);
temp_act = (double)temp_cal / 100.0;
press_act = (double)press_cal / 100.0;
hum_act = (double)hum_cal / 1024.0;
Serial.print("TEMP : ");
Serial.print(temp_act);
Serial.print(" DegC PRESS : ");
Serial.print(press_act);
Serial.print(" hPa HUM : ");
Serial.print(hum_act);
Serial.println(" %");
delay(1000);
}
void readTrim()
{
uint8_t data[32],i=0;
Wire.beginTransmission(BME280_ADDRESS);
Wire.write(0x88);
Wire.endTransmission();
Wire.requestFrom(BME280_ADDRESS,24);
while(Wire.available()){
data[i] = Wire.read();
i++;
}
Wire.beginTransmission(BME280_ADDRESS);
Wire.write(0xA1);
Wire.endTransmission();
Wire.requestFrom(BME280_ADDRESS,1);
data[i] = Wire.read();
i++;
Wire.beginTransmission(BME280_ADDRESS);
Wire.write(0xE1);
Wire.endTransmission();
Wire.requestFrom(BME280_ADDRESS,7);
while(Wire.available()){
data[i] = Wire.read();
i++;
}
dig_T1 = (data[1] << 8) | data[0];
dig_T2 = (data[3] << 8) | data[2];
dig_T3 = (data[5] << 8) | data[4];
dig_P1 = (data[7] << 8) | data[6];
dig_P2 = (data[9] << 8) | data[8];
dig_P3 = (data[11]<< 8) | data[10];
dig_P4 = (data[13]<< 8) | data[12];
dig_P5 = (data[15]<< 8) | data[14];
dig_P6 = (data[17]<< 8) | data[16];
dig_P7 = (data[19]<< 8) | data[18];
dig_P8 = (data[21]<< 8) | data[20];
dig_P9 = (data[23]<< 8) | data[22];
dig_H1 = data[24];
dig_H2 = (data[26]<< 8) | data[25];
dig_H3 = data[27];
dig_H4 = (data[28]<< 4) | (0x0F & data[29]);
dig_H5 = (data[30] << 4) | ((data[29] >> 4) & 0x0F);
dig_H6 = data[31];
}
void writeReg(uint8_t reg_address, uint8_t data)
{
Wire.beginTransmission(BME280_ADDRESS);
Wire.write(reg_address);
Wire.write(data);
Wire.endTransmission();
}
void readData()
{
int i = 0;
uint32_t data[8];
Wire.beginTransmission(BME280_ADDRESS);
Wire.write(0xF7);
Wire.endTransmission();
Wire.requestFrom(BME280_ADDRESS,8);
while(Wire.available()){
data[i] = Wire.read();
i++;
}
pres_raw = (data[0] << 12) | (data[1] << 4) | (data[2] >> 4);
temp_raw = (data[3] << 12) | (data[4] << 4) | (data[5] >> 4);
hum_raw = (data[6] << 8) | data[7];
}
signed long int calibration_T(signed long int adc_T)
{
signed long int var1, var2, T;
var1 = ((((adc_T >> 3) - ((signed long int)dig_T1<<1))) * ((signed long int)dig_T2)) >> 11;
var2 = (((((adc_T >> 4) - ((signed long int)dig_T1)) * ((adc_T>>4) - ((signed long int)dig_T1))) >> 12) * ((signed long int)dig_T3)) >> 14;
t_fine = var1 + var2;
T = (t_fine * 5 + 128) >> 8;
return T;
}
unsigned long int calibration_P(signed long int adc_P)
{
signed long int var1, var2;
unsigned long int P;
var1 = (((signed long int)t_fine)>>1) - (signed long int)64000;
var2 = (((var1>>2) * (var1>>2)) >> 11) * ((signed long int)dig_P6);
var2 = var2 + ((var1*((signed long int)dig_P5))<<1);
var2 = (var2>>2)+(((signed long int)dig_P4)<<16);
var1 = (((dig_P3 * (((var1>>2)*(var1>>2)) >> 13)) >>3) + ((((signed long int)dig_P2) * var1)>>1))>>18;
var1 = ((((32768+var1))*((signed long int)dig_P1))>>15);
if (var1 == 0)
{
return 0;
}
P = (((unsigned long int)(((signed long int)1048576)-adc_P)-(var2>>12)))*3125;
if(P<0x80000000)
{
P = (P << 1) / ((unsigned long int) var1);
}
else
{
P = (P / (unsigned long int)var1) * 2;
}
var1 = (((signed long int)dig_P9) * ((signed long int)(((P>>3) * (P>>3))>>13)))>>12;
var2 = (((signed long int)(P>>2)) * ((signed long int)dig_P8))>>13;
P = (unsigned long int)((signed long int)P + ((var1 + var2 + dig_P7) >> 4));
return P;
}
unsigned long int calibration_H(signed long int adc_H)
{
signed long int v_x1;
v_x1 = (t_fine - ((signed long int)76800));
v_x1 = (((((adc_H << 14) -(((signed long int)dig_H4) << 20) - (((signed long int)dig_H5) * v_x1)) +
((signed long int)16384)) >> 15) * (((((((v_x1 * ((signed long int)dig_H6)) >> 10) *
(((v_x1 * ((signed long int)dig_H3)) >> 11) + ((signed long int) 32768))) >> 10) + (( signed long int)2097152)) *
((signed long int) dig_H2) + 8192) >> 14));
v_x1 = (v_x1 - (((((v_x1 >> 15) * (v_x1 >> 15)) >> 7) * ((signed long int)dig_H1)) >> 4));
v_x1 = (v_x1 < 0 ? 0 : v_x1);
v_x1 = (v_x1 > 419430400 ? 419430400 : v_x1);
return (unsigned long int)(v_x1 >> 12);
}
1. Про защиту от осадков пока вопос открытый пока использую просто пластиковый контейнер с мелкими дырочками для вентиляции. Насекомых думаю не стоит особо опасаться. Особенно на 6-м этаже. У нас их тут в принципе мало.
2. Схему подключения нарисовал. Правда в библиотеке не было моего модуля. Поставил какой был. У меня такой. На нём явно есть стабилизатор. Значит питать можно от 5 вольт. Скетч прилагаю.
3. Провода обычные... Для макетки. Вот фото в сборе.
4. Вообще конечно погрешность грустная. Вряд ли такой модуль подходит для уличного термометра...
Я извиняюсь, а не подскажете скетч у Вас в чём?
Просто как то привык что скетч идёт с .ino на конце.
Просто как то привык что скетч идёт с .ino на конце.
P.S. из архива распаковал.
Этот скетч я делал для PlatformIO. Довольно удобная среда для программирования. Ardiuino IDE как IDE всё-таки совершено убог. Где-то в прошлом веке остался. Примерно в его начале
Ну и потом. Разве может помешать кондесатор на питании? Подтягивающие резисторы на шине i2c? Какое они могут оказать влияние на измерения датчика? Что даст проверка показаний в мониторе порта? Показания идут. С этим проблем нет. Вопрос в том как проверить их правильность?
Ну и потом. Разве может помешать кондесатор на питании? Подтягивающие резисторы на шине i2c? Какое они могут оказать влияние на измерения датчика? Что даст проверка показаний в мониторе порта? Показания идут. С этим проблем нет. Вопрос в том как проверить их правильность?
Вот Вы и проверьте, с показаниями обычного ртутного термометра...
Ну, Вы знаете, людям свойственно приписывать всему старому самые замечательные свойства :)
Если бы Вы часто бывали на хоккейных стадионах и были бы примерно моего возрата, то наверняка согласились бы с моим мнением: "Вот лет сорок назад ... и лёд блестел ярче, и шайбы лучше скользили, и девки на трибунах пофигуристее были" :)
С температурой все понятно, а вот как проверить правильность показания влажности... У меня три латчика, правдва все китайские, показывают три разных значения :)
С температурой все понятно, а вот как проверить правильность показания влажности... У меня три латчика, правдва все китайские, показывают три разных значения :)
У разных датчиков - разная погрешность и диапазон измерений...
Как вариант, узнайте телефон местной (городской) метеостанции, запросите у них значения относительной влажности для вашего населенного пункта и проведите замеры относительной влажности рядом с вашей метеостанцией...
Вы все равно с этими "разными типами" работаете в коде как с непрерывным байтовым массивом. Тасуете их туда-сюда, преобразуете по своей прихоти то в 32битный лонг. то в 64-битный лонг лонг. Ну и какй смысл был давать этим полям отдельные названия? - зададли бы непрерывный массив да и все
И что помешало в строчках 82-93 всю структуру прочитать по i2c одним блоком?
Вы все равно с этими "разными типами" работаете в коде как с непрерывным байтовым массивом. Тасуете их туда-сюда, преобразуете по своей прихоти то в 32битный лонг. то в 64-битный лонг лонг
Это по делу написано. Не получается у меня одним циклом в масив все прочесть. Если меняю типы данных dig_P1..dig_P9 на uint16_t..int16_t..uint32_t..int32_t, не трогая основной код, то получаю неверный результат давления
Например dig_P2 при неверном типе печатается в сериал как D668 а при верном как FFFFD668. Тут я и не соображу почему FFFF добавляется. Конечно было бы проще в один масив считать все и сразу. Знаю что это можно сделать для dig_P2..dig_P9.
С этими датчиками, на длинной линии желательны подтягивающие резисторы.
На какой стороне их правильнее ставить? На стороне датчика или на стороне ардуины?
PS
так получилось, что использован именно такой датчик и именно на длинной линии. Кабель - не помню, как называется, но просто тонкий четырех проводный (типа телефонного). Система постоянно сбоит. Однократно, при перезагрузке по питанию, считывает, а потом начинает врать. При стендировании, в лабораторных условиях, на том же кабеле, все работало без сбоев.
Коротко проект такой - датчик в презервативе - помещается на дно бочки и по давлению считается заполненность бочки. Есть кнопка обнуления (можно поднять датчик на поверхность, сбросить показания и считать их за Ноль. Верхний срез бочки примерно на уровне 4-х метров от земли, бочка на "будке", в будке ардуина. То есть кабель идет из "будки" до верха бочки и опускается обратно, но уже в бочке. "Рабочий ход" примерно 1,3 метра (бочка не наполняется под срез и не высасывается досуха.
Шина i2c не предназначена для работы на длинных линиях, это внутриплатная шина. Тебе надо врЕзать в бок бочки внизу датчик давления и поставить там Тиньку + JDY-40 или RS-485. Если просыпаться раз в 10сек. одного заряда 18650 хватить на сезон с запасом.
Привет. Вижу несколько вариантов. Первые два, как ты хочешь - повозиться:
1) Попробовать витую пару вместо телефонного кабеля причем линию данных пустить именно через скрученную пару. Установить доп. конденсатор по питанию датчика микрофарад на 100. Дописать алгоритм "Долбления" датчика пока не будет результата. Питание датчика через пин ардуино для возможности принудительного отключения/включения питания. Не факт что поможет. Также любая дырочка в кабеле приведет к затоплению датчика. Кабель нужен хороший с экранирующей оплеткой.
2) Поставить ардуино нано в презерватив с датчиком и передавать данные на наружную ардуино например по протоколу One-wire.
3) Сделать штуцер на бочке внизу куда прикрутить датчик давления, предназначенный для этого, а там хоть радиоканал с батарейным питанием. Не прослужит долго презерватив и рано или поздно кабель потечет, а он как трубка, все вниз польется. Можно посмотреть в сторону автомобильных датчиков давления, можно специализированные глянуть. Цены не кусаются в 5-10$ думаю возможно вложиться.
Буду смотреть в сторону поплавка с магнитом на трубе. В трубу засуну цепочку резисторов с герконами. Будет сильно дискретно, но точнее 10 градаций в принципе и не надо.
Про герметичность. Сейчас в воде, но думал поднять датчик выше уровня воды в трубе с открытым низом и герметичным верхом. Тогда давление в трубе будет то же, но датчик будет уже не в воде. Заглушенная канализационная труба с резинкой, щедро смазанной силиконом, вполне держит. Сложнее обеспечить герметичный вывод провода, без утечек воздуха по изоляции.
Слушай, Prostovova а если сверху датчик расстояния приколхозить? Чем дальше поверхность жидкости или поплавка тем меньше уровень. Варианты: GY-530, VL53L0X, HC-SR04, JSN-SR04T
Я думал в этом направлении
Как поведет себя ультразвук в железной бочке неизвестно
лазер - то же не понятно. От воды неизвестно как отразится. От "поплавка" - тоже не все стабильно: переменное освещение, "поплавок" не должен уходить в сторону, наклоняться и т.д. Например лазер GY-530 не вдохновил стабильной работой. Хотя по правде я его в других целях тестировал. Может и вариант по физике, но по интерфейсу он же тот же I2C
"бочка" - это параллелепипед примерно 2м*1,5м в плане высотой 1,5м. Доступ - люк 50см*50см в углу
Слушай, Prostovova а если сверху датчик расстояния приколхозить? Чем дальше поверхность жидкости или поплавка тем меньше уровень. Варианты: GY-530, VL53L0X, HC-SR04, JSN-SR04T
так вроде не более пары недель назад кто-то уже приходил с вопросом, на что поменять датчик HC-SR04 в бочке. а то он гниет буквально за пару месяцев
Может кто из гуру подскажет...
Но, помоему, какая -то мудренная схема подключения у Вас..
1. Всегда подключал датчик BME280 без подтягивающих резисторов и конденсаторов, т.к. это все дело есть в плате датчика (стабилизатор напряжения), к примеру вид подключения датчика bmp180 http://adatum.ru/podklyuchenie-tsifrovogo-barometra-bmp180-k-arduino.html
2. Прошивку в формате hex, вряд ли кто то будет ковырять, а вот скетч, в формате ino, могли бы посмотреть.
3. Попробуйте подключить один датчик bme 280 без всяких прибамбасов, залить тестовый скетч и проверить показания датчика в мониторе порта, к примеру...
1. Про защиту от осадков пока вопос открытый пока использую просто пластиковый контейнер с мелкими дырочками для вентиляции. Насекомых думаю не стоит особо опасаться. Особенно на 6-м этаже. У нас их тут в принципе мало.
2. Схему подключения нарисовал. Правда в библиотеке не было моего модуля. Поставил какой был. У меня такой. На нём явно есть стабилизатор. Значит питать можно от 5 вольт. Скетч прилагаю.
3. Провода обычные... Для макетки. Вот фото в сборе.
4. Вообще конечно погрешность грустная. Вряд ли такой модуль подходит для уличного термометра...
Я извиняюсь, а не подскажете скетч у Вас в чём?
Просто как то привык что скетч идёт с .ino на конце.
P.S. из архива распаковал.
Я извиняюсь, а не подскажете скетч у Вас в чём?
Просто как то привык что скетч идёт с .ino на конце.
P.S. из архива распаковал.
Этот скетч я делал для PlatformIO. Довольно удобная среда для программирования. Ardiuino IDE как IDE всё-таки совершено убог. Где-то в прошлом веке остался. Примерно в его начале
1. Всегда подключал датчик BME280 без подтягивающих резисторов и конденсаторов, т.к. это все дело есть в плате датчика (стабилизатор напряжения), к примеру вид подключения датчика bmp180 http://adatum.ru/podklyuchenie-tsifrovogo-barometra-bmp180-k-arduino.html
2. Прошивку в формате hex, вряд ли кто то будет ковырять, а вот скетч, в формате ino, могли бы посмотреть.
1. Попробую без подтягивающих сопротивлений.
2. А где hex? Я выложил чистый С++
Ну и потом. Разве может помешать кондесатор на питании? Подтягивающие резисторы на шине i2c? Какое они могут оказать влияние на измерения датчика? Что даст проверка показаний в мониторе порта? Показания идут. С этим проблем нет. Вопрос в том как проверить их правильность?
Ну и потом. Разве может помешать кондесатор на питании? Подтягивающие резисторы на шине i2c? Какое они могут оказать влияние на измерения датчика? Что даст проверка показаний в мониторе порта? Показания идут. С этим проблем нет. Вопрос в том как проверить их правильность?
Вот Вы и проверьте, с показаниями обычного ртутного термометра...
1. Всегда подключал датчик BME280 без подтягивающих резисторов и конденсаторов, т.к. это все дело есть в плате датчика (стабилизатор напряжения), к примеру вид подключения датчика bmp180 http://adatum.ru/podklyuchenie-tsifrovogo-barometra-bmp180-k-arduino.html
2. Прошивку в формате hex, вряд ли кто то будет ковырять, а вот скетч, в формате ino, могли бы посмотреть.
1. Попробую без подтягивающих сопротивлений.
2. А где hex? Я выложил чистый С++
В архиве, в папке , у меня такой путь, C:\Users\Комп\Downloads\radio_3\radio_3\.pioenvs\nanoatmega328\firmware.hex
Ну, Вы знаете, людям свойственно приписывать всему старому самые замечательные свойства :)
Если бы Вы часто бывали на хоккейных стадионах и были бы примерно моего возрата, то наверняка согласились бы с моим мнением: "Вот лет сорок назад ... и лёд блестел ярче, и шайбы лучше скользили, и девки на трибунах пофигуристее были" :)
Ностальгия - признак молодости
С температурой все понятно, а вот как проверить правильность показания влажности... У меня три латчика, правдва все китайские, показывают три разных значения :)
В архиве, в папке , у меня такой путь, C:\Users\Комп\Downloads\radio_3\radio_3\.pioenvs\nanoatmega328\firmware.hex
То есть вы полагаете, что проблема в библиотеке?
С температурой все понятно, а вот как проверить правильность показания влажности... У меня три латчика, правдва все китайские, показывают три разных значения :)
У разных датчиков - разная погрешность и диапазон измерений...
Как вариант, узнайте телефон местной (городской) метеостанции, запросите у них значения относительной влажности для вашего населенного пункта и проведите замеры относительной влажности рядом с вашей метеостанцией...
В архиве, в папке , у меня такой путь, C:\Users\Комп\Downloads\radio_3\radio_3\.pioenvs\nanoatmega328\firmware.hex
То есть вы полагаете, что проблема в библиотеке?
Я собственно, не Гуру, а новичок в данной области.
Просто, если Вы выложите конкректный скетч в формате ino, шансы, что Вам помогут возрастают...
Просто, если Вы выложите конкректный скетч в формате ino, шансы, что Вам помогут возрастают...
Переконвертировал в ino :)
Ваш скетч
а может кто выручит калибровочными константами и сырыми данными с ацп BME280
Калибровочные для каждого экземпляра свои, на заводе прописываются. Что вы будете с чужими-то делать?
ну разумеется подсуну в свой код для проверки работоспособности.
есть сомнения что датчик живой, люди пишут что такое часто случается.
константы и выхлоп
7036 66A9 0032
8E1C D5FE 0BD0 1910 FFF5 FFF9 300C D120 1388
00 018A 00 290F 0329 1E
00087829 0005788D 00003051
00087808 00057880 00003551
000877ED 0005786A 0000F550
000877CC 0005785C 0000DD50
000877B5 00057866 0000C150
000877AC 00057876 0000C950
0008778D 00057844 0000BB50
00087759 0005782D 00009E50
00087746 0005780D 0000B150
00087733 0005784B 0000BE50
и вот что получается, с моими константами датчик не может работать в принципе
сырые данные ацп - влажность
0xDB02 1.013
0xFFFE 60.002
а вот с константами из инета, в диапазон укладывается
0x4C6B 1.006
0x8F74 99.996
dig_H1 = 0x4B
dig_H2 = 0x0171
dig_H3 = 0x00
dig_H4 = 0x012F
dig_H5 = 0x0000
dig_H6 = 0x1E
Может кому пригодится опрос BME BMP280 без библиотеки. Писал на скорость опроса для метеостанции в автономной работе
ужос...
я смотрю, работать с массивами вы так и не научились...
Согласен, вы смотрите.
Типы разные в масив научите запихивать, будут масивы.
По делу будут предложения?
Согласен, вы смотрите.
Типы разные в масив научите запихивать, будут масивы.
По делу будут предложения?
Вы все равно с этими "разными типами" работаете в коде как с непрерывным байтовым массивом. Тасуете их туда-сюда, преобразуете по своей прихоти то в 32битный лонг. то в 64-битный лонг лонг. Ну и какй смысл был давать этим полям отдельные названия? - зададли бы непрерывный массив да и все
И что помешало в строчках 82-93 всю структуру прочитать по i2c одним блоком?
Ты думаешь, такой код
053
if
(1<len>4)
return
NAN;
будет кто-то всерьёз рассматривать?
А разве код выложен для предложений?
Мне казалось, что он выложен на тот случай, если
Ну, пусть себе лежит, может кому и пригодится.
А предложений, вроде, никто не запрашивал :-)
И что помешало в строчках 82-93 всю структуру прочитать по i2c одним блоком?
Тут прокол, верно.
А в целом - код есть калька с Адафруитовской библиотеки, там такая же акробатика с преобразованиями типов.
массив структур?
Вы все равно с этими "разными типами" работаете в коде как с непрерывным байтовым массивом. Тасуете их туда-сюда, преобразуете по своей прихоти то в 32битный лонг. то в 64-битный лонг лонг
Это по делу написано. Не получается у меня одним циклом в масив все прочесть. Если меняю типы данных dig_P1..dig_P9 на uint16_t..int16_t..uint32_t..int32_t, не трогая основной код, то получаю неверный результат давления
Например dig_P2 при неверном типе печатается в сериал как D668 а при верном как FFFFD668. Тут я и не соображу почему FFFF добавляется. Конечно было бы проще в один масив считать все и сразу. Знаю что это можно сделать для dig_P2..dig_P9.
массив структур?
Пока не дорос до них. Нужно изучать.
p-a-h-a, дык может и не стоит велосипед изобретать? Смотрю код, много лет гуляющий по сети, ну очень похож...
Подскажите плз
С этими датчиками, на длинной линии желательны подтягивающие резисторы.
На какой стороне их правильнее ставить? На стороне датчика или на стороне ардуины?
PS
так получилось, что использован именно такой датчик и именно на длинной линии. Кабель - не помню, как называется, но просто тонкий четырех проводный (типа телефонного). Система постоянно сбоит. Однократно, при перезагрузке по питанию, считывает, а потом начинает врать. При стендировании, в лабораторных условиях, на том же кабеле, все работало без сбоев.
Коротко проект такой - датчик в презервативе - помещается на дно бочки и по давлению считается заполненность бочки. Есть кнопка обнуления (можно поднять датчик на поверхность, сбросить показания и считать их за Ноль. Верхний срез бочки примерно на уровне 4-х метров от земли, бочка на "будке", в будке ардуина. То есть кабель идет из "будки" до верха бочки и опускается обратно, но уже в бочке. "Рабочий ход" примерно 1,3 метра (бочка не наполняется под срез и не высасывается досуха.
Шина i2c не предназначена для работы на длинных линиях, это внутриплатная шина. Тебе надо врЕзать в бок бочки внизу датчик давления и поставить там Тиньку + JDY-40 или RS-485. Если просыпаться раз в 10сек. одного заряда 18650 хватить на сезон с запасом.
Привет. Вижу несколько вариантов. Первые два, как ты хочешь - повозиться:
1) Попробовать витую пару вместо телефонного кабеля причем линию данных пустить именно через скрученную пару. Установить доп. конденсатор по питанию датчика микрофарад на 100. Дописать алгоритм "Долбления" датчика пока не будет результата. Питание датчика через пин ардуино для возможности принудительного отключения/включения питания. Не факт что поможет. Также любая дырочка в кабеле приведет к затоплению датчика. Кабель нужен хороший с экранирующей оплеткой.
2) Поставить ардуино нано в презерватив с датчиком и передавать данные на наружную ардуино например по протоколу One-wire.
3) Сделать штуцер на бочке внизу куда прикрутить датчик давления, предназначенный для этого, а там хоть радиоканал с батарейным питанием. Не прослужит долго презерватив и рано или поздно кабель потечет, а он как трубка, все вниз польется. Можно посмотреть в сторону автомобильных датчиков давления, можно специализированные глянуть. Цены не кусаются в 5-10$ думаю возможно вложиться.
Эх-хе-хе-хе-хе
А поначалу идея казалась неплохой.
Буду смотреть в сторону поплавка с магнитом на трубе. В трубу засуну цепочку резисторов с герконами. Будет сильно дискретно, но точнее 10 градаций в принципе и не надо.
Про герметичность. Сейчас в воде, но думал поднять датчик выше уровня воды в трубе с открытым низом и герметичным верхом. Тогда давление в трубе будет то же, но датчик будет уже не в воде. Заглушенная канализационная труба с резинкой, щедро смазанной силиконом, вполне держит. Сложнее обеспечить герметичный вывод провода, без утечек воздуха по изоляции.
Спасибо за советы. JDY-40 то же поизучаю.
Слушай, Prostovova а если сверху датчик расстояния приколхозить? Чем дальше поверхность жидкости или поплавка тем меньше уровень. Варианты: GY-530, VL53L0X, HC-SR04, JSN-SR04T
https://www.youtube.com/watch?v=q4x6ypaXGf8&ab_channel=ArduinoProm
https://youtu.be/TiVjCRc9-60?t=317
Я думал в этом направлении
Как поведет себя ультразвук в железной бочке неизвестно
лазер - то же не понятно. От воды неизвестно как отразится. От "поплавка" - тоже не все стабильно: переменное освещение, "поплавок" не должен уходить в сторону, наклоняться и т.д. Например лазер GY-530 не вдохновил стабильной работой. Хотя по правде я его в других целях тестировал. Может и вариант по физике, но по интерфейсу он же тот же I2C
"бочка" - это параллелепипед примерно 2м*1,5м в плане высотой 1,5м. Доступ - люк 50см*50см в углу
Слушай, Prostovova а если сверху датчик расстояния приколхозить? Чем дальше поверхность жидкости или поплавка тем меньше уровень. Варианты: GY-530, VL53L0X, HC-SR04, JSN-SR04T
так вроде не более пары недель назад кто-то уже приходил с вопросом, на что поменять датчик HC-SR04 в бочке. а то он гниет буквально за пару месяцев