|
使用Arduino、诺基亚5110 LCD模块和KT0803 I2C FM发射器模块制作属于您自己的基于Arduino的无线发射器。
在本篇文章中,我们将向您介绍如何使用Arduino Uno开发板、诺基亚5110 LCD模块和基于I2C的FM发射器模块制作FM发射器。最终产品可通过70MHz至108MHz的频率调制传输您的语音或音乐。我们使用的FM模块带有一个20位ADC音频芯片,主要用于数字信号和DSP内核。
FM发射器输出由RF功率放大器放大,并通过RF输出引脚输出到天线。它的工作电压范围为1.6 V至3.6 V,并且与不同的微控制器完全兼容。
关于法律问题的说明 在大多数国家,建立一个覆盖大面积的个人无线电台或无牌建立和销售FM发射机是违法的。我检查了联邦通信委员会的网站上的指导原则,其中列出了我要遵循的要求,包括我的发射机可以扩展的最大范围(200英尺)。
在制作此发射器或使用天线扩展范围之前,请根据您所在的国家/地区检查免费使用的FM频段,并确保遵守您所在国家/地区的法律。本文仅用于制作供个人使用的FM发射器!
什么是KT0803K? KT0803K器件设计用于处理高保真立体声音频信号,并在短距离内传输调制的FM信号。该模块主要用于音频接口,尤其适用于麦克风或音频信号电缆。我们还可以修改音频信号输入以进行幅度调整并调整麦克风灵敏度,因为我们还可以在此模块中添加麦克风。
主要规格 ● I2C接口5V TTL兼容 ● Arduino即插即用 ● 板载MIC ● VCC输入:3.0V至5.0V
可以将一个小天线与该模块连接(任何约75cm的金属线都可以用作天线)。
让我们开始吧。
连接项目 将所有组件连接起来,如下图Fritzing图中所示。
代码 以下是本文使用的代码: - #include "U8glib.h"
- #include <FMTX.h>
- //U8GLIB_ST7920_128X64 u8g(13, 11, 12, U8G_PIN_NONE);// SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
- U8GLIB_PCD8544 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, Reset = 8
- int channel=0;
- float fm_freq = 90; // Here set the default FM frequency
- int reading=0;
- int last_reading=0;
- int Current_reading=0;
- int mapping_reading=000;
- void setup(void){
-
- pinMode(A0,INPUT);
- Serial.begin(9600);
- fmtx_init(fm_freq, USA);
- u8g.setRot180();
- u8g.setColorIndex(1); // pixel on !
- //..........................................
- u8g.firstPage();
- do{
- set_screen(1);
- }
- while(u8g.nextPage() );
- delay(1000);
- //....................
- u8g.firstPage();
- do{
- set_screen(0);
- }
- while(u8g.nextPage() );
- delay(1000);
- Clear();
- //..........
-
- u8g.firstPage();
- do{
- intro();
- }
- while(u8g.nextPage() );
- delay(2500);
- u8g.firstPage();
- do{
- intro2();
- }
- while(u8g.nextPage() );
- delay(2500);
- Clear();
- //..........................................
- }
- // Reading Any Tunning change here.
- void Analog_pin_read(){
- channel=mapping_reading;
- Current_reading=channel;
- fmtx_set_freq(channel);
-
- }
- void set_screen(int i){
- u8g.setColorIndex(i); // pixel on !
- for (int x_axis=0;x_axis<84;x_axis++){
- for (int y_axis=0;y_axis<44;y_axis++){
- u8g.drawPixel(x_axis,y_axis);
- }
- }
- }
- void Clear(void){
- u8g .setFont(u8g_font_04b_03);
- u8g.setFontRefHeightExtendedText();
- u8g.setDefaultForegroundColor();
- u8g.setFontPosTop();
- }
- void intro(void){
- u8g.setColorIndex(1);
- u8g.drawFrame(0,0,83,47);
- u8g .setFont(u8g_font_osr18);
- u8g.drawStr( 5, 25, "FM Tx ");
- u8g .setFont(u8g_font_tpss);
- u8g.drawStr( 5, 40, " System");
- }
- void intro2(void){
- u8g.setColorIndex(1);
- u8g.drawFrame(0,0,83,47);
- u8g .setFont(u8g_font_04b_03);
- u8g.drawStr( 2, 7, "Build Your FM station! ");
- u8g.drawStr( 2, 15, "Modify the frequency");
- u8g.drawStr( 2, 26, "By Ammar");
- u8g.drawStr( 2, 38, "Maker.PRO");
- }
- //change frequency value On lcd here
- void number(int value){
- u8g.setColorIndex(1);
- u8g.drawFrame(0,0,83,47);
- u8g .setFont(u8g_font_unifont);
- u8g.drawStr( 5, 15, "Frequency ");
- u8g .setFont(u8g_font_osr18);
- u8g.setPrintPos(10,45);
- u8g.println(value,DEC);
- u8g .setFont(u8g_font_unifont);
- u8g.drawStr( 45, 38, "MHz ");
- }
- void loop(){
- reading=analogRead(A0);
- mapping_reading=map(reading,0,1023,90,100);
- mapping_reading=constrain(mapping_reading,90,100);
- if( mapping_reading!= Current_reading){
- Clear();
- Analog_pin_read();
- u8g.firstPage();
- do{
- number(channel);
- }
- while(u8g.nextPage() );
- delay(100);
- }
- }
复制代码
|