Оглавление:

Зеркало для распознавания лиц с секретным отделением: 15 шагов (с изображениями)
Зеркало для распознавания лиц с секретным отделением: 15 шагов (с изображениями)

Видео: Зеркало для распознавания лиц с секретным отделением: 15 шагов (с изображениями)

Видео: Зеркало для распознавания лиц с секретным отделением: 15 шагов (с изображениями)
Видео: ТЕХНИКА БЕЗОПАСНОСТИ. Вид Грубейшего Нарушения ТРЕБОВАНИЙ ТБ при работе на СТАНКАХ. 2024, Декабрь
Anonim
Зеркало для распознавания лиц с секретным отделением
Зеркало для распознавания лиц с секретным отделением
Зеркало для распознавания лиц с секретным отделением
Зеркало для распознавания лиц с секретным отделением
Зеркало для распознавания лиц с секретным отделением
Зеркало для распознавания лиц с секретным отделением

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

Используя Raspberry Pi, некоторые знания программирования на Python и класс магазина 8-го класса, мы можем создать это элегантное устройство, чтобы скрывать объекты на виду, доступ к которым будет иметь только правильный пользователь.

Я хотел бы выразить особую благодарность этим людям / платформам, откуда я также получил свою информацию и ресурсы:

TeCoEd - канал на Youtube

Эммет из PiMyLifeUp

MJRoBot на Hackster.io (профиль)

Гавен Макдональд - канал на Youtube

Такер Шеннон на Thingiverse (профиль)

Запасы

