Ceci est une ancienne révision du document !
Table des matières
Fetit Filou
A la demande de Buz, création d'un petit filou géant, avec interaction.
- détection de personne devant le Filou
- faire bouger les yeux
- faire de la lumière
- lancer une interjection de Buz
fabrication
structure bois de recup format Filou en 3D Arduino détection par capteur ultrason SR04 2 servos
Detection
Module SR04 ultrason
facile et efficace !
librairie Ultrasonic d'Eric Simões arduino⇒SR04
5V⇒VCC
GND⇒GND
D2⇒Echo
D3⇒Trig
Bruit
utilisation d'un “DY Player” , une carte pour lecteur MP3 DIY . module DY-SV5W carte avec lecteur microSD et ampli 5W intégré utilisation en Mode UART ( envoie de commande par le port TX/RX série de l'arduino)⇒ permet 255 sons facilement
Sans prise de tête avec la librairie dyplayer de SnijderC
juste 3 fils :
arduino⇒DFplayer
5V⇒+5V
GND⇒-5V
D1/TX⇒IO1/RX
Lumière
juste une LED RGB !
arduino⇒LED
5V⇒V
D4⇒R
D5⇒B
D6⇒G
code
#include <Servo.h> Servo eye1; Servo eye2; int distance = 200; // distance en mm de detection du SR04 int duree = 30; // durée de fonctionnement de l'animation const byte POTDISPIN = 0; // broche analogique du potar de distance const byte POTDELAYPIN = 1; // broche analogique du delay de fonctionnement de l'animation const byte RELAYPIN = 13; // pin du relais au besoin const byte EYE1PIN = 10; // broche servo Oeil1 const byte EYE2PIN = 11; // broche servo Oeil1 const byte TRIGGER_PIN = 2; // Broche TRIGGER const byte ECHO_PIN = 3; // Broche ECHO const unsigned long MEASURE_TIMEOUT = 25000UL; // 25ms = ~8m à 340m/s/* Constantes pour le timeout */ const float SOUND_SPEED = 340.0 / 1000;/* Vitesse du son dans l'air en mm/us */ byte eye1Pos = 0; byte eye2Pos = 0; void setup() { // put your setup code here, to run once: Serial.begin(115200); randomSeed(analogRead(0)); /* Initialise les broches */ pinMode(TRIGGER_PIN, OUTPUT); digitalWrite(TRIGGER_PIN, LOW); // La broche TRIGGER doit être à LOW au repos pinMode(ECHO_PIN, INPUT); Serial.println("SR04 OK"); eye1.attach(EYE1PIN); eye2.attach(EYE2PIN); delay(100); eye1.write(eye1Pos); eye2.write(eye2Pos); Serial.println("Servo 1 et 2 ok"); } void anime() { switch (duree) { case 1 : // bas eye1Pos = 180 ; eye2Pos = 0 ; break; case 2 : // louche 1 eye1Pos = 90; eye2Pos = -90; break; case 3 : // louche 2 eye1Pos = -90 ; eye2Pos = 90 ; case 4 : // haut eye1Pos = 0 ; eye2Pos = 180 ; default : //aleatoire eye1Pos = int(random(180)); eye2Pos = int(random(180)); break; } eye1.write(eye1Pos); eye2.write(eye2Pos); delay(100); } //renvois vrai si la distance en parametre est plus petite en mm bool declanche( int distance) { digitalWrite(TRIGGER_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIGGER_PIN, LOW); long mesure = pulseIn(ECHO_PIN, HIGH, MEASURE_TIMEOUT); delay(500); if (mesure / 2.0 * SOUND_SPEED < distance) { return true; } else { return false; } } void loop() { if (declanche(300)){ anime(); // son // lumiere } }