[Разработка под Arduino, DIY или Сделай сам] «Котовий брызгатрон» — или боевая турель против кота ^_^
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Эта история будет полна интриги, заговоров, разочарований, слез и искренней радости.... А впрочем, я малость увлекся - не будет там такого. Предыстория: у меня есть пожилая мать, которая живет в другом городе. И лечит свои недуги с помощью алоэ. Метод хорошо помогает - и она постоянно сажает новые ростки, взамен потраченных. У нее проживают 2 представителя хвостатой фауны: Кузя и Марек (кот и кошечка). Почему кошечка стала вдруг "Мареком" - долгая история. Вкратце обозначим причину как "потому что так сложились звезды". То бишь, сделаем допущение, что Cat cat = new Cat ("Марек");Извините, данный ресурс не поддреживается. :( Хотелось бы, чтобы ее постояльцы относились к произрастающей флоре с соответствующим уважением. Например, так:
Однако, они относятся как то так:
В течение года была перепробована масса подходов, как то: учить, ругать, закрывать дверь в комнату... Ничего не помогает. Результат всегда одинаков - только растянут во времени.Была рассмотрена дажа масса инженерных подходов. Но они не годятся по причине: дороговизны и сложности. Или закрытия флоры от лучей солнца.
В результате, консилиум, в лице: меня, меня и меня - постановил: "а позвать сюды лучшего ынженегра нашева королефства(меня) LOL! А пущай собирет нечто "эдакое"! И работа - закипела... Так как у меня завалялась небольшая плата ардуино нано, оставшаяся от прошлых проектов, было решено собирать на ней. Вкратце, ядро наших космических технологий составило следующее (слева направо):
- ардуино нано;
- инфракрасные датчики движения (хорошая, кстати, штука - угол зрения до 100 градусов, дальность видения 2-3 метра);
- мосфет транзистор.
Ну, дальше уже и так понятно - поэтому на этом всё. Расходимся... Ладно, ладно - шутеечка... Продолжаем... Для незнающих (что очень вряд ли, на Хабре, но тем не менее) поясню:
- ардуино нано-позволяет запрограммировать некую последовательность действий,
- датчики движения - видят перемещения тепловых объектов,
- мосфет транзистор - является по сути реле, которое служит для включения мощной нагрузки - после получения слабого сигнала от процессора.
Но мосфет лучше чем реле, так как почти не потребляет энергии для своей работы, не "наклёпываются" контакты от постоянной работы. В результате - долговечен.Но, электроника без корпуса - ничто. Моделируем в 3d и печатаем корпус:
Начинаем сборку с самого низа: пропускаем телефонные провода (да, да взял именно их - ибо дешево и длинные) в корпус и фиксируем болтиками (под них предварительно были заложены каналы, в которых потом вручную, метчиком - нарезана резьба м3х0,5):
Кстати, тут следует сказать пару слов о мосфете: несмотря на то, что он практически не греется (это одно из его достоинств) - я от греха прикрутил его на радиатор. "Пущай будэ"...Присоединяем мосфет к питанию. Стараемся соединять аккуратно, с использованием термоусадки - иначе коты заругают ^_^Далее, устанавливаем мосфет с радиатором и датчики движения - в предназначенные для них места...
...устанавливаем "мосх" - то бишь ардуино нано:
Монтируем на место крышку. И теперь НИКТО не в курсе-как оно устроено (LOL):
Загружаем программу и усиленно машем руками перед датчиками. Ишь ты! Работат!
Наступает главный момент: ради чего это всё: мы создаем зону запрета доступа для кота. А именно, согласно вики:"Одним из самых популярных терминов в критериях оценок является понятие anti-access/area-denial или сокращенно A2/AD, которым обозначается территория, где вооруженные силы не смогут действовать в полной мере из-за того, что их войска оказываются в уязвимом положении для средств поражения армии".В качестве такого средства, создания зоны запрета доступа, для нашей системы поражения, класса "подоконник-кот" - послужит распыление жидкой фракции воды, с помощью щелевых форсунок. То есть: берем форсунки для стеклоомывателей ВАЗ и делаем вот енто:
Далее, берем нержавеющую капиллярную трубку с проходным сечением 0,3мм - это важно! (на самом деле-ни разу не важно (LOL, это я - чтобы важности напустить)- т.к. она играет роль просто палки, которая втыкается в горшок с цветком и крепим к ней всю систему. В свое время брал эту трубку-за "много много денег" - для аппарата высокого давления (в той затее, я собрал рюкзачный бензиновый воздушный компрессор высокого давления (500 бар) - но, по ряду причин, затея "замерла"). Поэтому, "сгорел сарай - гори и хата": смахиваем скупую мужскую слезу и пускаем трубку в дело:
В качестве бака для воды был взят бачок от "копейки" (ВАЗ 2101).P.S. Ноги - мои. Отличные - правда? LOL.А вот так, выглядит эта штука при свете дня:
Далее, эта система будет втыкаться в землю под алоэ и "контролировать окрестности". Эдакое "антикотовое ПВО".На днях система уедет "благодарной аудитории". Надеюсь, они оценят...
Продемонстрировать в работе пока не могу - т.к. под рукой нет котов.
Но буду вести наблюдение и дам знать, "когда-что".Теперь ряд примечаний:
- Если будете строить нечто подобное - мосфет надо брать "с логическим уровнем"- то есть, чтобы он открывался от 3-5 вольт;
- Как выяснилось, датчики категорически не приемлют светлые оттенки пластика (просто постоянно стоят во "включенном" состоянии). Пришлось перепечатать нижнюю часть корпуса - черным ABS - пластиком. С ним всё работает хорошо:
А теперь, самое главное - если кому понадобится, делюсь файлами.Скетч для Arduino IDE:
int sensor1 = 2 ;// пин инфракрасного сенсора 1
int sensor2 = 3; // пин инфракрасного сенсора 2
int mosfet = 10; // пин силового мосфета, который включает насос
boolean isSensorStarted = false; // сработал ли хоть какой то датчик
boolean isMotorStarted = false; // запущен ли в данный момент двигатель
boolean catStatusMessage = false; // вывод сообщения о текущем статусе кота
boolean isFirstMessage = true; // вывод первого сообщения
boolean firstStart = true; //пауза только при первом старте системы (даёт возможность загрузиться)
volatile uint32_t startTime = 0; //время в миллисекундах, когда стартовал двигатель
volatile uint32_t workingTime = 3000; //время в миллисекундах, которое будет работать двигатель
void setup ()
{
Serial.begin(9600);
pinMode (sensor1, INPUT) ; // пин датчика работает как вход
pinMode (sensor2, INPUT) ; // пин датчика работает как вход
pinMode (mosfet, OUTPUT) ;// пин мосфета работает как выход
attachInterrupt(digitalPinToInterrupt (sensor1), sensor_impulse, HIGH);
attachInterrupt(digitalPinToInterrupt (sensor2), sensor_impulse, HIGH);
}
void loop ()
{
while (isSensorStarted)
{
if (firstStart) //пауза при первом старте системы, после включения питания - даёт системе загрузиться и датчикам-прийти в состояние LOW
{
detachInterrupt(sensor1);
detachInterrupt(sensor2);
while ( (digitalRead(sensor1)==HIGH) || (digitalRead(sensor2)==HIGH) )
{
//ничего не делаем-ждем, пока не появится сигнал LOW
}
firstStart = false;
isSensorStarted = false;
Serial.println ("Стартуем");
isFirstMessage = false;
attachInterrupt(digitalPinToInterrupt (sensor1), sensor_impulse, HIGH);
attachInterrupt(digitalPinToInterrupt (sensor2), sensor_impulse, HIGH);
break;
}
if (catStatusMessage)
{
Serial.println ("Агонь па кату!!! :-)");
catStatusMessage = false;
}
detachInterrupt(sensor1);
detachInterrupt(sensor2);
digitalWrite(mosfet, HIGH);
startTime = millis(); //записали время старта двигателя
isMotorStarted = true;
Serial.println ("Двигатель запущен!");
while (isSensorStarted)
{
if (isMotorStarted)
{
if (millis()-startTime >= workingTime)
{
isMotorStarted=false;
digitalWrite(mosfet, LOW);
Serial.println ("Двигатель остановлен!");
}
}
if ( (digitalRead(sensor1)==LOW) && (digitalRead(sensor2)==LOW) )
{
attachInterrupt(digitalPinToInterrupt (sensor1), sensor_impulse, HIGH);
attachInterrupt(digitalPinToInterrupt (sensor2), sensor_impulse, HIGH);
isSensorStarted = false;
}
}
}
if (!isFirstMessage)
{
if (!catStatusMessage)
{
Serial.println ("Кота что то нету...:-(");
catStatusMessage = true;
}
}
}
void sensor_impulse ()
{
if (!isSensorStarted)
{
isSensorStarted = true;
}
}
Скачать файлы для 3d печати можно по этой ссылке.На этом всё - доклад закончил.
===========
Источник:
habr.com
===========
Похожие новости:
- [Программирование, C, Компьютерное железо, DIY или Сделай сам] Не простые проблемы простого устройства — тачскрин
- [DIY или Сделай сам] Делаем бесконечную карту памяти для PS1
- [Гаджеты, Умный дом, DIY или Сделай сам, Голосовые интерфейсы] Открытие двери с телефона, голосовом ассистентом и с помощью модуля Sonoff Mini
- [Настройка Linux, DevOps, DIY или Сделай сам, Kubernetes] Как я сломал и починил кластер Kubernetes, работающий на Raspberry Pi (перевод)
- [Настройка Linux, DevOps, DIY или Сделай сам, Kubernetes] Как я собрал домашний кластер Kubernetes на базе Raspberry Pi (перевод)
- [Программирование микроконтроллеров, Производство и разработка электроники, Интернет вещей, DIY или Сделай сам] Разработка защищённого WEB интерфейса для микроконтроллеров
- [Программирование, Разработка игр, DIY или Сделай сам, Игры и игровые приставки, Визуальное программирование] Признайтесь: вы в этом не ориентируетесь
- [Разработка под Arduino] Подключение светодиодной матрицы 8x8 к arduino
- [Программирование микроконтроллеров, Разработка под Arduino, 3D-принтеры, DIY или Сделай сам] MIDI браслет для управления синтезаторами (в основном — для органично звучащего вибрато)
- [Python, Программирование, Интерфейсы, DIY или Сделай сам] Что не так с вашей консольной программой?
Теги для поиска: #_razrabotka_pod_arduino (Разработка под Arduino), #_diy_ili_sdelaj_sam (DIY или Сделай сам), #_arduino_nano (ардуино нано), #_arduino_nano, #_koty (коты), #_razrabotka_pod_arduino (
Разработка под Arduino
), #_diy_ili_sdelaj_sam (
DIY или Сделай сам
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 20:55
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Эта история будет полна интриги, заговоров, разочарований, слез и искренней радости.... А впрочем, я малость увлекся - не будет там такого. Предыстория: у меня есть пожилая мать, которая живет в другом городе. И лечит свои недуги с помощью алоэ. Метод хорошо помогает - и она постоянно сажает новые ростки, взамен потраченных. У нее проживают 2 представителя хвостатой фауны: Кузя и Марек (кот и кошечка). Почему кошечка стала вдруг "Мареком" - долгая история. Вкратце обозначим причину как "потому что так сложились звезды". То бишь, сделаем допущение, что Cat cat = new Cat ("Марек");Извините, данный ресурс не поддреживается. :( Хотелось бы, чтобы ее постояльцы относились к произрастающей флоре с соответствующим уважением. Например, так: Однако, они относятся как то так: В течение года была перепробована масса подходов, как то: учить, ругать, закрывать дверь в комнату... Ничего не помогает. Результат всегда одинаков - только растянут во времени.Была рассмотрена дажа масса инженерных подходов. Но они не годятся по причине: дороговизны и сложности. Или закрытия флоры от лучей солнца. В результате, консилиум, в лице: меня, меня и меня - постановил: "а позвать сюды лучшего ынженегра нашева королефства(меня) LOL! А пущай собирет нечто "эдакое"! И работа - закипела... Так как у меня завалялась небольшая плата ардуино нано, оставшаяся от прошлых проектов, было решено собирать на ней. Вкратце, ядро наших космических технологий составило следующее (слева направо):
Ну, дальше уже и так понятно - поэтому на этом всё. Расходимся... Ладно, ладно - шутеечка... Продолжаем... Для незнающих (что очень вряд ли, на Хабре, но тем не менее) поясню:
Начинаем сборку с самого низа: пропускаем телефонные провода (да, да взял именно их - ибо дешево и длинные) в корпус и фиксируем болтиками (под них предварительно были заложены каналы, в которых потом вручную, метчиком - нарезана резьба м3х0,5): Кстати, тут следует сказать пару слов о мосфете: несмотря на то, что он практически не греется (это одно из его достоинств) - я от греха прикрутил его на радиатор. "Пущай будэ"...Присоединяем мосфет к питанию. Стараемся соединять аккуратно, с использованием термоусадки - иначе коты заругают ^_^Далее, устанавливаем мосфет с радиатором и датчики движения - в предназначенные для них места... ...устанавливаем "мосх" - то бишь ардуино нано: Монтируем на место крышку. И теперь НИКТО не в курсе-как оно устроено (LOL): Загружаем программу и усиленно машем руками перед датчиками. Ишь ты! Работат! Наступает главный момент: ради чего это всё: мы создаем зону запрета доступа для кота. А именно, согласно вики:"Одним из самых популярных терминов в критериях оценок является понятие anti-access/area-denial или сокращенно A2/AD, которым обозначается территория, где вооруженные силы не смогут действовать в полной мере из-за того, что их войска оказываются в уязвимом положении для средств поражения армии".В качестве такого средства, создания зоны запрета доступа, для нашей системы поражения, класса "подоконник-кот" - послужит распыление жидкой фракции воды, с помощью щелевых форсунок. То есть: берем форсунки для стеклоомывателей ВАЗ и делаем вот енто: Далее, берем нержавеющую капиллярную трубку с проходным сечением 0,3мм - это важно! (на самом деле-ни разу не важно (LOL, это я - чтобы важности напустить)- т.к. она играет роль просто палки, которая втыкается в горшок с цветком и крепим к ней всю систему. В свое время брал эту трубку-за "много много денег" - для аппарата высокого давления (в той затее, я собрал рюкзачный бензиновый воздушный компрессор высокого давления (500 бар) - но, по ряду причин, затея "замерла"). Поэтому, "сгорел сарай - гори и хата": смахиваем скупую мужскую слезу и пускаем трубку в дело: В качестве бака для воды был взят бачок от "копейки" (ВАЗ 2101).P.S. Ноги - мои. Отличные - правда? LOL.А вот так, выглядит эта штука при свете дня: Далее, эта система будет втыкаться в землю под алоэ и "контролировать окрестности". Эдакое "антикотовое ПВО".На днях система уедет "благодарной аудитории". Надеюсь, они оценят... Продемонстрировать в работе пока не могу - т.к. под рукой нет котов. Но буду вести наблюдение и дам знать, "когда-что".Теперь ряд примечаний:
А теперь, самое главное - если кому понадобится, делюсь файлами.Скетч для Arduino IDE: int sensor1 = 2 ;// пин инфракрасного сенсора 1
int sensor2 = 3; // пин инфракрасного сенсора 2 int mosfet = 10; // пин силового мосфета, который включает насос boolean isSensorStarted = false; // сработал ли хоть какой то датчик boolean isMotorStarted = false; // запущен ли в данный момент двигатель boolean catStatusMessage = false; // вывод сообщения о текущем статусе кота boolean isFirstMessage = true; // вывод первого сообщения boolean firstStart = true; //пауза только при первом старте системы (даёт возможность загрузиться) volatile uint32_t startTime = 0; //время в миллисекундах, когда стартовал двигатель volatile uint32_t workingTime = 3000; //время в миллисекундах, которое будет работать двигатель void setup () { Serial.begin(9600); pinMode (sensor1, INPUT) ; // пин датчика работает как вход pinMode (sensor2, INPUT) ; // пин датчика работает как вход pinMode (mosfet, OUTPUT) ;// пин мосфета работает как выход attachInterrupt(digitalPinToInterrupt (sensor1), sensor_impulse, HIGH); attachInterrupt(digitalPinToInterrupt (sensor2), sensor_impulse, HIGH); } void loop () { while (isSensorStarted) { if (firstStart) //пауза при первом старте системы, после включения питания - даёт системе загрузиться и датчикам-прийти в состояние LOW { detachInterrupt(sensor1); detachInterrupt(sensor2); while ( (digitalRead(sensor1)==HIGH) || (digitalRead(sensor2)==HIGH) ) { //ничего не делаем-ждем, пока не появится сигнал LOW } firstStart = false; isSensorStarted = false; Serial.println ("Стартуем"); isFirstMessage = false; attachInterrupt(digitalPinToInterrupt (sensor1), sensor_impulse, HIGH); attachInterrupt(digitalPinToInterrupt (sensor2), sensor_impulse, HIGH); break; } if (catStatusMessage) { Serial.println ("Агонь па кату!!! :-)"); catStatusMessage = false; } detachInterrupt(sensor1); detachInterrupt(sensor2); digitalWrite(mosfet, HIGH); startTime = millis(); //записали время старта двигателя isMotorStarted = true; Serial.println ("Двигатель запущен!"); while (isSensorStarted) { if (isMotorStarted) { if (millis()-startTime >= workingTime) { isMotorStarted=false; digitalWrite(mosfet, LOW); Serial.println ("Двигатель остановлен!"); } } if ( (digitalRead(sensor1)==LOW) && (digitalRead(sensor2)==LOW) ) { attachInterrupt(digitalPinToInterrupt (sensor1), sensor_impulse, HIGH); attachInterrupt(digitalPinToInterrupt (sensor2), sensor_impulse, HIGH); isSensorStarted = false; } } } if (!isFirstMessage) { if (!catStatusMessage) { Serial.println ("Кота что то нету...:-("); catStatusMessage = true; } } } void sensor_impulse () { if (!isSensorStarted) { isSensorStarted = true; } } =========== Источник: habr.com =========== Похожие новости:
Разработка под Arduino ), #_diy_ili_sdelaj_sam ( DIY или Сделай сам ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 20:55
Часовой пояс: UTC + 5