Новости:

ОЧЕРЕДНАЯ ВСТРЕЧА КЛУБА  24.11.2019 в  11:00
ЖДЕМ ВСЕМ

https://tankspb.com/index.php?topic=1125.new#new

Автор Тема: Работа со звуком  (Прочитано 1081 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Deny

  • Администратор
  • Маршал
  • *****
  • Сообщений: 2135
  • РЕПУТАЦИЯ: +10559/-0
    • Питерский танковод
    • Награды
Работа со звуком
« : 11 Январь 2018, 20:54:54 »
Доброго дня. тут буду выкладывать, то нашел по работе со звуком. а так же  свои наработки. Присоединяйтесь.



Оффлайн Deny

  • Администратор
  • Маршал
  • *****
  • Сообщений: 2135
  • РЕПУТАЦИЯ: +10559/-0
    • Питерский танковод
    • Награды
Работа со звуком
« Ответ #1 : 11 Январь 2018, 21:20:58 »
Один из интересных проектов по звуку, правда для самолетов, но все же.

Для просмотр ссылок требуется регистрация.




 


#include <SD.h>                      // need to include the SD library
  #define SD_ChipSelectPin 4  //using digital pin 4 on arduino nano 328, can use other pins
  #include <TMRpcm.h>           //  also need to include this library...
  #include <SPI.h>
 
  TMRpcm tmrpcm;   // create an object for use in this sketch
 
  unsigned long time = 0;
  int numLoop = 0;
  int throttle = 0;
  int prevThrottle = 0;
  int currThrottle = 0;
  int playingSound = 0;
 
  //RC scale
  int rc_pin = 2;
  unsigned long duration;
  unsigned long prevDuration;
 
 
  void setup(){
    tmrpcm.speakerPin = 9; //5,6,11 or 46 on Mega, 9 on Uno, Nano, etc
    Serial.begin(9600);
    if (!SD.begin(SD_ChipSelectPin)) {  // see if the card is present and can be initialized:
      Serial.println("SD fail"); 
      return;   // don't do anything more if not
    }
    else{   
      Serial.println("SD ok");   
    }
    //PLay init file to tell sound version
    Serial.println("beginsound.wav");
    tmrpcm.play("beginsound.wav");
    while(tmrpcm.isPlaying()){
    delay(2000);
  };
    Serial.println("setup end");
  }
 
  void loop(){ 
 
    //Read throttel value
   ++numLoop;
    if (numLoop == 30000){
        noInterrupts();
        duration = pulseIn(rc_pin, HIGH);
        interrupts();
       
        numLoop = 0;
        Serial.println(currThrottle);
        //Set new throttle value
       
     if(duration <= 990){
        currThrottle = 0;
     };
     if((duration > 990) && (duration <= 1050)){
        currThrottle = 1;
     };
      if((duration > 1050) && (duration <= 1167)){
        currThrottle = 2;
      };
      if((duration > 1167) && (duration <= 1332)){
        currThrottle = 3;
      };
      if((duration > 1332) && (duration <= 1498)){
        currThrottle = 4;
      };
      if((duration > 1498) && (duration <= 1664)){
        currThrottle = 5;
      };
      if((duration > 1664) && (duration <= 1830)){
        currThrottle = 6;
      };
      if(duration > 1830){
        currThrottle = 7;
      };
   
      //If currThrottle != prevThrottle set start playing new file
      if(currThrottle != prevThrottle){
       
        if((currThrottle == 0) && (prevThrottle > 0)){
            tmrpcm.play("shut.wav");
             Serial.println("shut.wav)");
             while(tmrpcm.isPlaying()){}
             prevThrottle = currThrottle;
        }
        if(currThrottle == 1){
             if(currThrottle > prevThrottle){
             tmrpcm.play("start.wav");
             Serial.println("start.wav");
             while(tmrpcm.isPlaying()){}
             }
             playingSound = 1;
             prevThrottle = currThrottle;
        }
        if(currThrottle == 2){
          tmrpcm.play("1.wav");
          Serial.println("1.wav");
          prevThrottle = currThrottle;
          playingSound = 1;
        }
        if(currThrottle == 3){
          tmrpcm.play("2.wav");
          Serial.println("2.wav");
          prevThrottle = currThrottle;
          playingSound = 2;
        }
        if(currThrottle == 4){
          tmrpcm.play("3.wav");
          Serial.println("3.wav");
          prevThrottle = currThrottle;
          playingSound = 3;
        }
         if(currThrottle == 5){
          tmrpcm.play("4.wav");
          Serial.println("4.wav");
          prevThrottle = currThrottle;
          playingSound = 4;
        }
         if(currThrottle == 6){
          tmrpcm.play("5.wav");
          Serial.println("5.wav");
          prevThrottle = currThrottle;
          playingSound = 5;
         }
         if(currThrottle == 7){
          tmrpcm.play("6.wav");
          Serial.println("6.wav");
          prevThrottle = currThrottle;
          playingSound = 6;
        }
    }
    // Serial.println(tmrpcm.isPlaying());
     if((currThrottle = prevThrottle) && (tmrpcm.isPlaying() == 0)){
   
        if(playingSound == 1){
          tmrpcm.play("1.wav");
          Serial.println("again 1.wav");
          prevThrottle = currThrottle;
        }
        if(playingSound == 2){
          tmrpcm.play("2.wav");
          Serial.println("again 2.wav");
          prevThrottle = currThrottle;
        }
        if(playingSound == 3){
          tmrpcm.play("3.wav");
          Serial.println("again 3.wav");
          prevThrottle = currThrottle;
        }
         if(playingSound == 4){
          tmrpcm.play("4.wav");
          Serial.println("again 4.wav");
          prevThrottle = currThrottle;
         }
         if(playingSound == 5){
          tmrpcm.play("5.wav");
          Serial.println("again 5.wav");
          prevThrottle = currThrottle;
         }
         if(playingSound == 6){
          tmrpcm.play("6.wav");
          Serial.println("again 6.wav");
          prevThrottle = currThrottle;
        }
     }
  }
}

Мной протестировано, все работает! тут как раз используется картридер, недостаток нужен еще усилитель звука. в Mp3  плеере он уже есть! Далее использование нескольких библиотек, иногда  конфликт с IRLIB2

Оффлайн Sergevk

  • Клуб
  • Лейтенант
  • *
  • Сообщений: 154
  • РЕПУТАЦИЯ: +2012/-0
    • Награды
Работа со звуком
« Ответ #2 : 12 Январь 2018, 00:28:31 »
Из того что я видел по звуку (включая австралийцев - Для просмотр ссылок требуется регистрация.) для каждого звукового модуля идет отдельный динамик. Т.е. как я понимаю нельза подключить один динамик к 2-каналом - что нибудь может сгореть

Оффлайн Deny

  • Администратор
  • Маршал
  • *****
  • Сообщений: 2135
  • РЕПУТАЦИЯ: +10559/-0
    • Питерский танковод
    • Награды
Работа со звуком
« Ответ #3 : 12 Январь 2018, 01:00:17 »
ВОт интересная тема про звук, будет возможность прочитай Для просмотр ссылок требуется регистрация..

Насчет сгорит, не сгорит, это я тебе говорю как  радиоинженер по первому образованию, заморочка только в том  как подключить динамик, а австралийцы намерено делали стереозвучание и не заморачивались)))) Могут только появляться не желательные  "хрипы" при накладке частот. Кстати у Люка на плате такое периодически наблюдается((( Когда работает звук мотора, выстрел иногда хрипит! Сергей если будет возможность приезжай завтра (пятница)  ко мне, часиков до 17 спокойно, без никого можем повозиться и что-нибудь потестить!

Оффлайн Sergevk

  • Клуб
  • Лейтенант
  • *
  • Сообщений: 154
  • РЕПУТАЦИЯ: +2012/-0
    • Награды
Работа со звуком
« Ответ #4 : 12 Январь 2018, 01:09:48 »
Не, завтра никак не могу - работы море

Оффлайн Deny

  • Администратор
  • Маршал
  • *****
  • Сообщений: 2135
  • РЕПУТАЦИЯ: +10559/-0
    • Питерский танковод
    • Награды
Работа со звуком
« Ответ #5 : 12 Январь 2018, 01:15:33 »
Цитата: Sergevk;6054
Не, завтра никак не могу - работы море
Жаль! Следующий раз могу только в среду 17-го (не включая встречу в воскресение) , работа с субботы начинается)))

