Raspberry Pi + nouvelle caméra HQ = PiDSLR (article invité de David Booth!)

par David Booth, Hitchin Hackspace

Aperçu

On m’a prêté un nouvel appareil photo Raspberry Pi de haute qualité (HQ) avec à la fois l’objectif grand angle 6 mm et le téléobjectif 16 mm par un bienfaiteur très généreux. C’était pour que je puisse créer une lightbox à 360 degrés avec une caméra HQ intégrée pour prendre des photos cohérentes et rotatives de robots lors de la prochaine Pi Wars un événement.

En ma possession, je voulais prendre un tas de photos pour voir les résultats et les inspecter pour la qualité d’image, la capacité de collecte de lumière, le contrôle de la mise au point et quelques autres fonctionnalités. La façon la plus simple pour moi de le faire était de fabriquer un appareil photo portable où je puisse le mettre à l’épreuve, d’où l’idée de PiDSLR cinglé dans ma tête. (Je sais que c’est techniquement un appareil photo sans miroir, mais je pensais que le nom PiDSLR était plus cool!)

Objectifs

  1. Concevez et imprimez en 3D un support simple pour que l’appareil photo se connecte à un Raspberry Pi.
  2. Créez un moyen de visualiser un aperçu en direct afin de pouvoir focaliser l’objectif lors de vos déplacements.
  3. Créez un moyen de déclencher une photo à prendre.
  4. Mettez le Raspberry Pi HQ Camera and lens kit prêté à l’épreuve.

Mettre tous ensemble

En n’utilisant que des pièces que je traînais dans la maison, j’avais besoin de trouver un moyen de faire fonctionner cela. J’ai Raspberry Pis « en haut du wazzu », et j’ai la nouvelle caméra HQ donc ce n’était pas un problème.

La création de l’écran d’aperçu posait un peu un dilemme. Ayant pris «quelques» photos dans mon passé (probablement environ 10 par jour en moyenne, tous les jours au cours des 10 dernières années), je sais qu’à l’extérieur, les écrans de prévisualisation peuvent facilement être effacés, donc je voulais opter pour un Aperçu du style du viseur électronique (EVF). J’ai cherché pendant un certain temps et j’ai constaté que j’avais quelques options dans ma maison qui convenaient à la facture.

Première option était mon ancien Panasonic FZ20 qui a un ViewFinder électronique ½ pouces (EVF). Un peu de recherche sur Google sans résultat sur la façon de connecter quelque chose comme ça à un Pi et j’ai décidé de ne pas détruire quelque chose qui, techniquement, fonctionne toujours.

Deuxième option était un Écran Adafruit 128 × 128 TFT 1,4 pouces que j’ai utilisé pour Pi Eyes dernier Halloween que je pouvais utiliser en conjonction avec un seul Google Cardboard objectif pour créer un EVF fait maison. La recherche sur Google a montré que ce ne serait pas simple à configurer. Il y a peu d’informations précieuses qui me permettront d’utiliser l’écran avec l’interface graphique de bureau Raspbian, et je ne voulais vraiment pas suivre la voie d’un écran d’aperçu de tampon d’image sur mesure pour quelque chose qui n’est qu’un test. Après avoir joué un peu avec les scripts Pi Eyes, j’ai réussi à faire fonctionner l’écran comme un bureau pour Raspbian, mais en regardant à travers l’objectif Google Cardboard, j’ai tout agrandi, donc je regardais les pixels RVB individuels plutôt qu’un aperçu de l’image, donc J’ai dû abandonner.

Troisième option était un vieux Écran tactile Adafruit 320 × 240 J’ai acheté il y a des années pour quelque chose dont je ne me souviens pas. Il se connecte parfaitement au Raspberry Pi via les en-têtes GPIO, s’intègre à l’intérieur mais remplit l’empreinte Pi, il semble donc raisonnable et dispose d’un script de configuration du fabricant qui le configure pour afficher le bureau Raspbian…BUT!

Concevoir la monture

Connaissant mon chemin autour d’une imprimante 3D et d’un système de CAO, je savais que je voulais imprimer un support pour l’appareil photo. Je ne voulais pas créer quelque chose qui prendrait des heures à imprimer mais je voulais quelque chose de soigné et de pratique. L’idée d’une simple plaque de base sur laquelle le Pi serait monté d’un côté et la caméra de l’autre était le choix évident. Au moins pour un test, de toute façon. J’ai commencé par utiliser l’appareil photo sur un morceau de papier comme pochoir et je l’ai dessiné, en mettant des points dans les trous de montage. J’ai ensuite placé un Pi sur le croquis et j’ai également dessiné ses points de montage. La position du connecteur de la caméra sur le Pi et la caméra était assez bien alignée pour que je puisse réutiliser l’un des points de montage entre eux et ainsi économiser un boulon! ?

