ЭкспериментКак сделать фотобудку
для кота
И научить питомца выкладывать селфи в Facebook
МАтериал подготовил
Артём Лучко
фотографии
Оля Савельева
Раньше Look At Me много писал о DIY-проектах на основе микроконтроллеров Arduino. В этом году мы будем реализовывать их сами и делиться экспериментами с читателями. В первом выпуске новой рубрики мы совместно с компанией «Амперка» сделали фотобудку для кота, позволяющую делать селфи питомца и выкладывать его фото в Facebook без участия хозяина.
Фотобудка состоит из подвижной приманки, инфракрасного датчика движения и веб-камеры. Заинтересовавшись дёргающейся игрушкой, кот подходит к ней — от этого срабатывает датчик, и камера снимает портрет питомца. После этого фотография попадает в вашу новостную ленту в Facebook. Наш эксперимент не только призван развлечь скучающих офисных сотрудников, но и в очередной раз поднять любопытные юридические и научные вопросы: могут ли животные иметь авторские права, и считается ли их творчество искусством.
Что нужно
Arduino Yún — плата на основе Arduino Leonardo, объединяющая в себе две платформы — Arduino и Linux. Она позволяет использовать в своих проектах подключение к интернету. Arduino-часть имеет микроконтроллер Atmega32u4, а Linux-часть — микрокомпьютер Atheros AR9331 с 64 Мб оперативной и 16 Мб flash-памяти, встроенными Wi-Fi и Ethernet-интерфейсами, USB-хост и слот для microSD. Питается Arduino Yún через разъём micro USB или контакт Vin;
Troyka Shield — удобная плата расширения, которая позволяет подключать большое количество устройств через стандартные трёхпроводные шлейфы без паяльника и брэдбордов;
Контактные колодки Arduino, которые могут стыковаться друг с другом по высоте, чтобы соединять отдельные комплектующие и платы;
Пьезопищалка HPA17A — устройство, извлекающее пищащий звук;
Инфракрасный датчик — сенсор, позволяющий определить препятствие, например, в виде кота;
Микросервопривод FS90 — электромоторчик, управляемый микрокомпьютером, который позволяет установить и удерживать угол поворота колеса. С помощью этого устройства мы будем дёргать приманкой, чтобы заинтересовать кота;
Самая обычная веб-камера Creative HD 720p, которая будет фотографировать кота;
Болтики и гайки;
Хвост от игрушечного пони;
Двухсторонняя клейкая лента;
Прозрачная леска.
Как собрать устройство
Основой фотобудки для кота будут обыкновенные офисные папки-регистраторы из толстого картона. Во внешней части одной из папок с помощью акриловых болтиков устанавливается мозг нашего устройства — плата Arduino Yún с расширением Troyka Shield. Через неё мы подсоединили наши периферийные устройства — камеру, датчик и сервопривод. В этой схеме микроконтроллер Arduino Yún отвечает за сигналы с инфракрасного датчика и управление сервоприводом, а веб-камерой управляет микрокомпьютер Arduino Yún.
Камера и сервопривод прикрепляются на внутренней стороне папки двухсторонней клейкой лентой, а датчик идеально вписывается в заводское отверстие папки.
В папках проделываются дырки, после чего их надо скрепить между собой болтами и гайками, таким образом получив устойчивую треугольную конструкцию. Вы можете поступить и иначе: например, закрепить папку на углу в своей комнате с помощью дюбелей и саморезов.
В качестве приманки мы использовали хвост от игрушечного пони, который закрепили на леске, и «удилище» из обычной кабельной стяжки. Нейлоновая стяжка имеет идеальную гибкость и подвижность, что нам и было нужно. Чтобы «удилище» дёргалось, как было запланировано, к нему привязывается отрезок лески, идущий от рычажка сервопривода. Когда рычаг резко меняет свой угол, приманка подскакивает, привлекая кота.
Как зарегистрировать приложение в Facebook
Знакомство с Arduino Yún стоит начать с регистрации в сервисе Temboo, который содержит массу полезных инструкций и библиотек с кодом. Для начала заведите аккаунт на Temboo и пройдите краткое обучение. Затем выберите платформу, на которой вы будете выполнять проект (в нашем случае это Arduino Yún). Далее вы должны указать, что именно хотите делать с помощью платформы — если постить статусы в Facebook, выбирайте опцию «Update your Facebook status».
Затем отправляйтесь в Facebook dev console, зарегистрируйтесь и решите, что будет представлять собой приложение (из 4 пунктов в нашем случае подходит только последний Website). Далее введите название приложения, например, KittySelfie, выберите категорию, к которой оно относится (Photo), и нажмите «Create App ID».
Чтобы позволить приложению постить фотографии в социальную сеть, вы должны зайти в раздел «Tools & Support» и «Graph API Explorer», чтобы получить уникальный токен. Нажав «Get Access Token», нужно поставить галочку во вкладке «User Data Permissions» у пункта «user_photos», а в «Extended Permissions» галочку «publish_actions». Далее соглашаемся на то, чтобы наше приложение получило доступ к фотографиям и смогло делать посты. Здесь же вы можете указать, кто будет видеть эти посты — только вы, ваши друзья или все пользователи.
После этого в строке «Access Token» вы увидите длинный код, который вам следует сохранить для дальнейшего использования. Этот токен существует для безопасности и подтверждает соединение с Facebook. Токен имеет ограниченный срок действия, и, когда он закончится, его придётся обновлять. Токен придётся вписать в код нашего проекта вместо x'ов в следующей строке: FACEBOOK_ACCESS_TOKEN = "xxxxxxxxxx".
Создав приложение для Facebook, зайдите в Settings в левом столбце и выберите «+ Add Platform», а затем опцию «Website», после чего установите связь со своим аккаунтом в Temboo, добавив в строку «Site URL» следующую запись:
https://{ACCOUNT_NAME}.temboolive.com/callback/
(слово ACCOUNT_NAME замените на имя своего аккаунта в Temboo)
Затем система предложит синхронизировать аккаунты в Facebook и Temboo. Для этого вам нужно зайти в Facebook > OAuth. Чтобы лучше понять, как правильно делается инициализация, посмотрите видео. После этого мы можем выполнять различные действия, например, постить в Facebook.
В нашем случае фотография будет сохраняться ВО внутренней памяти Arduino Yún. Нам нужно её «забрать» оттуда в формате Base64 — то есть в виде огромного буквенно-цифрового текста. Фото сохраняется по пути, указанному в коде (у нас он задан в следующем виде: /www/kitty/photo.jpg).
В Linux-микрокомпьютере нашей платы есть утилита Temboo для взаимодействия с одноимённым сервисом. Передавая ей нужные аргументы, можно загрузить фото. Аргументы у неё сложные, и, чтобы они в коде для Arduino выглядели проще, специалисты сделали «обёртку» в виде shell-скрипта fb_upload_photo.sh, который принимает аргументы в простом виде. Этот скрипт нужен только для постинга фотографий с самого устройства и должен находиться в каталоге /root.
Как залить код в Arduino Yún
Залить код в плату Arduino очень просто. Это делается по Wi-Fi или по Ethernet: нужно подключить устройство к своей локальной сети и открыть сохранённый код в расширении .INO в программе Arduino Software (IDE). В «инструментах» должна появиться ваша плата Arduino Yún и порт Arduino, который определяется в локальной сети самостоятельно. Нажмите «Загрузить», введите пароль (если вы его не меняли, то по умолчанию он будет «arduino»), и код начнёт заливаться в устройство. Займёт это около 3 минут.
Что именно делает этот код
В нашем коде задаются действия для сервопривода, детектора кота и пьезопищалки (последняя нужна для облегчения процесса отладки устройства).
Когда вы запустите код, сначала произойдёт инициализация и настройка различных портов. Затем в консоль выводится «Hello» — сообщение о начале выполнения скетча. Чтобы дополнительно убедиться, что выполнение началось, в самом начале система 1 секунду пищит на частоте 1 кГц.
После этого подсоединяется сервопривод и настраивается детектор приближения. На этом этап Setup завершается, после чего включается функция Loop. Она очень простая — сначала система приманивает кота в течение 60 секунд, дёргая приманкой 10 раз. Происходит это следующим образом: колесо сервопривода находится в положении 90 градусов, через 0,2 секунды положение переводится на 0 градусов. Благодаря этому приманка быстро двигается, привлекая внимание. Дёргается она не совсем монотонно, через каждые 10 движений делается пауза. Между движениями сервопривода посылается сигнал на датчик для проверки, не появился ли кот. Чтобы избежать случайных срабатываний, мы ждём, чтобы объект находился в поле датчика не меньше полусекунды. Если такой объект обнаружен, раздаётся писк, срабатывает камера, и фото отправляется в интернет.
Функция Shoot состоит из 2 частей. Первая — фотографирование, вторая — отправка. И в той и в другой части выполняются программы в Linux, которые уже изначально зашиты в плату Arduino Yún. Снимок сохраняется по конкретному адресу, и мы получаем файл с расширением .Jpeg. После этого выполняется загрузка: запускается программа, где указан Temboo-аккаунт, название приложения и ключ приложения.
Как устройство проверили на коте
Устройство тестировалось в большой стеклянной переговорной офиса Look At Media на двух кандидатах — штатном коте Старки и приглашённом коте Болтике, который живёт у нашей сотрудницы Сони Клусовой. Выяснилось, что заставить играть питомцев в странную конструкцию не так просто. Мы изначально предполагали, что Старки — своенравный и не очень-то игривый кот, поэтому на него особенно никто не надеялся. Наша фотобудка его заинтересовала совсем ненадолго, но в этот момент выяснилось, что инфракрасный датчик просто не видит Старки (вероятно, из-за того, что он чёрного цвета), поэтому его фотографии получить не удалось.
С Болтиком была другая проблема. В отличие от привычного ко всему Старки, его сильно смутило новое пространство и огромное количество людей вокруг. Поэтому заинтересовать его жужжащим агрегатом было ещё сложнее. Но после получаса, проведённого в закрытой комнате, кот всё-таки подошёл к будке и несколько кадров успешно загрузились в «Фейсбук».
Результат
изображение via: shutterstock.com
Комментарии
Подписаться