Никогда не понимал этот праздник. Но идея родилась. Сделать жуткую куклу, которая будет сверкать глазками и жуткие звуки издавать.
Под это все подвернулась классная детская голова (спасибо Антон) и конкурс от Onion с розыгрышем специальных китов, купить которые мне таки не позволяет совесть. Раз так, то
Всем кому интересно, как такое дело повторить, прошу под кат.
Нам потребуются: два светодиода, динамик, блок питания 12 вольт, датчик движения (только для него и нужно 12 вольт), конвертер питания на 3.3 вольта, конвертер питания на 5 вольт, простой усилитель (класс D любой с питанием 3-12 вольт) и Omega 2. Еще опционально понадобится либо флешка либо sd карта для расширения дискового пространства.
Вскрываем куклу и термоклеем сажаем светодиоды в глаза и динамик в район рта. Выводим проводки в район мозгов Omega 2. Динамик припаиваем к усилителю, светодиоды подключаем к полевым транзисторам… В общем собираем следующую схему.
Вместо конвертера на 5 вольт можно взять сдвоенный блок питания на 5 и 12 вольт, что ближе лежит под рукой.
Дальше переходим к настройке софта. Если хотите использовать i2s звук, ставим на омегу прошивку b193, потому что дальше i2s не работает. Если нет, то можно вставить в USB звуковую карточку и тогда настраивать звук по этому гайду. Если делаете как у меня, то про работу со i2s звуком я писал тут. Подключаемся к wifi и увеличиваем дисковое пространство omega 2. Все подробно есть в руководстве тут.После этого выполняем
opkg update
opkg install alsa-utils mpg123 python pyOnionGpio nano
Теперь наша омега уже, почти, умеет говорить и остается только написать питоновский скрипт для этого дела. Логика проста. Датчик движения размыкает цепь между двумя GPIO. На один мы подаем логическую единицу при включении (у меня это 15 вывод), значение второго читаем (я использую 17 вывод). Когда там 0 (потому что PIR датчик сработал и разомкнул линию) то начинаем воспроизводить жуткие звуки и мигать светодиодами. В остальное время молчим никого не трогаем. Реализация всего этого выглядит вот так.
import onionGpio
import subprocess
import random
gpioOut = onionGpio.OnionGpio(15)
gpioOut.setOutputDirection(0)
gpioOut.setValue(1)
gpioObj = onionGpio.OnionGpio(17)
status = gpioObj.setInputDirection()
while True:
#проверяем значение порта
value = gpioObj.getValue()
#если недалеко человек
if int(value)==0:
cmd = "fast-gpio pwm 18 " + str(random.randint(5,15)) + " 50"
subprocess.call(cmd, shell=True)
cmd = "fast-gpio pwm 19 " + str(random.randint(2,10)) + " 50"
subprocess.call(cmd, stdout=subprocess.PIPE, shell=True)
cmd = "mpg123 -f 256 -C /mnt/sda1/" + str(random.randint(1,6)) + ".mp3"
subprocess.call(cmd, shell=True)
#если все спокойно
else:
subprocess.call("fast-gpio set 18 0", shell=True)
subprocess.call("fast-gpio set 19 0", shell=True)
Файлы жутких звуков складываем в /mnt/sda1 под именами 1.mp3, 2.mp3… У меня их 6. и случайным образом включается один из них. Так же случайным образом включается частота ШИМ выходов Omega 2 отдельно под левый и правый глаз. Можно было бы использовать аппаратный ШИМ, но тут возможная нестабильность частоты является плюсом. Потом записываем две строчки в rc.local выполнив команду nano /etc/rc.local
omega2-ctrl gpiomux set i2s i2s
python /mnt/sda1/start.py
Как я думаю вы догадались скрипт, который я привел выше, надо сохранить в директории /mnt/sda1 под именем start.py.
Далее последний шаг. Самый творческий. Макияж. Я просто попросил жену (читер) и она сделала классно. Спасибо тебе большое!
Посмотреть как это все работает со звуком можно в ролике, который ниже. В темноте Лола «Пожирательница мужских сердечек» выглядит довольно жутко, если честно. Надеюсь вам понравилось. Спасибо за внимание!
А какие жуткие самоделки делали вы?
Автор: Андрей