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
}
}