Sound Detection Sensor Module + Arduino, DigitalOut. Hur?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

Sound Detection Sensor Module + Arduino, DigitalOut. Hur?

Inlägg av PopUnoNkoK »

Halloj

Jag hade tänkt ge Arduino en chans. Jag har tidigare programmerat PIC:ar med assembler och gillade det väldigt mycket. Jag har dock inte den tid nu som det faktiskt krävde av mig.

Så, som sagt, tänkte ge Arduino en chans då många av mina ideer och projekt är VÄLDIGT enkla.

Jag köpte en sån här:
Microphone Sound Detection Sensor Module

Hittar ingen bra dokumentation om den men jag tänkte mig att den skulle funka ungefär så här:
En Analog utgång som vid varje avläsning visar ett värde som motsvarar ljudnivån.
En Digital Utgång som sätts hög (eller låg) när ljudnivån går över en förbestämd nivå (som går att justera via en potentiometer).


När jag testar så verkar den analoga utgången så funkar den som jag trodde.
Men den digitala, som jag var ute efter att använda, får jag inte att funka.
Hur mycket jag än vrider på potentiometern så ändras inte den digitala utgången.

Någon som har nåt tips?

Min kod:

Kod: Markera allt

int sensorPin = A0;
int digiPin = 0;
int ledPin = 13;
int sensorValue = 0;

void setup() {
  pinMode(digiPin, INPUT); 
  Serial.begin(9600); 
}

void loop() {
  //int sensorValue = analogRead(sensorPin);    
  //Serial.println(sensorValue);
  
    // read the input pin:
  int buttonState = digitalRead(digiPin);
  // print out the state of the button:
  Serial.println(buttonState);
  delay(80);             
}
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Sound Detection Sensor Module + Arduino, DigitalOut. Hur

Inlägg av sodjan »

> int ledPin = 13;

Vad gör den för nytta, ledPin används ju inte?

Sen så är det lite svår att veta vad du avser med koden
när det mesta är bortkommenterat. Gör en komplett kod
utan bortkommenterad kod och ange vad du vill eller tror
att den ska göra.
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

Re: Sound Detection Sensor Module + Arduino, DigitalOut. Hur

Inlägg av PopUnoNkoK »

Kod: Markera allt

int digiPin = 0;
int sensorValue = 0;

void setup() {
  pinMode(digiPin, INPUT); 
  Serial.begin(9600); 
}

void loop() {
    // read the input pin:
  int buttonState = digitalRead(digiPin);
  // print out the state of the button:
  Serial.println(buttonState);
  delay(80);             
}
Ok, ett par rader borttagna.
> int ledPin = 13; Var använd som "statusLed" tidigare, på slutet har jag bara använt "serial Monitor" fönstret.

Kommentarerna berättar ganska väl vad jag vill att koden ska göra. Förvisso heter det "buttonState" i koden men jag vill alltså se i Serial monitor fönstret vilket "state" som den digitala utgången på Sound detection modulen har.

MVH Peter F
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Sound Detection Sensor Module + Arduino, DigitalOut. Hur

Inlägg av sodjan »

Vad ser du i "serial Monitor? Ingenting alls?
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

Re: Sound Detection Sensor Module + Arduino, DigitalOut. Hur

Inlägg av PopUnoNkoK »

I serial monitor ses bara ettor vid varje uppdatering.
Oavsett om jag vrider potentiometern i botten åt båda hållen.
Användarvisningsbild
Magnus_K
EF Sponsor
Inlägg: 5854
Blev medlem: 4 januari 2010, 17:53:25
Ort: Skogen mellan Uppsala-Gävle

Re: Sound Detection Sensor Module + Arduino, DigitalOut. Hur

Inlägg av Magnus_K »

Kan inte mycket om detta men här kan du nog hitta vad du söker -> Länk

Sen kan säkert någon här ge dig ett mer specifikt svar om varför det inte fungera

EDIT: Eller nja, han kopplar in DO men verkar inte använda den...
Senast redigerad av Magnus_K 31 december 2013, 00:01:39, redigerad totalt 1 gång.
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

Re: Sound Detection Sensor Module + Arduino, DigitalOut. Hur

Inlägg av PopUnoNkoK »

Bah, den länken har jag inte hittat.

Tack.

