Оглавление:

Обзор: Домашние развлечения и система безопасности: 6 шагов
Обзор: Домашние развлечения и система безопасности: 6 шагов

Видео: Обзор: Домашние развлечения и система безопасности: 6 шагов

Видео: Обзор: Домашние развлечения и система безопасности: 6 шагов
Видео: Защита сети компании с нуля за 20 минут - создаем систему безопасности для защиты бизнеса от угроз 2024, Ноябрь
Anonim
Обзор: домашние развлечения и система безопасности
Обзор: домашние развлечения и система безопасности
Обзор: домашние развлечения и система безопасности
Обзор: домашние развлечения и система безопасности
Обзор: домашние развлечения и система безопасности
Обзор: домашние развлечения и система безопасности

О приложении

Эта система IOT представляет собой систему домашних развлечений и безопасности.

  1. Безопасность

    1. Коснитесь RFID-карты, и введенные данные будут сохранены в Firebase.
    2. Если авторизован, вы можете спокойно войти, и фотография будет сделана и загружена в S3.
    3. В случае несанкционированного доступа заходит секция защиты, и на ЖК-экране отображается сообщение, что вы не авторизованы.
  2. Защита

    1. Нажмите кнопку на приборной панели.
    2. Лазерные турели будут атаковать случайными очередями и скоростью.
  3. Развлечение

    1. Если обнаружено движение, игра запустится.
    2. После того, как пользователь играет в игру, счет сохраняется в Firebase.
    3. Значения LDR будут приняты и выведены на панель управления.

Этим приложением можно управлять и просматривать его через веб-сервер IBM Node-Red. Мы используем AWS и IBM Cloud Services, а также Firebase в качестве нашей базы данных.

Резюме шагов, которые будут описаны

  • Требования к оборудованию
  • Безопасность - Как создать систему безопасности, которая использует ввод RFID и программное обеспечение для распознавания изображений.
  • Защита - Как создать лазерную турель
  • Развлечения - Как создать игру Саймона
  • Приложение IOT Watson на IBM Bluemix - Как интегрировать все системы в одну панель управления

Откройте файл pdf для более подробного объяснения того, как создать этот проект.

Шаг 1. Требования к оборудованию

Это то, что вам понадобится

  1. Безопасность

    • 1 Raspberry Pi
    • 1 ЖК-дисплей
    • 1 считыватель RFID
    • 1 PiCam
    • 2 RFID карты / кнопки
    • X Female -> Male соединительные кабели
  2. Защита

    • 1 Raspberry Pi
    • 2 резистора 10 Ом (для кнопок)
    • 2 микро сервопривода
    • 1 модуль лазерного передатчика 650 нм
    • 2 кнопки
    • 1 зуммер
    • 3 маленьких резинки / кабельные стяжки (для фиксации)
    • X Female -> Male соединительные кабели
    • X обычные соединительные кабели
    • 1 транзистор
    • 1 конденсатор
  3. Развлечения

    • 1 Raspberry Pi
    • 3 1 Ом резистор (для светодиодов)
    • 1 резистор 10 Ом (для LDR)
    • 3 светодиода (разных цветов)
    • 3 кнопки
    • 1 LDR
    • 1 ЖК-дисплей
    • 1 датчик движения Pir
    • X Female -> Male соединительные кабели
    • X обычные соединительные кабели

Шаг 2: Безопасность

Безопасность
Безопасность
Безопасность
Безопасность
Безопасность
Безопасность

Создание оборудования системы безопасности

Подключите цепи, как показано на схеме фритзинга.

Создание программного обеспечения системы безопасности

  1. Настроить AWS, создав вещь
  2. Установить библиотеку AWS Python
  3. Установить ЖК-библиотеку
  4. Установить библиотеку RFID
  5. Настроить Firebase
  6. Настроить S3 Storage
  7. Установите Boto на Raspberry Pi
  8. Установите AWS ClI на Raspberry Pi
  9. Создать учетные данные AWS
  10. Настроить AWS
  11. Загрузите security.py в RPi
  12. Загрузите imagerecognition.py в RPi

