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
- Arduino UNO (ou autre carte programmable, avec des entrées/sorties)
- Détecteur infrarouge (PIR sensor)
- Spy Camera (ici une Spy Camera AdaFruit) avec slot pour carte SD, est des connecteurs pour le trigger (déclenchement) et l’alimentation
- Carte SD
- Shield RTC pour Arduino (optionel mais utile pour enregistrer la date et l’heure des prises de vue)
- Un peu de câble
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 😢).
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: