Ручнаяя мастерская

Емкостной датчик уровня жидкости


Подобные датчики существуют столько же, сколько RC-генераторы. Но оказывается, «научить» измерять меняющуюся ёмкость датчика можно и Arduino — программно, внешний генератор для этого не потребуется. А сам датчик вы можете изготовить своими руками — о такой самоделке рассказывает автор Instructables под ником luismorales-navarro.
Мастер разрабатывает четыре детали датчика и выкладывает получившиеся файлы на сайт Tinkercad: внутреннюю трубку, её крышку, внешнюю трубку и её крышку. Печатает эти детали на 3D-принтере.

Емкостной датчик уровня жидкостиЕмкостной датчик уровня жидкостиЕмкостной датчик уровня жидкостиЕмкостной датчик уровня жидкостиЕмкостной датчик уровня жидкостиЕмкостной датчик уровня жидкости
Обматывает трубки алюминиевой фольгой, присоединяет к ним проводники. Здесь медь к алюминию — можно, ну, повлияет на точность, только и всего. В силовых цепях — нельзя, даже если там «всего-то десятки миллиампер».

Емкостной датчик уровня жидкостиЕмкостной датчик уровня жидкости
Мастер собирает датчик, герметизирует его термоклеем, убеждается, что он не протекает, а жидкость нигде не контактирует с фольгой. Ведь требуется, чтобы датчик был емкостным, а не резистивным.

Емкостной датчик уровня жидкостиЕмкостной датчик уровня жидкостиЕмкостной датчик уровня жидкости
Подключает к Arduino как показано далее. Из дополнительных компонентов требуется всего один резистор. Конечно, инструкцию можно было бы озаглавить так: «Сенсация! Уровнемер из одного резистора!», но сразу понятно, что это — «каша из топора».

Емкостной датчик уровня жидкостиЕмкостной датчик уровня жидкостиЕмкостной датчик уровня жидкости
Работоспособность датчика мастер проверяет простейшей программой, требующей библиотеки CapacitiveSensing:

/* * CapitiveSense Library Demo Sketch
* Paul Badger 2008 * Uses a high value resistor e.g. 10M between send pin and receive pin
* Resistor effects sensitivity, experiment with values, 50K — 50M. Larger resistor values yield larger sensor values.
* Receive pin is the sensor pin — try different amounts of foil/metal on this pin
*/
CapacitiveSensor cs_4_2 = CapacitiveSensor(4,2);
// 10M resistor between pins 4 & 2, pin 2 is sensor pin, add a wire and or foil if desired void setup() { cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF);
// turn off autocalibrate on channel 1 — just as an example Serial.begin(9600); } void loop() { long start = millis(); long total1 = cs_4_2.capacitiveSensor(30); Serial.print(millis() — start);
// check on performance in milliseconds Serial.print("t");
// tab character for debug windown spacing Serial.print(total1);
// print sensor output 1 Serial.print("t"); delay(10);
// arbitrary delay to limit data to serial port }

Не удивляйтесь отсутствию переводов строк — так сделано в оригинале. Данные о результатах измерения поступают в монитор последовательного порта. В дальнейшем предлагаемый фрагмент можно интегрировать в более сложные скетчи, в которых реализованы сигнализация о слишком большом или малом уровне жидкости, управление исполнительными механизмами.

Присоединяйтесь!

Не стесняйся, общайся. Мы любим встречать интересных людей и заводить новых друзей.