security.py - это код, который будет читать входные данные RFID и определять, является ли пользователь злоумышленником или нет. Если пользователь распознан, изображение будет снято и загружено в s3. Код также публикуется в теме в aws MQTT.

Шаг 3: защита

Защита
Защита
Защита
Защита
Защита
Защита

Создание оборудования для лазерной турели

  1. Мы создаем лазерную турель, используя 2 сервопривода и 1 лазерный модуль.
  2. Подключите цепи, как показано на схеме фритзинга.

Создание программного обеспечения для лазерной турели

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

laserturret.py

из gpiozero импорт LED, зуммер, кнопка, сервоимпорт время из сигнала импорт пауза импорт случайный

#led = светодиод (12)

#pir = MotionSensor (19, sample_rate = 5, queue_len = 1) buzzer_pin = Buzzer (17) attack = Button (5, pull_up = False) #reset = Button (6, pull_up = False) servo1 = Сервопривод (18) servo2 = Сервопривод (24)

def ledON ():

led.on () print («светодиод горит») def ledOFF (): led.off () print («светодиод не горит»)

def fire ():

print («горячее оружие») buzzer_pin.on () time.sleep (0.1) buzzer_pin.off ()

def laserturret ():

timeBetweenBurst = random.uniform (0,2, 1) timeBetweenShots = random.uniform (0,05, 0,2) servo1start = random.randrange (-1, 1) servo1end = random.randrange (-1, 1) servo2start = random.randrange (-1), 1) servo2end = random.randrange (-1, 1) numShots = random.randrange (5, 20) servo1change = (servo1end - servo1start) / numShots servo2change = (servo2end - servo2start) / numShots servo1.value = servo1start servo2.value = servo2start time.sleep (0.1) shot = 0 detail = [timeBetweenBurst, timeBetweenShots, servo1.value, servo2.value, numShots] печать (детали) во время выстрела <numshots: shot + = "1" servo1.value = "servo1start" servo2.value = "servo2start" servo1start = "servo1change" servo2start = "servo2change" fire () = "" time.sleep (timebetweenshots) = "" time.sleep (timebetweenburst)

notes = {

«B0»: 31, «C1»: 33, «CS1»: 35, «D1»: 37, «DS1»: 39, «EB1»: 39, «E1»: 41, «F1»: 44, «FS1» ': 46,' G1 ': 49,' GS1 ': 52,' A1 ': 55,' AS1 ': 58,' BB1 ': 58,' B1 ': 62,' C2 ': 65,' CS2 ': 69, «D2»: 73, «DS2»: 78, «EB2»: 78, «E2»: 82, «F2»: 87, «FS2»: 93, «G2»: 98, «GS2»: 104, «A2»: 110, «AS2»: 117, «BB2»: 123, «B2»: 123, «C3»: 131, «CS3»: 139, «D3»: 147, «DS3»: 156, «EB3» ': 156,' E3 ': 165,' F3 ': 175,' FS3 ': 185,' G3 ': 196,' GS3 ': 208,' A3 ': 220,' AS3 ': 233,' BB3 ': 233, «B3»: 247, «C4»: 262, «CS4»: 277, «D4»: 294, «DS4»: 311, «EB4»: 311, «E4»: 330, «F4»: 349, FS4: 370, G4: 392, GS4: 415, A4: 440, AS4: 466, BB4: 466, B4: 494, C5: 523, CS5 ': 554,' D5 ': 587,' DS5 ': 622,' EB5 ': 622,' E5 ': 659,' F5 ': 698,' FS5 ': 740,' G5 ': 784,' GS5 ': 831, «A5»: 880, «AS5»: 932, «BB5»: 932, «B5»: 988, «C6»: 1047, «CS6»: 1109, «D6»: 1175, «DS6»: 1245, «EB6»: 1245, «E6»: 1319, «F6»: 1397, «FS6»: 1480, «G6»: 1568, «GS6»: 1661, «A» 6 ': 1760,' AS6 ': 1865,' BB6 ': 1865,' B6 ': 1976,' C7 ': 2093,' CS7 ': 2217,' D7 ': 2349,' DS7 ': 2489,' EB7 ': 2489, «E7»: 2637, «F7»: 2794, «FS7»: 2960, «G7»: 3136, «GS7»: 3322, «A7»: 3520, «AS7»: 3729, «BB7»: 3729, «B7»: 3951, «C8»: 4186, «CS8»: 4435, «D8»: 4699, «DS8»: 4978}

