Кривава Лола на Omega 2 або душимо пітона на Хэллоин

Ніколи не розумів це свято. Але ідея народилася. Зробити страшну ляльку, яка буде виблискувати очима і моторошні звуки видавати.

Під це все підвернулася класна дитяча голова (спасибі Антон) та конкурс від Onion з розіграшем спеціальних китів, купити які мені таки не дозволяє совість. Раз так, то мізки дівчинці Лоле я зробив на Omega 2, використавши свої напрацювання з минулої статті.
Всім кому цікаво, як таку справу повторити, прошу під кат.

Нам потрібні: два світлодіоди, динамік, блок живлення 12 вольт, датчик руху (тільки для нього і потрібно 12 вольт), конвертер харчування на 3.3 вольта, конвертер живлення 5 вольт, простий підсилювач (клас D будь з харчуванням 3-12 вольт) і Omega 2. Ще опціонально знадобиться або флешка або sd карта для розширення дискового простору.

Розкриваємо ляльку і термоклеєм садимо світлодіоди в очі і динамік в район рота. Виводимо проводки в район мізків Omega 2. Динамік припаюємо до підсилювача, світлодіоди підключаємо до польових транзисторів… загалом збираємо наступну схему.

Замість конвертера на 5 вольт можна взяти здвоєний блок живлення на 5 і 12 вольт, що ближче лежить під рукою.
Далі переходимо до налаштування софту. Якщо хочете використовувати i2s звук, ставимо на омегу прошивку b193, тому що далі 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.

Далі останній крок. Найбільш творчий. Макіяж. Я просто попросив дружину (чітер) і вона зробила класно. Спасибі тобі велике!

Читайте також  Blue pill (синя таблетка) STM32F103 як ПЛК

Подивитися, як це все працює зі звуком можна в ролику, який нижче. В темряві Лола «Пожирательница чоловічих сердець» виглядає досить моторошно, якщо чесно. Сподіваюся вам сподобалося. Спасибі за увагу!

А які жахливі саморобки робили ви?

Степан Лютий

Обожнюю технології в сучасному світі. Хоча частенько і замислююся над тим, як далеко вони нас заведуть. Не те, щоб я прям і знаюся на ядрах, пікселях, коллайдерах і інших парсеках. Просто приходжу в захват від того, що може в творчому пориві вигадати людський розум.

You may also like...

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *