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
bruit et Lumière en attente
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
}
}