def buzz (frequency, length): # создать функцию "buzz" и скормить ей высоту тона и продолжительность)

если (частота == 0):

time.sleep (length) return period = 1.0 / frequency #frequency delayValue = period / 2 # вычислить время для половины волны numCycles = int (length * frequency) #num of waves = duratime x freq for i in range (numCycles): # запускаем цикл с 0 до переменной "циклы", вычисленной выше buzzer_pin.on () time.sleep (delayValue) buzzer_pin.off () time.sleep (delayValue)

def play (мелодия, темп, пауза, темп = 0,800):

for i in range (0, len (melody)): # Воспроизвести песню noteDuration = pace / tempo buzz (melody , noteDuration) # Изменить частоту ноты песни pauseBetweenNotes = noteDuration * pause time.sleep (pauseBetweenNotes)

в то время как True:

laserturret () break;

Шаг 4: Развлечения

Развлечение
Развлечение
Развлечение
Развлечение
Развлечение
Развлечение

Создание развлекательного оборудования

Мы создаем игру с кнопками Саймона, в которой вы должны следовать схеме включения светодиодов и нажимать соответствующие кнопки. Он загружает оценки и временную метку в базу данных Firebase NoSQL для дальнейшего использования на информационных панелях.

Подключите цепи, как показано на схеме Фритцинга.

Создание развлекательного программного обеспечения

Entertainment.py