J’ai ensuite utilisé Onshape pour dessiner l’esquisse, extruder et congé (pour le style d’arrondi). Le découpage du dessin dans Cura a nécessité 38 minutes d’impression, ce qui correspond bien à mon délai « moins d’une heure, c’est très bien ».

Il est trop facile de ne pas prendre en compte les composants à l’arrière des PCB lors de la conception de supports 3D. Et ce n’était pas une exception. Lors de l’impression, j’ai remarqué que j’aurais besoin d’une entretoise entre le Pi et le support, car les têtes de boulon tenant la caméra de l’autre côté toucheraient l’arrière du Raspberry Pi, ce qui pourrait potentiellement court-circuiter les composants. Une solution simple a été de concevoir et d’imprimer rapidement des tuyaux en plastique courts comme entretoises.

Vous pouvez trouver l’objet Onshape pour la monture ici.

Raspberry Pi nouvelle camera HQ PiDSLR article invite

Assemblage des pièces

L’assemblage était super simple, en théorie. Tout d’abord, j’ai attaché la caméra au support avec 3 boulons et entretoises, laissant le trou de boulon partagé vide pour l’instant. Ensuite, j’ai retourné la carte et monté le Pi à l’arrière, en pensant à insérer les entretoises à l’arrière et également pour le quatrième trou de boulon partagé pour la caméra.

La difficulté est venue en essayant de serrer les écrous M2,5 autour de la caméra car ils sont très proches du cadre et tout autre chose qu’une pince à bec effilé ne serait tout simplement pas facile à installer. Les pinces ne sont pas non plus géniales car elles ont tendance à glisser et à causer de la frustration, alors rappelez-vous: si vous reproduisez ce projet, prenez votre temps pour le faire!

Avant de fixer l’écran Adafruit 320 × 240, je pouvais soit souder des boutons directement sur les pads pass-through GPIO ou, si je voulais un déclencheur extensible, je pouvais souder des fils courts sur le pad # 27 et les visser dans un prise femelle à vis 3,5 mm. J’ai décidé que je voulais le bouton de déclenchement, j’ai donc soudé quelques fils à un bouton-poussoir momentané et les ai vissés dans une prise de borne à vis mâle de 3,5 mm.

Tout ce qui était alors nécessaire était d’insérer l’écran sur les broches GPIO.

Des photos de la construction, à différentes étapes, peuvent être trouvées ici.

Logiciel

Tout d’abord, vous devez faire l’étape évidente de installation de Raspbian sur une carte micro SD. Ouvrez un terminal, puis entrez les commandes suivantes pour mettre à jour votre Pi:

sudo apt update

sudo apt upgrade

Ensuite, activez le module de caméra en exécutant:

sudo raspi-config

et en utilisant le menu Interfaces.

Ensuite, accédez à votre répertoire personnel:

cd ~

Installez l’écran Adafruit 320 × 240 en suivant leurs instructions. IMPORTANT: Assurez-vous que vous dites non d’avoir le PiTFT comme console de texte et choisissez Oui lorsqu’on lui a demandé si vous voulez que ce soit un «miroir HDMI».

Une fois que vous avez configuré l’écran, vous pouvez télécharger le module Python pour l’écran Adafruit PiTFT créé par elParaguayo qui gère les pressions sur les boutons et le rétro-éclairage.

le correct moyen d’obtenir le module serait de cloner le dépôt:

git clone https://github.com/elParaguayo/PiTFT_Screen.git

et déplacez le fichier pitftgpio.py dans votre dossier personnel (n’oubliez pas le « . » à la fin!):

mv PiTFT_Screen/pitftgpio.py .

Ou vous pouvez faire comme moi, qui consiste simplement à télécharger le fichier Python dont vous avez besoin:

wget https://raw.githubusercontent.com/elParaguayo/RPI-Info-Screen/PiTFT/pitftgpio.py

Nous devons maintenant créer un fichier Python qui teste les pressions sur les boutons et appelle la commande raspistill.

nano camera_button.py

Saisissez les informations suivantes dans le fichier camera_button.py:

from pitftgpio import PiTFT_GPIO
import datetime
import subprocess

