Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Decoder DTMF Hanya Menggunakan Arduino

Komponen dan persediaan

Arduino UNO
× 1
LED (generik)
× 10
Breadboard (generik)
× 1
Kabel jumper (generik)
× 20

Aplikasi dan layanan online

Arduino IDE

Tentang proyek ini

Saat saya sedang melalui daftar proyek semester saya dengan pilihan untuk memilih, saya melihat mobil yang dikendalikan DTMF yang menggunakan IC CM 8870 sebagai decoder DTMF dan data biner yang dikodekan diberikan ke Arduino untuk melakukan operasi kiri kanan dan maju mundur. Fungsi decoder DTMF, bagian utama, menggunakan IC eksternal yang menurut saya sulit untuk diintegrasikan dan sedang mencari kode atau perpustakaan yang bahkan dapat menggantikan IC di sirkuit dengan beberapa kode tambahan dan tidak dapat menemukan solusi yang memuaskan . Tetapi satu perpustakaan berdasarkan algoritma Goertzel (Goertzel.h) yang dapat mengetahui apakah frekuensi tertentu ada dalam nada atau tidak dengan menghitung jumlah pulsa per satuan waktu dan kontribusi amplitudonya dalam sinyal nada yang diberikan.

Saya menggunakan kode contoh dasar sebagai dasar dan telah menulis kode yang dapat mendeteksi frekuensi DTMF dominan saat ini dalam nada dan dapat memecahkan kode itu untuk memberi kami nomor yang ditekan di sisi lain selama panggilan telepon.

Kode

  • Dekoder DTMF Kode Arduino
