Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

DTMF-Decoder, der nur Arduino verwendet

Komponenten und Verbrauchsmaterialien

Arduino UNO
× 1
LED (generisch)
× 10
Breadboard (generisch)
× 1
Jumper (generisch)
× 20

Apps und Onlinedienste

Arduino-IDE

Über dieses Projekt

Als ich meine Semesterprojektliste mit den Auswahlmöglichkeiten durchging, sah ich ein DTMF-gesteuertes Auto, das den CM 8870 IC als DTMF-Decoder verwendete und die codierten Binärdaten an Arduino übergeben wurden, um die Links-Rechts- und Vorwärts-Rückwärts-Operationen durchzuführen. Die DTMF-Decoder-Funktion, der Hauptteil, verwendete einen externen IC, den ich nur schwer integrieren konnte und war auf der Suche nach einem Code oder einer Bibliothek, die sogar den IC in der Schaltung durch zusätzlichen Code ersetzen könnte, und konnte keine zufriedenstellende Lösung finden . Aber eine Bibliothek, die auf dem Goertzel-Algorithmus (Goertzel.h) basiert, die feststellen konnte, ob eine bestimmte Frequenz im Ton vorhanden war oder nicht, indem sie die Anzahl der Impulse pro Zeiteinheit und ihren Amplitudenbeitrag im gegebenen Tonsignal berechnet.

Ich habe den grundlegenden Beispielcode als Basis verwendet und einen Code geschrieben, der die gegenwärtig dominanten DTMF-Frequenzen im Ton erkennen und entschlüsseln kann, um uns die Nummer zu geben, die während des Telefonats auf der anderen Seite gedrückt wurde.

Code

  • Arduino Code DTMF-Decoder
