Outils pour utilisateurs

Outils du site


fetitfilou

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
 
  }
 
 
}
fetitfilou.1595332874.txt.gz · Dernière modification : 2020/07/21 12:01 de gaziel