pitft = PiTFT_GPIO()
last_pressed = datetime.datetime.now()
while True:
    if pitft.Button3:  # pin 27 on this board
        # Get current date/time of buton press
        now = datetime.datetime.now()

        # Stop multiple sequential button presses by testing time
        # difference to the last known pressed date/time.
        if (now - last_pressed).total_seconds() >= 0.5:  # allow if over half a second between presses
            last_pressed = now
            print "Camera button pressed"

            # Format out the date/time for appending to the filename
            filename1 = now.strftime("%Y_%m_%d-%H%M%S")

            # Format out the command we want to start and call it using subprocess module
            cmd = "raspistill -vf -hf -rot 180 -t 10000 -o /home/pi/Pictures/img_{}.jpeg".format(filename1)
            subprocess.call(cmd, shell=True)

Courir au démarrage

Il existe plusieurs façons d’exécuter une commande au démarrage du Raspberry Pi. Le mieux serait de créer un systemctl script qui doit démarrer au démarrage. L’avantage avec cela est qu’il est facile de démarrer / arrêter / redémarrer le script via la ligne de commande et il peut également être demandé de démarrer une fois que les composants critiques sont prêts. Le principal inconvénient de cette méthode est que je ne me souviens jamais comment créer le script de démarrage ou les commandes que vous utilisez pour l’activer. (Mike: J’ai couvert cela pour un script d’arrêt précédemment)

Une deuxième manière, plus facile et pour autant que je sache, encore raisonnable est d’utiliser l’option @reboot dans crontab. Pour ce faire, modifiez le fichier crontab:

crontab -e

et ajoutez la ligne suivante au bas du fichier:

@reboot export DISPLAY=:0 && python /home/pi/camera_button.py &

Une troisième façon et désapprouvée (et la façon dont j’ai utilisé parce que c’est très simple) est d’ajouter les lignes suivantes au fichier /etc/rc.local.

# Tell raspistill to show its preview on the local screen.
export DISPLAY=:0
# Run the python camera script
/usr/bin/python /home/pi/camera_button.py &

IMPORTANT: le symbole ‘&’ à la fin des commandes ci-dessus est critique. Cela indique à l’invite bash d’exécuter le script Python en arrière-plan, sans attendre qu’il se termine. Sans ce symbole, le Pi restera bloqué et ne démarrera pas du tout.

Résultats

Il faut quelques essais pour se familiariser avec la mise au point manuelle dans le délai de prévisualisation de 10 secondes et j’ai certainement trouvé le téléobjectif 16 mm beaucoup plus facile à utiliser à cet égard. (Un guide et une note sur la mise au point de l’objectif de 6 mm peuvent être trouvés ici). Les photos résultantes sont une amélioration significative par rapport à l’appareil photo Raspberry Pi standard, mais, évidemment, je n’échangerai pas mon appareil photo reflex numérique pour cela pour le moment (bien que l’autonomie de cinq à dix heures de la batterie que j’obtiendrais du Sandstrom 12,8 ampères USB) la batterie est meilleure que la durée de vie de la batterie de mon reflex numérique!)

Toutes les photos en pleine résolution prises avec la caméra HQ peuvent être trouvées ici.

Voici ma configuration statique complète sur un trépied avec bouton de déclenchement attaché:

1590736764 182 Raspberry Pi nouvelle camera HQ PiDSLR article invite

Divulgation complète: les photos suivantes de la caméra Pi HQ ont été légèrement modifiées dans LightRoom pour la correction des couleurs, mais c’est mon processus standard après avoir pris des photos avec mon reflex numérique de toute façon.

Téléobjectif 16 mm

1590736764 395 Raspberry Pi nouvelle camera HQ PiDSLR article invite

1590736764 286 Raspberry Pi nouvelle camera HQ PiDSLR article invite

1590736765 905 Raspberry Pi nouvelle camera HQ PiDSLR article invite

1590736765 560 Raspberry Pi nouvelle camera HQ PiDSLR article invite

1590736765 262 Raspberry Pi nouvelle camera HQ PiDSLR article invite

1590736765 50 Raspberry Pi nouvelle camera HQ PiDSLR article invite

1590736765 497 Raspberry Pi nouvelle camera HQ PiDSLR article invite

1590736765 866 Raspberry Pi nouvelle camera HQ PiDSLR article invite

Objectif grand angle 6 mm

1590736765 697 Raspberry Pi nouvelle camera HQ PiDSLR article invite

1590736765 739 Raspberry Pi nouvelle camera HQ PiDSLR article invite

1590736765 527 Raspberry Pi nouvelle camera HQ PiDSLR article invite