Nu ska vi se om jag inte kommer vidare.
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

Re: Sound Detection Sensor Module + Arduino, DigitalOut. Hur

Inlägg av PopUnoNkoK »

Tyvärr så berörde den sidan bara ett par exempel där man använde den analoga utgången.
Dom nämnde dock DO-pinnen (Digital Output?) i detta stycke.
The wire thats connected to the one that saids A0 connects to the ANALOG 0 pin. The wire that is connected to the one that saids G connects to the GND pin. The wire that is connected to the one that saids + connects to the 5V pin. Attach the wire that saids DO next to the hole horizontal to the resistor.
För mig känns den kopplingen lite skum, oavsett om jag fått det om bakfoten att det skulle vara någon digital output.
Användarvisningsbild
Magnus_K
EF Sponsor
Inlägg: 5854
Blev medlem: 4 januari 2010, 17:53:25
Ort: Skogen mellan Uppsala-Gävle

Re: Sound Detection Sensor Module + Arduino, DigitalOut. Hur

Inlägg av Magnus_K »

Gör det någon skillnad mellan SerialPrint() och SerialPrintIn() eller om man skriver Serial.println(buttonState, BIN); ?

(Tänk vad många som sitter och skrattar åt mina tafatta försök till HLR nu... :tumupp: )
Borre
Inlägg: 4609
Blev medlem: 14 juni 2007, 15:43:50
Ort: Hälsingland

Re: Sound Detection Sensor Module + Arduino, DigitalOut. Hur

Inlägg av Borre »

Byt till någon annan "pin", 0 och 1 används för UARTen (serial).
Miramithe
Inlägg: 1423
Blev medlem: 21 januari 2013, 17:45:10
Ort: Borlänge

Re: Sound Detection Sensor Module + Arduino, DigitalOut. Hur

Inlägg av Miramithe »

Fick en sådan i julklapp av min bror, testade denna koden och den tänder led på pin 13 när ljudet kommer över threshold, känsligheten ställs med poten.

Kod: Markera allt

int DO=2;  //Pin for Digital Output - DO
int DA=A0;  // Pin for Analog Output - AO
int led = 13;
int threshold = 497; //Change this
int sensorvalue=0;

void setup(){
  Serial.begin(9600);
  pinMode(led, OUTPUT);     
}

void loop(){
  sensorvalue = analogRead(DA);  //Read the analog value
  Serial.print("Analog: ");  
  Serial.print(sensorvalue);  //Print the analog value
  Serial.print("  ");
  Serial.print("Digital: ");
  Serial.println(digitalRead(DO));  //Print the digital value

  if(sensorvalue >= threshold){  //Compare analog value with threshold 
    digitalWrite(led, HIGH);  //Turn ON Led
  }  
  else{
    digitalWrite(led, LOW);  //Turn OFF Led
  }
}
Denna kod borde nog passa till det du tänkt.
ToPNoTCH
Inlägg: 5151
Blev medlem: 21 december 2009, 17:59:48

Re: Sound Detection Sensor Module + Arduino, DigitalOut. Hur

Inlägg av ToPNoTCH »

Några saker som jag ser vid en snabb koll.

Miramithe's kod borde funka med avseende på att släcka/tända LED på PIN13. Dock så tycker jag inte att avläsningen av status "digitalRead(DO) i loopen borde bli rätt för det är ingen kod som sätter DO (eller PIN2 som den står för).

Rent generellt så tycker jag det är bakvänt att sätta en pinne beroende på status och i andra momentet läsa av pinnen för att få status.
Vi visste ju redan status när vi satte pinnen.

