Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Mp3-плеер Arduino + датчик расстояния =УДОВОЛЬСТВИЕ

Компоненты и расходные материалы

Arduino UNO
× 1
Серийный mp3-плеер Arduino от catalex
Вам также понадобится SD-карта и гнездо для SD-карты (от большого к маленькому) для ПК.
× 1
Ультразвуковой датчик - HC-SR04 (общий)
× 2
какой-то динамик с входом для mp3-джек
× 1

Об этом проекте

Как использовать последовательный Mp3-плеер от CATALEX

В моем предыдущем руководстве об этом требовалась только одна библиотека ( #include ) и некоторые простые функции, которые уже объяснялись в предыдущем руководстве:

  void sendCommand (int8_t command, int16_t dat) {if (command ==CMD_PLAY_WITHFOLDER or 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 =Feedback Send_buf [5] =(int8_t) (dat>> 8); // datah Send_buf [6] =(int8_t) (dat); // данные 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 () {длительность, расстояние; digitalWrite (trigPin, LOW); // ИМПУЛЬС ___ | --- | ___ delayMicroseconds (2); digitalWrite (trigPin, HIGH); delayMicroseconds (10); digitalWrite (trigPin, LOW); duration =pulseIn (echoPin, HIGH); расстояние =(продолжительность / 2) / 29,1; Serial.println ("расстояние:"); Serial.println (расстояние); расстояние возврата; // возвращает расстояние в см}  

Как использовать их оба. Версия 1. Простой триггер расстояния в формате mp3

Сначала установите библиотеку, если у вас ее еще нет ().

В этой версии кода, если что-то приближается ближе 50 см, запускается звук в формате mp3. Я использовал его, чтобы напугать моих соседей по комнате очень громким клипом «Ублюдок-сюрприз».

Примечание. Полный .ino код находится в приложениях к проекту ниже.

  void loop () {if (measureDistance () <50) {sendCommand (CMD_PLAY_WITHFOLDER, 0X0203); // проигрываем третью песню из второй папки delay (1000); // ждем, чтобы избежать ошибок} delay (300); }  

Как использовать как версию 2, так и триггер расстояния Disturbance в формате mp3

Эта версия не заботится о расстоянии, а только определяет разницу между показаниями. Если срабатывает внезапно из-за ошибки, установите более высокое значение в if (gap> 20) {....... нам нужно объявить новые переменные вне цикла. Я сделал это в начале кода.

  int firstTime =0; // нам нужно объявить firstTime вне цикла long Distance, auxDistance, gap =0; void loop () {Distance =measureDistance (trigPin, echoPin); // измеряем расстояние и сохраняем разрыв =abs (Distance-auxDistance); // вычисляем разницу между текущим и последним показаниями if (firstTime ==0) {// необходимо для стабильности вещи auxDistance =Distance; разрыв =0; // делает это только в первый раз после воспроизведения песни, чтобы избежать сбоя первого цикла firstTime ++; задержка (1000); } if (gap>
 20) {// если расстояние составляет 20 см sendCommand (CMD_PLAY_WITHFOLDER, 0X0201); // проигрываем первую песню из второй папки firstTime =0; // избегаем ошибок !! мы не любим ошибки delay (2000); } Serial.print ("New Distace:"); // debugggggg Serial.print (Distance); Serial.print ("Старое расстояние:"); Serial.print (auxDistance); Serial.println (пробел); задержка (300); auxDistance =Distance; // сохраняем значение для if () в следующем цикле}  

Как использовать их оба. Версия 3:два датчика расстояния

С помощью двух датчиков расстояния вы можете угадать направление движения поэтому я сделал программу, которая говорит:« привет "или" до свидания "в зависимости от направления движения человека.

  • Сначала мы определяем еще два ЦИФРОВЫХ контакта для управления вторым HC-SR04:
  #define trigPin 13 // для ПЕРВОГО модуля расстояния #define echoPin 12 #define trigPin2 10 // для ВТОРОГО модуля расстояния #define echoPin2 9  
  • Новые переменные! Ага!
  long Distance, auxDistance, gap =0; long Distance2, auxDistance2, gap2 =0; // новые переменные  
  • В setup () мы добавляем нашу новую декларацию контактов.
  pinMode (trigPin, OUTPUT); pinMode (echoPin, ВХОД); pinMode (trigPin2, ВЫХОД); pinMode (echoPin2, ВХОД);  
  • Мы меняем measureDistance () функция, теперь функция считывает контакты из аргументов.
  long measureDistance (int trigger, int echo) {длительность, расстояние; digitalWrite (триггер, LOW); // ИМПУЛЬС ___ | --- | ___ delayMicroseconds (2); digitalWrite (триггер, ВЫСОКИЙ); delayMicroseconds (10); digitalWrite (триггер, LOW); duration =pulseIn (эхо, ВЫСОКИЙ); расстояние =(продолжительность / 2) / 29,1; Serial.println ("расстояние:"); Serial.println (расстояние); расстояние возврата; }  
  • В нашем loop ():
  void loop () {Distance =measureDistance (trigPin, echoPin); // измеряем расстояние1 и сохраняем Distance2 =measureDistance (trigPin2, echoPin2); // измеряем расстояние2 и сохраняем gap =abs (Distance-auxDistance); // вычисляем разницу между текущим и последним чтением gap2 =abs (Distance2-auxDistance2); // вычисляем разницу между текущим и последним чтением if (firstTime ==0) {// необходимые для стабильности вещи auxDistance =Distance; auxDistance2 =Distance2; разрыв =0; пробел2 =0; // делает это только в первый раз после воспроизведения песни, чтобы избежать сбоя первого цикла firstTime ++; задержка (2000); } if (gap>
 20 and gap2 <20) {// если расстояние составляет 20 см sendCommand (CMD_PLAY_WITHFOLDER, 0X0201); // проигрываем первую песню из второй папки firstTime =0; // избегаем ошибок !! мы не любим ошибки Serial.println («ОБНАРУЖЕНО ПРАВОЕ ДВИЖЕНИЕ»); задержка (2000); } if (gap2> 20 and gap <20) {// если отклонение расстояния составляет 20 см sendCommand (CMD_PLAY_WITHFOLDER, 0X0202); // проигрываем вторую песню из второй папки firstTime =0; // избегаем ошибок !! мы не любим ошибки Serial.println («ОБНАРУЖЕНО ЛЕВОЕ ДВИЖЕНИЕ»); задержка (2000); } Serial.println ("\\\\\\\\\\\\\\\\\\\\\"); // debugggggg Serial.print ("New Distace:"); // debugggggg Serial. печать (Расстояние); Serial.print ("Старое расстояние:"); Serial.print (auxDistance); Serial.print («GAP»); Serial.println (пробел); Serial.print ("Новое Distace2:"); // debugggggg Serial.print (Distance); Serial.print ("Старое расстояние2:"); Serial.print (auxDistance); Serial.print («GAP2»); Serial.println (пробел); 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, С ДВУМЯ ДАТЧИКАМИ, ОПРЕДЕЛЕНИЕ НАПРАВЛЕНИЯ
Версия 1, простой триггер расстояния в формате mp3 Arduino
В этой версии кода, если что-то приближается ближе 50 см, запускается звук в формате mp3. Я использовал его, чтобы напугать своих соседей по комнате очень громким клипом "неожиданный ублюдок".
 // код, измененный Хавьером Муньосом 10/11/2016, спросите меня по адресу [email protected]#include  #define ARDUINO_RX 5 // должен подключаться к TX модуля последовательного MP3-плеера # define ARDUINO_TX 6 // подключиться к RX модуля # define trigPin 13 // для удаленного модуля # define echoPin 12SoftwareSerial mySerial (ARDUINO_RX, ARDUINO_TX); // инициализируем последовательный протокол, сообщите myserial, какие контакты являются TX и RX ////////////////////////////////////// //////////////////////////////////////////////// Все команды, необходимые в таблице данных (http://geekmatic.in.ua/pdf/Catalex_MP3_board.pdf) static int8_t Send_buf [8] ={0}; // MP3-плеер не распознает заказы в строке 8 int // 0X7E FF 06 command 00 00 00 EF; (если command =01 порядок следующей песни) #define NEXT_SONG 0X01 #define PREV_SONG 0X02 #define CMD_PLAY_W_INDEX 0X03 // ТРЕБУЮТСЯ ДАННЫЕ (количество песен) #define VOLUME_UP_ONE 0X04 #define VOLUME_UP_ONE 0X04 #define VOLUME_UP_ONE 0X04 #define VOLUME_UP_ONE 0X04 #define VOLUME_UP_ONE 0X04 #define VOLUM_UP_ONE #define ME 0X06 // ТРЕБУЮТСЯ ДАННЫЕ (количество томов от 0 до 30 (0x1E)) # define SET_DAC 0X17 # define CMD_PLAY_WITHVOLUME 0X22 // данные необходимы 0x7E 06 22 00 xx yy EF; (xx volume) (yy номер песни ) #define CMD_SEL_DEV 0X09 // ВЫБРАТЬ УСТРОЙСТВО ХРАНИЛИЩА, ТРЕБУЮТСЯ ДАННЫЕ #define DEV_TF 0X02 // ПРИВЕТ, IM ТРЕБУЕМЫЕ ДАННЫЕ #define SLEEP_MODE_START 0X0A #define SLEEP_MODE_START 0X0A # define SLEEP_MODE_WAKEIP0 #define_MODE_WAKEIP_WAKEUP 0X0_BRES_WAKEUP 0X0_BRES_WAKEUP 0X0_BRES_DEF_RES_WAKEIP #define CMD_PAUSE 0X0E // ВОСПРОИЗВЕДЕНИЕ ПРИОСТАНОВЛЕНО #define CMD_PLAY_WITHFOLDER 0X0F // ТРЕБУЮТСЯ ДАННЫЕ, 0x7E 06 0F 00 01 02 EF; (воспроизвести песню в каталоге \ 01 \ 002xxxxxx.mp3 # define STOP_PLAY 0X16 #define PLX17_FOLDER данные необходимы 0x7E 06 17 00 01 XX EF; (воспроизвести папку 01) (значение xx нас не волнует) #define SET_CYCLEPLAY 0X19 // данные необходимы 00 start; 01 close # define SET_DAC 0X17 // данные необходимы 00 start DAC OUTPUT; 01 DAC no output ////////////////////////////// ////////////////////////////////////////////////// //// void setup () {Serial.begin (9600); // Запускаем наши последовательные coms для последовательного монитора в нашем pcmySerial.begin (9600); // запускаем наши Serial coms для MP3delay (500); // ждем инициализация чипа завершена sendCommand (CMD_SEL_DEV, DEV_TF); // выбираем задержку TF-карты (200); // ждем 200 мсpinMode (trigPin, OUTPUT); pinMode (echoPin, INPUT);} void loop () {if (measureDistance ( trigPin, echoPin) <50) {sendCommand (CMD_PLAY_WITHFOLDER, 0X0203); // проигрываем третью песню из второй папкиdelay (1000); // ждем, чтобы избежать ошибок} delay (300);} void sendCommand (int8_t command, int16_t dat ) {задержка (20); Send_buf [0] =0x7e; // начальный байт Send_buf [1] =0xff; // версия Send_buf [2] =0x06; // количество байтов команды без начального и конечного байтов Send_buf [3] =command; // Send_buf [4] =0x00; // 0x00 =нет обратной связи, 0x01 =Feedback Send_buf [5] =(int8_t) (dat>> 8); // datah Send_buf [6] =(int8_t) (dat); // данные Send_buf [7] =0xef; // конечный байт for (uint8_t i =0; i <8; i ++) // {mySerial.write (Send_buf [i]); // отправляем бит в последовательный mp3 Serial.print (Send_buf [i], HEX); / / отправить бит на монитор последовательного порта на ПК} Serial.println ();} long measureDistance (int trigger, int echo) {long duration, distance; digitalWrite (триггер, LOW); // ИМПУЛЬС ___ | --- | ___ delayMicroseconds (2); digitalWrite (триггер, ВЫСОКИЙ); delayMicroseconds (10); digitalWrite (триггер, LOW); duration =pulseIn (эхо, ВЫСОКИЙ); расстояние =(продолжительность / 2) / 29,1; Serial.println ("расстояние:"); Serial.println (расстояние); расстояние возврата;} 
Версия 2, триггер расстояния для MP3 Arduino
Эта версия не заботится о расстоянии, только определяет различия между показаниями.
 // код, измененный Хавьером Муньосом 10/11/2016, спросите меня по адресу [email protected]#include  #define ARDUINO_RX 5 // должен подключиться к TX модуля последовательного MP3-плеера # define ARDUINO_TX 6 // подключиться к RX модуля # define trigPin 13 // для удаленного модуля # define echoPin 12SoftwareSerial mySerial (ARDUINO_RX, ARDUINO_TX); // инициализируем последовательный протокол, сообщить myserial, какие контакты являются TX и RX ///////////////////////////////////////// ///////////////////////////////////////////// все команды, необходимые в таблица данных (http://geekmatic.in.ua/pdf/Catalex_MP3_board.pdf) static int8_t Send_buf [8] ={0}; // MP3-плеер не распознает заказы в строке 8 int // 0X7E FF 06 command 00 00 00 EF; (if command =01 следующий порядок песен) #define NEXT_SONG 0X01 #define PREV_SONG 0X02 #define CMD_PLAY_W_INDEX 0X03 // ТРЕБУЮТСЯ ДАННЫЕ (количество песен) #define VOLUME_UP_ONE 0X04 # define VOLUME_DOW5 _SET_VOLUME 0X06 // ТРЕБУЮТСЯ ДАННЫЕ (количество томов от 0 до 30 (0x1E)) # define SET_DAC 0X17 # define CMD_PLAY_WITHVOLUME 0X22 // данные необходимы 0x7E 06 22 00 xx yy EF; (xx volume) (yy номер песни ) #define CMD_SEL_DEV 0X09 // ВЫБРАТЬ УСТРОЙСТВО ХРАНИЛИЩА, ТРЕБУЮТСЯ ДАННЫЕ #define DEV_TF 0X02 // ПРИВЕТ, IM ТРЕБУЕМЫЕ ДАННЫЕ #define SLEEP_MODE_START 0X0A #define SLEEP_MODE_START 0X0A # define SLEEP_MODE_WAKEIP0 #define_MODE_WAKEIP_WAKEUP 0X0_BRES_WAKEUP 0X0_BRES_WAKEUP 0X0_BRES_DEF_RES_WAKEIP #define CMD_PAUSE 0X0E // ВОСПРОИЗВЕДЕНИЕ ПРИОСТАНОВЛЕНО #define CMD_PLAY_WITHFOLDER 0X0F // ТРЕБУЮТСЯ ДАННЫЕ, 0x7E 06 0F 00 01 02 EF; (воспроизвести песню в каталоге \ 01 \ 002xxxxxx.mp3 # define STOP_PLAY 0X16 #define PLX17_FOLDER данные необходимы 0x7E 06 17 00 01 XX EF; (воспроизвести папку 01) (значение xx нас не волнует) #define SET_CYCLEPLAY 0X19 // данные необходимы 00 start; 01 close # define SET_DAC 0X17 // данные необходимы 00 start DAC OUTPUT; 01 DAC no output ////////////////////////////// ////////////////////////////////////////////////// //// int firstTime =0; // нам нужно объявить firstTime вне цикла long Distance, auxDistance, gap =0; void setup () {Serial.begin (9600); // Запустить наши последовательные com для последовательного монитора в our pcmySerial.begin (9600); // Запускаем наши Serial coms для 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); // вычисляем разницу между текущим и последнее чтение if (firstTime ==0) {// необходимо для стабильности thingsauxDistance =Distance; gap =0; // делает это только в первый раз после воспроизведения песни, чтобы избежать первого цикла malfuntcionfirstTime ++; delay (1000);} if (gap>
 20) {// если расстояние 20смsendCommand (CMD_PLAY_WITHFOLDER, 0X0201); // проигрываем первую песню из второй папки firstTime =0; // избегаем ошибок !! мы не любим ошибкиdelay (2000); } Serial.print ("New Distace:"); // debuggggggSerial.print (Distance); Serial.print ("Old Distance:"); Serial.print (auxDistance); Serial.println (пробел); задержка (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 =Feedback Send_buf [5] =(int8_t) (dat>> 8); // datah Send_buf [6] =(int8_t) (dat); // данные Send_buf [7] =0xef; // конечный байт для (uint8_t i =0; i <8; i ++) // {mySerial.write (Send_buf [i]); // отправляем бит в последовательный mp3} Serial.println ();} long measureDistance (int trigger , int echo) {длительность, расстояние; digitalWrite (триггер, LOW); // ИМПУЛЬС ___ | --- | ___ delayMicroseconds (2); digitalWrite (триггер, ВЫСОКИЙ); delayMicroseconds (10); digitalWrite (триггер, LOW); duration =pulseIn (эхо, ВЫСОКИЙ); distance =(duration / 2) / 29.1; // Serial.println ("distance:"); // Serial.println (distance); расстояние возврата;} 
ВЕРСИЯ 3, С ДВУМЯ ДАТЧИКАМИ, ДАТЧИКОМ НАПРАВЛЕНИЯ Arduino
Теперь с двумя датчиками расстояния
 // код, измененный Хавьером Муньосом 10/11/2016, спросите меня по адресу [email protected]#include  #define ARDUINO_RX 5 // должен подключиться к TX последовательного MP3-плеера module #define ARDUINO_TX 6 // подключаемся к RX модуля # define trigPin 13 // для ПЕРВОГО модуля расстояния #define echoPin 12 #define trigPin2 10 // для ВТОРОГО модуля расстояния #define echoPin2 9 # define trigPin 13 // для модуль расстояния # define echoPin 12SoftwareSerial mySerial (ARDUINO_RX, ARDUINO_TX); // инициализируем последовательный протокол, сообщаем myserial, какие выводы являются TX и RX //////////////////// ////////////////////////////////////////////////// //////////////// все команды, необходимые в таблице данных (http://geekmatic.in.ua/pdf/Catalex_MP3_board.pdf) static int8_t Send_buf [8] ={0}; // MP3-плеер не распознает приказы в строке 8 int // 0X7E FF 06 command 00 00 00 EF; (if command =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 // ТРЕБУЮТСЯ ДАННЫЕ (количество томов от 0 до 30 (0x1E)) # define SET_DAC 0X17 #define CMD_PLAY_WITH22 // данные CMD_PLAY_WITH22 22 00 xx yy EF; (xx volume) (yy номер песни) #define CMD_SEL_DEV 0X09 // ВЫБРАТЬ УСТРОЙСТВО ХРАНИЛИЩА, ТРЕБУЮТСЯ ДАННЫЕ #define DEV_TF 0X02 // ПРИВЕТ, IM ТРЕБУЮТСЯ ДАННЫЕ #define SLEEP_MODE_MODE_START 0_MODE_START 0_MODE_START0_MODE_START0 define CMD_RESET 0X0C // CHIP RESET # define CMD_PLAY 0X0D // RESUME PLAYBACK #define CMD_PAUSE 0X0E // ВОСПРОИЗВЕДЕНИЕ ПРИОСТАНОВЛЕНО #define CMD_PLAY_WITHFOLDER 0X0F // ТРЕБУЮТСЯ ДАННЫЕ, 0x7E 06 0F 00 01 song 02 EF; (воспроизвести каталог \ 01 \ 002xxxxxx.mp3 #define STOP_PLAY 0X16 #define PLAY_FOLDER 0X17 // данные необходимы 0x7E 06 17 00 01 XX EF; (воспроизвести папку 01) (значение xx нам наплевать) #define SET_CYCLEPLAY 0X19 // данные необходимы 00 start; 01 close # define SET_DAC 0X17 // данные необходимы 00 start DAC OUTPUT; 01 DAC no output ////////////////////////////// ////////////////////////////////////////////////// //// int firstTime =0; // нам нужно объявить firstTime вне цикла long Distance, auxDistance, gap =0; long Distance2, auxDistance2, gap2 =0; void setup () {Serial.begin (9600); / / Запустите наши последовательные coms для последовательного монитора в нашем pcmySerial.begin (9600); // Запустите наши Serial coms для THE MP3delay (500); // Дождитесь завершения инициализации чипа sendCommand (CMD_SEL_DEV, DEV_TF); // выберите TF-карту delay (200); // ждем 200mspinMode (trigPin, OUTPUT); pinMode (echoPin, ВХОД); pinMode (trigPin2, ВЫХОД); pinMode (echoPin2, ВХОД); } void loop () {Distance =measureDistance (trigPin, echoPin); // измеряем расстояние1 и storeDistance2 =measureDistance (trigPin2, echoPin2); // измеряем расстояние2 и storegap =abs (Distance-auxDistance); // вычисляем разницу между текущим и последнее чтениеgap2 =abs (Distance2-auxDistance2); // вычисляем разницу между текущим и последним показаниями if (firstTime ==0) {// необходимыми для стабильности вещамиauxDistance =Distance; auxDistance2 =Distance2; gap =0; gap2 =0; / / делает это только в первый раз после воспроизведения песни, чтобы избежать неисправности первого цикла. delay (2000);} if (gap>
 20 and gap2 <20) {// если расстояние составляет 20 смsendCommand (CMD_PLAY_WITHFOLDER, 0X0201); // проигрываем первую песню из второй папки firstTime =0; // избегаем ошибок !! нам не нравится errorsSerial.println («ОБНАРУЖЕНО ПРАВИЛЬНОЕ ДВИЖЕНИЕ»); delay (2000); } if (gap2> 20 and gap <20) {// если отклонение расстояния составляет 20 смsendCommand (CMD_PLAY_WITHFOLDER, 0X0202); // проигрываем вторую песню из второй папки firstTime =0; // избегаем ошибок !! мы не любим errorsSerial. println («ОБНАРУЖЕНО ЛЕВОЕ ДВИЖЕНИЕ»); delay (2000); } Serial.println ("\\\\\\\\\\\\\\\\\\\\\"); // debuggggggSerial.print ("New Distace:"); // debuggggggSerial.print ( Distance); Serial.print ("Old Distance:"); Serial.print (auxDistance); Serial.print ("GAP"); Serial.println (пробел); Serial.print ("New Distace2:"); // debuggggggSerial.print (Distance); Serial.print ("Old Distance2:"); Serial.print (auxDistance); Serial.print ("GAP2"); Serial.println (пробел); Serial.println ("\\\\ \\\\\\\\\\\\\\\\\\ "); // debuggggggdelay (300); auxDistance =Distance; // сохраняем значение для if () в следующем циклеauxDistance2 =Distance2; // сохраняем значение для if () в следующем цикле} void sendCommand (int8_t command, int16_t dat) {if (command ==CMD_PLAY_WITHFOLDER или команда ==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 =Feedback Send_buf [5] =(int8_t) (dat>> 8); // datah Send_buf [6] =(int8_t) (dat); // данные Send_buf [7] =0xef; // конечный байт для (uint8_t i =0; i <8; i ++) // {mySerial.write (Send_buf [i]); // отправляем бит в последовательный mp3} Serial.println ();} long measureDistance (int trigger , int echo) {длительность, расстояние; digitalWrite (триггер, LOW); // ИМПУЛЬС ___ | --- | ___ delayMicroseconds (2); digitalWrite (триггер, ВЫСОКИЙ); delayMicroseconds (10); digitalWrite (триггер, LOW); duration =pulseIn (эхо, ВЫСОКИЙ); distance =(duration / 2) / 29.1; // Serial.println ("distance:"); // Serial.println (distance); расстояние возврата;} 

Схема

ТОЛЬКО ОДИН ДАТЧИК РАССТОЯНИЯ ДВА ДАТЧИКА РАССТОЯНИЯ, просто добавьте еще один на контакты 10,9

Производственный процесс

  1. Создание сети беспроводных датчиков в вашем доме
  2. Мониторинг CO2 с помощью датчика K30
  3. Какой ты рост?
  4. Емкостной датчик отпечатков пальцев с Arduino или ESP8266
  5. Воспроизведение звука в Arduino
  6. Arduino - MP3-плеер с веб-интерфейсом
  7. Башня датчика облаков Arduino
  8. Водяной пистолет с датчиком движения
  9. Arduino - отправка температуры в Интернет через последовательный
  10. Мини-радар с Arduino