Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

DTMF-decoder met alleen Arduino

Componenten en benodigdheden

Arduino UNO
× 1
LED (generiek)
× 10
Broodplank (algemeen)
× 1
Jumperdraden (algemeen)
× 20

Apps en online services

Arduino IDE

Over dit project

Terwijl ik mijn semesterprojectlijst doorliep met de keuzes om te kiezen, zag ik een DTMF-bestuurde auto die de CM 8870 IC als een DTMF-decoder gebruikte en de gecodeerde binaire gegevens werden aan Arduino gegeven om de links-rechts- en vooruit-achter-bewerkingen uit te voeren. De DTMF-decoderfunctie, het belangrijkste onderdeel, gebruikte een externe IC die ik moeilijk te integreren vond en die op zoek was naar een code of een bibliotheek die zelfs de IC in het circuit kon vervangen door wat extra code en geen bevredigende oplossing kon vinden . Maar één bibliotheek op basis van het Goertzel-algoritme (Goertzel.h) die kon zien of een specifieke frequentie in de toon aanwezig was of niet door het aantal pulsen per tijdseenheid en hun amplitudebijdrage aan het gegeven toonsignaal te berekenen.

Ik heb de basisvoorbeeldcode als basis gebruikt en heb een code geschreven die de huidige dominante DTMF-frequenties in de toon kan detecteren en die kan decoderen om ons het nummer te geven dat aan de andere kant werd ingedrukt tijdens het telefoongesprek.

Code

  • Arduino Code DTMF-decoder
