Project tutorial

Arduino Mp3 player + Distance sensor = FUN © GPL3+

Trigger an mp3 effect when someone is passing by. Three different projects for three different levels of coding.

  • 31,432 views
  • 32 comments
  • 57 respects

Components and supplies

A000066 iso both
Arduino UNO & Genuino UNO
×1
Arduino serial mp3 player from catalex
You need a SD card as well, and a SD card (big to small) socket for the pc
×1
51gzz5eu9pl. sx425
Ultrasonic Sensor - HC-SR04 (Generic)
×2
some speaker with mp3 jack input
×1

About this project

How to use Serial Mp3 player from CATALEX

My previous tutorial about it, only one library needed (#include <SoftwareSerial.h>), and some easy function already explained in the previous 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; //starting byte 
Send_buf[1] = 0xff; //version 
Send_buf[2] = 0x06; //the number of bytes of the command without starting byte and ending byte 
Send_buf[3] = command; // 
Send_buf[4] = 0x00;//0x00 = no feedback, 0x01 = feedback 
Send_buf[5] = (int8_t)(dat >> 8);//datah 
Send_buf[6] = (int8_t)(dat); //datal 
Send_buf[7] = 0xef; //ending byte 
for(uint8_t i=0; i<8; i++)// 
{ 
  mySerial.write(Send_buf[i]) ;//send bit to serial mp3 
} 
Serial.println(); 
} 

How to use HC-SR04 ultrasonic range

My previous tutorial about it, no library needed, easy to use anyway. I just took my previous hc-sr04 post and put it in this function:

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; //returns distance in cm
} 

How to use them both Version 1: Simple mp3 distance trigger

First install the library if you don't have it yet (<SoftwareSerial.h>).

In this version of code, if something comes closer than 50cm then it triggers the mp3 audio. I used it to scare my roommates with a very loud "surprise motherfucker" clip.

Note: Full .ino code is in the Project Attachments below.

void loop() 
{ 
 if(measureDistance()<50){ 
sendCommand(CMD_PLAY_WITHFOLDER, 0X0203);//play the third song of the second folder 
delay(1000);//wait to avoid errors 
} 
delay(300); 
}  
We love Dexter

How to use both Version 2 and Disturbance mp3 distance trigger

This version doesn't care about the distance, only detects differences between readings. If triggers suddenly by error put a higher value in if(gap>20){....... we need to declare new variables outside the loop. I did it at the beginning of the code.

int firstTime=0;//we need to declare firstTime outside the loop  
long Distance,auxDistance,gap=0; 
void loop()  
{  
Distance=measureDistance(trigPin,echoPin);//measure distance and store 
gap=abs(Distance-auxDistance);// calculate the difference between now and last reading 
if(firstTime==0){//necesary for stability things 
auxDistance=Distance; 
gap=0; 
//does it only the first time after play a song to avoid first loop malfuntcion 
firstTime++;  
delay(1000); 
} 
if(gap>20){ //if distance variation is 20cm 
sendCommand(CMD_PLAY_WITHFOLDER, 0X0201);//play the first song of the second folder  
firstTime=0;//avoid errors!!we dont like errors 
delay(2000);  
}  
Serial.print("New Distace:");//debugggggg 
Serial.print(Distance); 
Serial.print("  Old Distance: "); 
Serial.print(auxDistance); 
Serial.println(gap); 
delay(300);  
auxDistance=Distance;//store the value for the if() in the next loop 
} 

How to use them both Version 3: Two Distance Sensors

With two distance sensors you can actually guess the direction of movement so I did a program which says "hello " or "bye " depending of the person´s direction of movement.

  • First we define another two DIGITAL pins for controlling the second HC-SR04:
#define trigPin 13//for the FIRST distance module 
#define echoPin 12 
#define trigPin2 10//for the SECOND  distance module 
#define echoPin2 9
  • New variables! Yeah!
long Distance,auxDistance,gap=0; 
long Distance2,auxDistance2,gap2=0; //new variables
  • In the setup() we add our new pins declaration.
