工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

ArduinoMp3プレーヤー+距離センサー=FUN

コンポーネントと消耗品

>
Arduino UNO
× 1
カタレックスのArduinoシリアルmp3プレーヤー
SDカードと、PC用のSDカード(大から小)ソケットが必要です
× 1
超音波センサー-HC-SR04(汎用)
× 2
mp3ジャック入力付きのスピーカー
× 1

このプロジェクトについて

CATALEXのシリアルMP3プレーヤーの使用方法

それについての私の以前のチュートリアルでは、必要なライブラリは1つだけです( #include )、および前のチュートリアルですでに説明したいくつかの簡単な機能:

  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; //開始バイトSend_buf [1] =0xff; //バージョンSend_buf [2] =0x06; //開始バイトと終了バイトがないコマンドのバイト数Send_buf [3] =command; // Send_buf [4] =0x00; // 0x00 =フィードバックなし、0x01 =フィードバックSend_buf [5] =(int8_t)(dat>> 8); // datah Send_buf [6] =(int8_t)(dat); // datal Send_buf [7] =0xef; //終了バイトfor(uint8_t i =0; i <8; i ++)// {mySerial.write(Send_buf [i]); //ビットをシリアルmp3に送信} Serial.println(); }  
<図>

HC-SR04超音波範囲の使用方法

それについての私の以前のチュートリアルは、ライブラリは必要なく、とにかく使いやすいです。以前のhc-sr04の投稿を取得して、この関数に入れました:

  long measureDistance(){long duration、distance; digitalWrite(trigPin、LOW); // PULSE ___ | --- | ___ delayMicroseconds(2); digitalWrite(trigPin、HIGH); delayMicroseconds(10); digitalWrite(trigPin、LOW);期間=pulseIn(echoPin、HIGH);距離=(期間/ 2)/ 29.1; Serial.println( "距離:"); Serial.println(距離);戻り距離; //距離をcmで返します}  
<図>

両方の使用方法バージョン1:シンプルなmp3距離トリガー

ライブラリをまだインストールしていない場合は、最初にインストールします()。

このバージョンのコードでは、何かが50cmに近づくと、mp3オーディオがトリガーされます。私はそれを使って、非常に大きな「サプライズマザーファッカー」クリップでルームメイトを怖がらせました。

注: 完全な .ino コードは以下のプロジェクト添付ファイルにあります。

  void loop(){if(measureDistance()<50){sendCommand(CMD_PLAY_WITHFOLDER、0X0203); // 2番目のフォルダーの3番目の曲を再生するdelay(1000); //エラーを回避するために待つ} delay (300); }  

バージョン2と外乱mp3距離トリガーの両方を使用する方法

このバージョンは距離を気にせず、測定値間の違いのみを検出します。エラーによって突然トリガーされた場合は、 if(gap> 20){....... に高い値を入力します ループの外側で新しい変数を宣言する必要があります。私はコードの最初にそれをしました。

  int firstTime =0; //ループの外側でfirstTimeを宣言する必要がありますlongDistance、auxDistance、gap =0; void loop(){Distance =measureDistance(trigPin、echoPin); //距離を測定してgapを保存=abs(Distance-auxDistance); //現在と最後の読み取り値の差を計算if(firstTime ==0){//必要安定性のためにauxDistance =Distance;ギャップ=0; //最初のループの不正行為を回避するために、曲を再生した後に初めて実行しますfirstTime ++; delay(1000); } if(gap>
 20){//距離の変動が20cmの場合sendCommand(CMD_PLAY_WITHFOLDER、0X0201); // 2番目のフォルダーの最初の曲を再生firstTime =0; //エラーを回避!!エラーが気に入らないdelay(2000); } Serial.print( "New Distace:"); // debugggggg Serial.print(Distance); Serial.print( "古い距離:"); Serial.print(auxDistance); Serial.println(gap); delay(300); auxDistance =Distance; //次のループにif()の値を格納します}  

両方の使用方法バージョン3:2つの距離センサー

2つの距離センサーを使用すると、実際に移動方向を推測できます だから私は「 hello "または" さようなら 「人の動きの方向によって異なります。

  • 最初に、2番目のHC-SR04を制御するための別の2つのDIGITALピンを定義します。
  #define trigPin 13 // FIRST距離モジュールの場合#defineechoPin 12 #define trigPin2 10 // 2番目の距離モジュールの場合#defineechoPin2 9  
  • 新しい変数!ええ!
  long Distance、auxDistance、gap =0; long Distance2、auxDistance2、gap2 =0; //新しい変数 
  • setup()内 新しいピン宣言を追加します。
  pinMode(trigPin、OUTPUT); pinMode(echoPin、INPUT); pinMode(trigPin2、OUTPUT); pinMode(echoPin2、INPUT);  
  • measureDistance()を変更します 関数、関数は引数からピンを読み取ります。
  long measureDistance(int trigger、int echo){long duration、distance; digitalWrite(trigger、LOW); // PULSE ___ | --- | ___ delayMicroseconds(2); digitalWrite(トリガー、HIGH); delayMicroseconds(10); digitalWrite(trigger、LOW);期間=pulseIn(echo、HIGH);距離=(期間/ 2)/ 29.1; Serial.println( "距離:"); Serial.println(距離);戻り距離; }  
  • loop():
  void loop(){Distance =measureDistance(trigPin、echoPin); // distance1を測定してDistance2を格納=measureDistance(trigPin2、echoPin2); // distance2を測定してgap =abs(Distance-auxDistance);を格納//現在と最後の読み取り値の差を計算しますgap2 =abs(Distance2-auxDistance2); //現在と最後の読み取り値の差を計算しますif(firstTime ==0){//安定性のために必要なものauxDistance =Distance; auxDistance2 =Distance2;ギャップ=0; gap2 =0; //最初のループの不正行為を回避するために、曲を再生した後に初めて実行しますfirstTime ++; delay(2000); } if(gap>
 20 and gap2 <20){//距離の変動が20cmの場合sendCommand(CMD_PLAY_WITHFOLDER、0X0201); // 2番目のフォルダーの最初の曲を再生firstTime =0; //エラーを回避!!エラーは嫌いSerial.println( "右の動きが検出されました"); delay(2000); } if(gap2> 20 and gap <20){//距離の変動が20cmの場合sendCommand(CMD_PLAY_WITHFOLDER、0X0202); // 2番目のフォルダーの2番目の曲を再生firstTime =0; //エラーを回避!!エラーは嫌いSerial.println( "左の動きが検出されました"); delay(2000); } Serial.println( "\\\\\\\\\\\\\\\\\\\\\\"); // debugggggg Serial.print( "New Distace:"); // debuggggggSerial。 print(距離); Serial.print( "古い距離:"); 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; //次のループにif()の値を格納しますauxDistance2 =Distance2; //次のループにif()の値を格納します} Disturbance2 =0; left =0; right =0; delay (1000); //エラーを回避するために待機} delay(300); auxDistance =Distance; //次のループにif()の値を格納しますauxDistance2 =Distance2; //次のループにif()の値を格納します}  

ハッピーハッキング、仲間!

コード

  • バージョン1、シンプルなmp3距離トリガー
  • バージョン2、外乱mp3距離トリガー
  • バージョン3、2つのセンサー、方向検出
バージョン1、シンプルなmp3距離トリガー Arduino
このバージョンのコードでは、何かが50cmに近づくと、mp3オーディオがトリガーされます。私はそれを使って、非常に大きな「サプライズマザーファッカー」クリップでルームメイトを怖がらせました。 5 //シリアルMP3プレーヤーモジュールのTXに接続する必要があります#defineARDUINO_TX6 //モジュールのRXに接続します#definetrigPin 13 //距離モジュールの場合#defineechoPin 12SoftwareSerial mySerial(ARDUINO_RX、ARDUINO_TX); //初期化シリアルプロトコル、ピンがTXとRXであるかmyserialに伝えます////////////////////////////////////// ////////////////////////////////////////////////全てのデータシートに必要なコマンド(http://geekmatic.in.ua/pdf/Catalex_MP3_board.pdf)static int8_t Send_buf [8] ={0}; // MP3プレーヤーは8int文字列の注文を理解しません// 0X7E FF 06 command 00 00 00 EF;(コマンド=01次の曲の順序の場合)#define NEXT_SONG 0X01 #define PREV_SONG 0X02 #define CMD_PLAY_W_INDEX 0X03 //データが必要です(曲の数)#define VOLUME_UP_ONE 0X04#define VOLUME_D OWN_ONE 0X05#define CMD_SET_VOLUME 0X06 //データが必要です(0から30(0x1E)までのボリュームの数)#defineSET_DAC 0X17#define CMD_PLAY_WITHVOLUME 0X22 //データが必要です0x7E06 22 00 xx yy EF;(xxボリューム)( yy曲数)#defineCMD_SEL_DEV 0X09 //ストレージデバイスを選択、データが必要#define DEV_TF 0X02 //こんにちは、必要なデータをIM #define SLEEP_MODE_START 0X0A#define SLEEP_MODE_WAKEUP 0X0B#define CMD_RESET 0X0C // CHIP RESET# // RESUME PLAYBACK#define CMD_PAUSE 0X0E // PLAYBACK IS PAUSED#define CMD_PLAY_WITHFOLDER 0X0F // DATA IS NEEDED、0x7E 06 0F 00 01 02 EF;(ディレクトリ\ 01 \ 002xxxxxx.mp3#define STOP_PLAY 0X16#defineで曲を再生PLAY_FOLDER 0X17 //データが必要0x7E06 17 00 01 XX EF;(01フォルダーを再生)(値xxは気にしない)#define SET_CYCLEPLAY 0X19 //データが必要00start; 01 close#define SET_DAC 0X17 //データが必要00start DAC OUTPUT; 01DAC出力なし////////////////////////////// ////////////////////////////////////////////////// //// void setup(){Serial.begin(9600); // pcmySerial.begin(9600);でシリアルモニターのシリアルcomを開始します; // MP3delay(500); //待機のシリアルcomを開始しますチップの初期化が完了しましたsendCommand(CMD_SEL_DEV、DEV_TF); // TFカードを選択delay(200); // 200mspinMode(trigPin、OUTPUT); pinMode(echoPin、INPUT);} void loop(){if(measureDistance( trigPin、echoPin)<50){sendCommand(CMD_PLAY_WITHFOLDER、0X0203); // 2番目のフォルダーの3番目の曲を再生delay(1000); //エラーを回避するために待機} delay(300);} void sendCommand(int8_t command、int16_t dat ){delay(20); Send_buf [0] =0x7e; //開始バイトSend_buf [1] =0xff; //バージョンSend_buf [2] =0x06; //開始バイトと終了バイトがないコマンドのバイト数Send_buf [3] =command; // Send_buf [4] =0x00; // 0x00 =フィードバックなし、0x01 =フィードバックSend_buf [5] =(int8_t)(dat>> 8); // datah Send_buf [6] =(int8_t)(dat); // datal Send_buf [7] =0xef; //終了バイトfor(uint8_t i =0; i <8; i ++)// {mySerial.write(Send_buf [i]); //ビットをシリアルmp3に送信Serial.print(Send_buf [i]、HEX); / / PCのシリアルモニターにビットを送信} Serial.println();} long measureDistance(int trigger、int echo){long duration、distance; digitalWrite(trigger、LOW); // PULSE ___ | --- | ___ delayMicroseconds(2); digitalWrite(トリガー、HIGH); delayMicroseconds(10); digitalWrite(trigger、LOW);期間=pulseIn(echo、HIGH);距離=(期間/ 2)/ 29.1; Serial.println( "距離:"); Serial.println(距離);戻り距離;}
バージョン2、外乱mp3距離トリガー Arduino
このバージョンは距離を気にせず、読み取り値の違いのみを検出します。
 //JavierMuñozによって再配置されたコード2016/10/[email protected]#include  #define ARDUINO_RX 5 //で私に尋ねてくださいシリアルMP3プレーヤーモジュールのTXに接続する必要があります#defineARDUINO_TX6 //モジュールのRXに接続します#definetrigPin 13 //距離モジュールの場合#defineechoPin 12SoftwareSerial mySerial(ARDUINO_RX、ARDUINO_TX); //シリアルプロトコルを初期化します、ピンがTXとRXであるかをmyserialに伝えます///////////////////////////////////////// /////////////////////////////////////////////データシート(http://geekmatic.in.ua/pdf/Catalex_MP3_board.pdf)static int8_t Send_buf [8] ={0}; // MP3プレーヤーは8int文字列の注文を理解しません// 0X7E FF06コマンド0000 00 EF;(コマンド=01次の曲の順序の場合)#define NEXT_SONG 0X01 #define PREV_SONG 0X02 #define CMD_PLAY_W_INDEX 0X03 //データが必要です(曲の数)#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 required 0x7E 06 22 00 xx yy EF;(xx volume)( yy曲数)#defineCMD_SEL_DEV 0X09 //ストレージデバイスを選択、データが必要#define DEV_TF 0X02 //こんにちは、必要なデータをIM #define SLEEP_MODE_START 0X0A#define SLEEP_MODE_WAKEUP 0X0B#define CMD_RESET 0X0C // CHIP RESET# // RESUME PLAYBACK#define CMD_PAUSE 0X0E // PLAYBACK IS PAUSED#define CMD_PLAY_WITHFOLDER 0X0F // DATA IS NEEDED、0x7E 06 0F 00 01 02 EF;(ディレクトリ\ 01 \ 002xxxxxx.mp3#define STOP_PLAY 0X16#defineで曲を再生PLAY_FOLDER 0X17 //データが必要0x7E06 17 00 01 XX EF;(01フォルダーを再生)(値xxは気にしない)#define SET_CYCLEPLAY 0X19 //データが必要00start; 01 close#define SET_DAC 0X17 //データが必要00start DAC OUTPUT; 01DAC出力なし////////////////////////////// ////////////////////////////////////////////////// //// int firstTime =0; //ループの外側でfirstTimeを宣言する必要がありますlongDistance、auxDistance、gap =0; void setup(){Serial.begin(9600); //シリアルモニターのシリアルコムを開始しますpcmySerial.begin(9600); // MP3delay(500);のシリアルコムを開始します; //チップの初期化が完了するのを待ちますsendCommand(CMD_SEL_DEV、DEV_TF); // TFカードの遅延を選択します(200); //待機します200mspinMode(trigPin、OUTPUT); pinMode(echoPin、INPUT);} void loop(){Distance =measureDistance(trigPin、echoPin); //距離とstoregap =abs(Distance-auxDistance); //の差を計算するそして最後のreadingif(firstTime ==0){//安定性のために必要thingsauxDistance =Distance; gap =0; //最初のループを回避するために、曲を再生した後に初めて実行するmalfuntcionfirstTime ++; delay(1000);} if(gap>
 20){//距離の変動が20cmの場合sendCommand(CMD_PLAY_WITHFOLDER、0X0201); // 2番目のフォルダーの最初の曲を再生するfirstTime =0; //エラーを回避する!!エラーを回避するdelay (2000); } Serial.print( "New Distace:"); // debuggggggSerial.print(Distance); Serial.print( "Old Distance:"); Serial.print(auxDistance); Serial.println(gap); delay(300); auxDistance =Distance; //次のループにif()の値を格納する} void sendCommand(int8_t command、int16_t dat){if(command ==CMD_PLAY_WITHFOLDERまたはcommand ==CMD_PLAY_WITHVOLUME){Serial.print( "PLAYING SONG、頭を少し動かして効果を高めましょう ");} delay(20); Send_buf [0] =0x7e; //開始バイトSend_buf [1] =0xff; //バージョンSend_buf [2] =0x06; //開始バイトと終了バイトがないコマンドのバイト数Send_buf [3] =command; // Send_buf [4] =0x00; // 0x00 =フィードバックなし、0x01 =フィードバックSend_buf [5] =(int8_t)(dat>> 8); // datah Send_buf [6] =(int8_t)(dat); // datal Send_buf [7] =0xef; //終了バイトfor(uint8_t i =0; i <8; i ++)// {mySerial.write(Send_buf [i]); //ビットをシリアルmp3に送信} Serial.println();} long measureDistance(int trigger 、int echo){長い期間、距離; digitalWrite(trigger、LOW); // PULSE ___ | --- | ___ delayMicroseconds(2); digitalWrite(トリガー、HIGH); delayMicroseconds(10); digitalWrite(trigger、LOW);期間=pulseIn(echo、HIGH);距離=(duration / 2)/ 29.1; // Serial.println( "distance:"); // Serial.println(distance);戻り距離;} 
バージョン3、2つのセンサー、方向検出 Arduino
2つの距離センサーを使用して
 //JavierMuñozによってコードが再配置されました10/11/[email protected]で私に尋ねてください#include  #define ARDUINO_RX 5 //シリアルMP3プレーヤーのTXに接続する必要がありますmodule#define ARDUINO_TX 6 //モジュールのRXに接続#definetrigPin 13 // FIRST距離モジュールの場合#defineechoPin 12 #define trigPin2 10 // 2番目の距離モジュールの場合#defineechoPin2 9#define trigPin 13 // for距離module#define echoPin 12SoftwareSerial mySerial(ARDUINO_RX、ARDUINO_TX); //シリアルプロトコルを初期化し、ピンがTXとRXであるかをmyserialに通知します/////////////////// ////////////////////////////////////////////////// ////////////////データシートに必要なすべてのコマンド(http://geekmatic.in.ua/pdf/Catalex_MP3_board.pdf)static int8_t Send_buf [8] ={0}; // MP3プレーヤーは8int文字列の順序を理解しません// 0X7E FF06コマンド0000 00 EF;(コマンド=01次の曲の順序の場合)#define NEXT_SONG 0X01 #define PREV_SONG 0X02 #define CMD_PLAY _W_INDEX 0X03 //データが必要です(曲の数)#defineVOLUME_UP_ONE 0X04#define VOLUME_DOWN_ONE 0X05#define CMD_SET_VOLUME 0X06 // DATA IS REQUIRED(0から30(0x1E)までのボリュームの数)#defineSET_DAC 0X17#define CMD //データが必要です0x7E06 22 00 xx yy EF;(xx volume)(yy number of song)#define CMD_SEL_DEV 0X09 //ストレージデバイスを選択し、データが必要です#define DEV_TF 0X02 // HELLO、IM必要なデータ#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 /ディレクトリ\ 01 \ 002xxxxxx.mp3#define STOP_PLAY 0X16#define PLAY_FOLDER 0X17 //データが必要です0x7E06 17 00 01 XX EF;(01フォルダを再生)(値xx私たちは気にしない)#define SET_CYCLEPLAY 0X19 //データが必要です00start; 01 close#define SET_DAC 0X17 //データが必要00start DAC OUTPUT; 01DAC出力なし////////////////////////////// ////////////////////////////////////////////////// //// int firstTime =0; //ループの外側でfirstTimeを宣言する必要がありますlongDistance、auxDistance、gap =0; long Distance2、auxDistance2、gap2 =0; void setup(){Serial.begin(9600); / / pcmySerial.begin(9600); // MP3delay(500);のシリアルcomのシリアルcomを開始します; //チップの初期化が完了するのを待ちますsendCommand(CMD_SEL_DEV、DEV_TF); // TFカードを選択しますdelay(200); // 200mspinMode(trigPin、OUTPUT);を待ちますpinMode(echoPin、INPUT); pinMode(trigPin2、OUTPUT); pinMode(echoPin2、INPUT); } void loop(){Distance =measureDistance(trigPin、echoPin); // distance1とstoreDistance2 =measureDistance(trigPin2、echoPin2); // distance2とstoregap =abs(Distance-auxDistance); //の差を計算するそして最後のreadinggap2 =abs(Distance2-auxDistance2); //現在と最後のreadingの差を計算しますif(firstTime ==0){//安定性のために必要thingsauxDistance =Distance; auxDistance2 =Distance2; gap =0; gap2 =0; / /最初のループmalfuntcionfirstTime ++を回避するために、曲を再生した後に初めて実行します。 delay(2000);} if(gap>
 20 and gap2 <20){//距離の変動が20cmの場合sendCommand(CMD_PLAY_WITHFOLDER、0X0201); // 2番目のフォルダーの最初の曲を再生firstTime =0; //エラーを回避!! errorsSerial.println( "RIGHT MOVEMENT DETECTED"); delay(2000);は好きではありません。 } if(gap2> 20 and gap <20){//距離の変動が20cmの場合sendCommand(CMD_PLAY_WITHFOLDER、0X0202); // 2番目のフォルダーの2番目の曲を再生firstTime =0; //エラーを回避!! errorsSerialは好きではありません。 println( "LEFT MOVEMENT DETECTED"); delay(2000); } Serial.println( "\\\\\\\\\\\\\\\\\\\\\\"); // debuggggggSerial.print( "New Distace:"); // debuggggggSerial.print( Distance); Serial.print( "Old Distance:"); Serial.print(auxDistance); Serial.print( "GAP"); Serial.println(gap); Serial.print( "New Distace2:"); // debuggggggSerial.print(Distance); Serial.print( "Old Distance2:"); Serial.print(auxDistance); Serial.print( "GAP2"); Serial.println(gap); Serial.println( "\\\\ \\\\\\\\\\\\\\\\\\ "); // debuggggggdelay(300); auxDistance =Distance; //次のループにif()の値を格納しますauxDistance2 =Distance2; //次のループにif()の値を格納します} void sendCommand(int8_t command、int16_t dat){if(command ==CMD_PLAY_WITHFOLDERまたはcommand ==CMD_PLAY_WITHVOLUME){Serial.print( "歌を再生し、頭を少し動かして効果を高めます");} delay(20); Send_buf [0] =0x7e; //開始バイトSend_buf [1] =0xff; //バージョンSend_buf [2] =0x06; //開始バイトと終了バイトがないコマンドのバイト数Send_buf [3] =command; // Send_buf [4] =0x00; // 0x00 =フィードバックなし、0x01 =フィードバックSend_buf [5] =(int8_t)(dat>> 8); // datah Send_buf [6] =(int8_t)(dat); // datal Send_buf [7] =0xef; //終了バイトfor(uint8_t i =0; i <8; i ++)// {mySerial.write(Send_buf [i]); //ビットをシリアルmp3に送信} Serial.println();} long measureDistance(int trigger 、int echo){長い期間、距離; digitalWrite(trigger、LOW); // PULSE ___ | --- | ___ delayMicroseconds(2); digitalWrite(トリガー、HIGH); delayMicroseconds(10); digitalWrite(trigger、LOW);期間=pulseIn(echo、HIGH);距離=(duration / 2)/ 29.1; // Serial.println( "distance:"); // Serial.println(distance);戻り距離;} 

回路図

唯一の距離センサー 2つの距離センサー、ピン10、9にもう1つ追加するだけです

製造プロセス

  1. 自宅にワイヤレスセンサーネットワークを構築する
  2. K30センサーによるCO2モニタリング
  3. あなたの身長はどれくらいですか?
  4. ArduinoまたはESP8266を搭載した静電容量式指紋センサー
  5. Arduinoでオーディオを再生する
  6. Arduino-WebベースのMP3プレーヤー
  7. Arduinoクラウドセンサータワー
  8. モーションセンサー水鉄砲
  9. Arduino-シリアル経由でWebに温度を送信
  10. Arduinoを搭載したミニレーダー
  11. Arduinoを使用したタッチ制御ライト