Phương pháp Charlieplexing và LoLShield VU Meter

DẪN NHẬP

Phương pháp Charliplexing là gì? Mình sẽ giới thiệu sơ lược về nó và hướng dẫn các bạn làm một board LoLShield (Lots of Lights Shield). Với LoLShield, mục tiêu chúng ta là điều khiển 126 đèn led đơn được xếp thành ma trận 9x14 bằng phương pháp Charliplexing để tiết kiệm chân Arduino và thiết kế sao nó thành Shield cắm thẳng lên Arduino. Ưu điểm: mang theo bên người, lúc buồn thì móc ra xài và có thể dùng nguồn USB hoặc nguồn pin, không dùng điện trở hạn dòng cho led, có thể làm VU meter, máy chơi game đơn giản như: Invender, Pong, Tetirs....

Qua đây, mình cũng chia sẻ với các bạn về biến đổi FFT qua Microsoft Excel 2010 và biến LoLShield thành VU meter cắm qua jack 3.5mm từ các thiết bị nghe nhạc với thư viện fix_fft.

I. GIỚI THIỆU

Charlieplexing đã được đề xuất vào đầu năm 1995 bởi Charlie Allen tại Maxim Integrated. Tuy nhiên, phương pháp này đã được biết đến và sử dụng trong những năm 1980 và được mô tả chi tiết vào năm 1979 trong một bằng sáng chế của Christopher W. Malinowski, Heinz Rinderle, và Martin Siegle thuộc Bộ Nghiên cứu và Phát triển, AEG-Telefunken, Heilbronn, Đức với tên gọi là "Hệ thống tín hiệu ba trạng thái".Nguồn tham khảo: https://en.wikipedia.org/wiki/Charlieplexing

Theo Charliplexing, ta có mối liên hệ giữa số lượng PINs vi điều khiển và số lượng LEDs cần điều khiển như sau:

Pins 1 2 3 4 5 6 7 8 9 10 11 12 20 40 n
LEDs 0 2 6 12 20 30 42 56 72 90 110 132 380 1560 n2 − n

Xét trường hợp dùng 3 PINs để điều khiển 6 LEDs:

LED # PIN X1 PIN X2 PIN X3
LED 1 H L Z
LED 2 L H Z
LED 3 Z H L
LED 4 Z L H
LED 5 H Z L
LED 6 L Z H

 

Chúng ta chú ý về ba trạng thái của chân Arduino là: "high" (5V), "low" (0V) và "input".  Chế độ "input" đặt chân Arduino ở trạng thái tổng trở cao (high-impedance state). Xem thêm tại link: https://www.arduino.cc/en/Tutorial/DigitalPins

II. CHUẨN BỊ

List vật tư chuẩn bị theo bảng bên dưới:

No.

Tên vật tư

Số lượng

Đơn vị

Notes

1

Board Arduino Uno

1

pcs

 

2

Led 3mm

126

pcs

Mua 150 pcs để spare

3

Jump đơn đực 2.54mm 1x40P

2

pcs

Loại dài 19mm

4

Bản đồng 2 mặt, kích thước bằng board arduino uno

1

pcs

 

5

Bản in mặt Top và Bottom cho LoLShield

1

pcs

 

6

Jack 3.5mm và đoạn dây

1

pcs

Để làm jack cắm vào laptop/ desktop/ điện thoại/ máy tính bảng…

7

Pin 9V

1

pcs

 

8

Đế Pin 9V có sẵn giắc DC

1

pcs

 

9

Các món khác: Dung dịch ăn mòn đồng, cồn, khoan …

1

set

 

III. PHẦN CỨNG

Tham khảo từ Jimmie P Rodgershttps://github.com/jprodgers/LoLshield, bao gồm bản vẽ Eagle, thư viện LoLShield và các chương trình test.

3.1. SƠ ĐỒ NGUYÊN LÝ

3.2. MẠCH IN

Khi làm mạch in 2 mặt, các bạn có thể tham khảo trên internet, có rất nhiều link hướng dẫn chi tiết.

  • Mạch in Top, Bottom theo hình bên dưới

  • Hình thực tế board LoLShield

Lưu ý

Khi hàn đèn LED, chúng ta nên làm theo từng hàng (từ hàng 1 đến hàng 9, mỗi hàng có 14 led) theo thứ tự lớp Bottom trước và lớp Top sau. Nếu ta hàn nhiều hàng (hay cột) cùng một lúc thì rất khó để kiểm tra LED hỏng hay chạm chập…. Sau khi hàn xong từng hàng, chúng ta add thư viện của LoLShield & dùng chương trình sau để test từng hàng LED:

#include "Charliplexing.h"
int ad=50; // Delay có thể thay đổi
void setup()
{
  LedSign::Init();  // Khởi động LoLShield
}
void loop()
{
  for (int x=0; x<14; x++)
  {
    for (int y=0; y<9; y++)
    {
      LedSign::Set(x,y,1); // Bật LED tại vị trí x,y
      delay(ad);
    }
  }
  delay(1000);
  for (int x=0; x<14; x++)
  {
    for (int y=0; y<9; y++)
    {
      LedSign::Set(x,y,0); // Tắt LED tại vị trí x,y
      delay(ad);
    }
  }
  delay(1000);
}