pinMode(trigPin, OUTPUT); 
pinMode(echoPin, INPUT); 
pinMode(trigPin2, OUTPUT); 
pinMode(echoPin2, INPUT); 
  • We change the measureDistance() function, now the function reads the pins from the arguments.
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 our loop():
void loop()  
{  
Distance=measureDistance(trigPin,echoPin);//measure distance1 and store 
Distance2=measureDistance(trigPin2,echoPin2);//measure distance2 and store 
gap=abs(Distance-auxDistance);// calculate the difference between now and last reading 
gap2=abs(Distance2-auxDistance2);// calculate the difference between now and last reading 
if(firstTime==0){//necesary for stability things 
auxDistance=Distance; 
auxDistance2=Distance2; 
gap=0; 
gap2=0; 
//does it only the first time after play a song to avoid first loop malfuntcion 
firstTime++;  
delay(2000); 
} 
if(gap>20 and gap2<20 ){ //if distance variation is 20cm 
sendCommand(CMD_PLAY_WITHFOLDER, 0X0201);//play the first song of the second folder  
firstTime=0;//avoid errors!!we dont like errors 
Serial.println("RIGHT MOVEMENT DETECTED"); 
delay(2000);  
}  
if(gap2>20 and gap<20){ //if distance variation is 20cm 
sendCommand(CMD_PLAY_WITHFOLDER, 0X0202);//play the second song of the second folder  
firstTime=0;//avoid errors!!we dont like errors 
Serial.println("LEFT MOVEMENT DETECTED"); 
delay(2000);  
}  
Serial.println("\\\\\\\\\\\\\\\\\\\\\\");//debugggggg 
Serial.print(" New Distace:");//debugggggg 
Serial.print(Distance); 
Serial.print("   Old Distance: "); 
Serial.print(auxDistance); 
Serial.print("   GAP "); 
Serial.println(gap); 
Serial.print("New Distace2:");//debugggggg 
Serial.print(Distance); 
Serial.print("  Old Distance2: "); 
Serial.print(auxDistance); 
Serial.print("  GAP2 "); 
Serial.println(gap); 
Serial.println("\\\\\\\\\\\\\\\\\\\\\\");//debugggggg 
delay(300);  
auxDistance=Distance;//store the value for the if() in the next loop 
auxDistance2=Distance2;//store the value for the if() in the next loop 
} 
Disturbance2=0;
left=0;
right=0;
delay(1000);//wait to avoid errors 
} 
delay(300); 
auxDistance=Distance;//store the value for the if() in the next loop
auxDistance2=Distance2;//store the value for the if() in the next loop
} 
HELLO!...

Happy hacking, fellas!

Code

Version 1, Simple mp3 distance triggerArduino
In this version of code, if something comes closer than 50cm then it triggers the mp3 audio. I used it to scare my roommates with a very loud "surprise motherfucker" clip.
//code rearranged by Javier Muñoz 10/11/2016 ask me at javimusama@hotmail.com
#include <SoftwareSerial.h>

#define ARDUINO_RX 5//should connect to TX of the Serial MP3 Player module
#define ARDUINO_TX 6//connect to RX of the module

#define trigPin 13//for the distance module
#define echoPin 12


SoftwareSerial mySerial(ARDUINO_RX, ARDUINO_TX);//init the serial protocol, tell to myserial wich pins are TX and RX

////////////////////////////////////////////////////////////////////////////////////
//all the commands needed in the datasheet(http://geekmatic.in.ua/pdf/Catalex_MP3_board.pdf)
static int8_t Send_buf[8] = {0} ;//The MP3 player undestands orders in a 8 int string
                                 //0X7E FF 06 command 00 00 00 EF;(if command =01 next song order) 
#define NEXT_SONG 0X01 
#define PREV_SONG 0X02 

#define CMD_PLAY_W_INDEX 0X03 //DATA IS REQUIRED (number of song)

#define VOLUME_UP_ONE 0X04
#define VOLUME_DOWN_ONE 0X05
#define CMD_SET_VOLUME 0X06//DATA IS REQUIRED (number of volume from 0 up to 30(0x1E))
#define SET_DAC 0X17
#define CMD_PLAY_WITHVOLUME 0X22 //data is needed  0x7E 06 22 00 xx yy EF;(xx volume)(yy number of song)

#define CMD_SEL_DEV 0X09 //SELECT STORAGE DEVICE, DATA IS REQUIRED
                #define DEV_TF 0X02 //HELLO,IM THE DATA REQUIRED
                
#define SLEEP_MODE_START 0X0A
#define SLEEP_MODE_WAKEUP 0X0B

#define CMD_RESET 0X0C//CHIP RESET
#define CMD_PLAY 0X0D //RESUME PLAYBACK
#define CMD_PAUSE 0X0E //PLAYBACK IS PAUSED

#define CMD_PLAY_WITHFOLDER 0X0F//DATA IS NEEDED, 0x7E 06 0F 00 01 02 EF;(play the song with the directory \01\002xxxxxx.mp3

#define STOP_PLAY 0X16

