Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Maak een Interactieve Arduino MP3 Speler met Ultrasonische Afstandssensor

Onderdelen en benodigdheden

Onderdeel Aantal
Arduino UNO 1
Arduino seriële MP3 speler van Catalex 1
Ultrasonische Sensor - HC-SR04 (Generiek) 2
Luidspreker met MP3 jack input 1

Let op: Je hebt ook een SD-kaart nodig, en een SD-kaart socket (groot naar klein) voor de PC.

Over dit project

Hoe de Seriële MP3 Speler van CATALEX te gebruiken

Mijn vorige tutorial over dit onderwerp had maar één library nodig (#include <SoftwareSerial.h>), en enkele eenvoudige functies die al uitgelegd waren in de vorige tutorial:

void sendCommand(int8_t command, int16_t dat) { 
  if (command==CMD_PLAY_WITHFOLDER or command==CMD_PLAY_WITHVOLUME){
    Serial.print("PLAYING SONG, SLIGHTLY MOVE YOUR HEAD FOR GREAT EFFECT");
  } 
  delay(20); 
  Send_buf[0] = 0x7e; // startbyte
  Send_buf[1] = 0xff; // versie
  Send_buf[2] = 0x06; // aantal bytes van commando zonder start en eind byte
  Send_buf[3] = command; 
  Send_buf[4] = 0x00; // 0x00 = geen feedback, 0x01 = feedback
  Send_buf[5] = (int8_t)(dat >> 8); // data hoog
  Send_buf[6] = (int8_t)(dat); // data laag
  Send_buf[7] = 0xef; // eindbyte
  for(uint8_t i=0; i<8; i++) { 
    mySerial.write(Send_buf[i]); // verstuur bit naar seriële MP3
  } 
  Serial.println(); 
}
Maak een Interactieve Arduino MP3 Speler met Ultrasonische Afstandssensor

Hoe de HC-SR04 Ultrasonische Afstandssensor te gebruiken

Mijn vorige tutorial over dit onderwerp had geen library nodig, en is toch gemakkelijk te gebruiken. Ik nam mijn vorige HC-SR04 post en zet het in deze functie:

long measureDistance(){ 
  long duration, distance; 
  digitalWrite(trigPin, LOW); // PULSE ___|---|___
  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; // retourneert afstand in cm
}
Maak een Interactieve Arduino MP3 Speler met Ultrasonische Afstandssensor

Hoe ze allebei te gebruiken Versie 1: Simpele MP3 Afstand Trigger

Installeer eerst de library als je die nog niet hebt (<SoftwareSerial.h>).

In deze versie van de code, als er iets dichterbij komt dan 50cm, dan triggert het de MP3 audio. Ik gebruikte het om mijn kamergenoten te verjagen met een heel luid "surprise motherfucker" fragment.

Let op: Volledige .ino code staat in de Project Bijlagen hieronder.

void loop() { 
  if(measureDistance()<50){ 
    sendCommand(CMD_PLAY_WITHFOLDER, 0X0203); // speel het derde nummer van de tweede map
    delay(1000); // wacht om fouten te vermijden
  } 
  delay(300); 
}

Hoe ze allebei te gebruiken Versie 2 en Storing MP3 Afstand Trigger

Deze versie kijkt niet naar de absolute afstand, maar detecteert alleen verschillen tussen metingen. Als het per ongeluk triggert, zet dan een hogere waarde in if(gap>20){........ We moeten nieuwe variabelen buiten de loop declareren. Ik deed dit aan het begin van de code.

int firstTime=0; // we moeten firstTime buiten de loop declareren
long Distance, auxDistance, gap=0; 

void loop() { 
  Distance = measureDistance(trigPin, echoPin); // meet afstand en bewaar
  gap = abs(Distance - auxDistance); // bereken verschil tussen nu en vorige meting
  
  if(firstTime == 0){ // nodig voor stabiliteit
    auxDistance = Distance; 
    gap = 0; 
    // doet het alleen de eerste keer na het afspelen van een nummer om eerste loop malfunction te vermijden
    firstTime++; 
    delay(1000); 
  } 
  
  if(gap > 20){ // als afstandsvariatie 20cm is
    sendCommand(CMD_PLAY_WITHFOLDER, 0X0201); // speel het eerste nummer van de tweede map
    firstTime = 0; // vermijd fouten!! we houden niet van fouten
    delay(2000); 
  } 
  
  Serial.print("New Distance:"); // debug
  Serial.print(Distance); 
  Serial.print(" Old Distance: "); 
  Serial.print(auxDistance); 
  Serial.println(gap); 
  delay(300); 
  auxDistance = Distance; // bewaar waarde voor de if() in de volgende loop
}

Hoe ze allebei te gebruiken Versie 3: Twee Afstandssensoren

Met twee afstandssensoren kan je eigenlijk de bewegingsrichting raden, dus maakte ik een programma dat "hello" of "bye" zegt afhankelijk van de bewegingsrichting van de persoon.

  • Eerst definiëren we nog twee DIGITALE pinnen voor de tweede HC-SR04:
#define trigPin 13  // voor de EERSTE afstandsmodule
#define echoPin 12
#define trigPin2 10 // voor de TWEEDE afstandsmodule
#define echoPin2 9
  • Nieuwe variabelen!
long Distance, auxDistance, gap=0;
long Distance2, auxDistance2, gap2=0; // nieuwe variabelen
  • In de setup() voegen we onze nieuwe pinnen toe.
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin2, INPUT);
  • We wijzigen de measureDistance() functie, nu leest de functie de pinnen van de argumenten.
long measureDistance(int trigger, int echo){
  long duration, distance;
  digitalWrite(trigger, LOW); // PULSE ___|---|___
  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;
}
  • In onze loop():
void loop() { 
  Distance = measureDistance(trigPin, echoPin); // meet afstand1 en bewaar
  Distance2 = measureDistance(trigPin2, echoPin2); // meet afstand2 en bewaar
  gap = abs(Distance - auxDistance); // bereken verschil tussen nu en vorige meting
  gap2 = abs(Distance2 - auxDistance2); // bereken verschil tussen nu en vorige meting
  
  if(firstTime == 0){ // nodig voor stabiliteit
    auxDistance = Distance;
    auxDistance2 = Distance2;
    gap = 0;
    gap2 = 0;
    // doet het alleen de eerste keer na het afspelen van een nummer om eerste loop malfunction te vermijden
    firstTime++;
    delay(2000);
  }
  
  if(gap > 20 and gap2 < 20){ // als afstandsvariatie 20cm is
    sendCommand(CMD_PLAY_WITHFOLDER, 0X0201); // speel het eerste nummer van de tweede map
    firstTime = 0; // vermijd fouten!! we houden niet van fouten
    Serial.println("RIGHT MOVEMENT DETECTED");
    delay(2000);
  }
  
  if(gap2 > 20 and gap < 20){ // als afstandsvariatie 20cm is
    sendCommand(CMD_PLAY_WITHFOLDER, 0X0202); // speel het tweede nummer van de tweede map
    firstTime = 0; // vermijd fouten!! we houden niet van fouten
    Serial.println("LEFT MOVEMENT DETECTED");
    delay(2000);
  }
  
  Serial.println("\\\\\\\\\\\\\\\\\\\\\\"); // debug
  Serial.print(" New Distance:"); // debug
  Serial.print(Distance);
  Serial.print(" Old Distance: ");
  Serial.print(auxDistance);
  Serial.print(" GAP ");
  Serial.println(gap);
  Serial.print("New Distance2:"); // debug
  Serial.print(Distance);
  Serial.print(" Old Distance2: ");
  Serial.print(auxDistance);
  Serial.print(" GAP2 ");
  Serial.println(gap);
  Serial.println("\\\\\\\\\\\\\\\\\\\\\\"); // debug
  delay(300);
  auxDistance = Distance; // bewaar waarde voor de if() in de volgende loop
  auxDistance2 = Distance2; // bewaar waarde voor de if() in de volgende loop
}

Veel hackplezier, vrienden!

Code

Versie 1, Simpele MP3 Afstand Trigger

In deze versie van de code, als er iets dichterbij komt dan 50cm, triggert het de MP3 audio. Ik gebruikte het om mijn kamergenoten te verjagen met een heel luid "surprise motherfucker" fragment.

// code herschikt door Javier Muñoz 10/11/2016 vraag me op javimusama@hotmail.com
#include <SoftwareSerial.h>
#define ARDUINO_RX 5 // moet verbonden zijn met TX van de Seriële MP3 Speler module
#define ARDUINO_TX 6 // verbinden met RX van de module
#define trigPin 13 // voor de afstandsmodule
#define echoPin 12
SoftwareSerial mySerial(ARDUINO_RX, ARDUINO_TX); // init het seriële protocol, vertel aan myserial welke pinnen TX en RX zijn

////////////////////////////////////////////////////////////////////////////////////
// alle commando's nodig in de datasheet (https://geekmatic.in.ua/pdf/Catalex_MP3_board.pdf)
static int8_t Send_buf[8] = {0}; // De MP3 speler begrijpt orders in een 8 int string
// 0X7E FF 06 command 00 00 00 EF; (als command =01 volgende nummer order)
#define NEXT_SONG 0X01
#define PREV_SONG 0X02
#define CMD_PLAY_W_INDEX 0X03 // DATA IS VEREIST (nummer van lied)
#define VOLUME_UP_ONE 0X04
#define VOLUME_DOWN_ONE 0X05
#define CMD_SET_VOLUME 0X06 // DATA IS VEREIST (volume getal van 0 tot 30 (0x1E))
#define SET_DAC 0X17
#define CMD_PLAY_WITHVOLUME 0X22 // data nodig 0x7E 06 22 00 xx yy EF; (xx volume) (yy nummer van lied)
#define CMD_SEL_DEV 0X09 // SELECT STORAGE DEVICE, DATA IS VEREIST
#define DEV_TF 0X02 // HELLO, IK BEN DE VEREISTE DATA
#define SLEEP_MODE_START 0X0A
#define SLEEP_MODE_WAKEUP 0X0B
#define CMD_RESET 0X0C // CHIP RESET
#define CMD_PLAY 0X0D // HERNEEM AFSPelen
#define CMD_PAUSE 0X0E // AFSPelen GEPAUSEERD
#define CMD_PLAY_WITHFOLDER 0X0F // DATA IS NODIG, 0x7E 06 0F 00 01 02 EF; (speel het nummer met de directory \01\002xxxxxx.mp3)
#define STOP_PLAY 0X16
#define PLAY_FOLDER 0X17 // data nodig 0x7E 06 17 00 01 XX EF; (speel de 01 map) (waarde xx we don't care)
#define SET_CYCLEPLAY 0X19 // data nodig 00 start; 01 close
#define SET_DAC 0X17 // data nodig 00 start DAC OUTPUT; 01 DAC no output
////////////////////////////////////////////////////////////////////////////////////

void setup() {
  Serial.begin(9600); // Start onze seriële coms voor seriële monitor in onze PC
  mySerial.begin(9600); // Start onze seriële coms voor DE MP3
  delay(500); // Wacht tot chip initialisatie compleet is
  sendCommand(CMD_SEL_DEV, DEV_TF); // selecteer de TF kaart
  delay(200); // wacht 200ms
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}

void loop() {
  if(measureDistance(trigPin, echoPin) < 50){
    sendCommand(CMD_PLAY_WITHFOLDER, 0X0203); // speel het derde nummer van de tweede map
    delay(1000); // wacht om fouten te vermijden
  }
  delay(300);
}

void sendCommand(int8_t command, int16_t dat) {
  delay(20);
  Send_buf[0] = 0x7e; // startbyte
  Send_buf[1] = 0xff; // versie
  Send_buf[2] = 0x06; // aantal bytes van commando zonder start en eind byte
  Send_buf[3] = command;
  Send_buf[4] = 0x00; // 0x00 = geen feedback, 0x01 = feedback
  Send_buf[5] = (int8_t)(dat >> 8); // data hoog
  Send_buf[6] = (int8_t)(dat); // data laag
  Send_buf[7] = 0xef; // eindbyte
  for(uint8_t i=0; i<8; i++) {
    mySerial.write(Send_buf[i]); // verstuur bit naar seriële mp3
    Serial.print(Send_buf[i], HEX); // verstuur bit naar seriële monitor in PC
  }
  Serial.println();
}

long measureDistance(int trigger, int echo){
  long duration, distance;
  digitalWrite(trigger, LOW); // PULSE ___|---|___
  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;
}

Versie 2, Storing MP3 Afstand Trigger

Deze versie kijkt niet naar de afstand, maar detecteert alleen verschillen tussen metingen.

// code herschikt door Javier Muñoz 10/11/2016 vraag me op javimusama@hotmail.com
#include <SoftwareSerial.h>
#define ARDUINO_RX 5 // moet verbonden zijn met TX van de Seriële MP3 Speler module
#define ARDUINO_TX 6 // verbinden met RX van de module
#define trigPin 13 // voor de afstandsmodule
#define echoPin 12
SoftwareSerial mySerial(ARDUINO_RX, ARDUINO_TX); // init het seriële protocol, vertel aan myserial welke pinnen TX en RX zijn

////////////////////////////////////////////////////////////////////////////////////
// alle commando's nodig in de datasheet (https://geekmatic.in.ua/pdf/Catalex_MP3_board.pdf)
static int8_t Send_buf[8] = {0}; // De MP3 speler begrijpt orders in een 8 int string
// 0X7E FF 06 command 00 00 00 EF; (als command =01 volgende nummer order)
#define NEXT_SONG 0X01
#define PREV_SONG 0X02
#define CMD_PLAY_W_INDEX 0X03 // DATA IS VEREIST (nummer van lied)
#define VOLUME_UP_ONE 0X04
#define VOLUME_DOWN_ONE 0X05
#define CMD_SET_VOLUME 0X06 // DATA IS VEREIST (volume getal van 0 tot 30 (0x1E))
#define SET_DAC 0X17
#define CMD_PLAY_WITHVOLUME 0X22 // data nodig 0x7E 06 22 00 xx yy EF; (xx volume) (yy nummer van lied)
#define CMD_SEL_DEV 0X09 // SELECT STORAGE DEVICE, DATA IS VEREIST
#define DEV_TF 0X02 // HELLO, IK BEN DE VEREISTE DATA
#define SLEEP_MODE_START 0X0A
#define SLEEP_MODE_WAKEUP 0X0B
#define CMD_RESET 0X0C // CHIP RESET
#define CMD_PLAY 0X0D // HERNEEM AFSPelen
#define CMD_PAUSE 0X0E // AFSPelen GEPAUSEERD
#define CMD_PLAY_WITHFOLDER 0X0F // DATA IS NODIG, 0x7E 06 0F 00 01 02 EF; (speel het nummer met de directory \01\002xxxxxx.mp3)
#define STOP_PLAY 0X16
#define PLAY_FOLDER 0X17 // data nodig 0x7E 06 17 00 01 XX EF; (speel de 01 map) (waarde xx we don't care)
#define SET_CYCLEPLAY 0X19 // data nodig 00 start; 01 close
#define SET_DAC 0X17 // data nodig 00 start DAC OUTPUT; 01 DAC no output
////////////////////////////////////////////////////////////////////////////////////

int firstTime = 0; // we moeten firstTime buiten de loop declareren
long Distance, auxDistance, gap = 0;

void setup() {
  Serial.begin(9600); // Start onze seriële coms voor seriële monitor in onze PC
  mySerial.begin(9600); // Start onze seriële coms voor DE MP3
  delay(500); // Wacht tot chip initialisatie compleet is
  sendCommand(CMD_SEL_DEV, DEV_TF); // selecteer de TF kaart
  delay(200); // wacht 200ms
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}

void loop() {
  Distance = measureDistance(trigPin, echoPin); // meet afstand en bewaar
  gap = abs(Distance - auxDistance); // bereken verschil tussen nu en vorige meting
  
  if(firstTime == 0){ // nodig voor stabiliteit
    auxDistance = Distance;
    gap = 0;
    // doet het alleen de eerste keer na het afspelen van een nummer om eerste loop malfunction te vermijden
    firstTime++;
    delay(1000);
  }
  
  if(gap > 20){ // als afstandsvariatie 20cm is
    sendCommand(CMD_PLAY_WITHFOLDER, 0X0201); // speel het eerste nummer van de tweede map
    firstTime = 0; // vermijd fouten!! we houden niet van fouten
    delay(2000);
  }
  
  Serial.print("New Distance:"); // debug
  Serial.print(Distance);
  Serial.print(" Old Distance: ");
  Serial.print(auxDistance);
  Serial.println(gap);
  delay(300);
  auxDistance = Distance; // bewaar waarde voor de if() in de volgende loop
}

void sendCommand(int8_t command, int16_t dat) {
  if (command == CMD_PLAY_WITHFOLDER or command == CMD_PLAY_WITHVOLUME){
    Serial.print("PLAYING SONG, SLIGHTLY MOVE YOUR HEAD FOR GREAT EFFECT");
  }
  delay(20);
  Send_buf[0] = 0x7e; // startbyte
  Send_buf[1] = 0xff; // versie
  Send_buf[2] = 0x06; // aantal bytes van commando zonder start en eind byte
  Send_buf[3] = command;
  Send_buf[4] = 0x00; // 0x00 = geen feedback, 0x01 = feedback
  Send_buf[5] = (int8_t)(dat >> 8); // data hoog
  Send_buf[6] = (int8_t)(dat); // data laag
  Send_buf[7] = 0xef; // eindbyte
  for(uint8_t i=0; i<8; i++) {
    mySerial.write(Send_buf[i]); // verstuur bit naar seriële mp3
  }
  Serial.println();
}

long measureDistance(int trigger, int echo){
  long duration, distance;
  digitalWrite(trigger, LOW); // PULSE ___|---|___
  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;
}

Versie 3, MET TWEE SENSOREN, RICHTING DETECTIE

Nu met twee afstandssensoren.

// code herschikt door Javier Muñoz 10/11/2016 vraag me op javimusama@hotmail.com
#include <SoftwareSerial.h>
#define ARDUINO_RX 5 // moet verbonden zijn met TX van de Seriële MP3 Speler module
#define ARDUINO_TX 6 // verbinden met RX van de module
#define trigPin 13 // voor de EERSTE afstandsmodule
#define echoPin 12
#define trigPin2 10 // voor de TWEEDE afstandsmodule
#define echoPin2 9
SoftwareSerial mySerial(ARDUINO_RX, ARDUINO_TX); // init het seriële protocol, vertel aan myserial welke pinnen TX en RX zijn

////////////////////////////////////////////////////////////////////////////////////
// alle commando's nodig in de datasheet (https://geekmatic.in.ua/pdf/Catalex_MP3_board.pdf)
static int8_t Send_buf[8] = {0}; // De MP3 speler begrijpt orders in een 8 int string
// 0X7E FF 06 command 00 00 00 EF; (als command =01 volgende nummer order)
#define NEXT_SONG 0X01
#define PREV_SONG 0X02
#define CMD_PLAY_W_INDEX 0X03 // DATA IS VEREIST (nummer van lied)
#define VOLUME_UP_ONE 0X04
#define VOLUME_DOWN_ONE 0X05
#define CMD_SET_VOLUME 0X06 // DATA IS VEREIST (volume getal van 0 tot 30 (0x1E))
#define SET_DAC 0X17
#define CMD_PLAY_WITHVOLUME 0X22 // data nodig 0x7E 06 22 00 xx yy EF; (xx volume) (yy nummer van lied)
#define CMD_SEL_DEV 0X09 // SELECT STORAGE DEVICE, DATA IS VEREIST
#define DEV_TF 0X02 // HELLO, IK BEN DE VEREISTE DATA
#define SLEEP_MODE_START 0X0A
#define SLEEP_MODE_WAKEUP 0X0B
#define CMD_RESET 0X0C // CHIP RESET
#define CMD_PLAY 0X0D // HERNEEM AFSPelen
#define CMD_PAUSE 0X0E // AFSPelen GEPAUSEERD
#define CMD_PLAY_WITHFOLDER 0X0F // DATA IS NODIG, 0x7E 06 0F 00 01 02 EF; (speel het nummer met de directory \01\002xxxxxx.mp3)
#define STOP_PLAY 0X16
#define PLAY_FOLDER 0X17 // data nodig 0x7E 06 17 00 01 XX EF; (speel de 01 map) (waarde xx we don't care)
#define SET_CYCLEPLAY 0X19 // data nodig 00 start; 01 close
#define SET_DAC 0X17 // data nodig 00 start DAC OUTPUT; 01 DAC no output
////////////////////////////////////////////////////////////////////////////////////

int firstTime = 0; // we moeten firstTime buiten de loop declareren
long Distance, auxDistance, gap = 0;
long Distance2, auxDistance2, gap2 = 0;

void setup() {
  Serial.begin(9600); // Start onze seriële coms voor seriële monitor in onze PC
  mySerial.begin(9600); // Start onze seriële coms voor DE MP3
  delay(500); // Wacht tot chip initialisatie compleet is
  sendCommand(CMD_SEL_DEV, DEV_TF); // selecteer de TF kaart
  delay(200); // wacht 200ms
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(trigPin2, OUTPUT);
  pinMode(echoPin2, INPUT);
}

void loop() {
  Distance = measureDistance(trigPin, echoPin); // meet afstand1 en bewaar
  Distance2 = measureDistance(trigPin2, echoPin2); // meet afstand2 en bewaar
  gap = abs(Distance - auxDistance); // bereken verschil tussen nu en vorige meting
  gap2 = abs(Distance2 - auxDistance2); // bereken verschil tussen nu en vorige meting
  
  if(firstTime == 0){ // nodig voor stabiliteit
    auxDistance = Distance;
    auxDistance2 = Distance2;
    gap = 0;
    gap2 = 0;
    // doet het alleen de eerste keer na het afspelen van een nummer om eerste loop malfunction te vermijden
    firstTime++;
    delay(2000);
  }
  
  if(gap > 20 and gap2 < 20){ // als afstandsvariatie 20cm is
    sendCommand(CMD_PLAY_WITHFOLDER, 0X0201); // speel het eerste nummer van de tweede map
    firstTime = 0; // vermijd fouten!! we houden niet van fouten
    Serial.println("RIGHT MOVEMENT DETECTED");
    delay(2000);
  }
  
  if(gap2 > 20 and gap < 20){ // als afstandsvariatie 20cm is
    sendCommand(CMD_PLAY_WITHFOLDER, 0X0202); // speel het tweede nummer van de tweede map
    firstTime = 0; // vermijd fouten!! we houden niet van fouten
    Serial.println("LEFT MOVEMENT DETECTED");
    delay(2000);
  }
  
  Serial.println("\\\\\\\\\\\\\\\\\\\\\\"); // debug
  Serial.print(" New Distance:"); // debug
  Serial.print(Distance);
  Serial.print(" Old Distance: ");
  Serial.print(auxDistance);
  Serial.print(" GAP ");
  Serial.println(gap);
  Serial.print("New Distance2:"); // debug
  Serial.print(Distance);
  Serial.print(" Old Distance2: ");
  Serial.print(auxDistance);
  Serial.print(" GAP2 ");
  Serial.println(gap);
  Serial.println("\\\\\\\\\\\\\\\\\\\\\\"); // debug
  delay(300);
  auxDistance = Distance; // bewaar waarde voor de if() in de volgende loop
  auxDistance2 = Distance2; // bewaar waarde voor de if() in de volgende loop
}

void sendCommand(int8_t command, int16_t dat) {
  if (command == CMD_PLAY_WITHFOLDER or command == CMD_PLAY_WITHVOLUME){
    Serial.print("PLAYING SONG, SLIGHTLY MOVE YOUR HEAD FOR GREAT EFFECT");
  }
  delay(20);
  Send_buf[0] = 0x7e; // startbyte
  Send_buf[1] = 0xff; // versie
  Send_buf[2] = 0x06; // aantal bytes van commando zonder start en eind byte
  Send_buf[3] = command;
  Send_buf[4] = 0x00; // 0x00 = geen feedback, 0x01 = feedback
  Send_buf[5] = (int8_t)(dat >> 8); // data hoog
  Send_buf[6] = (int8_t)(dat); // data laag
  Send_buf[7] = 0xef; // eindbyte
  for(uint8_t i=0; i<8; i++) {
    mySerial.write(Send_buf[i]); // verstuur bit naar seriële mp3
  }
  Serial.println();
}

long measureDistance(int trigger, int echo){
  long duration, distance;
  digitalWrite(trigger, LOW); // PULSE ___|---|___
  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;
}

Schema's

Maak een Interactieve Arduino MP3 Speler met Ultrasonische Afstandssensor
Maak een Interactieve Arduino MP3 Speler met Ultrasonische Afstandssensor

Productieproces

  1. Een Betaalbaar Draadloos Sensornetwerk Bouwen voor Uw Huis
  2. K30 CO2-sensor: Real-time binnenluchtkwaliteitmonitoring met Arduino
  3. Bouw een Digitale Lichaamslengtemeter: Je Lengte Meten met Arduino en Lasersensor
  4. Een DFRobot Capacitieve Vingerafdruksensor integreren met Arduino of ESP8266
  5. Audio afspelen met Arduino UNO en DFPlayer Mini – Stap-voor-stap handleiding
  6. Arduino Web-gecontroleerde MP3 Speler: Eenvoudige Audio Afspelen via Browser
  7. Bouw een Sensor Toren met Arduino Cloud: Temperatuur, Beweging & Gas Monitoring
  8. Slimme beweegactiverde waterpistool gebouwd met Arduino Nano
  9. Arduino UNO & WiFi Shield: Realtime Temperatuurweergave op het Web via Serieel
  10. Compact Arduino Radarsysteem met HC-SR04 Ultrasonische Sensor & 1.8" Display
  11. Capacitieve Touch LED Schakelaar met Arduino UNO – Eenvoudig DIY Project