В этом проекте мы построим машину для розлива воды с использованием датчика расхода воды и платы Arduino. Пользователь вводит общее количество жидкости с помощью клавиатуры 4×4. Насос забирает точное количество воды после получения ввода пользователя. Когда точное количество достигнуто, насос автоматически отключается и прекращает дальнейший забор жидкости. Максимальный объем жидкости составляет всего 1500 мл.
Автоматические машины для розлива в бутылки чаще всего используются в индустрии напитков и безалкогольных напитков. Проект может быть использован для измерения количества воды, бензина, молока, напитков и любой другой жидкости на основе ввода данных пользователем. Лучшим развитием проекта может стать создание предоплаченной машины для розлива жидкостей или конвейерной системы розлива воды.
В этой статье мы будем использовать датчик расхода воды YF-S201, который мы ранее применяли в следующих проектах на нашем сайте:
- измерение скорости и объема потока воды с помощью Arduino;
- IoT измерение объема потока воды с помощью ESP8266 и датчика расхода воды.
Необходимые компоненты
- Плата Arduino Nano (купить на AliExpress).
- Датчик расхода воды (water flow sensor) YF-S201 (купить на AliExpress).
- ЖК дисплей 16х2 (купить на AliExpress).
- Потенциометр 10 кОм (купить на AliExpress).
- Клавиатура (клавишная панель) 4х4.
- Модуль реле 5 В (купить на AliExpress).
- Водяной насос 5 В (купить на AliExpress).
- Адаптер постоянного тока 9 В.
- Регулятор напряжения LM7805 (купить на AliExpress).
- Конденсатор 10мкФ/16В (купить на AliExpress).
- Конденсатор 100мкФ/25В (купить на AliExpress).
- DC Jack.
Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158
Датчик расхода воды на эффекте Холла YF-S201
Это датчик расхода воды на эффекте Холла YF-S201, используемый в этом проекте. Этот датчик можно подключить к водопроводу, поскольку у него есть как вход, так и выход. Внутри датчика находится вертушка, которая измеряет, сколько жидкости прошло через него. Есть встроенный магнитный датчик Холла , который выдает электрический импульс с каждым оборотом.
Датчик поставляется с тремя проводами:
1. Красный (питание 5-24 В постоянного тока).
2. Черный (заземление).
3. Желтый (импульсный выход Холла).
Расход воды можно рассчитать, подсчитав импульсы на выходе датчика. Каждый импульс составляет приблизительно 2,25 миллилитра. Импульсный сигнал представляет собой простую прямоугольную волну, поэтому его довольно легко зарегистрировать и преобразовать в литры в минуту, используя следующую формулу:
Частота импульсов (Гц) / 7,5 = расход в л/мин
Матричная клавиатура 4×4
Матричная клавиатура 4×4 — это устройство ввода, обычно используемое для ввода значения в проекте. Всего у нее 16 клавиш, что означает, что она может ввести 16 значений. Самое интересное, что она использовала только 8 выводов GPIO микроконтроллера.
Эти модули клавиатуры изготовлены из тонкого, гибкого мембранного материала. Модуль клавиатуры 4 x 4 состоит из 16 клавиш, эти клавиши организованы в матрицу строк и столбцов. Все эти переключатели соединены друг с другом проводящей дорожкой. Обычно между строками и столбцами нет связи. Когда мы нажимаем клавишу, то строка и столбец контактируют.
Схема самодельной машины для розлива воды на базе Arduino
Давайте рассмотрим принципиальную схему машины для розлива воды с использованием датчика расхода и Arduino.
Схема содержит плату Arduino Nano, датчик расхода воды, релейный модуль, водяной насос и ЖК-дисплей. Датчик расхода воды YF-S201 используется для измерения расхода воды во время заполнения. Реле является промежуточным компонентом между платой Arduino и водяным насосом 5 В постоянного тока. Оно позволяет плате Arduino управлять водяным насосом. Аналогично, матричная клавиатура 4×4 используется для ввода количества воды, которое должно быть распылено. ЖК-дисплей отображает скорость потока и общий объем воды.
ЖК-дисплей, реле, водяной насос и датчик расхода воды питаются от 5 В от микросхемы регулятора напряжения 7805. Доступен разъем DC barrel Jack, куда можно подать 9 В с помощью адаптера постоянного тока 9 В. На принципиальной схеме мы подключаем входной контакт реле к D3 Arduino, а входной контакт датчика расхода воды к D2 Arduino. Насос постоянного тока 5 В подключен к выходу одноканального релейного модуля 5 В. Один конец датчика расхода воды принимает воду в качестве входного сигнала от двигателя и выдает выходной сигнал в виде воды с внешнего конца.
Подключите контакты LCD 4, 6, 11, 12, 13 и 14 к контактам Arduino A0, A1, A2, A3, A4 и A5. Также подключите матрицу клавиатуры 4×4 к контактам Arduino D4, D5, D6, D7, D8, D9, D10 и D11.
Проект печатной платы
Если вы не хотите собирать схему на нулевой печатной плате, а хотите печатную плату для проекта, то вот печатная плата для вас. Я использовал EasyEDA, чтобы сначала нарисовать схему.
Затем я преобразовал схему в печатную плату. Печатная плата для машины для розлива воды с использованием датчика расхода и Arduino выглядит примерно так, как показано на следующем рисунке.
Файл Gerber для изготовления данной печатной платы вы можете скачать по следующей ссылке.
Проект размещения компонентов проекта на этой печатной плате показан на следующем рисунке.
Исходный код программы
Программа для машины для розлива воды написана в Arduino IDE. Скопируйте следующий код и загрузите его на плату Arduino Nano.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
#include <Keypad.h> const int ROW_NUM = 4; const int COLUMN_NUM = 4; #include <LiquidCrystal.h> LiquidCrystal lcd(A0, A1, A2, A3, A4, A5); char keys[ROW_NUM][COLUMN_NUM] = { { '1', '2', '3', 'A' }, { '4', '5', '6', 'B' }, { '7', '8', '9', 'C' }, { '*', '0', '#', 'D' } }; byte pin_rows[ROW_NUM] = { 8, 9, 10, 11 }; byte pin_column[COLUMN_NUM] = { 4, 5, 6, 7 }; Keypad keypad = Keypad(makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM); int sensorInterrupt = 0; int sensorPin = 2; int solenoidValve = 5; unsigned int SetPoint = 400; String code = ""; float calibrationFactor = 90; volatile byte pulseCount = 0; float flowRate = 0.0; unsigned int flowMilliLitres = 0; unsigned long totalMilliLitres = 0, volume = 0; unsigned long oldTime; const int relais_moteur = 3; void setup() { totalMilliLitres = 0; pinMode(relais_moteur, OUTPUT); lcd.begin(16, 2); lcd.setCursor(0, 0); lcd.print("Set Volume:"); Serial.begin(9600); pinMode(solenoidValve, OUTPUT); digitalWrite(solenoidValve, HIGH); pinMode(sensorPin, INPUT); digitalWrite(sensorPin, HIGH); attachInterrupt(sensorInterrupt, pulseCounter, FALLING); } void loop() { char key = keypad.getKey(); if (key) { code += key; lcd.setCursor(0, 1); lcd.print(code); delay(100); } if (key == 'D') { if (code.toInt() <= 1500) { volume = code.toInt(); } else { lcd.clear(); lcd.setCursor(0, 0); lcd.print("Set Volume:"); } code = ""; } if (totalMilliLitres < volume) { digitalWrite(relais_moteur, HIGH); if ((millis() - oldTime) > 1000) { detachInterrupt(sensorInterrupt); flowRate = ((1000.0 / (millis() - oldTime)) * pulseCount) / calibrationFactor; oldTime = millis(); flowMilliLitres = (flowRate / 60) * 1000; totalMilliLitres += flowMilliLitres; unsigned int frac; Serial.print("Flow rate :-"); Serial.print(flowMilliLitres, DEC); Serial.print("mL/Second"); Serial.print("\t"); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Speed :"); lcd.print(flowMilliLitres); lcd.print(" ml/s"); Serial.print("Output Liquid Quantity: "); Serial.print(totalMilliLitres, DEC); Serial.println("mL"); Serial.print("\t"); lcd.setCursor(0, 1); lcd.print("Filled:"); lcd.print(totalMilliLitres); lcd.print(" ml"); if (totalMilliLitres > 40) { SetSolinoidValve(); } pulseCount = 0; attachInterrupt(sensorInterrupt, pulseCounter, FALLING); } } else { digitalWrite(relais_moteur, LOW); volume = 0; } } void pulseCounter() { pulseCount++; } void SetSolinoidValve() { digitalWrite(solenoidValve, LOW); } |
Тестирование работы проекта
После загрузки кода на плату Arduino Nano проект готов к тестированию. Запитайте всю схему от источника питания 5 В или с помощью порта USB Arduino Nano.
На ЖК-экране появится опция установки объема. Нам нужно ввести количество воды в диапазоне от 0 до 1500 мл с помощью клавиатуры 4×4.
После ввода объема нажмите кнопку D, вода начнет наливаться.
После завершения заполнения реле отключает водяной насос, и подача воды прекращается.
Вы можете нажать кнопку «А», чтобы сбросить количество воды и перезапустить процесс снова.
Проект машины для розлива воды имеет множество применений в промышленности, и вы можете использовать его в качестве прототипа для демонстрации в колледже.