#define PLAY_FOLDER 0X17// data is needed 0x7E 06 17 00 01 XX EF;(play the 01 folder)(value xx we dont care)

#define SET_CYCLEPLAY 0X19//data is needed 00 start; 01 close

#define SET_DAC 0X17//data is needed 00 start DAC OUTPUT;01 DAC no output
////////////////////////////////////////////////////////////////////////////////////


void setup()
{
  Serial.begin(9600);//Start our Serial coms for serial monitor in our pc
mySerial.begin(9600);//Start our Serial coms for THE MP3
delay(500);//Wait chip initialization is complete
   sendCommand(CMD_SEL_DEV, DEV_TF);//select the TF card  
delay(200);//wait for 200ms
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);

}

void loop()
{
  if(measureDistance(trigPin,echoPin)<50){
sendCommand(CMD_PLAY_WITHFOLDER, 0X0203);//play the third song of the second folder
delay(1000);//wait to avoid errors
}
delay(300);
}

void sendCommand(int8_t command, int16_t dat)
{
 delay(20);
 Send_buf[0] = 0x7e; //starting byte
 Send_buf[1] = 0xff; //version
 Send_buf[2] = 0x06; //the number of bytes of the command without starting byte and ending byte
 Send_buf[3] = command; //
 Send_buf[4] = 0x00;//0x00 = no feedback, 0x01 = feedback
 Send_buf[5] = (int8_t)(dat >> 8);//datah
 Send_buf[6] = (int8_t)(dat); //datal
 Send_buf[7] = 0xef; //ending byte
 for(uint8_t i=0; i<8; i++)//
 {
   mySerial.write(Send_buf[i]) ;//send bit to serial mp3
   Serial.print(Send_buf[i],HEX);//send bit to serial 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;

}
Version 2,Disturbance mp3 distance triggerArduino
This version doesnt care about the distance, only detects differences between readings.
//code rearranged by Javier Muñoz 10/11/2016 ask me at javimusama@hotmail.com
#include <SoftwareSerial.h>

#define ARDUINO_RX 5//should connect to TX of the Serial MP3 Player module
#define ARDUINO_TX 6//connect to RX of the module

#define trigPin 13//for the distance module
#define echoPin 12


SoftwareSerial mySerial(ARDUINO_RX, ARDUINO_TX);//init the serial protocol, tell to myserial wich pins are TX and RX

////////////////////////////////////////////////////////////////////////////////////
//all the commands needed in the datasheet(http://geekmatic.in.ua/pdf/Catalex_MP3_board.pdf)
static int8_t Send_buf[8] = {0} ;//The MP3 player undestands orders in a 8 int string
                                 //0X7E FF 06 command 00 00 00 EF;(if command =01 next song order) 
#define NEXT_SONG 0X01 
#define PREV_SONG 0X02 

#define CMD_PLAY_W_INDEX 0X03 //DATA IS REQUIRED (number of song)

#define VOLUME_UP_ONE 0X04
#define VOLUME_DOWN_ONE 0X05
#define CMD_SET_VOLUME 0X06//DATA IS REQUIRED (number of volume from 0 up to 30(0x1E))
#define SET_DAC 0X17
#define CMD_PLAY_WITHVOLUME 0X22 //data is needed  0x7E 06 22 00 xx yy EF;(xx volume)(yy number of song)

#define CMD_SEL_DEV 0X09 //SELECT STORAGE DEVICE, DATA IS REQUIRED
                #define DEV_TF 0X02 //HELLO,IM THE DATA REQUIRED
                
#define SLEEP_MODE_START 0X0A
#define SLEEP_MODE_WAKEUP 0X0B

#define CMD_RESET 0X0C//CHIP RESET
#define CMD_PLAY 0X0D //RESUME PLAYBACK
#define CMD_PAUSE 0X0E //PLAYBACK IS PAUSED

#define CMD_PLAY_WITHFOLDER 0X0F//DATA IS NEEDED, 0x7E 06 0F 00 01 02 EF;(play the song with the directory \01\002xxxxxx.mp3

#define STOP_PLAY 0X16

#define PLAY_FOLDER 0X17// data is needed 0x7E 06 17 00 01 XX EF;(play the 01 folder)(value xx we dont care)

#define SET_CYCLEPLAY 0X19//data is needed 00 start; 01 close

#define SET_DAC 0X17//data is needed 00 start DAC OUTPUT;01 DAC no output
////////////////////////////////////////////////////////////////////////////////////
int firstTime=0;//we need to declare firstTime outside the loop 
long Distance,auxDistance,gap=0;

void setup()
{
  Serial.begin(9600);//Start our Serial coms for serial monitor in our pc
mySerial.begin(9600);//Start our Serial coms for THE MP3
delay(500);//Wait chip initialization is complete
   sendCommand(CMD_SEL_DEV, DEV_TF);//select the TF card  
delay(200);//wait for 200ms
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);

}

