Ничего не найдено :(
    В гостях у Самоделкина! » Электроника » Большой фотоаппарат MagicBox на Raspberry PI

    Большой фотоаппарат MagicBox на Raspberry PI


    Эту самоделку мастер сделал для городской выставки самодельных электронных устройств. Работает устройство следующим образом:
    При нажатии на синюю кнопку, на лицевой части устройства, она начинает мигать и через 3 секунды срабатывает камера. На другой стороне камеры находится монитор, который показывает обратный отсчет 3-2-1, и после того, как снимок сделан, можно предварительно просмотреть фотографии.

    При нажатии на желтую кнопку, снимок удаляется, при нажатии на зеленую отправляется в Twitter и Facebook.

    Свое устройство мастер назвал MagicBox.

    Инструменты и материалы:
    -Raspberry PI;
    -Raspberry PI Camera;
    -Три большие кнопки;
    -TFT-LCD монитор с VGA / HDMI;
    -МДФ;
    -Крепеж;
    -Петли;
    -Циркулярная пила;
    -Шуруповерт;
    -Рулетка;
    -Маркер;
    -Фольга;
    -Аэрозольная краска;



    Шаг первый: корпус
    Корпус представляет собой коробку с размерами: 60 см х 40 см х 30 см. Размер зависит от монитора, который будет использоваться. Панели МДФ были вырезаны лазером. Сзади нужно вырезать 3 отверстия - две для кнопок и одну для монитора. Спереди 2 отверстия - одно для большой кнопки, а другое - меньше - для камеры Raspberry PI.






    Для доступа к внутренней части задняя крышка закрепляется на петлях. Так же мастер устанавливает мебельные амортизаторы.








    Шаг второй: монитор
    С монитора был снят пластиковый корпус. Затем он был закреплен на задней панели.









    Шаг третий: отделка
    Для имитации объектива мастер использовал картонную коробку. По центру коробки было сделано отверстие и установлена камера. Корпус мастер оклеил утеплителем, а затем покрасил. Затем часть объектива и верхнюю часть корпуса оклеил фольгированным материалом.










    Шаг четвертый: программирование
    Дальше мастер устанавливает Рассбери, монитор, кнопки, блок питания.

    Большой фотоаппарат MagicBox на Raspberry PI



    Производит монтаж схемы.










    Дальше мастер программирует устройство. Согласно инструкции с официального сайта устанавливает ОС.
    После загрузки Raspberry PI нам нужно включить камеру Raspberry PI. Для этого воспользуемся инструментом raspi-config. Пишем команду
    sudo raspi-config
    Выбираем вариант 5 - Параметры интерфейса
    Выбираем P1 - включить / отключить подключение к камере Raspberry PI
    Выбираем - да
    Далее - ОК и Готово
    Перегружаем.

    Дальше мастер устанавливает библиотеки отсюда.
    python-pil.imagetk для работы с изображениями
    python-rpi.gpio для доступа к GPIO PINS
    python-picamera для доступа к камере Raspberry PI
    Tweepy чтобы поделиться фото в твиттере
    Facebook-SDK, чтобы поделиться на странице Facebook
    sudo apt-get install python3-pil.imagetk python3-rpi.gpio python3-picamera python3-tweepy python3-pip
    Используйте Python pip для установки facebook-sdk
    sudo pip3 install facebook-sdk
    Одним из требований, которые мастер установил к этому проекту, было то, что эта программа должна была работать в режиме CLI (разновидность текстового интерфейса). Итак, нам нужно вывести изображение с камеры на консоль. Для этого мастер использует Python Picamera. После этого pil.imagetk, чтобы отобразить наложение поверх предварительного просмотра камеры.
    Эта небольшая программа обеспечит предварительный просмотр камеры.
    #!/usr/bin/env python
    
    import time
    import picamera
    from time import sleep
    
    camera = picamera.PiCamera()
    
    # Set the resolution you want
    camera.resolution = (1280,1024)
    camera.framerate = 24
    camera.start_preview()
    try:
        while (True):
            sleep(1)
    except (KeyboardInterrupt, SystemExit):
        print ("Exiting...")
        camera.stop_preview()

    Для просмотра команда: python cameraPreview.py






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

    Создает изображение в формате PNG и устанавливает прозрачный фон. Изображение PNG с номером 1 с разрешением 256x512 пикселей. Его имя 1.png. Помещается в тот же каталог, что и скрипт.

    Следующий код будет перекрывать 1.png с предварительным просмотром камеры.
    import picamera
    from PIL import Image
    from time import sleep
    
    with picamera.PiCamera() as camera:
        camera.resolution = (1920,1080)
        camera.framerate = 24
        camera.start_preview()
    
        # load image
        img = Image.open('1.png')
        
        # create
        pad = Image.new('RGB', (
            ((img.size[0] + 31) // 32) * 32,
            ((img.size[1] + 15) // 16) * 16,
            ))
    
        pad.paste(img, (0,0))
    
        o = camera.add_overlay(pad.tobytes(), size=img.size)
    
        o.alpha = 128
        o.layer = 3
    
        while True:
            sleep(1)

    Для просмотра: python imageOverlay.py
    Создает изображения 2 и 3. Дальше создает обратный отсчет с наложенными изображениями используя код:
     import picamera
    from PIL import Image
    from time import sleep
    
    with picamera.PiCamera() as camera:
        camera.resolution = (1280,1024)
        camera.framerate = 24
        camera.start_preview()
    
        # load image
        img1 = Image.open('3.png')
        img2 = Image.open('2.png')
        img3 = Image.open('1.png')
        # create
        pad = Image.new('RGB', (
            ((img1.size[0] + 31) // 32) * 32,
            ((img1.size[1] + 15) // 16) * 16,
            ))
    
        pad.paste(img1, (0,0))
    
        o = camera.add_overlay(pad.tobytes(), size=img1.size)
        o.alpha = 128
        o.layer = 3
    
        sleep(2)
    
    
        #remove previous overlay
        camera.remove_overlay(o)
    
    
        pad.paste(img2, (0,0))
        o = camera.add_overlay(pad.tobytes(), size=img2.size)
        o.alpha = 128
        o.layer = 3
    
        sleep(2)
    
    
        # remove previous overlay
        camera.remove_overlay(o)
    
        pad.paste(img3, (0,0))
        o = camera.add_overlay(pad.tobytes(), size=img3.size)
        o.alpha = 128
        o.layer = 3
    
        sleep(2)

    Проверяет: python imageOverlayCounter.py
    Дальше объединяет код снимка и код обратного отсчета.
    import picamera
    from PIL import Image
    from time import sleep
    
    def overlayCounter():
        # load image
        img1 = Image.open('3.png')
        img2 = Image.open('2.png')
        img3 = Image.open('1.png')
    
        # create
        pad = Image.new('RGB', (
            ((img1.size[0] + 31) // 32) * 32,
            ((img1.size[1] + 15) // 16) * 16,
        ))
        
        # paste the overlay - 3
        pad.paste(img1, (0,0))
        o = camera.add_overlay(pad.tobytes(), size=img1.size)
        o.alpha = 128
        o.layer = 3
        sleep(1)
        
        # Remove previous overlay
        camera.remove_overlay(o)
        
        # paste the overlay - 2
        pad.paste(img2, (0,0))
        o = camera.add_overlay(pad.tobytes(), size=img2.size)
        o.alpha = 128
        o.layer = 3
    
        sleep(1)
    
        #remove previous overlay
        camera.remove_overlay(o)
    
        # paste the overlay - 3
        pad.paste(img3, (0,0))
        o = camera.add_overlay(pad.tobytes(), size=img3.size)
        o.alpha = 128
        o.layer = 3
        sleep(1)
        camera.remove_overlay(o)
    
    camera = picamera.PiCamera()
    camera.resolution = (1280,1024)
    camera.framerate = 24
    camera.start_preview()
    overlayCounter()
    camera.capture('testingCounter.jpg')
    camera.stop_preview()

    Проверяет: python pictureWithTimer.py







    Кнопка представляет собой большую круглую кнопку диаметром около 100 мм с небольшим светодиодом. Светодиод работает от 12 В, но достаточно и 3,3 В Рассбери.


    Прописывает код для кнопки.
    from RPi import GPIO
    takeButton = 17
    ledButton = 27
    
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(takeButton, GPIO.IN, GPIO.PUD_UP)
    GPIO.setup(ledButton,GPIO.OUT)
    
    #Light led
    GPIO.output(ledButton,True)
    # Blocking function
    GPIO.wait_for_edge(takeButton,GPIO.FALLING)
    print ("Button Pressed")
    GPIO.output(ledButton,False)
    GPIO.cleanup()

    Дальше для ее работы с камерой.
    import picamera
    from time import sleep
    from RPi import GPIO
    from PIL import Image
    
    # NOTE: This is what will be the cancel button in the main program
    # I'm just using it here for sake of clarity in the video
    takeButton = 24
    ledCancel = 5
    
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(takeButton, GPIO.IN, GPIO.PUD_UP)
    GPIO.setup(ledCancel,GPIO.OUT)
    
    def onLeds():
        GPIO.output(ledCancel,True)
        sleep(1)
    
    def offLeds():
        GPIO.output(ledCancel,False)
    
    # Function to overlay image
    def overlayCounter():
        #load images
        img1 = Image.open('3.png')
        img2 = Image.open('2.png')
        img3 = Image.open('1.png')
        # Create an overlay
        # Used with img1 because all are the same size
        pad = Image.new('RGB', (
            ((img1.size[0] + 31) // 32) * 32,
            ((img1.size[1] + 15) // 16) * 16,
        ))
        
        # paste the overlay - 3
        pad.paste(img1, (0,0))
        ov = camera.add_overlay(pad.tobytes(), size=img1.size)
        ov.alpha = 200
        # layer is 3 because camera preview is on layer 2
        ov.layer = 3
        sleep(1)
        camera.remove_overlay(ov) 
    
        # paste the overlay - 2
        pad.paste(img2, (0,0))
        ov = camera.add_overlay(pad.tobytes(), size=img2.size)
        ov.alpha = 200
        # layer is 3 because camera preview is on layer 2
        ov.layer = 3
        sleep(1)
    
        camera.remove_overlay(ov)
        
        # paste the overlay - 1
        pad.paste(img3, (0,0))
        ov = camera.add_overlay(pad.tobytes(), size=img3.size)
        ov.alpha = 200
        # layer is 3 because camera preview is on layer 2
        ov.layer = 3
        sleep(1)
        camera.remove_overlay(ov)
    
    camera = picamera.PiCamera()
    camera.resolution = (1280,1024)
    camera.framerate = 24
    camera.start_preview()
    GPIO.wait_for_edge(takeButton,GPIO.FALLING)
    onLeds()
    overlayCounter()
    camera.capture('pushTesting.jpg')
    camera.stop_preview()
    offLeds()
    GPIO.cleanup()

    Дальше мастер создает учетную запись в твиттере. Вам нужно подать заявку на учетную запись разработчика - заполните несколько вопросов и подтвердите свой адрес электронной почты. После этого вы сможете создать новое приложение.

    После создания приложения перейдите к разделу «Ключи» и сгенерируйте код доступа и пароль доступа. Появится окно с ключами. Нужно скопировать один из них.

    Дальше прописывает:
    import tweepy
    
    # Twitter settings
    def get_api(cfg):
        auth = tweepy.OAuthHandler(cfg['consumer_key'], cfg['consumer_secret'])
        auth.set_access_token(cfg['access_token'], cfg['access_token_secret'])
        return tweepy.API(auth)
    
    # Send to twitter
    def sendToTwitter():
        cfg = {
            "consumer_key"      : "",
            "consumer_secret"   : "",
            "access_token"      : "",
            "access_token_secret"   : ""
                                                                    }
    
        api = get_api(cfg)
        # Status Message
        tweet = "Twitter message"
        status = api.update_with_media("jpg_foto_to_Send",tweet)
    
    sendToTwitter()

    jpg_foto_to_send - это изображение, которое будет прикреплено к твиту.



    Дальше мастер загружает код для работы двух кнопок на задней панели.
    pushButtonCameraOverlayDisplayImageLoop.py
    Прикрепленный код к этому шагу является окончательным.

    Можно запустить его при загрузке Raspberry PI, даже не входя в систему. Для этого нужно просто создать этот небольшой скрипт в каталоге, в котором разместили код, - соответственно изменив путь.
    #! / bin / bash 
    cd / home / pi / magicbox 
    python MagicBox.py
    chmod + x start_magicbox.sh
    sudo vi /etc/rc.local
    /home/pi/magicbox/start_magicbox.sh &

    Сохранить и выйти.
    Все файлы изображений должны находиться в том же каталоге, что и скрипт.
    1.png
    2.png
    3.png
    Aenviar.png
    SelectOption.png
    MagicBox.py

    Источник (Source)
    Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.

    Простой, но мощный электромагнит своими руками

    Автоматизация полива приусадебного участка с MudPi

    2
    Идея
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    3
    Описание
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    2
    Исполнение
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    Итоговая оценка: 2.33 из 10 (голосов: 1 / История оценок)

    Добавить комментарий

    3 комментария
    Korolev
    Korolev,
    Вы витаминов попейте, говорят помогает при весеннем обострении
    не перекладывайте с больной головы на здоровую
    xaxa
    pogranec Автор
    Korolev,
    Вы витаминов попейте, говорят помогает при весеннем обострении.
    Korolev
    Ну очень полезный аппарат! Компактная, лёгкая, удобно носить в кармане. Камера отличная, снимки получаются очень качественные и очень быстро! А главное, батареек хватает на годы! Незаменима ребёнку в бассейне! Единственный минус - не из гофрокартона! xaxa

    Привет, Гость!


    Зарегистрируйтесь

    Или войдите на сайт, если уже зарегистрированы...

    Войти

    Добавьте самоделку

    Добавьте тему

    Онлайн чат

    Опрос
    А Вы уже рассказали на сайте о своей самоделке?

    Последние комментарии

    Все комментарии