Программка совсем примитивная, написалась и заработала с первого раза. Кстати, мой первый код на Processing.
code c
/**
Управление разбрызгивателем.
*/
#define PIN_SNS 7 // Входной пин сенсора присутствия
#define PIN_DIR 12 // Направление вращения
#define PIN_CTR 13 // Управление двигателем
void setup() {
pinMode(PIN_SNS, INPUT); // Контакт сенсора работает на вход
pinMode(PIN_DIR, OUTPUT); // А эти два — на выход
pinMode(PIN_CTR, OUTPUT);
}
void loop() {
int state = !digitalRead(PIN_SNS); // Наш сенсор выдаст 0, если что-то обнаружит
if(state)
spray();
delay(500); // Чтобы не работать непрерывно, небольшая задержка в цикле.
}
void spray() {
start_motor(); // Включаем мотор на разбрызгивание
delay(500); // ждём 0.5 сек
stop_motor(); // Останавливаем мотор
delay(5000); // Ждём 5 секунд и выходим
}
void start_motor() {
digitalWrite(PIN_DIR, LOW); // Низкий уровень указывает на прямое вращение
digitalWrite(PIN_CTR, HIGH); // Включаем мотор
}
void stop_motor() {
digitalWrite(PIN_CTR, LOW); // Выключаем мотор
}
Использовался вот такой датчик,
E18-D50NK:
Это цифровой ключ на три ноги. Земля, питание, сигнал. Сигнал — цифровой, «0» при наличии препятствия.
Ну и, соответственно, уже упомянутый спрей AirWick Fresh Matic
У последнего, как я писал раньше, я спалил датчик нажатия, но и без него оказалось отлично. Просто врубаешь на 0.5 сек. моторчик и хватает. Даже назад потом откручивать не надо, хватает отталкивания головкой баллона. Сперва сделал вариант с откруткой, так он всё время вхолостую срабатывал, проскакивали шестерёнки, встав на упор. Так что программка совсем простая вышла.
Для управления двигателем —
моторшилд на L298P