Dekoder DTMF Kode ArduinoArduino
kompilasi dan unggah kode di Arduino IDE dan jangan lupa untuk menambahkan perpustakaan terlebih dahulu.
link perpustakaannya adalah :
https://github.com/jacobrosenthal/Goertzel
/* Kode ini adalah implementasi dasar dari dekoder DTMF untuk mendeteksi kode DTMF 16 karakter dari pin analog A0 dan memberikan output yang didekodekan dengan memeriksa semua bagian Atas dan nada yang lebih rendah dalam matriks DTMF dan memberi kita nomor yang sesuai dengan menyalakan bit digital yang sesuai untuk angka 0-9 dan dengan mencetak sisa karakter secara serial. Karya ini sepenuhnya didasarkan pada kode Kevin Banks yang ditemukan di http://www.embedded.com/design/embedded/4024443/The-Goertzel-Algorithm, penghargaan penuh untuknya atas implementasi dan kerusakan generiknya. Algoritma Goertzel sudah lama berdiri, jadi lihat http://en.wikipedia.org/wiki/Goertzel_algorithm untuk deskripsi lengkapnya. Ini sering digunakan dalam pendeteksian nada DTMF sebagai alternatif Fast Fourier Transform karena cepat dengan overheard rendah karena hanya mencari satu frekuensi daripada menunjukkan terjadinya semua frekuensi. * KODE INI Dibuat / dimodifikasi oleh "Mian Mohammad Shoaib" dan Dirilis ke domain publik. * untuk pertanyaan apa pun yang terkait dengan kode, silakan tanyakan di [email protected] */#include int sensorPin =A0; const int N =100; //itu adalah jumlah kode sampel yang akan diambil y0u dapat diubah untuk sensitivitas dan jika besar dapat memperlambat arduinoconst float threshold =2000; // amplitudo nada minimum yang harus dipertimbangkan kita dapat mengubahnya untuk lebih senstivityconst float sampling_freq =8900; //frekuensi maksimum yang dapat dideteksi adalah sampling rate/2 dan arduino uno dengan 16Mhz dapat mendukung sampling hingga 8900 Hzfloat x_frequencies[4]; // buat dua larik untuk menahan frekuensi sumbu x dan y agar terdeteksifloat y_frequencies[4];void setup(){ pinMode(13, OUTPUT); //inisialisasi led berkedip untuk menunjukkan jika ada nada yang terdeteksi pinMode(2, OUTPUT); //menginisialisasi 10 pin sebagai output untuk menunjukkan output dtmf dari 2 ke nomor 12 sisanya akan dicetak ke monitor pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(10, OUTPUT); pinMode(11, OUTPUT); pinMode(12, OUTPUT); Serial.begin(9600); x_frekuensi[0]=1209; //hanya menginisialisasi array dengan frekuensi nada sumbu x dan y bersama dengan baris dan nomor titik duax_frequencies[1]=1336;x_frequencies[2]=1477;x_frequencies[3]=1633;y_frequencies[0]=697;y_frequencies[ 1]=770;y_frequencies[2]=852;y_frequencies[3]=941;}bool detect_tone(float freq){Goertzel goertzel =Goertzel(freq, N, sampling_freq); //inisialisasi fungsi library dengan frekuensi sampling yang diberikan no sampel dan target freq goertzel.sample(sensorPin); //Akan mengambil n sampel float magnitudo =goertzel.detect(); //periksa target_freq if(magnitude>threshold){ //jika Anda mendapatkan false hit atau tidak ada hit sesuaikan threshold digitalWrite(13,HIGH); // led berkedip pada 13 jika pulsa terdeteksi delay(250); digitalWrite(13,RENDAH); Serial.print(frekuensi); Serial.print("\n"); kembali benar; } else return false;}void print_number(int row,int column){int number=0;if(row==0){ //cari angka yang sesuai dengan baris dan kolom yang ditemukan if(column==0) number=1; else if(kolom==1) angka=2; else if(kolom==2) angka=3; else if(kolom==3) angka=10; }else if(row==1){ if(column==0) number=4; else if(kolom==1) angka=5; else if(kolom==2) angka=6; else if(kolom==3) angka=11; }else if(row==2){ if(column==0) number=7; else if(kolom==1) angka=8; else if(kolom==2) angka=9; else if(kolom==3) angka=12; }else if(baris==3){ if(kolom==0) angka=14; else if(kolom==1) angka=0; else if(kolom==2) angka=15; else if(kolom==3) angka=13; }if(angka <10){digitalWrite((angka+2),TINGGI);Serial.print(angka);}else if(angka ==10)Serial.print('A');else if(angka ==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(angka ==15)Serial.print('#');Serial.print("\n");delay(800);for(int i=2;i<=12;i++){ digitalWrite(i,LOW);}}void loop(){int kolom=0,baris=0;int i=0;sementara(1){ if(detect_tone(x_frequencies[i] ) ==benar){ kolom =i; merusak; } i++;if(i==4)i=0;}i=0;sementara(1){if(detect_tone(y_frequencies[i]) ==true){ row =i; merusak; } i++;if(i==4)i=0;}print_number(baris,kolom);}

Skema

Rangkaian ini menggunakan 10 LED yang terhubung dari pin digital 2 hingga 12 yang akan menyala ketika nada apa pun untuk angka antara 0-9 ditekan masing-masing dan LED pendeteksi pulsa akan terhubung pada pin 13 yang akan memberikan kedipan singkat ketika pulsa atau sinyal terdeteksi, angka lebih besar dari 9 (karakter khusus) akan ditampilkan melalui pencetakan Serial di IDE.
Pin input dari jack audio atau kabel AUX akan dihubungkan ke pin analog A0 dengan kapasitor 1uF secara seri yang akan menyaring frekuensi rendah dan offset DC.

Proses manufaktur

  1. Membuat Monitor Ambilight Menggunakan Arduino
  2. Mesin ULTRASONIC LEVITATION Menggunakan ARDUINO
  3. Sistem Alarm Arduino:SERENA
  4. Voltmeter DIY Menggunakan Arduino dan Smartphone
  5. Pemantau Detak Jantung Menggunakan IoT
  6. Komunikasi Kode Morse Menggunakan Modul Laser (Keduanya)
  7. WebServerBlink Menggunakan Arduino Uno WiFi
  8. Penghitung Mobil menggunakan Arduino + Pemrosesan + PHP
  9. Game Dino otomatis menggunakan arduino
  10. Python3 dan Komunikasi Arduino