Le blog d'un Geekus biologicus juvénile

Piège Photo Arduino

Il y a maintenant quelques années, j’ai eu l’occasion de créer un piège photo basé sur une carte Arduino. Ce projet avait pour but de capturer des photos d’animaux sauvages, et de m’amuser un peu en électronique et programmation.

À l’époque, j’avais réalisé un site web en html, pour présenter le projet; mais je ne retrouve plus le code source… C’est con.

Je vais tout de même essayer de présenter ce vieux projet, à nouveau, en espérant que cela puisse intéresser quelqu’un.

Principe

Une caméra automatique du commerce se base généralement sur un détecteur de chaleur (capteur infrarouge), et prends des images au moment où celui-ci détecte un mouvement.

Ces détecteur sont similaires aux détecteurs de présence qu’on peut trouver dans des toilettes publiques, par exemple.

Le projet consiste donc simplement à utiliser un détecteur de mouvement infrarouge (PIR sensor) pour déclencher la prise de vue, réalisée par une caméra numérique.

L’interface entre la caméra et le détecteur est la carte Arduino (dans mon cas une Arduino UNO).

Matériel

Montage

Le montage est très simple: il suffit de brancher le détecteur infrarouge sur l’Arduino, avec la pin analogique du PIR sensor, sur un port analogique de l’Arduino. Il faut aussi brancher le port trigger de la caméra sur une des pins de l’Arduino, de même que pour l’alimentation.

Attention: il ne faut surtout pas brancher la caméra sur son alimentation (câble USB) en même temps que sur l’Arduino; car sinon, votre caméra cramme (c’est du vécu 😢).

Schema Fritzing

Code

Le code est assez simple. Il suffit, dans la function loop, de vérifier l’état du détecteur de mouvement. Si celui-ci est actif, alors on déclenche la prise de vue (et on peux aussi enregistrer la date et l’heure de la prise de vue, dans le shield RTC).

/*
 * piege_photographique.ino
 * Take a photo when motion is detected
 * and record the date of shooting on SD card
 * Samuel ORTION feb2019
 */

#include <SPI.h>
#include <SD.h>
#include <Wire.h> //required for the next library
#include "RTClib.h"

File myFile;
RTC_Millis rtc;

//declare the pins of the compenents:
#define pirPin 3//The PIR motion sensor
#define trigCamera 4//The camera's trigger


int photoNumber;

/*
* Functions:
*/
void photo(){//function for shooting pictures
// "Hold HIGH and trigger quick (<250ms) LOW to take a photo."
digitalWrite(trigCamera, LOW);
delay(50);
digitalWrite(trigCamera, HIGH);
}

void printDate (){
    DateTime now = rtc.now(); //define "now" as object containing the date produced by the RTC
    //the following instruction print the date on the SerialMonitor
    myFile.print("Photo n°");
    myFile.print(photoNumber);
    myFile.print(" : ");
    myFile.print(now.day(), DEC);
    myFile.print('/');
    myFile.print(now.month(), DEC);
    myFile.print('/');
    myFile.print(now.year(), DEC);
    myFile.print('/');
    myFile.print(now.hour(), DEC);
    myFile.print(':');
    myFile.print(now.minute(), DEC);
    myFile.print(':');
    myFile.print(now.second(), DEC);
    myFile.println();//skip a line
}

void setup() {
    //define pinMode:
    pinMode(pirPin, INPUT);
    pinMode(trigCamera, OUTPUT);
    digitalWrite(trigCamera, HIGH);

    //following line sets the RTC to the date & time this sketch was compiled
    rtc.begin(DateTime(F(__DATE__), F(__TIME__)));
    // This line sets the RTC with an explicit date & time, for example to set
    // January 21, 2014 at 3am you would call:
    // rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));

    photoNumber = 0;//initialization of the number of pictures

    if(!SD.begin(10)){
        while (1);
    }
}

void loop() {
    myFile = SD.open("TIMEDATA.txt", FILE_WRITE);//open the file "TIMEDATA" to write in it
    if(digitalRead(pirPin)){//if motion is detected:
        photo();//camera takes a photograph
        photoNumber++;//a new picture has been taken
        printDate();//write the date of shooting on SD card
        delay(1000);//pause between each photo
    }
    myFile.close();// close the file after editing
}

Résultats

J’ai eu la chance, cette année là d’avoir une famille de mésange charbonières qui a fait son nid dans un nichoir que j’avais installé à la maison.

Voici deux images prise par le piège photo Arduino, à l’occasion:

Mésange Charbonière au nichoir - Photo 1 prise par le piège photo Arduino

Mésange Charbonière au nichoir - Photo 1 prise par le piège photo Arduino