Ví dụ:

  • Để test 14 LED hàng 1, ở vòng lặp: for (int y=0; y<9; y++), ta thay thế bằng for (int y=0; y<1; y++). LED nào không sáng theo thứ tự hoặc tắt theo thứ tự, chúng ta phải kiểm tra và fix nó trước khi hàn 14 LED ở hàng mới.
  • Để test 28 LED hàng 1 & hàng 2, ta thay thế bằng for (int y=0; y<2; y++)
  • ….Cứ thế cho đến hết 9 hàng: (int y=0; y<9; y++)
  • Xem tại Video bên dưới: LoLShield - First Test.

IV. CHƯƠNG TRÌNH

Mình sẽ dùng LoLShield để làm VU Meter bằng biến đổi FFT. VU meter này kết nối trực tiếp đến laptop/desktop, mobile phone, tablet hay các thiết bị chơi nhạc khác qua jack 3.5mm.

4.1. TÌM HIỂU FFT

a. Tham khảo FFT

Các bạn có thể tham khảo FFT tại các trang:

b. FFT dùng Microsoft Excel

Cách cài đặt và phân tích FFT, ở đây mình dùng bản Microsoft Excel 2010:

c. Mô phỏng FFT bằng Microsoft Excel 2010

  • Dạng sóng ở miền thời gian.
    • VD: Chúng ta muốn phân tích một tín hiệu bao gồm 3 thành phần như sau:
Amplitude 1: 20 Phase angle 1: 0 rad Frequency 1: 50 Hz
Amplitude 2: 10 Phase angle 2: 0.8 rad Frequency 2: 1000 Hz
Amplitude 3: 5 Phase angle 3: 0.5 rad Frequency 3: 2000 Hz

Ở miền thời gian, tín hiệu này có dạng:

  • Ở miền tần số, ta cài đặt các thông số sau
FFT settings
Number of data points: 256 points Sampling frequency: 10000
Total time analysed: 0.0255 sec Sampling interval: 1.00E-04
Folding frequency: 39.1 Hz Frequency ratio sampling/signal:  200.0

Các lưu ý:

  • Tần số lấy mẫu (Sampling frequency): 10,000. Tại sao lại chọn là 10,000 ? Vì hàm analogRead() cần 100us cho một lần lấy mẫu, hay trong 1s Arduino Uno có thể đọc 10,000 lần.???. Xem link: http://arduino.vn/reference/analogread.
  • Sampling frequency =1/Sampling_interval (1/100 us).
  • Frequency ratio sampling/signal = 200, có nghĩa với tín hiệu 50Hz, nó sẽ lấy mẫu được 200 lần trong một chu kỳ, với 1,000Hz sẽ là 10 lần và 2,000Hz sẽ là 5 lần.

Xem Chart bên dưới:

Dùng Analysis Toolpak trong Excel 2010, ta sẽ được bảng tính như sau:

