×

在面包板上构建一个简单的FM收音机接收器

消耗积分:0 | 格式:zip | 大小:0.59 MB | 2023-06-30

陈霞

分享资料个

描述

介绍

亲爱的朋友欢迎回来!在本教程中,我们将在面包板上构建一个简单的 FM 收音机接收器如您所见,收音机工作正常,我们可以听到一些音乐。我正在使用这种廉价的 FM 发射器以这个频率传输一些 YouTube 安全曲目。我正在使用诺基亚 5110 LCD 显示屏来显示选择的频率、信号强度和立体声图标(如果我们正在接收立体声)。该项目的大脑是小巧便宜的 Arduino Nano 我们可以使用这个电位器来控制扬声器的音量,我们可以使用这个电位器来改变无线电频率。

这是一个引人入胜的项目,而且相对容易构建。让我们看看如何构建它。

第 1 步:获取所有零件

 
poYBAGN-4ISAIrvOAACkmvQrrHA541.jpg
 

构建此项目所需的部分如下:

该项目的总成本约为15美元。

第 2 步:诺基亚 5110 液晶显示屏

 
pYYBAGN-4ImAfJIEAABe4yr_DZ4439.jpg
 
 

诺基亚 5110 是我最喜欢的 Arduino 项目显示器。显示器的成本约为 4 美元。

你可以在这里得到它。

第 3 步:TEA5767 FM 收音机模块

 
 
 
 
poYBAGN-4IuAAkK1AADSzj7L8q0010.jpg
 
1 / 2
 

该项目是围绕这个 FM 收音机模块构建的。

该模块使用TEA5767无线电芯片,这里是这个。该芯片使用 I2C 接口,因此可以直接与 Arduino 一起使用。在模块上,我们还可以找到一个音频放大器。不幸的是,这是一个耳机放大器,因此我们无法将扬声器直接连接到模块的输出端,因为音频信号非常微弱。我们需要先放大它。此外,无法通过软件控制模块发出的音量,因此稍后我们将使用电位器。模块上有两个耳机接口,一个是天线接口,一个是标准耳机输出接口。该模块带有一个小天线,但如果您愿意,您可以轻松构建自己的天线。

你可以在这里得到它。

第 4 步:连接部件

 
 
 
 
poYBAGOYGzeAfn8hAACGsaz35Jk454.jpg
 
1 / 11
 

现在让我们根据这个示意图构建电路。

连接诺基亚 5110 液晶显示器

  • RST 转到 Arduino 的数字引脚 12
  • CE 转到 Arduino 的数字引脚 11
  • DC 连接到 Arduino 的数字引脚 10
  • DIN 连接到 Arduino 的数字引脚 9
  • CLK 进入 Arduino 的数字引脚 8
  • VCC 转到 Arduino 3.3V
  • LIGHT 连接到 Arduino GND(背光打开)
  • GND 连接到 Arduino GND

最后一步(可选)是像这样将一个 330μF 电容器连接到面包板,以减少音频信号上的噪声。

如果我们现在启动项目,我们可以看到启动屏幕显示 3 秒,然后,我们可以听到扬声器的声音。此扬声器和此音频放大器的音质不是最好的。如果我使用另一个带有嵌入式放大器的商用扬声器,音质是完美的。一探究竟。所以,模块的输出信号是完美的,但是我使用的放大器和扬声器降低了音质,所以我需要寻找质量更好的。现在我们已经构建了硬件,让我们来看看项目的软件方面。

第 5 步:项目代码

 
poYBAGOYGzyAbm8rAAA58RsycG4180.jpg
 
 

在这个项目中,我们使用了两个库。

void setup() {
  radio.setMonoReception();
  radio.setStereoNoiseCancellingOn();
  initScreen();
  showSplashScreen();
  Serial.begin(9600);
}

接下来,在循环函数中,我们每隔几毫秒从控制频率的电位器中读取值。我们从电位器获得模拟值,并将其映射到频率值。由于我们读取的是模拟值,因此该值不是恒定的;即使我们不转动电位器,它也会略微上升或下降。

frequencyInt = map(val, 2, 1014, 8700, 10700); //Analog value to frequency from 87.0 MHz to 107.00 MHz 
float frequency = frequencyInt/100.0f;

因此,为了获得稳定的频率,我们只有在频率发生显着变化时才将收音机调到不同的频率。因此,如果频率发生显着变化,我们将无线电模块调整到该频率,我们获得信号强度,然后将其打印在屏幕上,如果需要,我们打印立体声图标,最后,我们打印选定的频率.

if(frequency - previousFrequency >= 0.1f || previousFrequency - frequency >= 0.1f)  {
    lcd.clrScr();
    radio.selectFrequency(frequency);
    printSignalStrength();
    printStereo();
    printFrequency(frequency);
    previousFrequency = frequency;    
  }

这就是代码的工作方式,它很简单,但工作正常。与往常一样,您可以找到附加到此步骤的项目代码。

由于这是一个正在开发的项目,您可以在该项目的网页上找到最新版本的代码:http: //educ8s.tv/arduino-fm-radio-project

 

第 6 步:最后的想法

 
 
 
 
pYYBAGOYG0KARXBHAACddto6i3s021.jpg
 
1 / 2
 

非常感谢!


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.jibsdb.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'在面包板上构建一个简单的FM收音机接收器',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"https://www.elecfans.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);