Arduino Code DTMF-decoderArduino
compileer en upload de code in Arduino IDE en vergeet niet eerst de bibliotheek toe te voegen.
de link voor de bibliotheek is:
https://github.com/jacobrosenthal/Goertzel
/* Deze code is een basisimplementatie van een DTMF-decoder voor het detecteren van de DTMF-code van 16 tekens van de analoge pin A0 en geeft de gedecodeerde uitvoer door te controleren op alle bovenste en lagere tonen in de DTMF-matrix en geeft ons het corresponderende getal door de corresponderende digitale bit voor de getallen 0-9 aan te zetten en door de rest van de karakters serieel af te drukken. Dit werk is volledig gebaseerd op de Kevin Banks-code die te vinden is op http://www.embedded.com/design/embedded/4024443/The-Goertzel-Algorithm, dus alle eer voor hem voor zijn generieke implementatie en afbraak. Het Goertzel-algoritme bestaat al lang, dus zie http://en.wikipedia.org/wiki/Goertzel_algorithm voor een volledige beschrijving. Het wordt vaak gebruikt bij DTMF-toondetectie als alternatief voor de Fast Fourier Transform, omdat het snel en laag wordt afgeluisterd omdat het alleen zoekt naar een enkele frequentie in plaats van het voorkomen van alle frequenties te tonen. * DEZE CODE IS Gemaakt/gewijzigd door "Mian Mohammad Shoaib" en vrijgegeven in het publieke domein. * voor vragen met betrekking tot de code kunt u deze stellen via [email protected] */#include int sensorPin =A0; const int N =100; // het is het aantal samples dat nodig is voor de code die u kunt wijzigen voor gevoeligheid en als deze groot is, kan deze de arduinoconst-floatdrempel =2000 vertragen; // minimale toonamplitude die in aanmerking moet worden genomen, we kunnen deze wijzigen voor meer gevoeligheidsconst float sampling_freq =8900; //maximaal detecteerbare frequentie is de bemonsteringsfrequentie / 2 en arduino uno met 16 MHz kan bemonstering ondersteunen tot 8900 Hzfloat x_frequenties [4]; // maak twee arrays voor het vasthouden van x- en y-asfrequenties die moeten worden gedetecteerd float y_frequencies [4];void setup () {pinMode (13, OUTPUT); // initialiseer knipperende led om te laten zien of er een toon wordt gedetecteerd pinMode (2, OUTPUT); // initialiseer 10 pinnen als uitvoer om te laten zien dat de dtmf-uitvoer van 2 tot nummer 12 rust wordt gewoon deriaal afgedrukt naar de monitor pinMode (3, OUTPUT); pinMode (4, UITGANG); pinMode (5, UITGANG); pinMode (6, UITGANG); pinMode (7, UITGANG); pinMode (8, UITGANG); pinMode(9, UITGANG); pinMode (10, UITGANG); pinMode (11, UITGANG); pinMode (12, UITGANG); Serieel.begin(9600); x_frequenties[0]=1209; // initialiseer gewoon de arrays met de x- en y-as toonfrequenties samen met hun rij- en dubbele puntnummerx_frequencies[1]=1336;x_frequencies[2]=1477;x_frequencies[3]=1633;y_frequencies[0]=697;y_frequencies[ 1]=770;y_frequenties[2]=852;y_frequenties[3]=941;}bool detect_tone(float freq){Goertzel goertzel =Goertzel(freq, N, sampling_freq); //initialiseer de bibliotheekfunctie met de gegeven bemonsteringsfrequentie aantal monsters en doelfreq goertzel.sample (sensorPin); // Zal n monsters nemen float magnitude =goertzel.detect(); // controleer ze op target_freq if (magnitude>threshold) { // als je valse hits of geen hits krijgt, pas de drempel aan digitalWrite(13,HIGH); // knipper led op 13 als een puls wordt gedetecteerd vertraging (250); digitalWrite(13,LAAG); Serial.print(freq); Serieel.print("\n"); retourneer waar; } else return false;}void print_number(int row,int column){int number=0;if(row==0){ //vind het nummer dat overeenkomt met de gevonden rij en kolom if(column==0) number=1; anders if(kolom==1) getal=2; anders if(kolom==2) getal=3; anders if(kolom==3) getal=10; }else if(rij==1){ if(kolom==0) nummer=4; anders if(kolom==1) getal=5; anders if(kolom==2) getal=6; anders if(kolom==3) getal=11; }else if(rij==2){ if(kolom==0) getal=7; anders if(kolom==1) getal=8; anders if(kolom==2) getal=9; anders if(kolom==3) getal=12; }else if(rij==3){ if(kolom==0) nummer=14; anders if(kolom==1) getal=0; anders if(kolom==2) getal=15; anders if(kolom==3) getal=13; }if(getal <10){digitalWrite((getal+2),HIGH);Serial.print(getal);}else if(getal ==10)Serial.print('A');else if(getal ==11)Serial.print('B');else if(getal ==12)Serial.print('C');else if(getal ==13)Serial.print('D');else if(getal ==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] ) ==waar){ kolom =i; pauze; } i++;if(i==4)i=0;}i=0;while(1){if(detect_tone(y_frequencies[i]) ==true){ row =i; pauze; } i++;if(i==4)i=0;}print_number(rij,kolom);}

Schema's

Het circuit maakt gebruik van 10 LED's die zijn aangesloten op de digitale pin 2 tot 12 die gaan branden wanneer een toon voor de cijfers tussen 0-9 respectievelijk wordt ingedrukt en een pulsdetectie-LED wordt aangesloten op de pin 13 die kort knippert wanneer een puls wordt weergegeven. of een signaal wordt gedetecteerd, worden getallen groter dan 9 (de speciale tekens) weergegeven via serieel printen in de IDE.
De ingangspin van de audio-aansluiting of de AUX-kabel wordt verbonden met de analoge pin A0 met een 1uF-condensator in serie die de lage frequenties en de DC-offset filtert.

Productieproces

  1. Maak Monitor Ambilight met Arduino
  2. ULTRASONE LEVITATION-machine die ARDUINO gebruikt
  3. Arduino Alarmsysteem:SERENA
  4. DIY voltmeter met Arduino en smartphone
  5. Hartslagmeter met IoT
  6. Morsecodecommunicatie met lasermodule (beide)
  7. WebServerBlink met Arduino Uno WiFi
  8. Autoteller met Arduino + Processing + PHP
  9. Geautomatiseerd Dino-spel met arduino
  10. Python3- en Arduino-communicatie
  11. FM-radio met Arduino en RDA8057M