No. Time FFT Input Range FFT Freq. FFT Output Range Amplitude Phase
1 0.0000 31.35 0.00 619.475828315019 4.84 0.00
2 0.0001 20.49 39.06 1598.98315332511+1516.29252775508i 17.22 0.76
3 0.0002 10.33 78.13 -439.874022236096-818.044769750756i 7.26 -2.06
4 0.0003 8.79 117.19 -145.415581635527-392.234183252506i 3.27 -1.93
5 0.0004 13.63 156.25 -77.8754788500501-266.705188002199i 2.17 -1.85
6 0.0005 17.17 195.31 -50.7822571796726-203.567938289581i 1.64 -1.82
7 0.0006 17.30 234.38 -37.2355546767885-164.670093633188i 1.32 -1.79
8 0.0007 19.23 273.44 -29.6571525892296-137.926195800295i 1.10 -1.78
9 0.0008 26.21 312.50 -25.1864370957745-118.200184394654i 0.94 -1.78
10 0.0009 32.69 351.56 -22.5443346931058-102.904148256072i 0.82 -1.79
11 0.0010 30.38 390.63 -21.0953465856794-90.577438905779i 0.73 -1.80
12 0.0011 19.31 429.69 -20.5049845748721-80.3239103354286i 0.65 -1.82
13 0.0012 8.97 468.75 -20.5971564663538-71.5554201041117i 0.58 -1.85
14 0.0013 7.24 507.81 -21.2900370848161-63.8617677256797i 0.53 -1.89
15 0.0014 11.88 546.88 -22.5673160966261-56.9383689895829i 0.48 -1.95
16 0.0015 15.24 585.94 -24.4683864019778-50.5418503873616i 0.44 -2.02
17 0.0016 15.18 625.00 -27.0919512080334-44.4587913776866i 0.41 -2.12
18 0.0017 16.93 664.06 -30.6137602478108-38.4785895952303i 0.38 -2.24
19 0.0018 23.72 703.13 -35.3256814457696-32.3623392867533i 0.37 -2.40
20 0.0019 30.03 742.19 -41.7152006976928-25.7958132568574i 0.38 -2.59
21 0.0020 27.54 781.25 -50.6335837866319-18.3013906551793i 0.42 -2.79
22 0.0021 16.30 820.31 -63.6860150184326-9.04256120577504i 0.50 -3.00
23 0.0022 5.78 859.38 -84.2741183231633+3.69098086930932i 0.66 3.10
24 0.0023 3.89 898.44 -121.046249201556+24.1803636871356i 0.96 2.94
25 0.0024 8.36 937.50 -204.28851337902+67.3314078183086i 1.68 2.82
26 0.0025 11.56 976.56 -566.229885491844+247.253769877234i 4.83 2.73
27 0.0026 11.35 1015.63 883.233600869029-462.832295879653i 7.79 -0.48
28 0.0027 12.94 1054.69 262.490627071792-156.000704279148i 2.39 -0.54
29 0.0028 19.58 1093.75 159.287310464259-103.510969200505i 1.48 -0.58
30 0.0029 25.75 1132.81 116.96592714811-81.0080782258315i 1.11 -0.61
31 0.0030 23.11 1171.88 94.0146098579738-68.085663839843i 0.91 -0.63
32 0.0031 11.74 1210.94 79.6730456812527-59.445285218439i 0.78 -0.64
33 0.0032 1.09 1250.00 69.9079267346952-53.0935910940687i 0.69 -0.65
34 0.0033 -0.94 1289.06 62.8678581984469-48.1090894463954i 0.62 -0.65
35 0.0034 3.42 1328.13 57.5848620863155-44.0038211834773i 0.57 -0.65
36 0.0035 6.50 1367.19 53.5048284965842-40.4921888489716i 0.52 -0.65
37 0.0036 6.17 1406.25 50.2890118570707-37.3928085669831i 0.49 -0.64
38 0.0037 7.65 1445.31 47.7202039315541-34.581575537561i 0.46 -0.63
39 0.0038 14.20 1484.38 45.6545859643112-31.9668365861595i 0.44 -0.61
40 0.0039 20.26 1523.44 43.9955428048605-29.4748173432364i 0.41 -0.59
41 0.0040 17.54 1562.50 42.6789951731854-27.0398309503376i 0.39 -0.56
42 0.0041 6.08 1601.56 41.6654023668098-24.5962776552477i 0.38 -0.53
43 0.0042 -4.65 1640.63 40.9362695377141-22.0702340449947i 0.36 -0.49
44 0.0043 -6.75 1679.69 40.4946162681858-19.3681196851971i 0.35 -0.45
45 0.0044 -2.47 1718.75 40.3704329438848-16.3582065335937i 0.34 -0.38
46 0.0045 0.55 1757.81 40.6348289135887-12.8359382799869i 0.33 -0.31
47 0.0046 0.16 1796.88 41.4331762844692-8.45057401246389i 0.33 -0.20
48 0.0047 1.59 1835.94 43.0678262015699-2.52815965765652i 0.34 -0.06
49 0.0048 8.09 1875.00 46.2379242277021+6.43641018035746i 0.36 0.14
50 0.0049 14.12 1914.06 52.9353116564024+22.6715705019629i 0.45 0.40
51 0.0050 11.35 1953.13 71.8226041144327+64.4807779951925i 0.75 0.73
52 0.0051 -0.13 1992.19 284.965229052573+516.138927392285i 4.61 1.07
53 0.0052 -10.88 2031.25 -35.9289476708623-159.433235268308i 1.28 -1.79
54 0.0053 -13.00 2070.31 -0.736121344850798-83.5757027087092i 0.65 -1.58
55 0.0054 -8.72 2109.38 9.05625310628853-61.4243488006924i 0.49 -1.42
56 0.0055 -5.71 2148.44 13.5229111745346-50.6010052067137i 0.41 -1.31
57 0.0056 -6.09 2187.50 16.0072998657929-44.0408780039973i 0.37 -1.22
58 0.0057 -4.65 2226.56 17.5454159914645-39.5501811311435i 0.34 -1.15
59 0.0058 1.86 2265.63 18.5626783750208-36.2246531318575i 0.32 -1.10
60 0.0059 7.91 2304.69 19.2654793681068-33.6230411862422i 0.30 -1.05
61 0.0060 5.17 2343.75 19.7657451820846-31.5041045424481i 0.29 -1.01
62 0.0061 -6.28 2382.81 20.1292173502535-29.7246258536078i 0.28 -0.98
63 0.0062 -16.99 2421.88 20.3968983890455-28.1940751350954i 0.27 -0.94
64 0.0063 -19.06 2460.94 20.5955834011746-26.8523200857297i 0.26 -0.92
65 0.0064 -14.73 2500.00 20.7434478503684-25.6577802012562i 0.26 -0.89
66 0.0065 -11.66 2539.06 20.853200431399-24.5807277842889i 0.25 -0.87
67 0.0066 -11.98 2578.13 20.9339535645344-23.599302022831i 0.25 -0.85
68 0.0067 -10.47 2617.19 20.9923803235776-22.6970345393925i 0.24 -0.82
69 0.0068 -3.88 2656.25 21.0334556260832-21.8612569363393i 0.24 -0.80
70 0.0069 2.25 2695.31 21.0609455697309-21.0820437232397i 0.23 -0.79
71 0.0070 -0.40 2734.38 21.0777389938245-20.3514914693578i 0.23 -0.77
72 0.0071 -11.76 2773.44 21.0860772821105-19.6632154627175i 0.23 -0.75
73 0.0072 -22.38 2812.50 21.0877168392448-19.0119907954129i 0.22 -0.73
74 0.0073 -24.34 2851.56 21.0840460072579-18.3934915956444i 0.22 -0.72
75 0.0074 -19.91 2890.63 21.076170527591-17.8040983513914i 0.22 -0.70
76 0.0075 -16.72 2929.69 21.0649768944517-17.2407533621091i 0.21 -0.69
77 0.0076 -16.92 2968.75 21.0511799159835-16.7008507858674i 0.21 -0.67
78 0.0077 -15.29 3007.81 21.0353588296915-16.1821519384394i 0.21 -0.66
79 0.0078 -8.58 3046.88 21.0179850119571-15.6827192841362i 0.20 -0.64
80 0.0079 -2.31 3085.94 20.999443439354-15.2008644414239i 0.20 -0.63
81 0.0080 -4.83 3125.00 20.9800494542817-14.7351068216768i 0.20 -0.61
82 0.0081 -16.05 3164.06 20.9600619658281-14.2841404240942i 0.20 -0.60
83 0.0082 -26.51 3203.13 20.9396939191801-13.8468069506703i 0.20 -0.58
84 0.0083 -28.33 3242.19 20.9191206541269-13.422073864799i 0.19 -0.57
85 0.0084 -23.74 3281.25 20.8984866192235-13.009016351101i 0.19 -0.56
86 0.0085 -20.40 3320.31 20.8779107956622-12.6068023792698i 0.19 -0.54
87 0.0086 -20.44 3359.38 20.8574911017337-12.2146802567395i 0.19 -0.53
88 0.0087 -18.64 3398.44 20.8373079867847-11.8319681914133i 0.19 -0.52
89 0.0088 -11.76 3437.50 20.8174273769394-11.4580454889068i 0.19 -0.50
90 0.0089 -5.33 3476.56 20.7979030995321-11.09234508743i 0.18 -0.49
91 0.0090 -7.67 3515.63 20.7787788861587-10.7343471940529i 0.18 -0.48
92 0.0091 -18.71 3554.69 20.7600900334419-10.3835738330037i 0.18 -0.46
93 0.0092 -29.00 3593.75 20.7418647845801-10.0395841533318i 0.18 -0.45
94 0.0093 -30.63 3632.81 20.724125482062-9.70197037204962i 0.18 -0.44
95 0.0094 -25.86 3671.88 20.7068895321952-9.37035425170194i 0.18 -0.42
96 0.0095 -22.33 3710.94 20.6901702142336-9.04438402944776i 0.18 -0.41
97 0.0096 -22.19 3750.00 20.6739773607688-8.72373172926759i 0.18 -0.40
98 0.0097 -20.20 3789.06 20.6583179311014-8.40809080066119i 0.17 -0.39
99 0.0098 -13.13 3828.13 20.6431964953971-8.09717403665584i 0.17 -0.37
100 0.0099 -6.50 3867.19 20.6286156442602-7.79071173162878i 0.17 -0.36
101 0.0100 -8.65 3906.25 20.6145763357444-7.48845004583527i 0.17 -0.35
102 0.0101 -19.49 3945.31 20.6010781898128-7.19014954866825i 0.17 -0.34
103 0.0102 -29.59 3984.38 20.5881197385268-6.89558391693896i 0.17 -0.32
104 0.0103 -31.03 4023.44 20.5756986388483-6.604538768076i 0.17 -0.31
105 0.0104 -26.06 4062.50 20.5638118538324-6.31681061101773i 0.17 -0.30
106 0.0105 -22.33 4101.56 20.5524558070159-6.03220590008864i 0.17 -0.29
107 0.0106 -21.99 4140.63 20.5416265140686-5.75054017921453i 0.17 -0.27
108 0.0107 -19.81 4179.69 20.5313196951019-5.47163730552003i 0.17 -0.26
109 0.0108 -12.54 4218.75 20.5215308705111-5.19532874288241i 0.17 -0.25
110 0.0109 -5.72 4257.81 20.5122554427855-4.92145291723308i 0.16 -0.24
111 0.0110 -7.67 4296.88 20.5034887663492-4.64985462642499i 0.16 -0.22
112 0.0111 -18.32 4335.94 20.4952262071523-4.38038449842649i 0.16 -0.21
113 0.0112 -28.22 4375.00 20.4874631935251-4.11289849235653i 0.16 -0.20
114 0.0113 -29.47 4414.06 20.4801952595451-3.84725743750393i 0.16 -0.19
115 0.0114 -24.31 4453.13 20.4734180819933-3.58332660609679i 0.16 -0.17
116 0.0115 -20.40 4492.19 20.4671275118172-3.32097531597973i 0.16 -0.16
117 0.0116 -19.87 4531.25 20.4613196008844-3.06007655990175i 0.16 -0.15
118 0.0117 -17.50 4570.31 20.4559906246999-2.80050665832138i 0.16 -0.14
119 0.0118 -10.05 4609.38 20.4511371016556-2.54214493310447i 0.16 -0.12
120 0.0119 -3.05 4648.44 20.4467558093013-2.2848733996053i 0.16 -0.11
121 0.0120 -4.83 4687.50 20.4428437980438-2.02857647498059i 0.16 -0.10
122 0.0121 -15.31 4726.56 20.4393984026523-1.77314070068982i 0.16 -0.09
123 0.0122 -25.04 4765.63 20.4364172518359-1.51845447735195i 0.16 -0.07
124 0.0123 -26.12 4804.69 20.4338982761752-1.26440781026909i 0.16 -0.06
125 0.0124 -20.80 4843.75 20.4318397146036-1.01089206400692i 0.16 -0.05
126 0.0125 -16.72 4882.81 20.4302401196134-0.757799724613363i 0.16 -0.04
127 0.0126 -16.03 4921.88 20.4290983613404-0.50502416802766i 0.16 -0.02
128 0.0127 -13.52 4960.94 20.428413630628-0.252459433393483i 0.16 -0.01
129 0.0128 -5.91 5000.00 20.4281854411381 0.16 0.00
130 0.0129 1.23 5039.06 20.428413630627+0.252459433394961i 0.16 0.01
131 0.0130 -0.40 5078.13 20.429098361341+0.505024168027035i 0.16 0.02
132 0.0131 -10.75 5117.19 20.4302401196137+0.757799724613164i 0.16 0.04
133 0.0132 -20.34 5156.25 20.4318397146038+1.01089206400681i 0.16 0.05
134 0.0133 -21.30 5195.31 20.4338982761752+1.26440781026899i 0.16 0.06
135 0.0134 -15.85 5234.38 20.4364172518358+1.51845447735192i 0.16 0.07
136 0.0135 -11.66 5273.44 20.4393984026526+1.77314070068967i 0.16 0.09
137 0.0136 -10.86 5312.50 20.442843798044+2.02857647498039i 0.16 0.10
138 0.0137 -8.23 5351.56 20.4467558093013+2.28487339960512i 0.16 0.11
139 0.0138 -0.53 5390.63 20.4511371016558+2.54214493310437i 0.16 0.12
140 0.0139 6.71 5429.69 20.4559906247+2.80050665832128i 0.16 0.14
141 0.0140 5.17 5468.75 20.4613196008844+3.06007655990155i 0.16 0.15
142 0.0141 -5.08 5507.81 20.4671275118174+3.32097531598001i 0.16 0.16
143 0.0142 -14.60 5546.88 20.4734180819933+3.58332660609672i 0.16 0.17
144 0.0143 -15.48 5585.94 20.4801952595455+3.84725743750395i 0.16 0.19
145 0.0144 -9.96 5625.00 20.4874631935252+4.11289849235648i 0.16 0.20
146 0.0145 -5.71 5664.06 20.4952262071522+4.38038449842644i 0.16 0.21
147 0.0146 -4.85 5703.13 20.5034887663493+4.6498546264249i 0.16 0.22
148 0.0147 -2.17 5742.19 20.5122554427855+4.92145291723316i 0.16 0.24
149 0.0148 5.58 5781.25 20.5215308705111+5.19532874288225i 0.17 0.25
150 0.0149 12.86 5820.31 20.5313196951018+5.47163730551993i 0.17 0.26
151 0.0150 11.35 5859.38 20.5416265140685+5.75054017921436i 0.17 0.27
152 0.0151 1.12 5898.44 20.552455807016+6.03220590008851i 0.17 0.29
153 0.0152 -8.37 5937.50 20.5638118538324+6.31681061101748i 0.17 0.30
154 0.0153 -9.23 5976.56 20.575698638848+6.60453876807559i 0.17 0.31
155 0.0154 -3.71 6015.63 20.5881197385272+6.89558391693944i 0.17 0.32
156 0.0155 0.55 6054.69 20.601078189813+7.19014954866834i 0.17 0.34
157 0.0156 1.40 6093.75 20.6145763357445+7.48845004583521i 0.17 0.35
158 0.0157 4.07 6132.81 20.6286156442603+7.79071173162884i 0.17 0.36
159 0.0158 11.81 6171.88 20.643196495397+8.09717403665569i 0.17 0.37
160 0.0159 19.07 6210.94 20.6583179311016+8.40809080066177i 0.17 0.39
161 0.0160 17.54 6250.00 20.6739773607688+8.72373172926761i 0.18 0.40
162 0.0161 7.27 6289.06 20.6901702142333+9.04438402944803i 0.18 0.41
163 0.0162 -2.27 6328.13 20.7068895321954+9.37035425170195i 0.18 0.42
164 0.0163 -3.17 6367.19 20.724125482062+9.70197037204963i 0.18 0.44
165 0.0164 2.30 6406.25 20.7418647845802+10.0395841533317i 0.18 0.45
166 0.0165 6.50 6445.31 20.7600900334418+10.3835738330038i 0.18 0.46
167 0.0166 7.29 6484.38 20.7787788861582+10.734347194053i 0.18 0.48
168 0.0167 9.89 6523.44 20.7979030995326+11.0923450874299i 0.18 0.49
169 0.0168 17.55 6562.50 20.8174273769396+11.4580454889067i 0.19 0.50
170 0.0169 24.73 6601.56 20.8373079867847+11.8319681914131i 0.19 0.52
171 0.0170 23.11 6640.63 20.8574911017338+12.2146802567394i 0.19 0.53
172 0.0171 12.75 6679.69 20.8779107956623+12.6068023792698i 0.19 0.54
173 0.0172 3.12 6718.75 20.8984866192235+13.0090163511008i 0.19 0.56
174 0.0173 2.11 6757.81 20.9191206541269+13.4220738647992i 0.19 0.57
175 0.0174 7.47 6796.88 20.9396939191801+13.8468069506703i 0.20 0.58
176 0.0175 11.56 6835.94 20.9600619658284+14.2841404240943i 0.20 0.60
177 0.0176 12.24 6875.00 20.9800494542817+14.7351068216768i 0.20 0.61
178 0.0177 14.71 6914.06 20.9994434393538+15.2008644414238i 0.20 0.63
179 0.0178 22.24 6953.13 21.0179850119572+15.6827192841362i 0.20 0.64
180 0.0179 29.29 6992.19 21.0353588296913+16.1821519384396i 0.21 0.66
181 0.0180 27.54 7031.25 21.0511799159837+16.7008507858673i 0.21 0.67
182 0.0181 17.04 7070.31 21.0649768944517+17.240753362109i 0.21 0.69
183 0.0182 7.26 7109.38 21.076170527591+17.8040983513913i 0.22 0.70
184 0.0183 6.10 7148.44 21.084046007258+18.3934915956444i 0.22 0.72
185 0.0184 11.31 7187.50 21.0877168392449+19.0119907954127i 0.22 0.73
186 0.0185 15.24 7226.56 21.0860772821105+19.6632154627172i 0.23 0.75
187 0.0186 15.75 7265.63 21.0777389938246+20.3514914693578i 0.23 0.77
188 0.0187 18.07 7304.69 21.060945569731+21.0820437232396i 0.23 0.79
189 0.0188 25.43 7343.75 21.0334556260832+21.8612569363391i 0.24 0.80
190 0.0189 32.31 7382.81 20.9923803235774+22.6970345393925i 0.24 0.82
191 0.0190 30.38 7421.88 20.9339535645343+23.5993020228303i 0.25 0.85
192 0.0191 19.70 7460.94 20.8532004313992+24.5807277842904i 0.25 0.87
193 0.0192 9.74 7500.00 20.7434478503684+25.6577802012562i 0.26 0.89
194 0.0193 8.40 7539.06 20.5955834011732+26.8523200857296i 0.26 0.92
195 0.0194 13.43 7578.13 20.3968983890461+28.1940751350956i 0.27 0.94
196 0.0195 17.17 7617.19 20.1292173502538+29.724625853608i 0.28 0.98
197 0.0196 17.50 7656.25 19.7657451820848+31.5041045424481i 0.29 1.01
198 0.0197 19.62 7695.31 19.2654793681068+33.6230411862425i 0.30 1.05
199 0.0198 26.80 7734.38 18.5626783750205+36.2246531318575i 0.32 1.10
200 0.0199 33.48 7773.44 17.5454159914652+39.5501811311437i 0.34 1.15
201 0.0200 31.35 7812.50 16.0072998657933+44.0408780039973i 0.37 1.22
202 0.0201 20.49 7851.56 13.5229111745347+50.601005206714i 0.41 1.31
203 0.0202 10.33 7890.63 9.05625310628891+61.4243488006926i 0.49 1.42
204 0.0203 8.79 7929.69 -0.736121344850414+83.5757027087097i 0.65 1.58
205 0.0204 13.63 7968.75 -35.9289476708616+159.433235268308i 1.28 1.79
206 0.0205 17.17 8007.81 284.96522905257-516.138927392287i 4.61 -1.07
207 0.0206 17.30 8046.88 71.8226041144322-64.4807779951928i 0.75 -0.73
208 0.0207 19.23 8085.94 52.9353116564025-22.6715705019629i 0.45 -0.40
209 0.0208 26.21 8125.00 46.2379242277021-6.43641018035755i 0.36 -0.14
210 0.0209 32.69 8164.06 43.0678262015698+2.52815965765605i 0.34 0.06
211 0.0210 30.38 8203.13 41.4331762844693+8.45057401246377i 0.33 0.20
212 0.0211 19.31 8242.19 40.6348289135887+12.8359382799868i 0.33 0.31
213 0.0212 8.97 8281.25 40.370432943885+16.3582065335937i 0.34 0.38
214 0.0213 7.24 8320.31 40.4946162681859+19.3681196851966i 0.35 0.45
215 0.0214 11.88 8359.38 40.936269537714+22.0702340449944i 0.36 0.49
216 0.0215 15.24 8398.44 41.6654023668101+24.5962776552476i 0.38 0.53
217 0.0216 15.18 8437.50 42.6789951731857+27.0398309503374i 0.39 0.56
218 0.0217 16.93 8476.56 43.9955428048607+29.4748173432357i 0.41 0.59
219 0.0218 23.72 8515.63 45.6545859643112+31.9668365861599i 0.44 0.61
220 0.0219 30.03 8554.69 47.7202039315543+34.581575537561i 0.46 0.63
221 0.0220 27.54 8593.75 50.2890118570708+37.3928085669829i 0.49 0.64
222 0.0221 16.30 8632.81 53.5048284965845+40.492188848971i 0.52 0.65
223 0.0222 5.78 8671.88 57.5848620863155+44.0038211834765i 0.57 0.65
224 0.0223 3.89 8710.94 62.8678581984468+48.1090894463964i 0.62 0.65
225 0.0224 8.36 8750.00 69.9079267346953+53.0935910940687i 0.69 0.65
226 0.0225 11.56 8789.06 79.6730456812519+59.4452852184381i 0.78 0.64
227 0.0226 11.35 8828.13 94.0146098579743+68.0856638398429i 0.91 0.63
228 0.0227 12.94 8867.19 116.965927148111+81.0080782258314i 1.11 0.61
229 0.0228 19.58 8906.25 159.28731046426+103.510969200504i 1.48 0.58
230 0.0229 25.75 8945.31 262.490627071793+156.000704279147i 2.39 0.54
231 0.0230 23.11 8984.38 883.233600869031+462.832295879648i 7.79 0.48
232 0.0231 11.74 9023.44 -566.229885491845-247.253769877231i 4.83 -2.73
233 0.0232 1.09 9062.50 -204.28851337902-67.3314078183078i 1.68 -2.82
234 0.0233 -0.94 9101.56 -121.046249201556-24.1803636871349i 0.96 -2.94
235 0.0234 3.42 9140.63 -84.2741183231626-3.69098086930834i 0.66 -3.10
236 0.0235 6.50 9179.69 -63.6860150184329+9.0425612057756i 0.50 3.00
237 0.0236 6.17 9218.75 -50.6335837866317+18.3013906551798i 0.42 2.79
238 0.0237 7.65 9257.81 -41.7152006976924+25.7958132568574i 0.38 2.59
239 0.0238 14.20 9296.88 -35.3256814457688+32.3623392867536i 0.37 2.40
240 0.0239 20.26 9335.94 -30.6137602478112+38.4785895952313i 0.38 2.24
241 0.0240 17.54 9375.00 -27.0919512080333+44.4587913776868i 0.41 2.12
242 0.0241 6.08 9414.06 -24.4683864019782+50.5418503873613i 0.44 2.02
243 0.0242 -4.65 9453.13 -22.5673160966255+56.9383689895836i 0.48 1.95
244 0.0243 -6.75 9492.19 -21.2900370848165+63.8617677256801i 0.53 1.89
245 0.0244 -2.47 9531.25 -20.5971564663532+71.555420104112i 0.58 1.85
246 0.0245 0.55 9570.31 -20.5049845748717+80.3239103354287i 0.65 1.82
247 0.0246 0.16 9609.38 -21.0953465856784+90.5774389057793i 0.73 1.80
248 0.0247 1.59 9648.44 -22.5443346931062+102.904148256073i 0.82 1.79
249 0.0248 8.09 9687.50 -25.186437095774+118.200184394654i 0.94 1.78
250 0.0249 14.12 9726.56 -29.6571525892295+137.926195800295i 1.10 1.78
251 0.0250 11.35 9765.63 -37.2355546767876+164.670093633189i 1.32 1.79
252 0.0251 -0.13 9804.69 -50.7822571796725+203.567938289583i 1.64 1.82
253 0.0252 -10.88 9843.75 -77.8754788500489+266.7051880022i 2.17 1.85
254 0.0253 -13.00 9882.81 -145.415581635527+392.234183252507i 3.27 1.93
255 0.0254 -8.72 9921.88 -439.874022236092+818.04476975076i 7.26 2.06
256 0.0255 -5.71 9960.94 1598.9831533251-1516.29252775508i 17.22 -0.76

