风筝
发表于: 2019-9-9 20:57:28 | 显示全部楼层

使用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信号。该模块主要用于音频接口,尤其适用于麦克风或音频信号电缆。我们还可以修改音频信号输入以进行幅度调整并调整麦克风灵敏度,因为我们还可以在此模块中添加麦克风。

KT0803K.png


主要规格

●    I2C接口5V TTL兼容

●    Arduino即插即用

●    板载MIC

●    VCC输入:3.0V至5.0V


可以将一个小天线与该模块连接(任何约75cm的金属线都可以用作天线)。

small antenna.png

让我们开始吧。

hardware.png


连接项目

将所有组件连接起来,如下图Fritzing图中所示。

final wired project .png


代码

以下是本文使用的代码:

  1. #include "U8glib.h"
  2. #include <FMTX.h>

  3. //U8GLIB_ST7920_128X64 u8g(13, 11, 12, U8G_PIN_NONE);// SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
  4. U8GLIB_PCD8544 u8g(13, 11, 10, 9, 8);    // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, Reset = 8
  5. int channel=0;
  6. float fm_freq = 90;  // Here set the default FM frequency
  7. int reading=0;
  8. int last_reading=0;
  9. int Current_reading=0;
  10. int mapping_reading=000;

  11. void setup(void){
  12.   
  13. pinMode(A0,INPUT);
  14. Serial.begin(9600);
  15. fmtx_init(fm_freq, USA);
  16. u8g.setRot180();
  17. u8g.setColorIndex(1); // pixel on !
  18. //..........................................
  19. u8g.firstPage();  
  20.   do{
  21.     set_screen(1);
  22.   }
  23.   while(u8g.nextPage() );
  24.   delay(1000);
  25. //....................
  26.   u8g.firstPage();  
  27.   do{
  28.     set_screen(0);
  29.   }
  30.   while(u8g.nextPage() );
  31.   delay(1000);
  32.    Clear();
  33.    //..........
  34.    
  35.     u8g.firstPage();  
  36.   do{
  37.     intro();
  38.   }
  39.   while(u8g.nextPage() );
  40.   delay(2500);
  41.    u8g.firstPage();  
  42.   do{
  43.     intro2();
  44.   }
  45.   while(u8g.nextPage() );
  46.   delay(2500);
  47.   Clear();

  48. //..........................................
  49. }
  50. // Reading Any Tunning change here.
  51. void Analog_pin_read(){
  52.    channel=mapping_reading;
  53.    Current_reading=channel;
  54.    fmtx_set_freq(channel);
  55.    
  56. }

  57. void set_screen(int i){
  58. u8g.setColorIndex(i); // pixel on !
  59. for (int x_axis=0;x_axis<84;x_axis++){
  60. for (int y_axis=0;y_axis<44;y_axis++){
  61. u8g.drawPixel(x_axis,y_axis);
  62. }
  63. }
  64. }

  65. void Clear(void){
  66.   u8g .setFont(u8g_font_04b_03);
  67.   u8g.setFontRefHeightExtendedText();
  68.   u8g.setDefaultForegroundColor();
  69.   u8g.setFontPosTop();
  70. }
  71. void intro(void){
  72.   u8g.setColorIndex(1);
  73.   u8g.drawFrame(0,0,83,47);
  74.   u8g .setFont(u8g_font_osr18);
  75.   u8g.drawStr( 5, 25, "FM Tx ");
  76.   u8g .setFont(u8g_font_tpss);
  77.   u8g.drawStr( 5, 40, " System");
  78. }
  79. void intro2(void){
  80.   u8g.setColorIndex(1);
  81.   u8g.drawFrame(0,0,83,47);
  82.   u8g .setFont(u8g_font_04b_03);
  83.   u8g.drawStr( 2, 7, "Build Your FM station! ");
  84.   u8g.drawStr( 2, 15, "Modify the frequency");
  85.   u8g.drawStr( 2, 26, "By Ammar");
  86.   u8g.drawStr( 2, 38, "Maker.PRO");
  87. }
  88. //change frequency value On lcd here
  89. void number(int value){
  90.   u8g.setColorIndex(1);
  91.   u8g.drawFrame(0,0,83,47);
  92.   u8g .setFont(u8g_font_unifont);
  93.   u8g.drawStr( 5, 15, "Frequency ");
  94.   u8g .setFont(u8g_font_osr18);
  95.   u8g.setPrintPos(10,45);
  96.   u8g.println(value,DEC);
  97.   u8g .setFont(u8g_font_unifont);
  98.   u8g.drawStr( 45, 38, "MHz ");
  99. }

  100. void loop(){  
  101.   reading=analogRead(A0);   
  102.   mapping_reading=map(reading,0,1023,90,100);
  103.   mapping_reading=constrain(mapping_reading,90,100);
  104.   if( mapping_reading!= Current_reading){
  105.   Clear();
  106.   Analog_pin_read();
  107. u8g.firstPage();  
  108.   do{
  109.   number(channel);
  110.   }
  111.   while(u8g.nextPage() );
  112.   delay(100);
  113.   }
  114. }
复制代码

跳转到指定楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 700 | 回复: 1480



手机版|

GMT+8, 2024-4-23 14:27 , Processed in 0.034345 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表