Прошивка для измерителя воды в баке
- Войдите на сайт для отправки комментариев
Сб, 21/02/2015 - 18:27
Всем Привет! Наверное уже кто-то занимался таким вопросом, буду благодарен если поделитесь.
Есть такой комплект:
1. Arduino Nano v3.0 на ATmega328
2. Ультразвуковой датчик HC-SR04
3. Символьный дисплей QC1602A
Везде есть описания для дальномера из этого комплекта. Но задача другая, нужно перепрошить под измеритель уровня воды в баке (емкость 750 литров, высота бака 2 метра).
Еще задача в том, что бак находится в плохо доступном месте, расстояние от бака до дисплея порядка 10 метров, чтобы не тащить провода, хотелось бы как-то передать данные на дисплей модулем Bluetooth HC-05.
А питание туда тоже без проводов подадите? Да и с ультразвуком на измерении уровней жидкости вроде как не очень. Вам надо каждый сантиметр знать или хватит нескольких контрольных точек?
в сам бак доступ есть? можно ведь и кусок пенопласта кинуть (приличного размера) и модуль заработает. если по радиоканалу то нужно 2 ардуины
дальности радиомодуля врядли хватит. можно использовать nrf24l01
но с питанием тебе действительно надо подумать
в сам бак доступ есть? можно ведь и кусок пенопласта кинуть (приличного размера) и модуль заработает. если по радиоканалу то нужно 2 ардуины
дальности радиомодуля врядли хватит. можно использовать nrf24l01
но с питанием тебе действительно надо подумать
Жека, а испарение постоянное, долго там этот модуль проживет?
кстати да. что то я про это забыл
если поэкспериментировать мне кажется можно добиться работы подуля сквозь преграду, которая защиты от влаги
например презерватив натянутый на банку. но скорее всего надо будет подобрать расстояние от модуля до "защиты"
при расстоянии кратном длине волны теоретически образуется стоящая волна, и модуль ее не заметит и будет работать через защиту
наверно в чувствительности потеряет, но попробовать стоит
есть более сложный путь. использовать датчик от парктроника. он влаги не боится. герметичный
http://ru.aliexpress.com/item/New-Parking-Sensor-Car-Reverse-Back-Up-Ult...
но внутри ничего нет кроме пьезоизлучателя в алюминиевом стакане. сам разбирал
но к нему нужна схема. если бы кто нибудь срисовал с платы парктроника было бы проще
вообще должно быть вроде этого. подстройка вкручиванием и выкручиванием сердечника для подстройки на частоту излучателя
возможно для ECHO нужен усилитель
jeka_tm, он вроде и с платой продаётся http://www.ebay.com/sch/i.html?_from=R40&_trksid=p2050601.m570.l1313.TR0...
я не видел такой набор. тем более. это вообще идеальный вариант
bwn правильно намекал, обычно точно не нужно знать сколько воды, а всего нужно 4 точки
нижный критический уровень
нижний нормальный
верхний нормальный
верхний критический
все
Нуууууу как вам сказать....... Платка с датчиком...... без корпуса......
А вот это как при той-же цене :
ЧЕТЫРЕ тех-же самых датчика, плата в корпусе и ещё и с дисплеем. И пищалка. И сверло!!!!!!!!!
Диссплей работает по последовательному протоколу, недавно было его обсуждение и вроде научились читать данные.....
http://www.ebay.com/itm/Car-Rear-Reverse-Radar-System-Kit-Sound-Alert-LED-Display-4-Parking-Sensor-Black-/381068609815?pt=LH_DefaultDomain_71&hash=item58b9758917
http://www.ebay.com/itm/Car-4-Reverse-Parking-Sensor-System-Backup-Radar-LED-/150597476900?pt=AU_Car_Parts_Accessories&hash=item23104f2224&vxp=mtr
4ре поплавка самодельных поставить лучше, на 4 уровнях. И считывать с них состояния как с кнопок, HIGH и LOW.
4ре поплавка самодельных поставить лучше, на 4 уровнях. И считывать с них состояния как с кнопок, HIGH и LOW.
Поставьте два обычных поплавка от дренажных насосов (они рублей 200-250) и получите те же четыре точки с гистерезисом. Если нет переливной трубы, то еще аварийный выключатель, типа микрика и груши от унитаза. Итого 4 тонких проводка или одна витая пара.
P/S пять проводов, тогда сможем аварийным снять питание с насоса минуя ардуину.
Соврал, три состояния + авария.
поставьте на стороне бочки DS2408 и получите восемь I/O каналов всего по трем (!) проводам (включая питание), расстояние до 150 метров.
Со стороны контроллера - только резистор подтяжки.
P.S. в качестве бонуса получаем показания t воды в баке и t на улице.
Рекомендую классную и простую схему измерителя уровня воды в баке отсюда http://radiokot.ru/forum/viewtopic.php?f=3&t=108460
123ksn, эта ссылка - четвёртая попавшаяся мне, за 15 минут, причём 10 из них были уделены крайне важному процессу чесания волос. У окна (надеюсь, меня не сожгут, как в средние века).
Чё собсно хотелось сказать: дружище, тебя услышали. Не бесись.
Kollega, есть у меня похожая железка - контроллер насоса, одна из функций в ней - отслеживание и показывание уровня воды в резервной бочке. Собственно, сам показометр-то пишется в несколько строк...
Железо как у Вас, плюс RF24L01+ прикручен для передачи уровня на расстояние и удалённого управления. Скетч могу заслать, но вырезать оттуда ненужные функции Вам придётся самому. Надо?-)
Для интересующихся - ультрасоник врезан в крышку бочки с водой, всё это безобразие стоИт в неотапливаемом подполе. Плату датчика покрыл лаком, излучатель/приёмник смотрят на зеркало воды. Работает ~год, глюков нет.
PS: да - датчик к ардуине подключен через витую пару, длина порядка 5 метров.
Kollega, есть у меня похожая железка - контроллер насоса, одна из функций в ней - отслеживание и показывание уровня воды в резервной бочке. Собственно, сам показометр-то пишется в несколько строк...
Железо как у Вас, плюс RF24L01+ прикручен для передачи уровня на расстояние и удалённого управления. Скетч могу заслать, но вырезать оттуда ненужные функции Вам придётся самому. Надо?-)
Для интересующихся - ультрасоник врезан в крышку бочки с водой, всё это безобразие стоИт в неотапливаемом подполе. Плату датчика покрыл лаком, излучатель/приёмник смотрят на зеркало воды. Работает ~год, глюков нет.
PS: да - датчик к ардуине подключен через витую пару, длина порядка 5 метров.
Скинули бы фоточки и полное описание в проектах. Эта тема здесь весьма актуальна и до сих пор идет спор, будет УЗ работать или нет.
Про датчик уровня воды - я несколько лет назад задавал вопрос в AVR-овском форуме, мнения разошлись. Я попробовал - у меня заработало, что тут спорить-то...
"Проект" - громко сказано. Так, этюд. :-) Извольте.
Железка контролирует уровень воды, ток потребления насосной станции, температуру в подполе. При снижении температуры, слишком низком или слишком высоком уровне воды в бочке, снижении тока потребления насоса относительно номинального (что косвенно свидетельствует о сухом ходе или затыке во входной магистрали) - отключает насос на несколько десятков секунд.
Мозг - Arduino Pro Mini 328. Обвес - датчики DS18B20, HCSR04, ACS712-20, поплавковый датчик переполнения (с герконом). Ещё - I2C-LCD 16x2, плата с силовым реле и радиомодуль nRF24L01+.
Дистанционно можно запросить уровень воды, температуру и текущий режим работы. Также дистанционно можно принудительно включить или выключить насос.
Линейный показометр на 48 градаций на символьном дисплее - моя особенная гордость. :-)
/* * Use HCSR04 Ultrasonic module with 16x2 LCD * for display current water volume in barrel * Use at your own risk */ #include <Wire.h> #include <LiquidCrystal_I2Cv1.h> #include <OneWire.h> #include <DallasTemperature.h> #include <SPI.h> #include "nRF24L01.h" #include "RF24.h" #include "printf.h" // для печати отчёта RF24 //#define serialenabled // раскомментировать для выдачи в порт отладочной инфы // конфигурация железа #define hcsr04_trigger A0 // "Trigger" pin of HCSR04 #define hcsr04_echo A1 // "Echo" pin of HCSR04 #define relay_pump 4 // реле отключения насоса (в нормальном состоянии (выключено) = 1) #define float_switch 7 // датчик полной бочки об землю (полная = 0) (в железе - подтяжка 4,7к к Vcc) #define led_green 5 // зелёный светодиод через 680ом об землю #define led_red 3 // красный светодиод через 680 ом об землю #define acs712_input A2 // датчик тока насоса ACS712-20 #define beeper 6 // пьезопищалка #define button_red 2 // кнопка #define ONE_WIRE_BUS 8 // датчик температуры DS18B20 (в железе - подтяжка 4,7к к Vcc) #define TEMPERATURE_PRECISION 12 // разрешение DS18B20 - 12 бит LiquidCrystal_I2Cv1 lcd(0x20,16,2); // i2cLCD 16*2, адрес 0x20 // Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs) OneWire oneWire(ONE_WIRE_BUS); // Pass our oneWire reference to Dallas Temperature. DallasTemperature DSsensors(&oneWire); RF24 radio(9,10); byte addresses[][6] = { "42no1","42srv" }; // адреса каналов приёма и передачи #define ModuleID 101 // ID этого модуля #define range_max 92 // maximum range, CM (equal to 0%, empty barrel) #define range_min 9 // minimum range, CM (equal to 100%, full barrel) #define barrel_capacity 200 // barrel volume, litres // make some custom characters: byte block0[8] = { // empty brick 0b10101, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b10101 }; byte block1[8] = { // 1/3 loaded brick 0b10101, 0b10000, 0b10000, 0b10000, 0b10000, 0b10000, 0b10000, 0b10101 }; byte block2[8] = { // 2/3 loaded brick 0b10101, 0b10100, 0b10100, 0b10100, 0b10100, 0b10100, 0b10100, 0b10101 }; byte block3[8] = { // full loaded brick 0b10101, 0b10101, 0b10101, 0b10101, 0b10101, 0b10101, 0b10101, 0b10101 }; byte block4[8] = { // degrease sign 0x06,0x09,0x09,0x06,0x00,0x00,0x00,0x00 }; char errorcode = ' '; long duration; int range_cm; int range_percents; int range_litres; boolean beeper_enabled = true; unsigned int timeout_timer = 0; unsigned int ds18b20_bypass = 10; float current_temperature; float pump_current_instant = 0; float pump_current_instant_raw; float pump_current_squared = 0; float pump_current_squared_sum = 0; float pump_current_mean_square = 0; float pump_current_rms = 0; unsigned long begin_millis; byte rmscur_error_counter = 0; boolean ButtonRedPressed = 0; // буфер для приёма/передачи RF24 struct buffer_template { int Security; // на будущее byte CommandFrom; // от кого команда byte CommandTo; // кому команда byte Command; // 0=Nop, 1=Get, 2=Set byte ParamID; // номер параметра, если Set float ParamFloat0; // значение параметра float ParamFloat1; // значение параметра float ParamFloat2; // значение параметра float ParamFloat3; // значение параметра byte ParamByte0; // значение параметра byte ParamByte1; // значение параметра byte ParamByte2; // значение параметра byte ParamByte3; // значение параметра boolean Status; // 1 = OK } BufferTX, BufferRX; void setup() { lcd.init(); // initialize lcd lcd.backlight(); #ifdef serialenabled Serial.begin(9600); printf_begin(); #endif // create a new character lcd.createChar(1, block0); lcd.createChar(2, block1); lcd.createChar(3, block2); lcd.createChar(4, block3); lcd.createChar(5, block4); pinMode(float_switch, INPUT); pinMode(button_red, INPUT); digitalWrite(button_red, HIGH); // подтяжка pinMode(hcsr04_trigger, OUTPUT); pinMode(led_red, OUTPUT); pinMode(led_green, OUTPUT); pinMode(relay_pump, OUTPUT); digitalWrite(relay_pump, HIGH); tone(beeper, 2000, 50); attachInterrupt(0, doButtonRed, LOW); // encoder pin on interrupt 0 (pin 2) // Start up the 1wire library DSsensors.begin(); DSsensors.setWaitForConversion(false); // не ждать измерения температуры - делаем его на лету DSsensors.requestTemperatures(); delay(1000); current_temperature=(DSsensors.getTempCByIndex(0)); // получаем температуру от далласа DSsensors.requestTemperatures(); // запуск нового преобразования // Setup and configure rf radio radio.begin(); // Start up the radio radio.setDataRate(RF24_250KBPS); radio.setAutoAck(1); // Ensure autoACK is enabled radio.setRetries(15,15); // Max delay between retries & number of retries radio.openWritingPipe(addresses[1]); radio.openReadingPipe(1,addresses[0]); radio.startListening(); // Start listening radio.printDetails(); // Dump the configuration of the rf unit for debugging } void loop() { begin_millis = millis(); // температуру измеряем раз в 10 циклов (для уменьшения самоподогрева датчика) ds18b20_bypass ++; if (ds18b20_bypass > 9) { ds18b20_bypass = 0; current_temperature=(DSsensors.getTempCByIndex(0)); // получаем температуру от далласа DSsensors.requestTemperatures(); // запуск нового преобразования if (current_temperature < -99.0) { current_temperature=99.0; } } //измеряем уровень воды в бочке digitalWrite(hcsr04_trigger, HIGH); // даём импульс в сонар delayMicroseconds(10); digitalWrite(hcsr04_trigger, LOW); duration = pulseIn(hcsr04_echo, HIGH); // получаем ответ от сонара range_cm = duration/58; range_percents = constrain((100 - map(range_cm, range_min, range_max, 0, 100)), 0, 100); // вычисляем наполненность бочки в процентах range_litres = int((barrel_capacity/100)*range_percents); //ACS712A-20 - измеряем ток потребления насоса (RMS) pump_current_squared_sum = 0; for (int n=0; n<500; n++) // 500 последовательных измерений - ~90мС, 4-5 периодов @50Hz { pump_current_instant_raw = analogRead(acs712_input)-512; //при отсутствии тока - на выходе ACS712 (и входе ADC) половина Vcc, вычитаем её pump_current_instant = (4.88*(abs(pump_current_instant_raw)))/100; // рассчитанный мгновенный ток // здесь 4.88 = 5000mV/1024 (Vcc/ADCmax) ; 100 - хар-ка датчика, mV/A pump_current_squared = pump_current_instant * pump_current_instant; pump_current_squared_sum += pump_current_squared; } pump_current_mean_square = pump_current_squared_sum / 500; pump_current_rms = sqrt(pump_current_mean_square)*1.41; // получаем действующее значение if((pump_current_rms > 2)&&(pump_current_rms < 4)) // если ток насоса от 2 до 4 ампер - это сухой ход, увеличиваем счётчик ошибок { rmscur_error_counter++; } if (pump_current_rms >= 4) { rmscur_error_counter = 0; } // если ток больше 2А (насос включен) - зажигаем зелёный светодиод if (pump_current_rms > 2) { digitalWrite(led_green, HIGH); } else { digitalWrite(led_green, LOW); } lcd.setCursor(0, 0); lcd.print(range_litres); // уровень воды в литрах lcd.print(F("L ")); lcd.setCursor(5, 0); lcd.print(current_temperature, 1); // температура lcd.write(0x05); // "o" sign lcd.print(F(" ")); int rate = range_litres; lcd.setCursor(12, 0); if (timeout_timer > 0) // если таймер таймаута считает - выводим код ошибки и таймер на экран { lcd.print(errorcode); if (timeout_timer < 100) { lcd.print(" "); } if (timeout_timer < 10) { lcd.print(" "); } lcd.print(timeout_timer); } else { lcd.print(F("Auto")); // насос разрешён errorcode = ' '; } // выводим псевдографический показометр уровня воды lcd.setCursor(0, 1); int range_percentst = range_percents; for (int i=0; i<16; i++) // выводим линейку { if (range_percentst >= 100/16) // 16 знаков в строке { lcd.write(0x04); // полный кубик range_percentst -= 100/16; } else if (range_percentst >= 100/24) { lcd.write(0x03); // кубик, заполненный на 2/3 range_percentst -= 100/24; } else if (range_percentst >= 100/48) { lcd.write(0x02); // кубик, заполненный на 1/3 range_percentst -= 100/48; } else { lcd.write(0x01); // пустой кубик } } if (timeout_timer > 0) { timeout_timer--; } // если бочка пуста или наполнилась или накопилось 10 ошибок тока или температура меньше +2C - выключаем насос на некоторое время if (((range_percents < 2)||(digitalRead(float_switch) == 0)||(rmscur_error_counter > 9)||(current_temperature < 0.5))&&(timeout_timer == 0)) { digitalWrite(relay_pump, LOW); // выключить насос digitalWrite(led_red, HIGH); if (beeper_enabled == true) { for (int i = 0; i<5; i++) { tone(beeper, 4000, 100); lcd.noBacklight(); delay(100); lcd.backlight(); delay(100); } beeper_enabled = false; // это чтобы свистопляска случилась 1 раз до сброса ошибки } if (range_percents < 2) { timeout_timer = 999; // если бочка пуста - запрет насоса на 999 секунд errorcode = 'E'; // код ошибки - пустая бочка } if (digitalRead(float_switch) == 0) { errorcode = 'F'; // код ошибки - полная бочка timeout_timer = 60; // запрет насоса на 60 секунд } if (rmscur_error_counter > 9) { errorcode = 'i'; // код ошибки - сухой ход в течение 10 секунд timeout_timer = 20; // запрет насоса на 20 секунд rmscur_error_counter = 0; } if (current_temperature < 0.5) { errorcode = 't'; // код ошибки - низкая температура timeout_timer = 60; // запрет насоса на 60 секунд } } // после обнуления таймера ошибки при запрещённом насосе или сброса ошибки кнопкой - включаем насос не менее чем на 10 секунд if (((timeout_timer == 0)&&(digitalRead(relay_pump) == LOW))||(ButtonRedPressed)) { rmscur_error_counter = 0; digitalWrite(relay_pump, HIGH); digitalWrite(led_red, LOW); beeper_enabled = true; tone(beeper, 2000, 250); errorcode = ' '; timeout_timer = 10; // принудительный сброс ошибки кнопкой = не следим за ошибками в течение 300 секунд if (ButtonRedPressed) { timeout_timer = 300; errorcode = 'M'; // код ошибки - нажатие кнопки ButtonRedPressed = false; delay(250); } } // вывод отладочной инфы в консоль #ifdef serialenabled Serial.print(F("Duration(uS)=")); Serial.print(duration); Serial.print(F(";Range(CM)=")); Serial.print(range_cm); Serial.print(F(";FloatSW=")); Serial.print(digitalRead(float_switch)); Serial.print(F(";TOtimer=")); Serial.print(timeout_timer); Serial.print(F(";Irms(A)=")); Serial.print(pump_current_rms); Serial.print(F(";T(C)=")); Serial.print(current_temperature); Serial.print(F("\n\r")); #endif // + крутим пустые циклы, чтобы основной выполнялся раз в секунду while ((millis() - begin_millis) < 1000) { // + обработка радиомодуля if( radio.available()){ while (radio.available()) { // While there is data ready radio.read( &BufferRX, sizeof(BufferRX) ); // Get the payload } if (BufferRX.CommandTo == ModuleID) { if (BufferRX.Command == 1) // если это запрос инфы из эфира { BufferTX.CommandTo = BufferRX.CommandFrom; BufferTX.CommandFrom = ModuleID; BufferTX.ParamFloat0 = float(range_litres); BufferTX.ParamFloat1 = current_temperature; BufferTX.ParamFloat2 = float(timeout_timer); BufferTX.ParamByte0 = digitalRead(led_green); BufferTX.ParamByte1 = errorcode; radio.stopListening(); // First, stop listening so we can talk radio.write( &BufferTX, sizeof(BufferTX)); // Send the final one back. radio.startListening(); // Now, resume listening so we catch the next packets. } if (BufferRX.Command == 2) // если это установка параметра из эфира { if (BufferRX.ParamByte0 == 1) // если команда сброса ошибки (большая красная кнопка) { tone(beeper, 2000, 100); tone(beeper, 3000, 100); ButtonRedPressed = true; } if (BufferRX.ParamByte0 == 2) // если команда выключения насоса { tone(beeper, 3000, 100); tone(beeper, 2000, 100); digitalWrite(relay_pump, LOW); // выключить насос digitalWrite(led_red, HIGH); timeout_timer = 300; // запрет насоса на 300 секунд errorcode = 'R'; // код ошибки - удалённое отключение } if (BufferRX.ParamByte0 == 3) // если команда #3 - звук для привлечения внимания { for (int x = 0; x < 10; x++) { tone(beeper, 2800, 50); delay(100); } } } } } // - обработка радиомодуля // если бочка полна - моргаем красным светодиодом if (digitalRead(float_switch) == 0) { digitalWrite(led_red, HIGH); delay(200); digitalWrite(led_red, LOW); delay(200); } if (ButtonRedPressed) // если нажали кнопку { begin_millis -= 1000; // для преждевременного выхода из цикла ожидания } } // - крутим пустые циклы, чтобы основной выполнялся раз в секунду } // - main loop end // Interrupt on A changing state void doButtonRed() { delay(10); if(digitalRead(button_red) == 0) // debouncing { ButtonRedPressed = true; } }На вопросы - отвечу.
интересно данный девайс еще рабочий - интересует Ульра звуковой датчик- потому что я уже пару тройку уже поменял - и перешел на старую провереную систему )) С релхками и герконами - к стати сухой ход можно герконовым датчиком отслеживатьь или по ультразвуку если таковая еще работает
Идея использовать ультразвук ( как вариант HC-SR04 ) - не плохая. Похожий девайс испытываю сейчас. Датчик HC-SR04 был покрыт в несколько слоев лаком (только сама плата, излучатель и приемник не заливал) и помещен под крышку в аквариуме. Расстояние до поверхности воды около 4-5 см. К датчику ничего не подключал. Через неделю снял, и сразу, не суша и не стряхивая подключил к ARDUINO - расстояние до поверхности либо неверные либо вообще нет. Виной тому конденсат на защитной сетке на датчике. Достаточно было продуть и датчик показал верное значение. Далее - срезал защитную сетку и оставил еще на неделю. Влага оказалась внутри. Датчик не работал.
vlad219i использует "Железка контролирует уровень воды, ток потребления насосной станции, температуру в подполе." Разница температур видимо не существенна и поэтому нет сильного испарения. Если бак окажется на улице или под крышей - конденсат на датчике неизбежен.
Будем пробовать прикрутить датчик от парктроника.
А вот Progress Bar через строчку смотрится красиво. За скетч -спасибо!
Существуют другие способы узнать уровень. В промышленности использую вот такие:
http://www.owen.ru/catalog/preobrazovatel_gidrostaticheskogo_davleniya_o...
Бывают и дешевле из Китая.
У меня тоже самое HC-SR04 - проработал 3 месяца и финиш - от партроника тоже пробова-но воду он почему о плохо видел - ставил HC-SR05 - тоже самое сдох - Мне кажется что данные дадчик не годятся для долговременого измерения уровя воды - надежность стремится к нулю - Конечно много есть способов измерения уровня - но мне почему то импонирует даный метод с ультрозвуком - к сожолению - пока ждем датчиков по надежнее,Конечно самый надежный пока это герконами
А почему никто не вспоминает прессостат от стиралки ;) Надежно и дешево :)
прессостат датчик позиционый как и геркон Да или Нет ( к тому же от стиралки расчитаны на маленкий столб воды ) - не решает проблем отслеживания уровня
Девайс работает второй год непрерывно, плата сонара покрыта лаком (кроме излучателя и приёмника). Конденсат на крышке бочки присутствует, но его немного. Температура в подполе зимой +2...+5 градусов, T воды при наполнении - градусов 15-20.
Это просто моя статистика и подробности для тех, кому это может быть интересно. :-)
прессостат датчик позиционый как и геркон Да или Нет ( к тому же от стиралки расчитаны на маленкий столб воды ) - не решает проблем отслеживания уровня
Таких действительно большинство. Но в современных моделях ставят "цифровые". Мембрана прогибается под давлением и перемещает сердечник в катушке, индуктивность изменяется и это вызывает изменение частоты на выходе.
ИМХО потому и работает, что вода охлаждается. Конденсат из окружающего воздуха на бочке должен быть снаружи. Если воду закачивать из скважины или из колодца глубиной метров 10-20, то температура воды будет +4 - +6 С. Если накопительный бак на чердаке или в доме ситуация станет противоположной - испарение и конденсат будут внутри бочки.
Есть идея оснастить Ардуинкой аквариум: автокормушка + фильтрация воды + ещё всякой всячины с расчетом оставить на месяц-два. Поплавковые - герконовые датчики - не хотелось бы в аквариум засовывать. Ультразвуковой датчик в крышке - заманчиво. В ТО на датчики парктроников (для Ардуино) минимальная дистанция указана 25-30 см. Мне нужно 2-3-4 см. Кто пробовал эти влагозащищенные датчики, - какая реально минимальная дистанция?
Ещё вопросик. А никто случаем датчик PH не юзал? Какой срок службы реально?
Нафига в аквариум датчики засовывать? Геркон в куске пенопласта засуньте, пущай плавает внутри колонны, вставленной в аквариум не до дна, прямо возле стенки. А ответка - снаружи, в сухости.
Мысли вслух, в общем.
не, не так. На пенопласт наклеить неодимовый магнит, все это в трубку и в аквариум.
А 3-5 герконов снаружи трубки.
не, не так. На пенопласт наклеить неодимовый магнит, все это в трубку и в аквариум.
А 3-5 герконов снаружи трубки.
Ага, так лучше. И проблемы с влажностью нет, и всё работать будет. Только магнит подобрать по вкусу.
Пенопласт - не самый лучший вариант. Рано или поздно он залипнет. Проверено. Аппарат "Струна" тот что измеряет объём топлива на АЗС - кто сталкивался с ним, - знает. Подобные штучки (геркон+магнит на поплавке) есть готовые на Ebay http://www.ebay.com/itm/Double-Ball-Water-Level-Sensor-Liquid-Float-Switch-Tank-Pool-Steel-/262173563574?hash=item3d0ac31ab6:g:MRUAAOSw7FRWYFmu . Кстати, исполнение в металле может быть и понадёжнее чем пластик или пенопласт. Дело не в этом. Ветка форума про ультразвук на Ардуино. Бочка в подвале или аквариум в комнате - лишь варианты применения. Хочется как-то по эстетичнее сделать. Чтоб всякие "приблуды" и "прибамбасы" в глаза не бросались. Есть аквариум, есть вода, есть рыбка! - Красота! ... А вот фикальный насос и жопоподтирочный автомат можно и спрятать.
эти сенсоры максимум 300 мм длиной, а вот мне надо на 200-литровую бочку, это примерно 800 мм. Так что только колхоз, тем более за эти 799 р. я таких сенсоров ух как много могу сделать. :)
Пенопласт - не самый лучший вариант. Рано или поздно он залипнет. Проверено.
И шо? Теперь всё додумывать за вас? Ну не юзайте пенопласт, раз не можете сообразить, как и из какого материала сделать так, чтобы не залипало, вот и решение проблемы.
И жопоподтирочного автомата не надо - он думать не научит, даже не надейтесь.
кто пробовал парк троник как измерител уровня ?
Привет всем!
А кто глядел в ИК оптические датчики?
Модель
GP2Y0A21YK0F
Бренд
Sharp
Стандартный пакет
500
Категория
Оптические датчики-расстояние измерения
Зондирования расстояние
10 ~ 80 см
Тип выхода
Аналоговый
Напряжение питания
4.5 В ~ 5.5 В
Ток питания
40mA
Напряжение,-выход (typ) @ Расстояние
1.9 В @ 10 ~ 80 см
Напряжение,-выход (typ) @ Расстояние
400мв @ 80 см
Расстояние 10-80 см как бы подходит.
Не знаю, правда, как инфракрасный свет отражается от воды :(
Впрочем, можно попробовать и наклонное зондирование.
Удачи всем!
привет, заинтересовал проект и есть вопросы )
Не понятно что подключается к А2
Какое нужно реле(ссылку или картинку)
Какие резисторы на пинах 3,5(плохо видно)
Что за пьезо на 6 пине
через что (программа) подключаться к НРФке?
Для чего функция ресет?
спасибо
привет, заинтересовал проект и есть вопросы )
Не понятно что подключается к А2
Какое нужно реле(ссылку или картинку)
Какие резисторы на пинах 3,5(плохо видно)
Что за пьезо на 6 пине
через что (программа) подключаться к НРФке?
Для чего функция ресет?
спасибо
К A2 - ACS712-20, датчик протекающего тока.
Реле - http://arduino.ru/sites/default/files/u7746/relay1.jpg .
Резисторы на 3 и 5 пинах - 680 ом, ограничивают ток через светодиоды.
Пьезоизлучатель - обычный, без встроенного генератора. Пьезодинамик.
К НРФ у меня обращается базовый модуль умного дома, потом выкладывает всю собранную инфу на страничку в инете, там же и SQL-база заполняется. Кроме того, есть беспроводной пульт управления/контроля, тоже с НРФ работает.
Ресет - для сброса текущей ошибки.
спасибо большое
подскажите, подойдёт ли датчик ACS712-30а? У меня гидрофор с насосом 950Ватт, но там сильный пусковой ток.
И интересный у вас проект дома, умный дом и кучу датчиков)) Может есть у вас это в свободном доступе или канал на Ютубе? )
постоянно ошибка "F" якобы полная бочка, хоть шкала в разных вариантах. Даже на нуле...пытался вырезать из скетча эту функцию - устройство начинает перегружаться каждые 10 сек. Можно конечно увеличить время, но так не правильно...
постоянно ошибка "F" якобы полная бочка, хоть шкала в разных вариантах. Даже на нуле...пытался вырезать из скетча эту функцию - устройство начинает перегружаться каждые 10 сек. Можно конечно увеличить время, но так не правильно...
Ошибка "F" бывает только тогда, когда замкнут поплавковый датчик (т.е. когда pin7 замккнут на общий провод). Может быть, подтяжки нет на 7 пине?
подскажите, подойдёт ли датчик ACS712-30а? У меня гидрофор с насосом 950Ватт, но там сильный пусковой ток.
И интересный у вас проект дома, умный дом и кучу датчиков)) Может есть у вас это в свободном доступе или канал на Ютубе? )
Подойдёт, конечно. Только в расчётах кое-что подправить придётся, у него ВАХ другая (66мВ/A против 100мВ/A у 20-го). Вообще - проводник в датчике рассчитан на 5-кратное превышение максимального тока, так что и 20-го будет хватать.
ps: сорри, наврал. троекратное превышение. 60 ампер пускового тока он переварит, но измерить адекватно не сможет.
У меня насосная станция с мотором 800Вт, кстати.
Нет, в свободном доступе проекта нет и не предвидится. Там в каждом модуле довольно много костылей и открытых паролей/адресов/etc, причёсывать всё у меня времени нет.
понял, спасибо.
Ошибка F пропала :)
поставил вентилятор 70мм, так, что бы обдувал ультразвуковой датчик, конденсат не появляется на датчике, но переодически умирает вентилятор...
Бак 100 литров, дисплей и плата - табло от кассового аппарта, мега8515