Оффлайн Deny

  • Администратор
  • Маршал
  • *****
  • Сообщений: 2135
  • РЕПУТАЦИЯ: +10559/-0
    • Питерский танковод
    • Награды
Работа со звуком
« Ответ #6 : 12 Январь 2018, 01:30:20 »
Да забыл указать к первому посту, что большой минус картридера - это много пинов забирает у ардуино - 6 шт, а мп3 плеер  - 4 шт, хотя можно обойтись и тремя.

Оффлайн Deny

  • Администратор
  • Маршал
  • *****
  • Сообщений: 2135
  • РЕПУТАЦИЯ: +10559/-0
    • Питерский танковод
    • Награды
Работа со звуком
« Ответ #7 : 12 Январь 2018, 22:56:10 »
Сергей, я сделал свет и звук для пушки

Оффлайн Deny

  • Администратор
  • Маршал
  • *****
  • Сообщений: 2135
  • РЕПУТАЦИЯ: +10559/-0
    • Питерский танковод
    • Награды
Работа со звуком
« Ответ #8 : 13 Январь 2018, 13:11:48 »
Теперь продолжим тему работы со звуком!


1. Плата ардуино мега Для просмотр ссылок требуется регистрация.
2. Шилд с SDcard  для ардуино меге Для просмотр ссылок требуется регистрация.
3. Mp3  модуль Для просмотр ссылок требуется регистрация.
4. Усилитель ардуино для SD Для просмотр ссылок требуется регистрация.
5. Два динамика от фирмы Тайген
6. Приемо-передачик флай скай (передача сигнала по  IBUS)

 
 
 
 
 
 
 
 
 