Om tanken är att man både vill ha en status pinne och en LED pinne som aktiveras beroende på om det analoga tröskelvärdet är uppnått så borde det bli i stil med (utgick från Miramithe's kod) :

Kod: Markera allt

int status_pin = 2;  // Pin for Digital Output 
int sensor_pin = A0; // Pin for Analog read
int led_pin = 13;    // Pin for status LED
int threshold = 497; // Treshhold value
int treshold_reached = 0;

void setup(){
  Serial.begin(9600);
  pinMode(status_pin, OUTPUT);     
  pinMode(led_pin, OUTPUT);  
}

void loop(){
  int sensorvalue = analogRead(sensor_pin);  // Read the analog value
  Serial.print("Analog: ");  
  Serial.print(sensorvalue);                 // Print the analog value
  Serial.print("  ");
  Serial.print("Digital: ");
  Serial.println(treshold_reached);          // Print the digital value

  if(sensorvalue >= threshold){              // Compare analog value with threshold 
    digitalWrite(led_pin, HIGH);             // Turn ON Led
    digitalWrite(status_pin, HIGH);          // Turn ON status PIN
    treshold_reached = 1;                    // Set treshold reached
  }  
  else{
    digitalWrite(led_pin, LOW);              // Turn OFF Led
    digitalWrite(status_pin, LOW);           // Turn OFF status PIN
    treshold_reached = 0;                    // Set treshold reached
    
  }
}
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

Re: Sound Detection Sensor Module + Arduino, DigitalOut. Hur

Inlägg av PopUnoNkoK »

Borre löste problemet.

Det var att jag använt pinne 0 som input pinne. När jag bytte till pinne 2 så funkade det precis som jag ville.

Alltså nu ser jag en etta i Serial monitor tills jag skruvat på potentiometern för att hitta rätt "läge" för den grundljudnivån som finns i det rum jag befinner mig i. Då ser jag en nolla. Klappar jag nu händerna så ändras det till etta.
Toppen.

Anledningen till att jag vill använda den digitala utgången och att använda tröskelvärdet på potentiometern istället för i kod är att jag tänkt att testa om jag får det att fungera att sätta den på en pinne med Interrupt. Jag tänkte alltså inte alls använda den analoga utgången.

Sluttanken är att ta "speed photo" och fota tex när en ballong smäller. De flesta exempel ute på nätet använder sig av den analoga ingången och så pollar dom den i en loop. Detta är något jag inte gillar, tror det är sedan jag programmerade PIC och Assembler. =)

Så detta är ett utmärkt tillfälle att kolla om man får ordning på Interrupt på Arduinon.

Koden som fungerar för att läsa av den digitala utgången ser ut så här.

Kod: Markera allt

int digiPin = 2;

void setup() {
  pinMode(digiPin, INPUT); 
  Serial.begin(9600); 
}

void loop() {
    // read the input pin:
  int soundState = digitalRead(digiPin);
  // print out the state of the digital Output:
  Serial.println(soundState);
  delay(80);             
}
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

Re: Sound Detection Sensor Module + Arduino, DigitalOut. Hur

Inlägg av PopUnoNkoK »

Jag ställer en ny fråga här istället för att starta en ny tråd.

Här kommer utvecklingen av den gamla koden.

Kod: Markera allt

int digiPin = 2;
int ledPin = 13;
volatile int soundState = 0;

void setup() {
  pinMode(digiPin, INPUT); 
  Serial.begin(9600); 
  attachInterrupt(0, klapp, RISING);
}

void loop() {
  delay(5000);
}
void klapp()
{
  Serial.print("Klapp!");
}
Jag har alltså kopplat den digitala utgången från Ljudmodulen till pinne två. Pinne två är configurerad för interrupt.
Delayen i mainloopen är bara för att få bekräftat att Interrupten "reagerar" oavsett om mainloopen är inne i en delay.

Det funkar nästan som jag vill.

Jag kör igång koden och öppnar Serial Monitorfönstret. Fönstret är vitt, blankt och fint. =)
Klappar jag nu händerna en gång så reagerar den direkt vilket jag vill. Men den skriver bara:
Klap
inte
Klapp!
som i koden.

Dessutom så går det inte att återupprepa utan att starta om arduinon.

Alltså, det verkar som om den inte "hinner" skriva hela ordet Klapp! innan den går ur ISR:en.
ELLER att den mitt inne i ordet Klapp får någon typ av error och fryser. Jag tänker detta alternativ eftersom när jag klappar igen så kommer det inte upp något nytt ord.

All hjälp eller pekningar åt något håll mottages, som vanligt, tacksamt.

MVH Peter
Användarvisningsbild
ecenier
Inlägg: 1150
Blev medlem: 13 december 2007, 17:51:42
Ort: Älvsjö
Kontakt:

Re: Sound Detection Sensor Module + Arduino, DigitalOut. Hur

Inlägg av ecenier »

Prova,

attachInterrupt (digiPin, klapp, RISING);
Skriv svar