Принадлежности для рам:

  • Деревянная доска (размеры этой доски были 42 "на 7,5" на 5/16 ")
  • Рамка для карандашей (со стеклом)
  • Балончик с краской
  • Односторонний светоотражающий клей
  • Средство для чистки стекол и тряпка
  • МДФ Древесина

Принадлежности для распознавания лиц:

  • Raspberry Pi (я использовал Pi 3 B +, но есть и другие варианты)
  • Модуль камеры
  • Шаговый двигатель

Инструменты:

  • Настольная пила
  • Лобзик
  • Наждачная бумагаДерево
  • Клейкая лента
  • Мера
  • Ножницы
  • Распылитель
  • 3д принтер
  • Супер клей

Шаг 1: вырезы для рамы коробки

Вырезы для рамы коробки
Вырезы для рамы коробки
Вырезы для рамы коробки
Вырезы для рамы коробки
Вырезы для рамы коробки
Вырезы для рамы коробки
Вырезы для рамы коробки
Вырезы для рамы коробки

Я купил рамку для картины в магазине секонд-хенд. Просто предупреждение: убедитесь, что планки, из которых состоит рама, имеют ширину не менее 1 1/2 дюйма. Это позволит вам приклеить на него другие деревянные доски, оставив достаточно места для работы. Кроме того, убедитесь, что стекло в рама полностью прозрачная. Я купил матовую случайно, а потом пришлось покупать другую раму только для прозрачного стекла. Так как моя рама используется, размеры рамы коробки могут отличаться.

  • Положите рамку в портретную ориентацию. Измерьте длинные стороны (LS) стороны стеклянного отверстия на раме с дополнительными ½ дюйма сверху и снизу. (т.е. добавьте дюйм к длинной стороне измерения стеклянного отверстия. Запишите это и обозначьте LSM (измерение длинной стороны).
  • Точно так же измерьте верхнюю сторону отверстия и добавьте еще 1 дюйм. Запишите это и обозначьте SSM (Измерение короткой стороны).
  • Возьмите доску и с помощью настольной пилы вырежьте два LSM x 2 дюйма и два SSM x 2 дюйма.
  • Возьмите один из разрезов LSM и измерьте прямоугольник 2 x 1 дюйм, который находится на расстоянии 1 дюйма снизу и ½ дюйма с левой и правой сторон (как показано на рисунке 3).
  • Используйте лобзик, чтобы вырезать отверстие. Затем зачистите края наждачной бумагой.

Шаг 2: вырезы для ящика

Вырезы для ящика
Вырезы для ящика
Вырезы для ящика
Вырезы для ящика
Вырезы для ящика
Вырезы для ящика
Вырезы для ящика
Вырезы для ящика

Теперь мы начнем строить ящик (он же Секретный отсек).

  • Вырежьте две стороны 4 x 1 дюйм, 3 ⅜ x 1 дюйм (задний край), 4 ¼ x 1 (передний край) и 4 x 3 ⅜ дюйма (платформу).
  • Приклейте первую сторону размером 4 x 1 дюйм вдоль 4-дюймовой стороны платформы. Я положил пару сложенных бумаг под платформу, чтобы она была немного приподнята, чтобы она не затягивала отверстие, которое я вырезал в планке LS. Дайте высохнуть в течение 30 минут.
  • Точно так же приклейте 3 ⅜ "x 1" вдоль 3 ⅜ "края платформы. Сушить 30 минут. Затем приклейте вторую сторону размером 4 x 1 дюйм к стороне, противоположной первой. Дайте высохнуть в течение 30 минут.
  • Отложите пока передний край. Это будет последняя вещь, приклеиваемая на ящик.
  • Когда закончите, проверьте, подходит ли он к отверстию, которое вы проделали лобзиком в доске LSM. В противном случае отшлифуйте отверстие до тех пор, пока ящик не будет легко выдвигаться и выдвигаться, и не будет сопротивления.

Шаг 3: Собираем раму

Собираем раму
Собираем раму
Собираем раму
Собираем раму
Собираем раму
Собираем раму

Собрав все детали, мы можем приступить к сборке рамы целиком.

  • Приклейте планку LSM по центру стеклянного отверстия по ½ дюйма с каждой стороны. Убедитесь, что он приклеен на расстоянии ½ дюйма от отверстия (как показано на рисунке 1). Дайте высохнуть в течение 30 минут.
  • Приклейте первую доску SSM так, чтобы край касался внутренней части только что приклеенной доски LSM. (Используйте линейку, чтобы убедиться, что он приклеен прямо). Сушить 30 минут.
  • Возьмите другую сторону LSM и приклейте так же, как и первую. Убедитесь, что он находится на расстоянии ½ дюйма от отверстия и что только что прикрепленный SSM приклеен к внутренней стороне доски. Дайте высохнуть в течение 30 минут.
  • На верхний край приклейте последний ССМ. Поскольку у вас есть два LSM с обеих сторон, в зависимости от того, насколько прямо вы их прикрепили, вам может потребоваться отшлифовать стороны SSM, чтобы убедиться, что он подходит (мой отрезок иногда отключается). Сушить 30 минут.
  • Измерьте небольшое пространство между дном ящика и рамой. Отрежьте кусок дерева МДФ с этим размером на 4 дюйма. Вы должны сделать этот кусок близко к ящику, но не касаться его. Он предназначен для поддержки ящика с минимальным трением.
  • Когда все было готово, я покрасил раму спреем, чтобы все детали совпали.

Шаг 4: для зеркала

Для зеркала
Для зеркала
Для зеркала
Для зеркала
Для зеркала
Для зеркала
Для зеркала
Для зеркала

Односторонний клей для пленки, который я купил на Amazon, стоил около 10 долларов. Есть более качественные, которые немного дороже, если вам интересно. То, что я использую, отражает, но вы можете сказать, что это не обычное зеркало, которое вы бы видели в доме. Более дорогие придадут вам такой вид.

  • Очистите стекло с обеих сторон средством для чистки стекол.
  • Разверните односторонний клей и положите сверху стекло. Вырежьте клей так, чтобы с каждой стороны стекла оставалось не менее ½ дюйма.
  • Отложите стакан в сторону и смочите одну его сторону водой. Затем снимите пластиковое покрытие с одностороннего клея и сбрызните только что обнаженную сторону водой.
  • Поместите влажную сторону стекла на влажную сторону клея. Оставьте на 30 минут.
  • Переверните и большим пальцем разгладьте пузырьки между клеем и стеклом. Затем срежьте излишки клея по краям.

Шаг 5: установите Raspbian Stretch

Я впервые погрузился в среду Raspberry Pi, и я начал искать инструкции по установке ОС. В конце концов я нашел на Youtube простой учебник от TeCoEd, в котором описан процесс установки Stretch на SD-карту (с довольно красивым введением). Вот ссылка на это руководство:

По сути, все, что вам нужно сделать, это:

  • Отформатируйте SD-карту, выбрав «Диск»> «Инструменты для работы с диском»> «Форматировать». Загрузите ZIP-файл Raspian Stretch (можно найти здесь:
  • Запишите образ ОС на SD-карту. Для этого TeCoEd использовал Win32 Disk Imager. В итоге я установил balenaEtcher, что показалось немного более простым. (Вот ссылка для загрузки balenaEtcher:
  • В balenaEtcher выберите «Flash From File» и выберите ранее загруженный ZIP-файл. Затем выберите желаемую SD-карту (если не выбрана автоматически). Затем нажмите пикантную кнопку вспышки и подождите, пока произойдет волшебство.

После установки на SD-карту вы можете вставить ее в Raspberry Pi и пройти стандартный процесс настройки Pi.

Шаг 6: Установите OpenCV

Теперь перейдем к деталям, более ориентированным на распознавание лиц. Чтобы распознавать лица, мы должны загрузить библиотеку OpenCV, которая содержит огромное количество инструментов для работы с компьютерным зрением.

Установка OpenCV была для меня самой сложной частью программного обеспечения. Но, следуя многочисленным инструкциям, я наконец нашел руководство Эммета из PiMyLifeUp, которое помогло найти здесь:

Я не буду вдаваться в подробности этих шагов, поскольку вам будет удобнее переходить по ним по ссылке (с приведенными пояснениями и возможностью более простого копирования и вставки прямо с сайта).

Шаг 7. Включите / проверьте камеру

Включение / тестирование камеры
Включение / тестирование камеры
Включить / протестировать камеру
Включить / протестировать камеру

После установки OpenCV оставшаяся часть моего путешествия была завершена с использованием учебника MJRoBot на Hackster.io, который можно найти здесь:

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

Для начала мы должны протестировать камеру, чтобы убедиться, что мы можем снимать видео на экране. Я потратил около часа, пытаясь запустить сценарий, представленный на шаге 3 MJRoBot. На самом деле нам нужно включить камеру на Raspberry Pi (оказывается, было бы неплохо прочитать предоставленные инструкции… ммм нет). Итак, после подключения камеры к правильному порту выполните следующие действия:

  • Откройте командный терминал и введите sudo raspi-config
  • Выберите «Включить камеру» (это можно найти в параметрах устройств).
  • Нажмите "Enter".
  • Зайдите в «Готово» и вам будет предложено перезагрузить компьютер.

Затем выполните следующие действия:

  • Перейдите в главное меню Raspberry (вверху слева)
  • Предпочтения
  • Конфигурация Raspberry Pi
  • Интерфейсы
  • Затем в камере выберите «Включено».
  • Тогда хорошо"

Теперь вы сможете успешно запустить этот скрипт из учебника MJRoBot для проверки камеры (помните, что весь этот код и более подробное описание можно найти в предоставленной ссылке выше на руководство MJRobot):

импортировать numpy как np

import cv2 cap = cv2. VideoCapture (0) cap.set (3, 640) # установить ширину cap.set (4, 480) # установить высоту while (True): ret, frame = cap.read () frame = cv2. flip (frame, -1) # Повернуть камеру по вертикали gray = cv2.cvtColor (frame, cv2. COLOR_BGR2GRAY) cv2.imshow ('frame', frame) cv2.imshow ('gray', gray) k = cv2.waitKey (30) & 0xff if k == 27: # нажмите 'ESC', чтобы выйти из break cap.release () cv2.destroyAllWindows ()

Предыдущий код должен отображать два окна, одно в цвете, а другое в оттенках серого. Если вы зашли так далеко, я думаю, вы заслуживаете хорошего бутерброда.

Шаг 8: Сбор данных и обучающих данных

Сбор данных и обучающих данных
Сбор данных и обучающих данных
Сбор данных и обучающих данных
Сбор данных и обучающих данных
Сбор данных и обучающих данных
Сбор данных и обучающих данных

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

Есть еще три скрипта, которые нужно запустить, прежде чем мы сможем все это заработать. Первый предназначен для сбора данных, второй - для их обучения, а последний - для распознавания. Сбор данных требует, чтобы реальные изображения лица были сделаны и сохранены в определенном месте для обучения. Создатель этого кода сделал все это очень простым, поэтому я рекомендую следовать этим инструкциям, чтобы избежать головной боли.

Откройте командную строку и создайте новый каталог, назвав его чем-нибудь забавным (я назвал свой FaceRec)

mkdir FaceRec

Теперь смените каталог на FaceRec и создайте подкаталог, обязательно назовите его набором данных

компакт-диск FaceRec

набор данных mkdir

Пока мы это делаем, мы также можем создать другой подкаталог с именем trainer

mkdir трейнер

Теперь вы можете запустить и следовать указаниям первого скрипта, который будет делать снимки пользователя. (Просто предупреждайте, не забудьте ввести идентификатор пользователя как 1, 2, 3 и т. Д.)

import cv2import os cam = cv2. VideoCapture (0) cam.set (3, 640) # установить ширину видео cam.set (4, 480) # установить высоту видео face_detector = cv2. CascadeClassifier ('haarcascade_frontalface_default.xml') # Для каждого человек, введите один числовой идентификатор лица face_id = input ('\ n введите идентификатор пользователя end press ==>') print ("\ n [INFO] Инициализация захвата лица. Посмотрите в камеру и подождите…") # Инициализируйте индивидуальное количество лиц выборки count = 0 while (True): ret, img = cam.read () img = cv2.flip (img, -1) # перевернуть видеоизображение по вертикали серым = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) faces = face_detector.detectMultiScale (серый, 1.3, 5) для (x, y, w, h) в гранях: cv2.rectangle (img, (x, y), (x + w, y + h), (255, 0, 0), 2) count + = 1 # Сохранить захваченное изображение в папку наборов данных cv2.imwrite ("dataset / User." + Str (face_id) + '.' + Str (count) + ".jpg", серый [y: y + h, x: x + w]) cv2.imshow ('image', img) k = cv2.waitKey (100) & 0xff # Нажмите 'ESC' для выхода из видео, если k == 27: break elif count> = 30: # Возьмите 30 образцов лица и остановите видео-паузу k print ("\ n [INFO] Выход из программы и очистка") cam.release () cv2.destroyAllWindows ()

На этом этапе убедитесь, что вы установили подушку на Pi. Если нет, запустите команду:

pip install подушка

После этого вы можете запустить обучающий сценарий (второй сценарий), который без проблем предоставит вам файл.yaml, который будет использоваться в окончательном сценарии

import cv2import numpy as np from PIL import Image import os # Путь к базе данных изображений лиц path = 'dataset' распознаватель = cv2.face. LBPHFaceRecognizer_create () Detector = cv2. CascadeClassifier ("haarcascade_frontalface_default.xml"); # функция для получения изображений и данных меток def getImagesAndLabels (path): imagePaths = [os.path.join (path, f) для f в os.listdir (path)] faceSamples = ids = для imagePath в imagePaths: PIL_img = Image.open (imagePath).convert ('L') # преобразовать его в оттенки серого img_numpy = np.array (PIL_img, 'uint8') id = int (os.path.split (imagePath) [- 1]. split (".") [1]) Faces = DetectMultiScale (img_numpy) для (x, y, w, h) в лицах: faceSamples.append (img_numpy [y: y + h, x: x + w]) ids.append (id) return faceSamples, ids print ("\ n [INFO] Обучение лиц. Это займет несколько секунд. Подождите…") faces, ids = getImagesAndLabels (path) распознаватель.train (faces, np.array (ids)) # Сохраните модель в trainer / trainer.yml распознаватель.write ('trainer / trainer.yml') # распознаватель.save () работала на Mac, но не на Pi # Распечатайте количество обученных лиц и завершите программу печати ("\ n [INFO] {0} лица обучены. Выход из программы».format (len (np.unique (ids))))

Что круто в этом наборе скриптов, так это то, что в систему можно ввести несколько лиц, что означает, что несколько человек могут получить доступ к внутренностям зеркала, если захотят.

Ниже у меня есть сценарий сбора данных и сценарий обучения, доступные для загрузки.

Шаг 9: время распознавания лица

Время распознавания лица
Время распознавания лица
Время распознавания лица
Время распознавания лица

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

Мы начнем с импорта всех необходимых нам модулей, а затем установим режим GPIO на GPIO. BCM.

импортировать numpy как np

import os import time import RPi. GPIO as GPIO GPIO.setwarnings (False) GPIO.setmode (GPIO. BCM)

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

ControlPin = [14, 15, 18, 23]

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

GPIO.setup (ControlPin , GPIO. OUT)

GPIO.output (ControlPin , 0) GPIO.setup (2, GPIO. IN, pull_up_down = GPIO. PUD_DOWN)

Следующие две переменные - это последовательности, которые мы будем использовать для управления двигателем. Я узнал эту информацию из замечательного видео Гавена Макдональда, которое я настоятельно рекомендую посмотреть, поскольку он подробно описывает не только код, но и сам двигатель (можно найти здесь: https://www.youtube.com/embed/Dc16mKFA7Fo). По сути, каждая последовательность будет повторяться с использованием вложенных циклов for в будущих функциях openComp и closeComp. Если вы присмотритесь, seq2 - полная противоположность seq1. Ага, как вы уже догадались. Один предназначен для движения двигателя вперед, а другой - для движения назад.

seq1 =

seq2 =

Начиная с нашей функции openComp, мы создаем цикл for, который будет повторяться 1024 раза. Согласно видео Макдональда, 512 итераций обеспечат полный оборот двигателя, и я обнаружил, что около двух оборотов - это хорошая длина, но ее можно регулировать в зависимости от размеров человека. Следующий цикл for состоит из 8 итераций, чтобы учесть 8 массивов, найденных в seq1 и seq2. И, наконец, последний цикл for повторяется четыре раза для четырех элементов, которые находятся в каждом из этих массивов, а также для 4 контактов GPIO, к которым мы подключили наш двигатель. Строка внизу выбирает вывод GPIO, а затем включает или выключает его в зависимости от того, на какой итерации он включен. Строка после обеспечивает некоторое буферное время, чтобы наш двигатель вообще не вращался. После того, как мотор вращается, чтобы выдвинуть ящик, он засыпает на 5 секунд, прежде чем двигаться дальше. Это время можно настроить здесь или включить закомментированный код, который позволяет использовать кнопку для пересылки сценария, а не таймер.

для i в диапазоне (1024):

for halfstep in range (8): for pin in range (4): GPIO.output (ControlPin [pin], seq1 [halfstep] [pin]) time.sleep (.001) '' 'while True: if GPIO.input (2) == GPIO. LOW: перерыв; '' 'time.sleep (5)

Аналогичным образом работает функция closeComp. После того, как двигатель вернется в исходное положение, я перехожу к установке наших последних выводов GPIO на низкий уровень, чтобы убедиться, что мы не тратим впустую энергию, а затем добавляю еще три секунды времени, прежде чем двигаться дальше.

для i в диапазоне (1024):

for halfstep in range (8): for pin in range (4): GPIO.output (ControlPin [pin], seq2 [halfstep] [pin]) time.sleep (.001) print ("Compartment Closed") GPIO.output (ControlPin [0], 0) GPIO.output (ControlPin [3], 0) time.sleep (3)

Основная часть следующей части используется для настройки камеры и запуска распознавания лиц. Опять же, инструкции MKRoBot более подробно относятся к деталям, но пока я просто показываю детали, используемые для зеркала.

Сначала я изменил имена списков, чтобы мое имя было в индексе, который я присвоил ему при сборе данных (в моем случае 1). А затем я установил остальные значения на None, так как у меня больше не было лиц в наборе данных.

names = ['None', 'Daniel', 'None', 'None', 'None', 'None']

Наши последние несколько строк кода реализованы в цикле thicc for-loop. Я создал переменную для хранения достоверности в виде целого числа (intConfidence) до того, как достоверность переменной будет преобразована в строку. Затем я использую оператор if, чтобы проверить, превышает ли доверие 30 и совпадает ли идентификатор (какого человека обнаруживает компьютер, в данном случае «Даниэль») моему имени. После подтверждения вызывается функция openComp, которая (как объяснялось ранее) перемещает двигатель, выключается через 5 секунд, а затем переходит к closeComp, который перемещает двигатель в противоположном направлении и выполняет некоторую очистку перед продолжением цикла thicc.

если intConfidence> 30 и id == 'Daniel':

openComp () closeComp ()

Я обнаружил здесь ошибку: иногда после возврата closeComp код продолжается, но условный оператор if снова оказывается истинным, как если бы он читал видеопоток, который все еще находится в буфере. Хотя это случается не каждый раз, я еще не нашел способ гарантировать, что этого никогда не произойдет, поэтому, если у кого-то есть какие-то идеи, просто дайте мне знать в комментариях.

Вот весь этот скрипт в одном месте (и чуть ниже это загружаемый):

импорт cv2

import numpy as np import os import time import RPi. GPIO as GPIO GPIO.setwarnings (False) GPIO.setmode (GPIO. BCM) ControlPin = [14, 15, 18, 23] для i в диапазоне (4): GPIO.setup (ControlPin , GPIO. OUT) GPIO.output (ControlPin , 0) GPIO.setup (2, GPIO. IN, pull_up_down = GPIO. PUD_DOWN) seq1 =

Шаг 10: Установка Pi и подключение двигателя

Установка Pi и подключение двигателя
Установка Pi и подключение двигателя
Установка Pi и подключение двигателя
Установка Pi и подключение двигателя
Установка Pi и подключение двигателя
Установка Pi и подключение двигателя

Установить Raspberry Pi на раму было довольно просто. Я разработал небольшой локоть под углом 90 градусов, на одном лице которого было отверстие, а на другом - полностью плоское. После 3D-печати два из них можно прикрепить винтами к Raspberry Pi через его монтажные отверстия (я использовал два отверстия с каждой стороны контактов GPIO).

Затем я применил суперклей на противоположных сторонах колен, напечатанных на 3D-принтере, чтобы приклеить Pi прямо над ящиком на раме. Дав клею высохнуть, я смог легко и удобно снять или поставить Pi на место всего двумя винтами. У меня есть файл.stl для локтя, указанный ниже.

Теперь просто подключите драйвер двигателя к PI с IN1, IN2, IN3, IN4, подключив его к GPIO 14, 15, 18, 23 соответственно. Наконец, подключите контакты 5 В и заземления платы контроллера к выходам 5 В и контактам заземления Pi.

Вот ссылка на распиновку Pi для справки:

Шаг 11: Установка камеры

Монтаж камеры
Монтаж камеры
Монтаж камеры
Монтаж камеры
Монтаж камеры
Монтаж камеры

Установка камеры была немного менее надежной, чем у Pi, но этот метод выполнил свою работу. После разработки и печати тонкой балки с двумя отверстиями на каждом конце я прикрепил балку к Rasberry Pi через монтажное отверстие. Затем просто прикрепите камеру к противоположному концу балки другим винтом. Та-да! Выглядит неплохо.

Шаг 12: Создание и установка механизма перемещения ящика

Создание и установка механизма перемещения ящика
Создание и установка механизма перемещения ящика
Создание и установка механизма перемещения ящика
Создание и установка механизма перемещения ящика
Создание и установка механизма перемещения ящика
Создание и установка механизма перемещения ящика

Этот шаг стал легким благодаря неизменно великодушным дарам сообщества разработчиков. После быстрого поиска на Thingiverse мне удалось найти линейный привод, созданный TucksProjects (здесь: https://www.thingiverse.com/thing:2987762). Все, что оставалось сделать, это вставить его на SD-карту и позволить принтеру сделать всю работу.

В итоге я перешел на Fusion 360 и отредактировал шпору, так как вал моего двигателя был слишком большим для вала, предоставленного TucksProjects. У меня есть.stl для этого ниже. После того, как печать была сделана, нам просто нужно собрать ее, поместив шпильку на вал двигателя, а затем прикрепив стороны двигателя и корпуса двумя винтами (убедитесь, что вы поместили стойку между ними, прежде чем закрывать ее). В итоге мне пришлось отрезать полдюйм от стойки, чтобы она поместилась между ящиком и рамой.

Теперь осталось только прикрепить механизм к раме и ящику. «НО КАК МЫ СДЕЛАЕМ ЭТО?» Вы спрашиваете… да, скажите это вместе со мной: Super Glue. Как показано на рисунках выше, просто поместите механизм напротив нижней части рамы и прижмите его к дереву, по которому скользит ящик. Здесь очень важно, чтобы вы старались расположить стойку / механизм как можно более параллельно раме, чтобы при движении механизма он толкал ящик прямо, а не под углом. После высыхания клея нанесите еще немного клея на край решетки, переместите ящик на место и дайте ему высохнуть. После завершения у нас есть прочный механизм, чтобы выдвигать и выдвигать секретный ящик.

Шаг 13: добавляем картон за зеркалом

Добавление картона за зеркалом
Добавление картона за зеркалом
Добавление картона за зеркалом
Добавление картона за зеркалом
Добавление картона за зеркалом
Добавление картона за зеркалом

Я обнаружил, что для того, чтобы эта двусторонняя пленка выглядела более зеркальной, размещение картона за стеклом хорошо служит нашей цели. Используемый картон идет в комплекте с рамой, но подойдет любой отрезанный по размеру кусок. Это также гарантирует, что свет от светодиода камеры, контроллера мотора или Pi не будет отображаться с другой стороны зеркала. Когда все будет на своих местах, отметьте карандашом место на картоне камеры. Затем с помощью бритвы вырежьте прямоугольник, чтобы камера могла смотреть сквозь него, когда она находится на месте.

Шаг 14: надевание последней детали

Надеваем последнюю пьесу
Надеваем последнюю пьесу
Надеваем последнюю пьесу
Надеваем последнюю пьесу

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

Шаг 15: финал

Финал
Финал
Финал
Финал

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

Общий рейтинг: 10/10

Комментарии: # wouldNotTryAgain… если я не смогу следовать этим инструкциям;)

Испытание секретного отсека
Испытание секретного отсека
Испытание секретного отсека
Испытание секретного отсека

Главный приз в испытании секретного отсека

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