мной было протестировано:
1. SD-card (подключение к ардуино, воспроизведение звука)
2. MP3  плеер (подключение к ардуино, воспроизведение звука)
3. Работа SD  and MP3
Тест выполнен успешно.
Минус- использование доп усилителя и два динамика

Собственно код
#include <SD.h> // need to include the SD library
#define SD_ChipSelectPin 10 //using digital pin 4 on arduino nano 328, can use other pins
#include <TMRpcm.h> // also need to include this library...
#include <SPI.h>
#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
#include "FlySkyIBus.h"
#include <Servo.h>//Using servo library to control ESC
Servo esc; //Creating a servo class with name as esc
Servo esc1;
SoftwareSerial mySerial(5, 14); // RX, TX
TMRpcm tmrpcm; // create an object for use in this sketch
int ch1, ch2, ch3, ch4, ch5, ch6, ch7, ch8, ch9, ch10, pwm_R, pwm_L; //каналы


unsigned long time = 0;
int numLoop = 0;
int throttle = 0;
int prevThrottle = 0;
int currThrottle = 0;
int playingSound = 0;


//RC scale
int rc_pin = 2;
unsigned long duration;
unsigned long prevDuration;
unsigned long duration2;


void setup() {
  tmrpcm.speakerPin = 46; //5,6,11 or 46 on Mega, 9 on Uno, Nano, etc
  Serial.begin(9600);
  if (!SD.begin(SD_ChipSelectPin)) { // see if the card is present and can be initialized:
    Serial.println("SD fail");
    return; // don't do anything more if not
  }
  else {
    Serial.println("SD ok");
  }
  //PLay init file to tell sound version
  Serial.println("beginsound.wav");
  tmrpcm.volume(4); //Как видно выше из функций - это громкость.
  tmrpcm.play("start.wav");
  while (tmrpcm.isPlaying()) {
    delay(2000);
  };
  Serial.println("setup end");
  mySerial.begin (9600);
  mp3_set_serial (mySerial);  //set softwareSerial for DFPlayer-mini mp3 module
  mp3_set_volume (25);       //Громкость работы звукового модуля от 0 до 30
  IBus.begin(Serial1);
  esc.attach(23); //Specify the esc signal pin,Here as D8
  esc.writeMicroseconds(1000); //initialize the signal to 1000
  esc1.attach(22);
  esc1.writeMicroseconds(1000); //initialize the signal to 1000
}