Cuối cùng, chúng ta có được biến đổi FFT cho tín hiệu trên bằng cách vẽ Amplitude theo trục y và FFT Freq. theo trục x. Lưu ý ở cột FFT Output Range, dạng số a+b*i số phức.

d. Thư viện FFT cho Arduino

4.2. CHƯƠNG TRÌNH VU METER CHO LOLSHIELD

Tham khảo từ trang: http://andydoro.com/vulol/ của Andy Doro. Các bạn xem Video thực tế bên dưới: LoLShield - FFT VU METER.

/*
FFT for LoL Shield
 by Andy Doro
 http://andydoro.com/vulol/
 based on FFT library and code from the Arduino forums and
 the Charlieplexing library for the LoL Shield.
 */
// include libraries
#include "Charliplexing.h"
#include "fix_fft.h"
// where we read the audio voltage
#define AUDIOPIN 0
char im[128], data[128];
char data_avgs[14];
int i=0,val;
void setup() {
  LedSign::Init();            // initilizes the LoL Shield
}
void loop() {

  for (i=0; i < 128; i++){                                     
    val = analogRead(AUDIOPIN); // read voltage                                    
    data[i] = val;                                       
    im[i] = 0;                                                     
  };
  fix_fft(data,im,7,0);
  for (i=0; i< 64;i++){                                      
    data[i] = sqrt(data[i] * data[i] + im[i] * im[i]);  // this gets the absolute value of the values in the array, so we're only dealing with positive numbers
  };     
  // average bars together
  for (i=0; i<14; i++) {
    data_avgs[i] = data[i*4] + data[i*4 + 1] + data[i*4 + 2] + data[i*4 + 3];   // average together 
    data_avgs[i] = map(data_avgs[i], 0, 20, 0, 9);                              // remap values for LoL
  }
  // set LoLShield
  for (int x=0; x < 14; x++) {
    for (int y=0; y < 9; y++) {
      if (y < data_avgs[13-x]) { // 13-x reverses the bars so low to high frequences are represented from left to right.
        LedSign::Set(x,y,1);        // set the LED on
      } 
      else {
        LedSign::Set(x,y,0);       // set the LED off
      }
    } 
  }
}

