Общие сведения
Перистальтический насос позволяет с высокой точностью дозировать жидкости, в том числе пищевые и химически агрессивные. От полярности приложенного напряжения зависит направление подачи раствора.
Ниже мы рассмотрим несколько стандартных примеров, используя которые вы сможете написать необходимый вам код. Для демонстрации мы взяли контроллер Piranha UNO и Trema Shield для удобного подключения модулей. Также можно использовать контроллеры Arduino, например, Arduino UNO.
Подача жидкости в течение заданного времени
В данном примере после нажатия на кнопку начнётся подача жидкости в течение заданного в скетче времени.
Схема
Для управления насосом (если не требуется менять направление подачи жидкости) можно воспользоваться силовым ключом (N-канал, или P-канал). Также мы использовали кнопку.
Силовой ключ мы подключили к 10 пину контроллера, кнопку - к пину 2.
Скетч
#define motorPin 10 // Номер вывода, к которому подключен насос (силовой ключ)
#define buttonPin 2 // Номер вывода, к которому подключена кнопка
uint32_t timeMotorOn; // Время запуска насоса
///////НАСТРОЙКИ/////////
const uint32_t timeWork = 2000; // Время, мс, определяющее время работы насоса
////////////////////////
void setup() {
pinMode (buttonPin, INPUT); // Кнопка - вход
pinMode (motorPin, OUTPUT); // Мотор - выход
}
void loop(){
if (digitalRead(buttonPin)){ // Если кнопка нажата
while(digitalRead(buttonPin)) {;} // Ждём, пока она будет отпущена
motorStart(); // Вызываем функцию запуска мотора
}
if (timeMotorOn + timeWork <= millis()){ // Если с момента запуска прошло время больше установленного в настройках
digitalWrite(motorPin, LOW); // Выключаем мотор
}
}
void motorStart(){ // Функция запуска мотора
timeMotorOn = millis(); // Запоминаем время включения мотора
digitalWrite(motorPin, HIGH); // Включаем мотор
}
Подача жидкости заданного объёма
В данном примере насос перекачивает заданный объём жидкости. Схема будет аналогична схеме предыдущего примера.
Скетч
#define motorPin 10 // Номер вывода, к которому подключен насос (силовой ключ)
#define buttonPin 2 // Номер вывода, к которому подключена кнопка
///////НАСТРОЙКИ/////////
const uint8_t productivity = 40; // Производительность насоса (мл/мин)
float valPomp = 1.5; // Объём порции первого насоса, мл
////////////////////////
void setup() {
pinMode (buttonPin, INPUT); // Кнопка - вход
pinMode (motorPin, OUTPUT); // Мотор - выход
}
void loop(){
if (digitalRead(buttonPin)){ // Если кнопка нажата
while(digitalRead(buttonPin)) {;} // Ждём, пока она будет отпущена
motorStart(); // Вызываем функцию запуска мотора
}
}
void motorStart(){ // Функция запуска мотора
digitalWrite(motorPin,HIGH); // Включаем насос
delay((float)productivity/60.0*valPomp*1000.0); // Выполняем задержку, равную времени работы насоса, требуемому для подачи нужного количества жидкости
digitalWrite(motorPin,LOW); // Выключаем насос
}
Подача жидкости в обе стороны (управление при помощи потенциометра)
Схема
Для смены направления вращения мотора необходимо использовать драйвер мотора, например такой.
В данном случае вывод, отвечающий за направление (D) подключен к 11 выводу контроллера, а вывод, на который подаётся ШИМ, определяющий скорость (S), подключен к 10 пину.
В качестве устройства для установки скорости и направления вращения мы использовали потенциометр. При установке его ручки в среднее положение, насос не перекачивает жидкость. Если повернуть ручку потенциометра, насос начинает плавно увеличивать скорость; от направления поворота ручки зависит направление подачи жидкости.
Скетч
#define dirPin 11 // Номер вывода, определяющий направление подачи раствора
#define speedPin 10 // Номер вывода, определяющий скорость мотора
#define resPin A0 // Номер вывода, к которому подключен потенциометр
void setup() {
// Устанавливаем пинам 9 и 10 частоту ШИМ 62.5кГц, чтобы избавиться от писка обмоток мотора при стандартном ШИМ
TCCR1A = 0b00000001;
TCCR1B = 0b00001001;
pinMode (dirPin, OUTPUT); // Оба пина - выход
pinMode (speedPin, OUTPUT);
}
void loop(){
int res = analogRead(resPin); // Считываем значение с потенциометра
if (res >= 530){ // Если значение с потенциометра больше 530
analogWrite(speedPin, map(res, 530, 1023, 0, 255)); // Подаём на выход задания скорости значение с потенциометра, переведённое в дипазон 0...255
digitalWrite(dirPin, false); // Задаём направление вращения мотора
}
else if (res <= 490){ // Если значение с потенциометра меньше 490
analogWrite(speedPin, map(res, 0, 490, 255, 0)); // Подаём на выход задания скорости значение с потенциометра, переведённое в дипазон 255...0
digitalWrite(dirPin, true); // Задаём направление вращения мотора
}
else { // Иначе - находимся в зоне нечувствительности
analogWrite(speedPin, 0); // Выключаем мотор
}
} Комплект для повторения проекта
Что понадобится
Это быстрый ориентир по основным модулям и деталям. Полный список для повторения проекта смотрите в самой статье.
8 позиций
Piranha Uno R3
Прямой аналог Arduino Uno c микроконтроллером ATmega328P на ядре AVR для разработки электронных устройств на языке C++
Открыть в iArduino
Trema Shield
Плата расширения для удобного подключения периферийных устройств
Открыть в iArduino
Arduino Uno R3 (USB ATmega16U2)
Платформа c микроконтроллером ATmega328P на ядре AVR с чипом USB ATmega16U2 для разработки электронных устройств на языке C++
Открыть в iArduino
Силовой ключ N-канал (Trema-модуль)
Позволит управлять нагрузкой ШИМ сигналом. Например яркостью светодиодной ленты или скоростью мотора
Открыть в iArduino
Силовой ключ P-канал (Trema-модуль)
Позволит управлять нагрузкой ШИМ сигналом. Например яркостью светодиодной ленты или скоростью мотора
Открыть в iArduino
Кнопка, красная (Trema-модуль)
Тактовая кнопка, которая может служить источником сигналов (команд) для Ваших проектов
Открыть в iArduino
Драйвер мотора (Trema-модуль)
Позволяет управлять коллекторными моторами с с током потребления до 800 мА
Открыть в iArduino
Потенциометр v2 (Trema-модуль)
Сенсор для настройки скорости вращения двигателя, угол поворота сервопривода, яркости светодиода и т.д.
Открыть в iArduino