void loop() 
{ 


Distance=measureDistance(trigPin,echoPin);//measure distance and store
gap=abs(Distance-auxDistance);// calculate the difference between now and last reading

if(firstTime==0){//necesary for stability things
auxDistance=Distance;
gap=0;
//does it only the first time after play a song to avoid first loop malfuntcion
firstTime++; 
delay(1000);
}


 if(gap>20){ //if distance variation is 20cm
sendCommand(CMD_PLAY_WITHFOLDER, 0X0201);//play the first song of the second folder 
firstTime=0;//avoid errors!!we dont like errors
delay(2000); 
} 

Serial.print("New Distace:");//debugggggg
Serial.print(Distance);
Serial.print("  Old Distance: ");
Serial.print(auxDistance);
Serial.println(gap);

delay(300); 
auxDistance=Distance;//store the value for the if() in the next 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; //starting byte
 Send_buf[1] = 0xff; //version
 Send_buf[2] = 0x06; //the number of bytes of the command without starting byte and ending byte
 Send_buf[3] = command; //
 Send_buf[4] = 0x00;//0x00 = no feedback, 0x01 = feedback
 Send_buf[5] = (int8_t)(dat >> 8);//datah
 Send_buf[6] = (int8_t)(dat); //datal
 Send_buf[7] = 0xef; //ending byte
 for(uint8_t i=0; i<8; i++)//
 {
   mySerial.write(Send_buf[i]) ;//send bit to serial 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;

}
VERSION 3,WITH TWO SENSORS, DIRECCION SENSINGArduino
Now with two distance sensors
//code rearranged by Javier Muñoz 10/11/2016 ask me at javimusama@hotmail.com
#include <SoftwareSerial.h>

#define ARDUINO_RX 5//should connect to TX of the Serial MP3 Player module
#define ARDUINO_TX 6//connect to RX of the module

#define trigPin 13//for the FIRST distance module 
#define echoPin 12 
#define trigPin2 10//for the SECOND  distance module 
#define echoPin2 9

#define trigPin 13//for the distance module
#define echoPin 12


SoftwareSerial mySerial(ARDUINO_RX, ARDUINO_TX);//init the serial protocol, tell to myserial wich pins are TX and RX

////////////////////////////////////////////////////////////////////////////////////
//all the commands needed in the datasheet(http://geekmatic.in.ua/pdf/Catalex_MP3_board.pdf)
static int8_t Send_buf[8] = {0} ;//The MP3 player undestands orders in a 8 int string
                                 //0X7E FF 06 command 00 00 00 EF;(if command =01 next song order) 
#define NEXT_SONG 0X01 
#define PREV_SONG 0X02 

#define CMD_PLAY_W_INDEX 0X03 //DATA IS REQUIRED (number of song)

#define VOLUME_UP_ONE 0X04
#define VOLUME_DOWN_ONE 0X05
#define CMD_SET_VOLUME 0X06//DATA IS REQUIRED (number of volume from 0 up to 30(0x1E))
#define SET_DAC 0X17
#define CMD_PLAY_WITHVOLUME 0X22 //data is needed  0x7E 06 22 00 xx yy EF;(xx volume)(yy number of song)

#define CMD_SEL_DEV 0X09 //SELECT STORAGE DEVICE, DATA IS REQUIRED
                #define DEV_TF 0X02 //HELLO,IM THE DATA REQUIRED
                
#define SLEEP_MODE_START 0X0A
#define SLEEP_MODE_WAKEUP 0X0B

#define CMD_RESET 0X0C//CHIP RESET
#define CMD_PLAY 0X0D //RESUME PLAYBACK
#define CMD_PAUSE 0X0E //PLAYBACK IS PAUSED

#define CMD_PLAY_WITHFOLDER 0X0F//DATA IS NEEDED, 0x7E 06 0F 00 01 02 EF;(play the song with the directory \01\002xxxxxx.mp3

#define STOP_PLAY 0X16

#define PLAY_FOLDER 0X17// data is needed 0x7E 06 17 00 01 XX EF;(play the 01 folder)(value xx we dont care)

#define SET_CYCLEPLAY 0X19//data is needed 00 start; 01 close

#define SET_DAC 0X17//data is needed 00 start DAC OUTPUT;01 DAC no output
////////////////////////////////////////////////////////////////////////////////////
int firstTime=0;//we need to declare firstTime outside the loop 
long Distance,auxDistance,gap=0;
long Distance2,auxDistance2,gap2=0;

void setup()
{
  Serial.begin(9600);//Start our Serial coms for serial monitor in our pc
mySerial.begin(9600);//Start our Serial coms for THE MP3
delay(500);//Wait chip initialization is complete
   sendCommand(CMD_SEL_DEV, DEV_TF);//select the TF card  
delay(200);//wait for 200ms
pinMode(trigPin, OUTPUT); 
pinMode(echoPin, INPUT); 
pinMode(trigPin2, OUTPUT); 
pinMode(echoPin2, INPUT); 

}

void loop() 
{ 


Distance=measureDistance(trigPin,echoPin);//measure distance1 and store
Distance2=measureDistance(trigPin2,echoPin2);//measure distance2 and store
gap=abs(Distance-auxDistance);// calculate the difference between now and last reading
gap2=abs(Distance2-auxDistance2);// calculate the difference between now and last reading

if(firstTime==0){//necesary for stability things
auxDistance=Distance;
auxDistance2=Distance2;
gap=0;
gap2=0;
//does it only the first time after play a song to avoid first loop malfuntcion
firstTime++; 
delay(2000);
}


 if(gap>20 and gap2<20 ){ //if distance variation is 20cm
sendCommand(CMD_PLAY_WITHFOLDER, 0X0201);//play the first song of the second folder 
firstTime=0;//avoid errors!!we dont like errors
Serial.println("RIGHT MOVEMENT DETECTED");
delay(2000); 
} 
 if(gap2>20 and gap<20){ //if distance variation is 20cm
sendCommand(CMD_PLAY_WITHFOLDER, 0X0202);//play the second song of the second folder 
firstTime=0;//avoid errors!!we dont like errors
Serial.println("LEFT MOVEMENT DETECTED");
delay(2000); 
} 
Serial.println("\\\\\\\\\\\\\\\\\\\\\\");//debugggggg
Serial.print(" New Distace:");//debugggggg
Serial.print(Distance);
Serial.print("   Old Distance: ");
Serial.print(auxDistance);
Serial.print("   GAP ");
Serial.println(gap);

Serial.print("New Distace2:");//debugggggg
Serial.print(Distance);
Serial.print("  Old Distance2: ");
Serial.print(auxDistance);
Serial.print("  GAP2 ");
Serial.println(gap);
Serial.println("\\\\\\\\\\\\\\\\\\\\\\");//debugggggg

delay(300); 
auxDistance=Distance;//store the value for the if() in the next loop
auxDistance2=Distance2;//store the value for the if() in the next 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; //starting byte
 Send_buf[1] = 0xff; //version
 Send_buf[2] = 0x06; //the number of bytes of the command without starting byte and ending byte
 Send_buf[3] = command; //
 Send_buf[4] = 0x00;//0x00 = no feedback, 0x01 = feedback
 Send_buf[5] = (int8_t)(dat >> 8);//datah
 Send_buf[6] = (int8_t)(dat); //datal
 Send_buf[7] = 0xef; //ending byte
 for(uint8_t i=0; i<8; i++)//
 {
   mySerial.write(Send_buf[i]) ;//send bit to serial 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;

}

Schematics

Squeme for first and second projects
ONLY ONE DISTANCE SENSOR
Mfgqup1aqdirwllxg3iv
Squeme for the last code, TWO DISTANCE SENSORS
TWO DISTANCE SENSORS, just add another on pins 10,9
Egec4gaouk07iqygii4w

Comments

Similar projects you might like

Distance Sensor and OLED

Project tutorial by javier muñoz sáez

  • 32,144 views
  • 25 comments
  • 83 respects

Arduino Mp3 player Catalex

Project tutorial by javier muñoz sáez

  • 24,884 views
  • 9 comments
  • 24 respects

Arduino - Web-Based MP3 Player

Project tutorial by khanhhs

  • 10,370 views
  • 6 comments
  • 32 respects

PIR Sensor Activated Halloween Scare Prank

Project tutorial by Kristian Blåsol

  • 6,155 views
  • 8 comments
  • 15 respects

Liquid Level Sensing Using a Laser ToF Sensor

Project tutorial by Team ProtoCentral

  • 28,123 views
  • 17 comments
  • 43 respects

Getting started with IMU (6 DOF) motion sensor

Project tutorial by Aritro Mukherjee

  • 88,581 views
  • 19 comments
  • 56 respects
Add projectSign up / Login