импорт RPi. GPIO в GPIOimport время потоковая импорт импорт случайный импорт ОС импорта tweepy из rpi_lcd импорта LCD из подпроцесса импорта звонка из сна импорта время от даты и времени импорта DateTime из firebase импорта firebase CONSUMER_KEY = «h5Sis7TXdoUVncrpjSzGAvhBH» CONSUMER_SECRET = ACCESS_KEY «ZfDVxc4aTd9doGmBQO3HiSKKzxSTKT4C3g0B3AGx8eETCJm2rY» = «988333099669901312- YDLEQN1weW2n1JP4lxJcFPppCsbvzQh 'ACCESS_SECRET = 'K2IlUPur6jx7DO5S0HhhZW29H5AQFOvkMMevSsk9ZzwLk' AUTH = tweepy. OAuthHandler (CONSUMER_KEY, CONSUMER_SECRET) auth.secure = True auth.set_access_token (ACCESS_KEY, ACCESS_SECRET) апи = tweepy. API (авт) firebase = firebase. FirebaseApplication (' https:// iotca2 -12f48.firebaseio.com ', None) lcd = LCD () lcd.text (' Удачи! ', 1) lcd.text (' Удачи! ', 2) sleep (1) # Красный, желтый, зеленый свет = [40, 38, 36] BUTTONS = [37, 33, 35] NOTES = ["E3", "A4", "E4"] # значения, которые можно изменить, которые влияют на скорость игры = 0,5 # флаги, используемые для обозначения игры status is_displaying_pattern = Ложь is_won_curr ent_level = False is_game_over = False # состояние игры current_level = 1 current_step_of_level = 0 pattern = def initialize_gpio (): GPIO.setmode (GPIO. BOARD) GPIO.setup (LIGHTS, GPIO. OUT, initial = GPIO. LOW) GPIO. setup (BUTTONS, GPIO. IN, pull_up_down = GPIO. PUD_DOWN) для i в диапазоне (3): GPIO.add_event_detect (BUTTONS , GPIO. FALLING, verify_player_selection) def verify_player_selection (канал): глобальный текущий_уровень_уровня_уровня, текущий_уровень_уровня is_game_over, если не is_displaying_pattern и не is_won_current_level и не is_game_over: flash_led_for_button (канал), если канал == BUTTONS [шаблон [текущий_шаг_уровня]: True_step_of_level = True_level_sturrent_level + = 1, если текущий_уровень_уровня + = 1, если текущий_уровень_уровня + = 1, если текущий_уровень_уровня + = 1, если текущий_уровень_уровня + = 1, если текущий_уровень_уровня flash_led_for_button (button_channel): led = LIGHTS [BUTTONS.index (button_channel)] GPIO.output (led, GPIO. HIGH) time.sleep (0.4) GPIO.output (led, GPIO. LOW) def add_new_color_to_pattern (): глобальный isrent_color_to_pattern (): global isrent_color_to_pattern () дворняга rent_step_of_level is_won_current_level = False current_step_of_level = 0 next_color = random.randint (0, 2) pattern.append (next_color) def display_pattern_to_player (): global is_displaying_pattern is_displaying_pattern is_displaying_pattern = (in GPLIO.out), is_displaying_pattern = (in GPLIO.out), is_displaying_pattern = (in GPLIO.out), is_displaying_pattern = (in GPLIO.out): GPIO.output (LIGHTS [шаблон , GPIO. HIGH) time.sleep (скорость) GPIO.output (LIGHTS [шаблон , GPIO. LOW) time.sleep (скорость) is_displaying_pattern = False def wait_for_player_to_repeat_pattern (): в то время как не is_won_current_level, а не is_game_over: time.sleep (0.1) Защита reset_board_for_new_game (): глобальный is_displaying_pattern, is_won_current_level, is_game_over глобального current_level, current_step_of_level, шаблон is_displaying_pattern = False is_won_current_level = False is_game_over = False current_level = 1 current_step_of_level = 0 паттерна = GPIO.output (LIGHTS, GPIO. LOW) def send_data (score): lcd.text ('Конец игры,', 1) lcd.text ('До скорой встречи!', 2) datestr = str (datetime. now ()) в то время как True: print (datestr) print (score) data = {'Date': datestr, 'Score': score} result = firebase.post ('/ scores /', data) print (result) if score> 2: status = 'Кто-то забил' + (str (score)) + 'on' + datestr + '!' api.update_status (status = status) break def start_game (): while True: add_new_color_to_pattern () display_pattern_to_player () wait_for_player_to_repeat_pattern () if is_game_over: send_data (current_level - 1) print («Игра окончена!.format (current_level - 1)) sleep (2) print ("Спасибо за игру! / n") lcd.text ('', 1) lcd.text ('', 2) break time.sleep (2) def start_game_monitor (): t = threading. Thread (target = start_game) t.daemon = True t.start () t.join () def main (): try: os.system ('cls' if os.name == 'nt 'else' clear ') print ("Начать новый раунд! / n") initialize_gpio () start_game_monitor () наконец: GPIO.cleanup () if _name_ ==' _main_ ': main ()

Шаг 5. Приложение Watson для Интернета вещей в IBM Bluemix [Часть первая]

Настроить Blumix IoT Service

  1. Настройка типа шлюзового устройства
  2. Настроить устройство

Сделайте шаги 1 и 2 3 раза. Один RPi предназначен для одного раздела (Безопасность / Защита / Развлечения)

Настроить Node-Red

Запускаем node-red

узел-красный старт

  1. Перейти к управлению палитрой в меню гамбургера (вверху справа)
  2. Загрузите следующие поддоны

    1. узел-красный-приборная панель
    2. узел-красный-contrib-firebase
    3. узел-красный-contrib-ibm-watson-iot

Шаг 6: Узел красный поток

Узел красных потоков
Узел красных потоков
Узел красных потоков
Узел красных потоков
Узел красных потоков
Узел красных потоков
Узел красных потоков
Узел красных потоков

Загрузите файлы и экспортируйте в свой узел-красный.

Узел безопасности - красный

никто

Узел защиты Rpi - красный

laserturret.txt

Развлечения Rpi Node-Red

  • развлечения rpi flow.txt
  • ldr rpi flow.txt

IBM Bluemix Node-Красный

Рекомендуемые: