Исходный код программы (скетча)
Arduino
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 16);
int sensorPin = A0;
void setup()
{
Serial.begin(9600);
lcd.begin();
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
}
void loop() {
int sensorValue = analogRead(sensorPin);
Serial.println(sensorValue);
int turbidity = map(sensorValue, 0, 750, 100, 0);
delay(100);
lcd.setCursor(0, 0);
lcd.print(«turbidity:»);
lcd.print(» «);
lcd.setCursor(10, 0);
lcd.print(turbidity);
delay(100);
if (turbidity < 20) {
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
lcd.setCursor(0, 1);
lcd.print(» its CLEAR «);
}
if ((turbidity > 20) && (turbidity < 50)) {
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
lcd.setCursor(0, 1);
lcd.print(» its CLOUDY «);
}
if (turbidity > 50) {
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
lcd.setCursor(0, 1);
lcd.print(» its DIRTY «);
}
}
1 |
#include <LiquidCrystal_I2C.h> LiquidCrystal_I2Clcd(0x27,2,16); intsensorPin=A0; voidsetup() { Serial.begin(9600); lcd.begin(); pinMode(2,OUTPUT); pinMode(3,OUTPUT); pinMode(4,OUTPUT); } voidloop(){ intsensorValue=analogRead(sensorPin); Serial.println(sensorValue); intturbidity=map(sensorValue,,750,100,); delay(100); lcd.setCursor(,); lcd.print(«turbidity:»); lcd.print(» «); lcd.setCursor(10,); lcd.print(turbidity); delay(100); if(turbidity<20){ digitalWrite(2,HIGH); digitalWrite(3,LOW); digitalWrite(4,LOW); lcd.setCursor(,1); lcd.print(» its CLEAR «); } if((turbidity>20)&&(turbidity<50)){ digitalWrite(2,LOW); digitalWrite(3,HIGH); digitalWrite(4,LOW); lcd.setCursor(,1); lcd.print(» its CLOUDY «); } if(turbidity>50){ digitalWrite(2,LOW); digitalWrite(3,LOW); digitalWrite(4,HIGH); lcd.setCursor(,1); lcd.print(» its DIRTY «); } } |
Области применения
Существует большое количество различных применений, использующих специальные типы мембран. Например, мембрана общепромышленного сенсора может быть утоплена в корпус, внешне такой сенсор может иметь резьбу и канал, ведущий к ней. Иногда в него могут устанавливать демпфер для дополнительной амортизации (характерно для измерения давления сжатого воздуха).
Датчик давления общепромышленный ТД-10.107b
Для пищевой и фармацевтической промышленности не годятся такие конструкции, т.к. они легко и быстро забиваются, нарушая работу прибора. В таких случаях используют промышленные датчики давления с плоской мембраной, как правило из более плотного материала, чем обычно (хотя конструкция остаётся крайне чувствительной, так что не стоит трогать мембрану руками).
В качестве материала для мембран, как и для корпуса, обычно используется нержавеющая сталь. Могут быть использованы и другие материалы, например, керамика – более дешёвый материал, но не обеспечивающий исключительной точности.
Датчик давления с плоской мембраной ТД-13.102b
Наиболее распространённая точность датчиков давления – 0.5% и 0.25%. К высокоточным изделиям можно относить приборы с точностью 0.1% и 0.05%, иногда могут встретиться 0.03%. Как правило, любая точность в технических характеристиках прибора даётся при температуре + 25 C. То есть любой преобразователь имеет определённую температурную зависимость.
Для изделий проводится температурная компенсация, проходящая в диапазоне температур от +5 до +80 C. Благодаря такой настройке температурный сдвиг измерений будет не так сильно сказываться. Для некоторых применений характерна компенсация вплоть до 125 C, чтобы повысить эффективность измерений при высоких температурах.
Высокотемпературный датчик давления ТД-10.130b
Промышленные датчики давления имеют ещё один очень важный показатель – долговременная стабильность датчика. Данный показатель измеряется в % от ВПИ (верхнего предела измерений) и характеризует отклонение точности измерений от нулевой точки в процессе эксплуатации изделия. Это естественный процесс, избежать его невозможно, а порождаемые им проблемы решаются посредством периодической калибровки изделия.
Промышленные датчики давления также можно разделить по диапазону измерений, то есть ВПИ.
Верхний предел измерений – предельное давление для мембраны преобразователя, исчисляемое в барах.
Конечно, есть и нижний предел измерений, характеризующий минимальное давление для отклика. Как правило он находится в пределах от -1 (вакуум) до 1 бара, но для некоторых редких применений могут производиться изделия с иным НПИ, например, в 10 бар. Такое может понадобится, если на предприятии необходимо измерять очень узкий диапазон давлений.
НПИ -1 бар характерен для вакууметрических сенсоров, служащих для измерения разрежения.
Датчик высокого давления ТД-10133
Диапазоны делятся по типовым решениям и представляют собой заранее устоявшиеся шаблоны. Например, после 10 кПа может идти 30 кПа, и найти 20, даже если они необходимы, будет непростой задачей.
Стандартной линейкой ВПИ у большинства производителей являются 6, 10, 16, 25 и 100 бар.
Справка. Не все предприятия используют именно бары или атмосферы. На некоторых производствах используют кПа (килопаскали)
Это может быть важной деталью, так как конкретный ПЛК может использовать определённые единицы измерений и при их несоответствии может понадобится корректировка
Точность измерений (погрешность)
Для ряда технологических процессов наиболее важным показателем является точность измерений. Поэтому точность — это основная характеристика любого датчика, определяющая погрешность его измерений. Погрешность измерений представляет собой величину максимального расхождения между показаниями реального и эталонного измерения, определяется как максимальное отклонение измеренной характеристики от действительной.
В основном точность датчиков давления составляет 0,5% от диапазона измеряемого давления. Для менее требовательных к точности процессов погрешность может составлять 1,25% диапазона. Также существуют высокоточные датчики давления, погрешность измерений которых не превышает 0,25% и 0,1%.
Работа схемы
Схема автоматического дозатора воды на основе платы Arduino Uno представлена на следующем рисунке.
Соленоидный клапан, используемый в нашем проекте, питается от 12V и имеет максимальный потребляемый ток 1.2A, а в обычном режиме он потребляет ток примерно 700mA. То есть чтобы держать клапан в открытом состоянии необходима сила тока примерно 700mA. Как мы знаем, плата Arduino не может на своих выходах обеспечить такой ток, поэтому нам необходима отдельная цепь для включения и выключения соленоидного клапана.
Для этой цели мы использовали в нашем проекте MOSFET транзистор IRF540N с N-каналом. Он имеет три вывода: затвор, исток и сток. Как видно из представленной схемы, положительный контакт соленоида запитывается от контакта Vin платы Arduino. Поскольку для питания платы Arduino мы используем адаптер на 12V, поэтому на ее контакте 12V мы можем использовать 12V для питания соленоида. Отрицательный контакт соленоида подключен к земле через исток и сток MOSFET транзистора. То есть питание на соленоид будет подаваться только тогда, когда MOSFET транзистор находится в открытом состоянии.
Соответственно, затвор MOSFET транзистора используется для его переключения между открытым и закрытым состоянием. Когда на затвор будет подаваться напряжение высокого уровня (логическая 1) транзистор будет открываться, а когда логический 0 – транзистор будет закрываться. Затвор транзистора подключен к контакту платы 12 Arduino через резистор на 1 кОм, который служит для ограничения протекающего тока, а к земле схемы затвор транзистора подключен через резистор 1 кОм.
Ультразвуковой датчик запитывается от контакта 3,3В платы Arduino. Его контакты Echo и Trigger подключены к контактам 8 и 9 платы Arduino соответственно.
Как видите, схема достаточно проста, поэтому ее легко можно собрать на макетной плате. Конструкция проекта после ее сборки на макетной плате будет иметь примерно следующий вид:
Загрузка и запуск программы на языке Python
Для тех, кто предпочитает Python, рассмотрим, как аналогичный результат можно получить с помощью этого языка программирования.
В первую очередь, убедитесь, что библиотека Python RPi.GPIO, обеспечивающая взаимодействие программ на Python с контактами GPIO Raspberry установлена. Запустите в терминале интерпретатор python и в ответ на приглашение >>> выполните одну за другой следующие команды:
import RPi.GPIO
RPi.GPIO.VERSION
Рис. 6. |
Выход из интерпретатора – Ctrl-D.
Если ошибок не возникло и выведен номер версии библиотеки, то можно продолжать.
Выполните в терминале команду sudo apt-get install python-smbus для установки пакета для связи по шине I2C из программ на Python, если он еще не установлен.
После проверки подключения загрузите и разархивируйте в корневой каталог программу на языке Python:
cd ~
wget https://masterkit.ru/zip/bmp180-python.tar.gz
sudo tar zxvf bmp180-python.tar.gz
В корневом каталоге появится папка bmp180-python с тремя файлами: bmp180.py, bmp180.pyc и bmp180test.py. Файл bmp180.pyc является скомпилированным вариантом исходного файла bmp180.py и будет использован при работе основного файла программы bmp180test.py.
Перейдите в каталог bmp180-python и запустите программу:
cd bmp180-python
sudo python ./BMP180test.py
Рис. 7. |
Рис. 8. Подсоединенный к Raspberry Pi датчик давления. |
Рис .9. Результат работы программы на экране планшета. Raspberry и планшет находятся в локальной сети посредством подключения по WiFi, на Raspberry работает VNC-server, на планшете – VNC-viewer. |
Листинги программ BMP180.py и BMP180test.py можно посмотреть здесь:
Принципиальная схема датчика давления
Документация датчика spd005g и его технические характеристики.
Схема подключения датчика давления к Arduino
Датчик подключается к Arduino через специальный каскад собранным на операционном усилителе LM324. Выходной вывод каскада 12 подключается к выводу A0 arduino. Вывод измеренного значения с датчика давления выводится на символьный LCD дисплей 16×2. Светодиод L2 можно исключить из схемы, он необхоим только лишь для сигнализации наличия напряжения. Переменое сопротивление R4 предназначено для регилировки контрасности дисплея. Передачи данных осуществляется по 4-м проводам подключенным к выводам DB4-DB7.
Питание LCD дисплея 16×2 осуществляется от источника в 5 Вольт.
Датчик уровня жидкости (Water Sensor Arduino)
Рабочее напряжение аналогового сенсора — 5v. Выходное напряжение (показания датчика) зависит от степени погружения датчика в жидкость и от параметров, влияющих на коэффициент передачи напряжения, например, проводимость жидкости. Это простой в использование и недорогой датчик уровня жидкости, который широко применяется в системах автоматизации и при разработке Умного дома.
Как вы уже заметили на фото к этому занятию, датчик уровня жидкости имеет три контакта. Правый контакт (-) подключается к Земле (GND), средний к питанию 5v, а левый к аналоговому входу, например, A0. При полностью сухом датчике выходное напряжение и показания на аналоговом входе будут равны нулю, чем больше датчик будет погружен в воду, тем больше будут его показания (от 0 до 1023).
Ардуино: датчик давления BMP180 (BMP085)
Барометр — это устройство, которое измеряет атмосферное давление. То есть давление воздуха, который давит на нас со всех сторон. Еще со школы мы знаем, что первый барометр представлял собой тарелку с ртутью, и перевернутой пробиркой в ней. Автором этого устройства был Эванджели́ста Торриче́лли — итальянский физик и математик. Снять показания ртутного барометра можно так же просто, как и показания спиртового термометра: чем давление снаружи колбы больше, тем выше столбик ртути внутри неё. Пары ртути, как известно, весьма ядовиты.
Позже, появился более безопасный прибор — барометр-анероид. В этом барометре ртуть была заменена на гофрированную коробку из тонкой жести, в которой создано разрежение. Под воздействием атмосферы, коробочка сжимается и через систему рычагов поворачивает стрелку на циферблате. Вот так выглядят эти два барометра. Слева — анероид, справа — барометр Торричелли.
Зачем нам может понадобиться барометр? Чаще всего, этот прибор используют на летательных аппаратах для определения высоты полета. Чем выше аппарат поднимается над уровнем моря, тем меньшее давление испытывает бортовой барометр. Зная эту зависимость, легко определить высоту.
Другой распространенный вариант использования — самодельная погодная станция. В этом случае мы можем использовать известные зависимости грядущей погоды от атмосферного давления. Помимо барометра, на такие станции ставят датчики влажности и температуры.
Модуль ВМР 280
ВМР 250 – микро-чип, используемый для цифрового высокочастотного измерителя показателей атмосферного давления. Каждый датчик на этапе его создания проходит калибровку. Благодаря минимальным размерам, отличной измерительной способности и незначительному энергопотреблению, они часто используются для датчиков давления Ардуино. ВМР 280 имеет два последовательных интерфейса, используемых для обмена данными и 3 режима работы:
- FORCED. Этот режим дает возможность активировать модуль подачи сигнала извне. После того, как измерения произведены, он переходит в режим автоматического сниженного энергопотребления.
- SLEEP. Находясь в этом режиме потребление электроэнергии прибора минимальное.
- NORMAL. При переходе в этот режим, модуль начинает периодичные измерения. После этого он вновь переходит в спящий режим. Для задачи нужной частоты, с которой должны проводиться измерения, используется специальная программа. Результат может быть считан в любое время.
Кроме измерения показателей атмосферного давления, модуль ВМР 280 способен измерять температуру воздуха. Чтобы отфильтровать вычисления, которые осуществляет модуль, используется программный фильтр с подходящими настройками.
Датчик атмосферного давления и температуры BMP280Источник 3d-diy.ru
Среди основных технических характеристик модуля ВМР 280, выделяют:
- показатели напряжения питания на уровне от 1,71 V до 3,6 V;
- атмосферное давление может измеряться в диапазоне от 300hPa до 1100hPa (такие показатели характерны для высоты от -500 до 9 000 м выше уровня моря);
- интерфейс обмена информацией SPI с максимально возможной частотой работы 10 МГц или I2C с показателем максимально возможной частотой работы 3,4 МГц;
- прибор способен работать при температуре не ниже -40 и не выше +85 градусов;
- размер модуля составляет 21*18 мм;
- в режиме работы величина тока потребления равна 2.7uA.
Описание библиотеки для работы с датчиком. Пример скетча
Для работы с датчиком BMP180 существуют различные библиотеки, упрощающие работу. К ним относятся SFE_BMP180, Adafruit_BMP085. Эти же библиотеки подходят для работы с датчиком BMP080. Для датчика bmp280 используется похожая библиотека Adafruit_BMP280.
Первый пробный скетч будет заставлять датчик считывать показания давления и температуры. Код подойдет как для датчика BMP180 , так и для BMP280, нужно только подключить правильную библиотеку и указать верные контакты, к которым подключен модуль. В первую очередь в коде нужно подключить все библиотеки и инициализировать работу датчика. Для определения давления нужно сначала узнать температуру. Для этого используется следующий элемент кода.
status = pressure.startTemperature();// Считываются данные с датчика о температуре if(status!=0){ delay(status); // Ожидание status = pressure.getTemperature(T); // Сохранение полученных данных о температуре if(status!=0){ Serial.print("Temperature: "); // Выведение на экран слова «Температура» Serial.print(T,2); // Вывод на экран значения температуры. Serial.println("deg C, "); //Печать символа градуса Цельсия.
Затем нужно получить информацию об атмосферном давлении.
status = pressure.startPressure(3); // происходит считывание давления if(status!=0){ delay(status); // Ожидание status = pressure.getPressure(P,T); // получение давления, сохранение if(status!=0){ Serial.print("Absolute pressure: "); // Вывод на экран слов «Атмосферное давление» Serial.print(P,2); // Вывод на экран значения переменной mBar Serial.print(" mbar, "); // Вывод на экран текста "mBar" Serial.print(P*0.7500637554192,2); // вывод на экран значения в mmHg (мм.рт.ст.) Serial.println(" mmHg");} // вывод на экран единицы измерения давления "mmHg" (мм. Рт.ст.).
После загрузки скетча в окне мониторинг порта появятся данные о температуре и атмосферном давлении.
Датчик BME280 также показывает давление и температуру, дополнительно он может считывать показания о влажности, который по умолчанию выключен. При необходимости можно произвести настройки датчика и начать считывать показания о влажности. Диапазон измерения от 0 до 100%. Библиотека, которая нужна для работы с датчиком, называется Adafruit_BME280.
Код похож на тот, что описан выше, только к нему еще добавляются строки для определения влажности.
void printValues() { Serial.print("Temperature = "); Serial.print(bme.readTemperature()); Serial.println(" C"); //определение температуры, вывод ее на экран в градусах Цельсия. Serial.print("Pressure = "); Serial.print(bme.readPressure() / 100.0F); Serial.println(" hPa"); //определение давления, вывод его на экран Serial.print("Humidity = "); Serial.print(bme.readHumidity()); Serial.println(" %"); //определение влажности в процентах, вывод измеренного значения на экран. Serial.println(); }
Исходный код программы
В коде программы автоматического индикатора уровня воды нам первым делом необходимо инициализировать все контакты Arduino, которые мы будем использовать для подключения внешних устройств: реле, ЖК дисплей, буззер (звонок) и т.д.
Затем мы инициализируем все устройства, задействованные в проекте.
После этого инициализируем модуль ультразвукового датчика и считаем время между передачей и приемом ультразвуковой волны с помощью функции pulseIn(pin). Затем произведем вычисления и покажем результат на экране ЖК дисплея.
Потом запишем условия, позволяющие проверить полна или пуста цистерна с водой и в зависимости от результатов проверки этих условий произведем соответствующие действия.
Далее представлен полный текст программы.
Arduino
#include <LiquidCrystal.h>
#define trigger 10
#define echo 11
#define motor 8
#define buzzer 12
LiquidCrystal lcd(7,6,5,4,3,2);
float time=0,distance=0;
int temp=0;
void setup()
{
lcd.begin(16,2);
pinMode(trigger,OUTPUT);
pinMode(echo,INPUT);
pinMode(motor, OUTPUT);
pinMode(buzzer, OUTPUT);
lcd.print(» Water Level «);
lcd.setCursor(0,1);
lcd.print(» Indicator «);
delay(2000);
}
void loop()
{
lcd.clear();
digitalWrite(trigger,LOW);
delayMicroseconds(2);
digitalWrite(trigger,HIGH);
delayMicroseconds(10);
digitalWrite(trigger,LOW);
delayMicroseconds(2);
time=pulseIn(echo,HIGH);
distance=time*340/20000;
lcd.clear();
lcd.print(«Water Space In «);
lcd.setCursor(0,1);
lcd.print(«Tank is: «);
lcd.print(distance);
lcd.print(«Cm»);
delay(2000);
if(distance<12 && temp==0)
{
digitalWrite(motor, LOW);
digitalWrite(buzzer, HIGH);
lcd.clear();
lcd.print(«Water Tank Full «);
lcd.setCursor(0,1);
lcd.print(«Motor Turned OFF»);
delay(2000);
digitalWrite(buzzer, LOW);
delay(3000);
temp=1;
}
else if(distance<12 && temp==1)
{
digitalWrite(motor, LOW);
lcd.clear();
lcd.print(«Water Tank Full «);
lcd.setCursor(0,1);
lcd.print(«Motor Turned OFF»);
delay(5000);
}
else if(distance>30)
{
digitalWrite(motor, HIGH);
lcd.clear();
lcd.print(«LOW Water Level»);
lcd.setCursor(0,1);
lcd.print(«Motor Turned ON»);
delay(5000);
temp=0;
}
}
1 |
#include <LiquidCrystal.h> #define trigger 10 LiquidCrystallcd(7,6,5,4,3,2); floattime=,distance=; inttemp=; voidsetup() { lcd.begin(16,2); pinMode(trigger,OUTPUT); pinMode(echo,INPUT); pinMode(motor,OUTPUT); pinMode(buzzer,OUTPUT); lcd.print(» Water Level «); lcd.setCursor(,1); lcd.print(» Indicator «); delay(2000); } voidloop() { lcd.clear(); digitalWrite(trigger,LOW); delayMicroseconds(2); digitalWrite(trigger,HIGH); delayMicroseconds(10); digitalWrite(trigger,LOW); delayMicroseconds(2); time=pulseIn(echo,HIGH); distance=time*34020000; lcd.clear(); lcd.print(«Water Space In «); lcd.setCursor(,1); lcd.print(«Tank is: «); lcd.print(distance); lcd.print(«Cm»); delay(2000); if(distance<12&&temp==) { digitalWrite(motor,LOW); digitalWrite(buzzer,HIGH); lcd.clear(); lcd.print(«Water Tank Full «); lcd.setCursor(,1); lcd.print(«Motor Turned OFF»); delay(2000); digitalWrite(buzzer,LOW); delay(3000); temp=1; } elseif(distance<12&&temp==1) { digitalWrite(motor,LOW); lcd.clear(); lcd.print(«Water Tank Full «); lcd.setCursor(,1); lcd.print(«Motor Turned OFF»); delay(5000); } elseif(distance>30) { digitalWrite(motor,HIGH); lcd.clear(); lcd.print(«LOW Water Level»); lcd.setCursor(,1); lcd.print(«Motor Turned ON»); delay(5000); temp=; } } |
Рекомендации по установке
При размещении датчика давления в магистрали необходимо соблюдать следующие рекомендации:
- Чтобы прибор работал правильно, диапазон температур, в котором он эксплуатируется, не должен превышать -4 – +40 С.
- Автоматику размещают не только в помещении дома, но и кессоном колодце, после насоса в линию следует установить фильтры тонкой и глубокой очистки воды – это предотвратит забивание грязью штуцера с мембраной, которое может привести к некорректной работе прибора.
- Многие устройства рассчитаны на работу только с холодной водой, при эксплуатации ее температура не должна превышать допустимые пределы, к примеру, не более +55 С. для моделей РД.
- Мощность подключаемого через прибор электронасоса не должна превышать значений, указанных в паспортных данных – нарушение этого правила может привести к залипанию контактов и выходу реле из строя.
Рис. 11 Пример размещения гидрореле с глубинным электронасосом
Датчик или реле давления является основным прибором для обеспечения автоматической работы водозаборного оборудования, он входит в состав любой электронасосной станции или системы водоснабжения с глубинным электронасосом. Его установка и подстройка не представляет особых трудностей даже для неподготовленного домовладельца, а соблюдение основных правил размещения и монтажа обеспечит бесперебойную работу прибора в течение десятка лет.
https://youtube.com/watch?v=Z0nB49FdgB8
Схемы соединения и скетчи
Сами тензодатчики подключаются по схеме в зависимости от их типа — полу-, или мостового, а также общего количества чувствительных элементов. На плате HX711 размещены два аналоговых входа, соответственно к АЦП можно присоединить или четыре половинчатых детектора или два полных.
Соединение с единичным датчиком полумоста
Соответственно скетч его калибрующий и опрашивающий: // Указываем соответствующие контакты, к которым присоединен сенсор #define pSCK 2 #define pDT 3 #include «HX711.h» HX711 HX711ctl; // создаем объект float CF = -0.6; // поправочный коэффициент подобранный к конкретным датчикам float UNC,GR; // Унции и граммы void setup() { Serial.begin(57600); HX711ctl.begin(pDT, pSCK); // инит детектора HX711ctl.set_scale(); // — // HX711ctl.tare(); // Очистка показаний детектора HX711ctl.set_scale(CF); // Настройка поправочного значения } void loop() { UNC = HX711ctl.get_units(10); // Делаем 10 проб и получаем усредненное значение GR = UNC * 0.035274; // Конвертация унция → грамм Serial.print(«Volume: «); Serial.print(GR); Serial.println(» Gr»); }
Соединение с четырьмя полумостовыми тензодатчиками
По причине того, что в цепях с участием HX711 важным фактором служит только физическое соединение чувствительных элементов, никакого отличия от предыдущего скетча по получению показаний — нет.
Соединение с одним мостовым тензодатчиком
Опять же, и для представленной схемы скетч изменений не требует. Есть только у некоторых специалистов замечание, по вычислению и установке CF — переменной поправки: void setCF() { HX711ctl.set_scale(); // — // HX711ctl.tare(); // Очистка показаний датчика const WOS = 200; // вес платформы float CFM,CF=0,CR=0.035274; for (int j=0;j < 10; j++){ CFM = HX711ctl.get_units(1) / (WOS / CR); CF += CFM; } CF=CF/10; HX711ctl.set_scale(CF); }
Соответственно изменится и остальной код: // Указываем соответствующие линии, к которым присоединен детектор #define pSCK 2 #define pDT 3 #include «HX711.h» HX711 HX711ctl; float UNC,GR; // Унции и граммы void setup() { Serial.begin(57600); HX711ctl.begin(pDT, pSCK); // инит детектора HX711ctl.set_scale(); // — // HX711ctl.tare(); // Очистка показаний датчика setCF(); // Настройка поправочного значения ← измененная часть } void loop() { UNC = HX711ctl.get_units(10); // Делаем 10 проб и получаем усредненное значение GR = UNC * 0.035274; // Конвертация унция → грамм Serial.print(«Volume: «); Serial.print(GR); Serial.println(» Gr»); }
Использование стороннего аналогового датчика давления
Редко, но все же случаются ситуации, когда по каким-либо причинам использовать в схеме специализированный сенсор, рассчитанный на работу конкретно с Ардуино, не получается. Скажем, его невозможно найти сразу в близлежащих магазинах электроники, а ждать посылку долго. Выходом могут стать датчики давления, применяемые в автомобильной электронике. Их тоже можно связать непосредственно с микроконтроллером.
Примером послужит WABCO 4410400130 — сенсор указанного плана, используемый на большегрузных фурах. Единственное, требующее внимания в представленной схеме — питание у элемента раздельно с Arduino. В последнем, просто нет требуемых для запуска датчика +24 В. В связи с чем и приходится использовать дополнительный блок энергообеспечения, с правильными и достаточными характеристиками питания — 8–32 V постоянного тока, при минимуме 400 mА мощности.
Что касается соединения сенсора напрямую к плате микроконтроллера — в нем на выходе не более 5 В. И чем больше давление, тем меньший ток будет поступать на аналоговые контакты логического устройства. Вот только, на всякий случай, рекомендуется проверить изначальный выход мультиметром, с целью контроля варианта «пробития» сенсора, с возникновением обстоятельств беспрепятственного связывания OUT с минусом или плюсом питающей детектор линии.
Пример скетча получения информации с аналогового датчика:
#includeLiquidCrystal_I2C DISPLAY (0x27, 16, 2); #define Detector_Pin 0 #include void setup() DISPLAY.init(); DISPLAY.clear; AnalogReference(DEFAULT); DISPLAY.setCursor (0,0); DISPLAY.print(«Data:»); >void loop() static int AVC = 0; AVC = (AVC * 3 + AnalogRead(Detector_Pin))/4; float v = AVC * 5.0 / 1024.0; float ObtainedValue = (v — 0.5) * 10/4; DISPLAY.setCursor(0,1); DISPLAY.print(» «); DISPLAY.setCursor(0,1); DISPLAY.print (ObtainedValue); >
Теперь, что касается данных получаемых на выходе скетча. Нужно провести их градацию с использованием классического манометра, оценив какие цифры идут от сенсора при разном давлении и ввести соответствующую формулу в тело программы.
И в окончании, технические характеристики WABCO 4410400130, для сравнения с похожими датчиками Arduino:
- Тип: пьезоэлемент
- Питание: 8–32 V
- Рабочая температура: −40..+80 °С
- Диапазон измерения: от 0 до 10 bar
- Точность: 0.2–0.3 %
- Предельное давление разрушения: 16 bar
Как измерить мутность с помощью платы Arduino
Как было отмечено ранее, мутность обусловлена рассеянием световых волн. Таким образом, для измерения мутности мы должны измерять рассеяние света. Мутность обычно измеряется нефелометрическими единицами мутности (nephelometric turbidity units, NTU) или единицами мутности по Джексону (Jackson turbidity units, JTLJ) в зависимости от используемого метода измерений. Оба этих значения примерно равны.
Датчик мутности (turbidity sensor) состоит из двух частей – передатчика и приемника. Передатчик состоит из источника света, обычно это светодиод, и схемы управления. В приемнике используется детектор света, обычно это фотодиод или фоторезистор. Измеряемая жидкость (раствор) находится между передатчиком и приемником.
Принцип работы датчика мутности достаточно прост. Передатчик излучает свет, свет проходит через жидкость (раствор) и приемник улавливает свет. Если жидкость прозрачная (нет никаких взвесей), то приемник улавливает практически весь свет, излученный передатчиком. Но если жидкость мутная (взвеси присутствуют), то количество улавливаемого приемником света уменьшается, причем интенсивность принятого света обратно пропорциональна мутности жидкости. Таким образом, мы можем измерять мутность жидкости, измеряя интенсивность принятого света, излученного передатчиком.
Установка
Учитывая то, что большинство датчиков протока воды конструктивно входят в состав приборов, установка их требуется только в случае замены при выходе из строя. Однако, встречаются ситуации, когда датчик протока воды необходимо устанавливать отдельно, например, когда возникает необходимость увеличить напор подачи воды.
Ведь нередко случаются ситуации, когда в системе центрального водопровода недостаточное давление, и для включения газового котла в режим горячего водоснабжения необходимо создать хороший напор. В таком случае устанавливается дополнительный циркуляционный насос, оборудованный датчиком протока воды.
В данном случае датчик устанавливается после насоса, таким образом, при начале движения воды датчик включает насос, и давление воды повышается.
Датчики уровня
Чрезвычайно распространенными являются поплавковые датчики. Поплавковый датчик состоит из поплавка – органа, воспринимающего уровень жидкости; промежуточного органа – механической связи, преобразующей и передающей механическое воздействие выходному органу, представляющему собой датчик перемещения.
Датчики уровня могут быть основаны на измерении веса и гидростатического давления жидкости, на использовании электрических свойств жидкости (изменения сопротивления, емкости, индуктивности).
Отечественная промышленность выпускает датчики уровня различных типов.
На рис. 4 приведена схема поплавкового датчика уровня с реостатным датчиком R на выходе. По показаниям милливольтметраmV судят об уровне жидкости Н в сосуде.
Датчик уровня жидкости (Water Sensor Arduino)
Рабочее напряжение аналогового сенсора — 5v. Выходное напряжение (показания датчика) зависит от степени погружения датчика в жидкость и от параметров, влияющих на коэффициент передачи напряжения, например, проводимость жидкости. Это простой в использование и недорогой датчик уровня жидкости, который широко применяется в системах автоматизации и при разработке Умного дома.
Подключение к Ардуино датчика воды (Water Sensor)
Как вы уже заметили на фото к этому занятию, датчик уровня жидкости имеет три контакта. Правый контакт (-) подключается к Земле (GND), средний к питанию 5v, а левый к аналоговому входу, например, A0. При полностью сухом датчике выходное напряжение и показания на аналоговом входе будут равны нулю, чем больше датчик будет погружен в воду, тем больше будут его показания (от 0 до 1023).
Датчик уровня жидкости (Water Sensor Arduino)
Рабочее напряжение аналогового сенсора — 5v. Выходное напряжение (показания датчика) зависит от степени погружения датчика в жидкость и от параметров, влияющих на коэффициент передачи напряжения, например, проводимость жидкости. Это простой в использование и недорогой датчик уровня жидкости, который широко применяется в системах автоматизации и при разработке Умного дома.
Подключение к Ардуино датчика воды (Water Sensor)
Как вы уже заметили на фото к этому занятию, датчик уровня жидкости имеет три контакта. Правый контакт (-) подключается к Земле (GND), средний к питанию 5v, а левый к аналоговому входу, например, A0. При полностью сухом датчике выходное напряжение и показания на аналоговом входе будут равны нулю, чем больше датчик будет погружен в воду, тем больше будут его показания (от 0 до 1023).