Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Créer un lecteur MP3 interactif Arduino avec capteur de distance ultrasonique

Composants et fournitures

ComposantQuantité
Arduino UNO1
Lecteur MP3 série Catalex (avec carte microSD et adaptateur carte SD pour PC)1
Capteur ultrasonique HC-SR04 (genérique)2
Haut-parleur avec entrée jack MP31

À propos du projet

Utilisation du lecteur MP3 série Catalex

Mon tutoriel précédent explique l'utilisation de ce module avec la seule bibliothèque SoftwareSerial.h et des fonctions simples. Voici la fonction d'envoi de commande :

void sendCommand(int8_t command, int16_t dat) {
  if (command==CMD_PLAY_WITHFOLDER || command==CMD_PLAY_WITHVOLUME){
    Serial.println("PLAYING SONG, SLIGHTLY MOVE YOUR HEAD FOR GREAT EFFECT");
  }
  delay(20);
  Send_buf[0] = 0x7e; // octet de début
  Send_buf[1] = 0xff; // version
  Send_buf[2] = 0x06; // nombre d'octets de commande (sans début/fin)
  Send_buf[3] = command;
  Send_buf[4] = 0x00; // 0x00 = pas de retour, 0x01 = retour
  Send_buf[5] = (int8_t)(dat >> 8); // data high
  Send_buf[6] = (int8_t)(dat);      // data low
  Send_buf[7] = 0xef; // octet de fin
  for(uint8_t i=0; i<8; i++) {
    mySerial.write(Send_buf[i]);
  }
  Serial.println();
}
Créer un lecteur MP3 interactif Arduino avec capteur de distance ultrasonique

Utilisation du capteur ultrasonique HC-SR04

Également couvert dans un tutoriel précédent, sans bibliothèque nécessaire. Voici la fonction de mesure de distance :

long measureDistance() {
  long duration, distance;
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;
  Serial.println("distance:");
  Serial.println(distance);
  return distance; // en cm
}
Créer un lecteur MP3 interactif Arduino avec capteur de distance ultrasonique

Version 1 : Déclencheur MP3 simple par distance

Installez la bibliothèque SoftwareSerial.h si nécessaire. Dans cette version, si un objet approche à moins de 50 cm, le MP3 se déclenche. Je l'ai utilisé pour faire peur à mes colocataires avec un clip audio « surprise motherfucker ».

Note : Le code complet .ino est dans les pièces jointes du projet.

void loop() {
  if(measureDistance() < 50) {
    sendCommand(CMD_PLAY_WITHFOLDER, 0X0203); // 3ème chanson du 2ème dossier
    delay(1000); // éviter les erreurs
  }
  delay(300);
}

Version 2 : Déclencheur MP3 par variation de distance (perturbation)

Cette version ne se soucie pas de la distance absolue, mais détecte les différences entre lectures successives. Si des déclenchements intempestifs surviennent, augmentez la valeur dans if(gap > 20). De nouvelles variables sont déclarées hors boucle.


int firstTime = 0;
long Distance, auxDistance, gap = 0;

void loop() {
  Distance = measureDistance(trigPin, echoPin);
  gap = abs(Distance - auxDistance);
  if(firstTime == 0) {
    auxDistance = Distance;
    gap = 0;
    firstTime++;
    delay(1000);
  }
  if(gap > 20) { // variation > 20 cm
    sendCommand(CMD_PLAY_WITHFOLDER, 0X0201); // 1ère chanson du 2ème dossier
    firstTime = 0;
    delay(2000);
  }
  Serial.print("New Distace:");
  Serial.print(Distance);
  Serial.print(" Old Distance: ");
  Serial.print(auxDistance);
  Serial.println(gap);
  delay(300);
  auxDistance = Distance;
}

Version 3 : Deux capteurs de distance – détection de direction

Avec deux capteurs, on peut deviner la direction du mouvement. Le programme dit « hello » ou « bye » selon la direction.


#define trigPin 13   // premier module
#define echoPin 12
#define trigPin2 10  // second module
#define echoPin2 9

long Distance, auxDistance, gap = 0;
long Distance2, auxDistance2, gap2 = 0;

pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin2, INPUT);

long measureDistance(int trigger, int echo) {
  long duration, distance;
  digitalWrite(trigger, LOW);
  delayMicroseconds(2);
  digitalWrite(trigger, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigger, LOW);
  duration = pulseIn(echo, HIGH);
  distance = (duration/2) / 29.1;
  Serial.println("distance:");
  Serial.println(distance);
  return distance;
}

void loop() {
  Distance = measureDistance(trigPin, echoPin);
  Distance2 = measureDistance(trigPin2, echoPin2);
  gap = abs(Distance - auxDistance);
  gap2 = abs(Distance2 - auxDistance2);
  if(firstTime == 0) {
    auxDistance = Distance;
    auxDistance2 = Distance2;
    gap = 0; gap2 = 0;
    firstTime++;
    delay(2000);
  }
  if(gap > 20 && gap2 < 20) {
    sendCommand(CMD_PLAY_WITHFOLDER, 0X0201);
    firstTime = 0;
    Serial.println("RIGHT MOVEMENT DETECTED");
    delay(2000);
  }
  if(gap2 > 20 && gap < 20) {
    sendCommand(CMD_PLAY_WITHFOLDER, 0X0202);
    firstTime = 0;
    Serial.println("LEFT MOVEMENT DETECTED");
    delay(2000);
  }
  // ... affichage debug ...
  delay(300);
  auxDistance = Distance;
  auxDistance2 = Distance2;
}

Bon bidouillage !

Code

Les trois versions complètes (avec includes, définitions, setup, loop) sont fournies dans la section code du projet original.

Schémas

Créer un lecteur MP3 interactif Arduino avec capteur de distance ultrasonique
Créer un lecteur MP3 interactif Arduino avec capteur de distance ultrasonique

Processus de fabrication

  1. Construire un réseau de capteurs sans fil abordable pour votre maison
  2. Capteur CO2 K30 : Surveillance en temps réel de la qualité de l'air intérieur
  3. Construisez un Stadiomètre Numérique : Suivez la Croissance avec Arduino et Capteur Laser
  4. Intégrer un capteur d'empreintes capacitif DFRobot (ID809) avec Arduino ou ESP8266
  5. Comment lire de l'audio avec Arduino UNO et DFPlayer Mini – Guide étape par étape
  6. Lecteur MP3 piloté par navigateur avec Arduino et shield PHPoC WiFi
  7. Tour de Capteurs avec Arduino Cloud : Température, Mouvement et Gaz
  8. Pistolet à eau intelligent à détection de mouvement avec Arduino Nano
  9. Arduino UNO & Shield WiFi : Affichage température temps réel sur le Web via série