Arduino Code DTMF-DecoderArduino
Kompilieren und laden Sie den Code in der Arduino IDE hoch und vergessen Sie nicht, zuerst die Bibliothek hinzuzufügen.
Der Link zur Bibliothek lautet:
https://github.com/jacobrosenthal/Goertzel
/* Dieser Code ist eine grundlegende Implementierung eines DTMF-Decoders zum Erkennen des 16-stelligen DTMF-Codes vom analogen Pin A0 und gibt die decodierte Ausgabe durch Prüfung auf alle Upper und tiefere Töne in der DTMF-Matrix und gibt uns die entsprechende Zahl, indem wir das entsprechende digitale Bit für die Zahlen 0-9 einschalten und den Rest der Zeichen seriell drucken. Diese Arbeit basiert vollständig auf dem Code von Kevin Banks, der unter http://www.embedded.com/design/embedded/4024443/The-Goertzel-Algorithm zu finden ist. Der Goertzel-Algorithmus ist seit langem bekannt. Eine vollständige Beschreibung finden Sie daher unter http://en.wikipedia.org/wiki/Goertzel_algorithm. Es wird häufig bei der DTMF-Tonerkennung als Alternative zur Fast Fourier Transform verwendet, da es schnell mit geringem Mithören ist, da es nur nach einer einzelnen Frequenz sucht, anstatt das Auftreten aller Frequenzen anzuzeigen. * DIESER CODE WIRD von "Mian Mohammad Shoaib" erstellt/geändert und gemeinfrei veröffentlicht. * Bei Fragen zum Code wenden Sie sich bitte an [email protected] */#include int sensorPin =A0; const int N =100; // es ist die Anzahl der Samples, die Code nehmen wird, die Sie für die Empfindlichkeit ändern können, und kann, wenn sie groß ist, den Arduino-Float-Schwellenwert =2000 verlangsamen; // zu berücksichtigende minimale Tonamplitude können wir für mehr Empfindlichkeit ändern const float Sampling_freq =8900; // Die maximal erfassbare Frequenz ist die Abtastrate / 2 und Arduino Uno mit 16 MHz kann eine Abtastung von bis zu 8900 Hz unterstützen.float x_frequencies[4]; // zwei Arrays zum Halten der x- und y-Achsenfrequenzen erstellen, die erkannt werden sollenfloat y_frequencies[4];void setup () { pinMode (13, OUTPUT); // Blink-LED initialisieren, um anzuzeigen, ob ein Ton erkannt wird pinMode (2, OUTPUT); // 10 Pins als Ausgang initialisieren, um die dtmf-Ausgänge von 2 bis Nummer 12 anzuzeigen. Rest wird nur derially auf den Monitor gedruckt PinMode (3, OUTPUT); pinMode (4, AUSGANG); pinMode(5, AUSGANG); pinMode(6, AUSGANG); pinMode (7, AUSGANG); pinMode (8, AUSGANG); pinMode(9, AUSGANG); pinMode (10, AUSGANG); pinMode(11, AUSGANG); pinMode(12, AUSGANG); Serial.begin (9600); x_Frequenzen[0]=1209; // initialisieren Sie einfach die Arrays mit den Tonfrequenzen der x- und y-Achse zusammen mit ihrer Zeilen- und Doppelpunktnummer x_frequencies[1]=1336;x_frequencies[2]=1477;x_frequencies[3]=1633;y_frequencies[0]=697;y_frequencies[ 1]=770;y_Frequenzen[2]=852;y_Frequenzen[3]=941;}bool Detect_tone(float freq){Goertzel goertzel =Goertzel(freq, N, Sampling_freq); // Bibliotheksfunktion mit der angegebenen Abtastfrequenz no of Samples und Zielfrequenz initialisieren goertzel.sample (sensorPin); // Nimmt n Samples Float Magnitude =goertzel.detect(); // überprüfen Sie sie auf target_freq if (magnitude>threshold) { // Wenn Sie falsche Treffer oder keine Treffer erhalten, passen Sie den Schwellenwert an digitalWrite (13, HIGH); // LED blinkt auf 13, wenn ein Impuls erkannt wird Verzögerung (250); digitalWrite(13,LOW); Serial.print (Freq); Serial.print("\n"); true zurückgeben; } else return false;}void print_number(int row,int column){int number=0;if(row==0){ //finde die Nummer, die der gefundenen Zeile und Spalte entspricht if(column==0) number=1; sonst if(Spalte==1) Zahl=2; sonst if(Spalte==2) Zahl=3; sonst if(Spalte==3) Zahl=10; } Sonst wenn (Zeile ==1) { Wenn (Spalte ==0) Zahl =4; sonst if(Spalte==1) Zahl=5; sonst if(Spalte==2) Zahl=6; sonst if(Spalte==3) Zahl=11; } Sonst wenn (Zeile ==2) { Wenn (Spalte ==0) Zahl =7; sonst if(Spalte==1) Zahl=8; sonst if(Spalte==2) Zahl=9; sonst if(Spalte==3) Zahl=12; } Sonst wenn (Zeile ==3) { Wenn (Spalte ==0) Zahl =14; sonst if(Spalte==1) Zahl=0; sonst if(Spalte==2) Zahl=15; sonst if(Spalte==3) Zahl=13; }if(Zahl <10){digitalWrite((Zahl+2),HIGH);Serial.print(Zahl);}else if(Zahl ==10)Serial.print('A');sonst if(Zahl ==11)Serial.print('B');else if(number ==12)Serial.print('C');else if(number ==13)Serial.print('D');else if(number ==14)Serial.print('*');else if(number ==15)Serial.print('#');Serial.print("\n");delay(800);for(int i=2;i<=12;i++){ digitalWrite(i,LOW);}}void loop(){int column=0,row=0;int i=0;while(1){ if(detect_tone(x_frequencies[i] ) ==wahr) {Spalte =ich; brechen; } i++;if(i==4)i=0;}i=0;während(1){if(detect_tone(y_frequencies[i]) ==true){ row =i; brechen; } i++;if(i==4)i=0;}print_number(Zeile,Spalte);}

Schaltpläne

Die Schaltung verwendet 10 LEDs, die von den digitalen Pins 2 bis 12 angeschlossen sind und sich einschalten, wenn ein Ton für die Zahlen zwischen 0-9 gedrückt wird, und eine Pulserkennungs-LED wird an Pin 13 angeschlossen, die bei einem Impuls kurz blinkt oder ein Signal erkannt wird, werden Zahlen größer 9 (die Sonderzeichen) über den seriellen Druck in der IDE angezeigt.
Der Eingangspin von der Audiobuchse oder dem AUX-Kabel wird mit einem 1uF-Kondensator in Reihe mit dem analogen Pin A0 verbunden, der die niedrigen Frequenzen und den DC-Offset herausfiltert.

Herstellungsprozess

  1. Erstellen von Monitor-Ambilight mit Arduino
  2. ULTRASCHALLLEVITATION-Maschine mit ARDUINO
  3. Arduino-Alarmsystem:SERENA
  4. DIY-Voltmeter mit Arduino und Smartphone
  5. Herzfrequenzmesser mit IoT
  6. Morsecode-Kommunikation mit Lasermodul (beide)
  7. WebServerBlink mit Arduino Uno WiFi
  8. Autozähler mit Arduino + Processing + PHP
  9. Automatisiertes Dino-Spiel mit Arduino
  10. Python3- und Arduino-Kommunikation