Віримо в перемогу ЗСУ!
Працюємо з 09:00 до 18:00 Пн-Сб

Привет друзья! 

Представляю интересный проект для новоиспеченных папочек. Это - автоматическое устройство для закачивания младенцев.



Началось с того, что ко мне по вайберу обратился папочка, который смастерил для ребенка электронную закачивалку, у которой есть ШИМ регулятор скорости и отлаженная механика. И взмолился он о помощи с программой, ибо очень захотелось добавить сюда режим работы по крику ребенка. Он даже модуль микрофона с усилителем на микросхеме MAX4466 купил, и не выдержало моё ледяное сердце, ибо пришлось мне уже на двух своих детях спину неоднократно срывать при укачиваниях на руках.

Попросил папочка написать программу под Arduino и предусмотреть постоянный режим работы и отдельно по звуку. Покричал ребенок в кроватке: контроллер должен среагировать и качать еще некоторое время даже после пропадания крика.

В общем не долго думая, поскребавши по сусекам, набрался у меня следующий достаточный набор элементов и набросалась схема и программа.

Основной силовой инструмент здесь – это коллекторный двигатель постоянного тока с редуктором. Параметры конкретного двигателя следующие: скорость вращения выходного вала при напряжении 12В – 150 об/мин; ток потребления порядка 130 мА.

Все папочки по разному организовывают механическую связь двигателя с детской кроваткой. Кроватка конечно должна быть качающейся. Самое простое решение – на ось двигателя ставить кривошипно-шатунный механизм.

Переключатель здесь для переключения между двумя режимами. Или просто непрерывное закачивание, или автоматическое закачивание по плачу ребенка.

Плач определяется при помощи микрофона со специализированным усилителем на основе микросхемы MAX9814, выход которого подключен к аналоговому входу контроллера.

Контроллер здесь взят – Arduino Nano как самый простой, доступный и удобный для новичков.

Управление включением двигателя реализовано через MOSFET транзистор, а точнее модуль MOSFET транзистора IRF520.  Этот транзистор здесь коммутирует напряжение 5В на двигатель. Транзистор более долговечен по сравнению с реле, а так же позволяет при необходимости программно изменять скорость вращения двигателя и закачивания кроватки.

Схема


Рассмотрим схему устройства. Здесь в центре Arduino Nano, на которую приходит питающее напряжение 5В через mini USB. Дальше это напряжение расходится на всю периферию и даже на питание двигателя. Двигатель подключен на клеммы модуля MOSFET транзистора.

Если вам понадобится увеличить напряжение, подаваемое на двигатель, например до 12В, то на клеммы питания модуля MOSFET подаете 12В. А для питания контроллера нужно будет подключить понижающий стабилизатор напряжения, который опустит с 12В до 5В. Без такого понижающего модуля можно обойтись, если питающее напряжение будет 9В. Тогда 9В можно подать прямо на вывод VIN контроллера Arduino Nano. При подаче на VIN 12В и более высоких напряжений, можно спалить контроллер.

Микрофон с усилителем подключен к пину А0 контроллера. Выход OUT модуля звука – это аналоговый выход. Вы так же можете использовать и другие датчики звука, которые имеют аналоговый выход. Вывод GAIN служит для выбора величины усиления звука с микрофона. Доступен выбор из трех значений 40, 50 или 60 dB. 60 dB – это наибольшее усиление и оно выбирается по умолчанию, если никуда не подключать вывод GAIN.

Что касается переключателя режимов «Постоянно» или «По звуку», сюда подходит любой переключатель или кнопка с защелкой, которые содержат или переключающийся или просто один замыкающийся контакт.

Программа

const int sampleWindow = 1000; // время выборки значений звука mS
unsigned int sample;

const byte button_pin = 7;
const byte motor_pin = 3;
const byte sound_pin = A0;
unsigned int cry;

void setup() {
  Serial.begin(9600);
  pinMode(motor_pin, OUTPUT);
  pinMode(button_pin, INPUT_PULLUP);
}

