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();
}

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
}

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


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