Умный микробит-дом: свет, вентилятор и система оповещения.
https://mrobot.by/Мы покажем вам, как можно использовать микробит и набор Бозона для создания умного дома.

Компоненты, используемые при работе:
- Стартовый набор Бозон.
- Образовательный микрокомпьютер микробит.
История.
Введение.
В этой статье мы покажем вам, как использовать micro:bit и набор Бозона для постройки умного lego-дома.
В этой статье будет рассмотрены три подпроекта: первый — световой индикатор, который автоматически будет настраивать освещение соответственно окружающему свету; второй — кнопка, контролирующая вентилятор; третий — система оповещения о землетрясении.
Подготовка.
Micro:bit и стартовый набор Boson.
Мы будем использовать micro:bit в качестве пульта управления нашим умным домом.
Для использования электронных компонентов в умном доме — сенсоров и (серво)приводов — мы используем набор Бозон и вставим micro:bit в расширенную плату микрокомпьютера, тем самым обеспечив в дальнейшем подключение и контроль всех модулей.

Перейдите по этой ссылке для получения большей информации о наборе Бозон.
Список необходимых компонентов из набора Бозон:
- Световой модуль (датчик)
- Световой индикатор
- Кнопка
- Вентилятор
- Датчик наклона
- Зуммер (сирена)

Mu editor
Чтобы писать код для micro:bit на Python, скачайте Mu editor. Вот его интерфейс.

Также мы советуем вам разобраться в основах the micro Python API for micro:bit.
Сборка.
Следующие фотографии иллюстрируют создание нашего дома.


Блоки Бозона можно достаточно быстро скрепить с блоками lego.
Мы можем использовать винты для надежного скрепления модулей Бозона с lego-домом.

Примеры.
Теперь давайте запустим Mu Editor и напишем программу the Micro Python!
1. Свет ночью.
В первом примере мы настраиваем автоматическое включение подсветки в зависимости от освещения.
Прикрепим датчик света к P1 порту micro:bit компьютера для обеспечения чтения микробитом показателей оссвещения. Световой индикатор соединен с P2 портом.


Нам нужно использовать программу для определения расстояния, соответствующее минимальному и максимальному значению датчика.
Чтобы сделать значение более точным, мы запишем значения за короткий промежуток времени и вычислим среднее значение.
night-light-measure.py
from microbit import *
light_sensor = pin1.read_analog()
counter = 0
timer = running_time()
while (running_time() - timer) <= 3 * 1000:
light_sensor += pin1.read_analog()
counter += 1
light_sensor /= counter
print("mean light sensor value: ", light_sensor)
Затем откроем REPL в Mu Editor, и запустим программу с учетом и без учета уровня освщенности. Получим среднее значение в двух случаях, например, 966.4033 и 14.81614, как показано на скриншоте ниже.

Сейчас мы сможем вставить эти два min и max значения в следующий код. Micro:bit будет регулировать аналоговый выход пропорционально этим двум границам.
night-light.py
from microbit import *
light_sensor = pin1.read_analog()
counter = 0
timer = running_time()
light = 966.4033
dark = 14.81614
while True:
light_sensor = pin1.read_analog()
LED = int((light - light_sensor)/(light - dark)*1023)
if LED > 1023:
LED = 1023
elif LED < 0:
LED = 0
print("LED lightness: ", LED)
pin2.set_analog_period(1)
pin2.write_analog(LED)
sleep(0.5)
2. Вентилятор.
Сейчас мы настроим ветилятор, который будет включаться и выключаться по нажатию соответствующей кнопки из набора Бозон.
Пожалуйста, подсоедините кнопку к P12, а вентилятор — к P16.

Мы используем переменные bool, switch, для хранения информации о кнопке (включена или нет), при каждом нажатии кнопки значение будет меняться.
Заметьте, что стоит подождать определенный промежуток времени, например, sleep(0.5), пока пользователь переключает положение кнопки на вентиляторе. Таким образом, мы можем гарантировать эффективную работу кнопки.
fan.py
from microbit import *
switch = False
while True:
if pin12.read_digital() is 1:
while pin12.read_digital() is 1:
sleep(0.5)
switch = not switch
if switch:
pin16.write_digital(1)
print("Turn ON")
else:
pin16.write_digital(0)
print("Turn OFF")
3. Система оповещения о землетрясении.
Третья часть достаточно интересна, мы сделаем систему оповещения в случае землетрясения.
Для того чтобы сказать, что дом подвергся землетрясению, мы будем использовать датчик наклона и считывать значения прибора на очень высокой частоте.

Если дом будет спокойно стоять, то частота будет равна нулю. Вычисляем среднее значение и проверяем, независимо от того, ноль ли там, чтобы определить начало землетрясения. И если землетрясение зафиксировано, программа начнет проигрывать музыку, чтобы предупредить людей.
Пожалуйста, подключите датчик наклона к P0 и выходы +/- сирены к P0 micro:bit'а и GND выходу. Если вы используете микрокомпьютер, просто подключите наушники или небольшой динамик к аудиоразъему (уже подключенному к P0).
Обратите внимание, что в этой демонстрации используется встроенная музыкальная библиотека, и она определяет аудиовыход на P0.

Вы можете спроектировать индивидуальные записи и проигрывать их, как в примере.
alarm.py
from microbit import *
import music
status = pin8.read_digital()
def detect_shake():
old_tilt_status = pin8.read_digital()
sleep(0.1)
new_tilt_status = pin8.read_digital()
return abs(new_tilt_status - old_tilt_status)
while True:
counter = 0
timer = running_time()
shake = detect_shake()
while (running_time() - timer) <= 500:
shake += detect_shake()
counter += 1
status = shake/counter
print(status)
if status is not 0.0:
print("Alarm!!!")
music.play(music.DADADADUM)