Close

Arduino přehrávání zvuku senzory

Úvodní stránka Fórum Vaše projekty Arduino Arduino přehrávání zvuku senzory

  • Toto téma obsahuje celkem 16 odpovědí. Do diskuze (2 diskutující) se naposledy zapojil uživatel Pulec a poslední změna proběhla před 8 roky.
Aktuálně je na stránce zobrazeno 17 příspěvků - 1. až 17. (celkem z 17)
  • Autor
    Příspěvky
  • #8565
    Pulec
    Účastník

    Dobrý den.Mám tento problém.Bylo by možné díky Infračervenému optickému senzoru,který se překryje spustit přehrávání z mp3 modulu arduino?
    Mám modelovou železnici a chci to na spuštění hlášení když vlak přijede do stanice.
    Poradí mi někdo jak na to?Moc děkuji za každou radu

    #8566
    Vojtěch Vosáhlo
    Účastník

    Dobrý den,
    nejlepší by bylo nějaké info, jestli ho sem můžete napsat. Důležitá je informace jak funguje váš senzor. Je snímač fotorezistor / fototranzistor nebo ještě něco jiného? A info o mp3 modulu by se taky hodilo. Pak to dáme dohromady.

    #8567
    Pulec
    Účastník
    #8575
    Vojtěch Vosáhlo
    Účastník

    Dobře. Pokud jsem to správně pochopil tak ten audio modul zahraje hudbu když dáte jeden z A pinů na zem (podle čísel pinů vybírá skladbu). Máte to ozkoušené? Pokud je to tak jak píšu, měl by fungovat kód dole. D0 toho senzoru jde na pin 2 arduina a nejspíš si budete muset pohrát s poťákem na senzoru aby jste nastavil detekční vzdálenost.
    Držím palce.

    const int d0 = 2; // Pokud chcete používat přerušení musí to být pin 2 nebo 3 (na Unu, nanu a mini)
    const int prehravaciPin = X; //Pin připojený na spouštění toho songu, pokud správně chápu tak A1 - A10 na tom modulu
    
    void setup() {
      
      pinMode(d0, INPUT);
      pinMode(prehravaciPin, OUTPUT);
      digitalWrite(prehravaciPin, HIGH);
      
      attachInterrupt(0, detekce, FALLING);
    
    }
    
    void loop() {
    }
    
    void detekce(){
      
     digitalWrite(prehravaciPin, LOW);
     delay(100);
     digitalWrite(prehravaciPin, HIGH);
    }
    #8577
    Pulec
    Účastník

    Čekám ještě na modul mp3,tak to pak vše odskouším.Moc vám děkuji hlavně za kód.Určitě se pak ozvu jak jsem dopadl.Moc moc zatím díky

    #8578
    Vojtěch Vosáhlo
    Účastník

    Tak ať se zadaří 😉

    #9252
    Pulec
    Účastník

    Tak jsem vše pospojoval a šlo to asi 15x ale jen na A0 pinu senzoru teď mi to nejde vůbec.Pouze při odpojení a připojení na A0 nebo D0 senzoru se prehravá zvuk.Nevíte kde je chyba(mimo mě tedy).

    #9253
    Pulec
    Účastník

    Teď mi to opět funguje ale jen na A0 pinu čidla.Jak je to možné?

    #9254
    Vojtěch Vosáhlo
    Účastník

    Vy jste tedy zkoušel jak A0 tak D0. D0 by se měl dát nastavovat poťákem, tím nastavíte hranici kdy je 1 a kdy 0 zatímco A0 se bude měnit dynamicky podle vzdálenosti. Mimochodem do attachInterrupt má jít b0 a né jen 0 jak je nahoře v kódu ale to jste zjistil pokud to funguje. Možná musí být větší časová prodleva mezi 1 a 0 na pinu přehrávače a taky by se nejspíš hodilo ještě trošku času po nastavení pinu na 1.
    Hodně tipů ale kdo ví…

    #9256
    Pulec
    Účastník

    Ano teď mi to šlape na D0. Kam přidat čas aby po zapnutí přehrávaní drželo v zap?Tak jak to je teď je to každé mávnutí hned přehrává.Potřebuji alespoň 30 vteřin po začátku přehrávání aby držrlo jako když je překážka.Děkuji za pomoc

    #9257
    Vojtěch Vosáhlo
    Účastník

    Pauza by se přidávala před nastavováním pinu na low
    Tzn: `void detekce(){
    delay(XY); // sem můžete přidat čas mezi 1 na ir a přehráváním
    digitalWrite(prehravaciPin, LOW);
    delay(100); //čas na který je pin spuštěný, zde přidáváte
    digitalWrite(prehravaciPin, HIGH);
    }`
    Chcete tedy něco jako po přehrání musí být pauza 30s a pak až se může zapnout znova? Kapku mi to nedochází 😀

    #9258
    Pulec
    Účastník

    Řeknu to takto potřebuji aby se po spuštění přehrávání senzor vyřadil třeba na 1 minutu.

    #9259
    Pulec
    Účastník

    Tak jsem na to kapnul delay až za moc moc děkuji jste borec

    #9260
    Vojtěch Vosáhlo
    Účastník

    Jasně, asi by se to dalo udělat nejlépe přes odebrání a zase přidání přerušení. `void detekce(){

    digitalWrite(prehravaciPin, LOW);
    delay(100);
    digitalWrite(prehravaciPin, HIGH);
    detachInterrupt(0); // odebereme preruseni aby se nam nevyvolalo pokud by se něco hýblo pred senzorem
    delay(60000); //pauza na x vterin, cas po ktery je senzor vyrazen
    attachInterrupt(0, detekce, FALLING); // opet preruseni zprovoznime

    }`

    Kdyby bylo potřeba arduino používat i v době vyřazení, daly by se počítat cykly procesoru ale to je další téma…

    #9261
    Pulec
    Účastník

    Ještě vás chci poprosit přidat do kódu druhé čidlo které bude přehrávat další pin mp3 modulu,mě se to nedaří.

    #9262
    Vojtěch Vosáhlo
    Účastník

    Do setupu přidáte znovu toto: `pinMode(d1, INPUT);
    pinMode(prehravaciPin2, OUTPUT);
    digitalWrite(prehravaciPin2, HIGH);

    attachInterrupt(1, detekce2, FALLING);

    `

    místo těch názvů si buď dosaďte piny a interrupty nebo si vytvořte proměnné jako je to v původním kódu.

    Pak jen vytvoříte funkci detekce2 (kopii detekce) a pozměníte piny které se nastavují.

    Snad pomůžu…

    #9271
    Pulec
    Účastník

    Tak nakonec jsem ještě odebral funkci digitalWrite(prehravaciPin, HIGH);
    to má za následek že se zvuk přehraje jen jednou z každého čidla 1-10 když zapůsobí.Což se mi hodí protože pak by to hrálo po každém projetí a to by u modelové železnice nebylo žádoucí.Teď to funguje famózně.Dám příklad jede vlak ::::::::::::::::::první čidlo::::::::::pozor u druhé koleje opakuji pozor u druhé koleje::::::::::::::::::::::::::::(vlak přijede do stanice a najede na druhé čidlo)Na druhou kolej přijel osobní vlak z Vizovic opakuji na druhou kolej přijel osobní vlak z Vizovic.Dále samozřejmě muže minout pastvu s ovcemi nebo těžbu v lese motorová pila.Intenzita zvuku se dá ošetřit už samotnou úpravou mp3.

    Tímto moc moc děkuji

Aktuálně je na stránce zobrazeno 17 příspěvků - 1. až 17. (celkem z 17)
  • Pro reakci na toto téma se musíte přihlásit.