void loop() {


  IBus.loop();


  ch1 = IBus.readChannel(0);
  ch2 = IBus.readChannel(1);
  ch3 = IBus.readChannel(2);
  ch4 = IBus.readChannel(3);
  ch5 = IBus.readChannel(4);
  ch6 = IBus.readChannel(5);
  ch7 = IBus.readChannel(6);
  ch8 = IBus.readChannel(7);
  ch9 = IBus.readChannel(8);
  ch10 = IBus.readChannel(9);
  Serial.print("ch1 - ");
      Serial.print(ch1);
      Serial.print("  ");
      Serial.print("ch2 - ");
      Serial.print( ch2);
      Serial.print("  ");
      Serial.print("ch3 - ");
      Serial.print(ch3);
      Serial.print("  ");
      Serial.print("ch4 - ");
      Serial.println(ch4);


  //Read throttel value
  ++numLoop;
//  if (numLoop == 30000) {
//    //noInterrupts();
//    duration = IBus.readChannel(1);
//   interrupts();


    numLoop = 0;
    Serial.println(currThrottle);
    //Set new throttle value
duration = IBus.readChannel(1);
    if (duration <= 990) {
      currThrottle = 0;
    };
    if ((duration > 990) && (duration <= 1050)) {
      currThrottle = 1;
    };
    if ((duration > 1050) && (duration <= 1167)) {
      currThrottle = 2;
    };
    if ((duration > 1167) && (duration <= 1332)) {
      currThrottle = 3;
    };
    if ((duration > 1332) && (duration <= 1498)) {
      currThrottle = 4;
    };
    if ((duration > 1498) && (duration <= 1664)) {
      currThrottle = 5;
    };
    if ((duration > 1664) && (duration <= 1830)) {
      currThrottle = 6;
    };
    if (duration > 1830) {
      currThrottle = 7;
    };
duration2 = IBus.readChannel(4);
if (duration2 > 1830)
{
  mp3_play (4);
}
    //If currThrottle != prevThrottle set start playing new file
    if (currThrottle != prevThrottle) {


      if ((currThrottle == 0) && (prevThrottle > 0)) {
        tmrpcm.play("shut.wav");
        Serial.println("shut.wav)");
        while (tmrpcm.isPlaying()) {}
        prevThrottle = currThrottle;
      }
      if (currThrottle == 1) {
        if (currThrottle > prevThrottle) {
          tmrpcm.play("start.wav");
          Serial.println("start.wav");
          while (tmrpcm.isPlaying()) {}
        }
        playingSound = 1;
        prevThrottle = currThrottle;
      }
      if (currThrottle == 2) {
        tmrpcm.play("1.wav");
        Serial.println("1.wav");
        prevThrottle = currThrottle;
        playingSound = 1;
      }
      if (currThrottle == 3) {
        tmrpcm.play("2.wav");
        Serial.println("2.wav");
        prevThrottle = currThrottle;
        playingSound = 2;
      }
      if (currThrottle == 4) {
        tmrpcm.play("3.wav");
        Serial.println("3.wav");
        prevThrottle = currThrottle;
        playingSound = 3;
      }
      if (currThrottle == 5) {
        tmrpcm.play("4.wav");
        Serial.println("4.wav");
        prevThrottle = currThrottle;
        playingSound = 4;
      }
      if (currThrottle == 6) {
        tmrpcm.play("5.wav");
        Serial.println("5.wav");
        prevThrottle = currThrottle;
        playingSound = 5;
      }
      if (currThrottle == 7) {
        tmrpcm.play("6.wav");
        Serial.println("6.wav");
        prevThrottle = currThrottle;
        playingSound = 6;
      }
    }
    // Serial.println(tmrpcm.isPlaying());
    if ((currThrottle = prevThrottle) && (tmrpcm.isPlaying() == 0)) {


      if (playingSound == 1) {
        tmrpcm.play("1.wav");
        Serial.println("again 1.wav");
        prevThrottle = currThrottle;
      }
      if (playingSound == 2) {
        tmrpcm.play("2.wav");
        Serial.println("again 2.wav");
        prevThrottle = currThrottle;
      }
      if (playingSound == 3) {
        tmrpcm.play("3.wav");
        Serial.println("again 3.wav");
        prevThrottle = currThrottle;
      }
      if (playingSound == 4) {
        tmrpcm.play("4.wav");
        Serial.println("again 4.wav");
        prevThrottle = currThrottle;
      }
      if (playingSound == 5) {
        tmrpcm.play("5.wav");
        Serial.println("again 5.wav");
        prevThrottle = currThrottle;
      }
      if (playingSound == 6) {
        tmrpcm.play("6.wav");
        Serial.println("again 6.wav");
        prevThrottle = currThrottle;
      }
    }
  }
[\code]

Оффлайн Deny

  • Администратор
  • Маршал
  • *****
  • Сообщений: 2135
  • РЕПУТАЦИЯ: +10559/-0
    • Питерский танковод
    • Награды
Работа со звуком
« Ответ #9 : 17 Январь 2018, 22:50:13 »
Нашел интересную тему по  RC   звуку Для просмотр ссылок требуется регистрация. , хочу сделать тестовую модель! мне кажется это интересным