void loop() {
   unsigned long startMillis= millis(); 
   unsigned int peakToPeak = 0;   // размах колебаний
   unsigned int signalMax = 0;
   unsigned int signalMin = 1024;
  
   // собираем данные на протяжении 1 sec
   while (millis() - startMillis < sampleWindow)
   {
      sample = analogRead(sound_pin);
      if (sample < 1024) 
      {
         if (sample > signalMax)
         {
            signalMax = sample;  // сохранение максимального значения
         }
         else if (sample < signalMin)
         {
            signalMin = sample;  // сохранение минимального значения
         }
      }
   }
   peakToPeak = signalMax - signalMin;  // max - min = размах колебаний
   Serial.println(peakToPeak);
   
   if (cry>0) cry --;
   if(peakToPeak>400) cry = 10; 
   //0..400..1023 звуковой порог срабатывания, 0..10..65535 sec задержка укачивания после пропадания звука
   
   if ((digitalRead(button_pin))||(cry>0)){
     analogWrite(motor_pin, 254);
   }else analogWrite(motor_pin, 0);
}

Теперь рассмотрим программу контроллера устройства укачивания детской кроватки. Первая цифра – это период, на протяжении которого контроллер слушает микрофон и определяет повышение громкости в помещении. Так же этот временной период определяет цикличность основной программы.

Дальше идут определения номеров пинов контроллера. В секции setup() подключается последовательный порт для диагностики программы. Так же здесь определение типов пинов для вывода управления двигателем и вывода подключения кнопки.

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

Функция Serial.println будет каждую секунду распечатывать значение этой переменной, чтобы мы могли настроить устройство на необходимый порог громкости.

Следующие две строки кода отвечают за продолжительность автономного закачивания ребенка после окончания последнего крика. То есть после того, как плач прекратился, контроллер еще некоторое время будет продолжать укачивание, и это время задается здесь. Так же здесь задается порог громкости звука, при котором будет включаться автоматическое укачивание ребенка в кроватке. Сейчас тут стоит цифра 400, но далее вы для себя можете подобрать и другой желаемый порог в пределах 0 … 1023.

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

Функция analogWrite подает ШИМ сигнал на дискретный выход контроллера. Это значит, что при вводе цифры 254, на двигатель подастся полное напряжение питания, подключенное к модулю MOSFET транзистора. При вводе цифры 0, двигатель будет выключен. Но, если вам понадобится уменьшить обороты двигателя, то подберите себе сюда, вместо 254, цифру в диапазоне 20 … 254.

Теперь загрузим программу в контроллер и запустим монитор порта. Здесь удобно продиагностировать, какой у нас фоновый шум и сделать выводы, какой порог шума лучше выставить в программе.

Тестирование

Устанавливаем переключатель в положение «Постоянно» и, при подаче питания, закачивание люльки будет выполняться постоянно. Теперь переключаем в режим «По звуку» и плачем. При этом должно включаться закачивание и выключаться через 10 сек после наступления тишины.

Для меня очень важны ваши комментарии, лайки и подписки. Желаю всем здоровья и успехов в проектах! До новых встреч.


<< Проекты << Все товары >> Статьи, уроки >>

Написать отзыв

Примечание: HTML разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо
Стойка роликовая для оси Y с крепежом

Стойка роликовая для оси Y с крепежом

Монтажная панель из МДФ для организации оси Y автоматического лазерного гравера.Отверстия под шаговы..

112.06грн.

Моно усилитель мощности 18 Вт TDA2030A

Моно усилитель мощности 18 Вт TDA2030A

Модуль одноканального усилителя мощности звуковой частоты на основе легендарной микросхемы TDA2030A...

60.33грн.

Модуль MicroSD карты памяти

Модуль MicroSD карты памяти

Модуль карточки памяти с интерфейсом SPI. Предназначен для сохранения различных данных контроллера: ..

39.27грн.

Потенциометр Robotale

Потенциометр Robotale

Двухканальный переменный резистор прямолинейной конструкцииСопротивление 10 кОмРазмеры 90 х 20 мм..

107.18грн.

Умный дом 1. Постановка задачи.

Умный дом 1. Постановка задачи.

Умный дом 1. Постановка задачи. Каждый человек представляет себе свой умный дом в соответствии со с..