V. PHẦN KẾT

  • Về thư viện fix_fft, các bạn có thể kiểm tra độ chính xác thông qua bảng LED ma trận với kích cỡ khoảng WxH = 64x128 kết hợp với các phần mềm Tone/ Frequency Generator, chẳng hạn như: http://onlinetonegenerator.com/
  • Mục đích bài viết cũng để chia sẻ các Tool Data Analysis phân tích dữ liệu rất hay của Microsoft Excel. Ngoài Fourier Analysis, còn có công cụ khác như Histogram rất hữu ích trong việc phân tích, báo cáo trong công việc.
  • Bài viết khá dài và trình bày có phẩn lủng củng. Mình rất mong nhận được ý kiến đóng góp của các bạn trong Cộng đồng Arduino Việt Nam.
Youtube: 
LoLShield - First Test
LoLShield - Plasma Effect
LoLShield - FFT VU METER
Những hình ảnh về dự án: 
Bài viết truyền cảm hứng: 
lên
14 thành viên đã đánh giá bài viết này hữu ích.
Các dự án được truyền cảm hứng

Select any filter and click on Apply to see results

Các bài viết cùng tác giả

ĐIỀU KHIỂN BẢNG LED BICOLOR 32x32 BẰNG B.A.M

Về LED ma trận, mình thấy trên diễn đàn cũng đã có rất nhiều bài viết. Để tiếp tục chuỗi bài về B.A.M, mình sẽ chia sẻ các bạn cách để Bicolor Led Matrix có thể hiển thị 256 màu riêng biệt với phương pháp B.A.M – 4 bit, tất nhiên nếu mắt người có thể phân biệt được sự khác biệt này...

lên
4 thành viên đã đánh giá bài viết này hữu ích.

ĐIỀU KHIỂN RGB LED CUBE 8x8x8 BẰNG PHƯƠNG PHÁP BAM 4 BIT VỚI 74HC595

Với khối RGB CUBE 8x8x8, chúng ta có 512 LED RED, 512 LED GREEN và 512 LED BLUE, tổng cộng là: 512x3 = 1,536 LED. Để điều khiển chúng riêng biệt với màu sắc mong muốn, chúng ta dùng 24 con 74HC595 và 8 con TIP42C và áp dụng phương pháp BAM – 4bit (Bit Angle Modulation). Các bạn cùng thử sức nhé

lên
18 thành viên đã đánh giá bài viết này hữu ích.