×

了解如何创建Arduino保险箱

消耗积分:0 | 格式:zip | 大小:0.00 MB | 2022-11-28

分享资料个

描述

介绍

通过反射检测物体的功能有多种应用,主要是在自动化领域,例如远程控制命令。

通过可以检测物体存在的传感器辅助自动化,可以通过数字打印、灯的自动激活、可以根据不同表面反射到达的光的方式分配不同功能的系统来开发系统。 .

因此,这些应用之一存在于物体检测中,例如在使用 TCRT5000 传感器和 LCD 显示器的教学保险箱中,如下图 1 所示。

pYYBAGOD0BCAZRT7AABOzOt9FYk843.png
图 1 - 使用 LCD 显示器和 TCRT5000 传感器的教学保险箱案例。
 

为了开发这个保险箱的教学案例,您将学习使用 Arduino 组装基本威廉希尔官方网站 和编程。

实施的教学保险箱结构简单,包含 LCD(液晶显示器)显示器、TCRT5000 反射式物体传感器和按钮。

当硬币通过特定孔插入保险箱时,传感器会检测到它的存在并使用开发程序中的内部条件计算硬币的总量。

硬币的检测是由反射传感器TCRT5000进行的,它使用LED发光,当光被反射时光电晶体管被激活,从而进行计数。

在本文中,您将学习如何编程和使用 TCRT5000 反射式传感器,以及了解其物理结构,因为该传感器使用反射作为工作原理。

因此,通过本文,您将了解到:

  • 了解带晶体管输出的 TCRT5000 反射式光学传感器的结构;
  • 了解带晶体管输出的 TCRT5000 反射式光学传感器的操作;
  • 在具有晶体管输出的 TCRT5000 反射式光学传感器和 Arduino UNO R3 之间执行通信;
  • 将带晶体管输出的 TCRT5000 反射式光学传感器的结构展示给 SILICIOS LAB 开发的教学案例。
  • 为钱柜构建您的 PCBGOGO 印刷威廉希尔官方网站 板。

现在,我们将开始全面介绍使用 LCD 和 TCRT5000 反射式传感器的教学安全的开发。

项目开发方法论

该项目包括展示一个使用 TCRT5000 反射式光学传感器和 Arduino UNO 开发板的保险箱教学模型。

该项目由光学传感器组成,负责通过发射红外光来检测物体的存在,并在检测到物体反射的光时激活光电晶体管。

Arduino UNO开发板将负责接收传感器发送的逻辑电平并提供电源使传感器工作,最后处理传感器接收到的信号。如图 2 所示。

poYBAGOD0BWAM74EAAcMhXUUy0M712.jpg
图 2 - 建议用于教学保险箱操作的威廉希尔官方网站 。
 

反射式传感器的红外光LED发出的信号发射出去,这样光就检测到硬币了,很快,光在几个方向上反射,一部分被反射式传感器的光电晶体管捕捉到如图 3 所示。

poYBAGOD0BeAOkzcAABw8d8YrS4335.jpg
图 3 - TCRT5000 反射式传感器的发射和接收。
 

TCRT5000反射式传感器基本由一个红外发光LED、负责进行光切换的光电晶体管和用于耦合上述两个器件的结构构成。

红外 LED 向多个方向发射光,当光照射到硬币表面时,它反射光,光电晶体管捕获光。

通过这种方式,传感器向 Arduino 的数字引脚发送一个低逻辑电平,另一方面,当传感器没有检测到任何物体时,它发送一个高逻辑电平。

教学保险箱的所有通信都将通过液晶显示屏完成,液晶显示屏将向用户发送指示性消息。

按钮将用于向 Arduino 的数字引脚 7 发送低逻辑电平,从而完成程序中实现的硬币计数器的归零。

为此,将使用一个 10 kΩ 的上拉电阻来确保引脚具有高逻辑电平,使其在激活按钮时达到低逻辑电平,从而避免溢出。

要设置实验,首先,确保您的 Arduino 已通过从 USB 电缆上断开来关闭。

现在,将组件连接起来,如下图 5 所示。

poYBAGOD0ByAOznaAAEvCWIFiOY245.jpg
图 5 - 建议威廉希尔官方网站 的接线图。
 

根据图5所示的接线图,实验由反射式传感器威廉希尔官方网站 、Arduino UNO威廉希尔官方网站 、Push Button威廉希尔官方网站 和LCD显示威廉希尔官方网站 组成。

TCRT5000 传感器有 4 个引脚(两个引脚用于 LED,两个用于光电晶体管),有两个电源引脚 (Vdc),光电晶体管的电源引脚连接到 10kΩ 电阻器,该电阻器将连接到 Arduino 的 5 伏Uno 通过原型板,它还将连接到 Arduino 的数字引脚 6 以发送信号,同时为 LED 供电的引脚将连接到 220 Ω 电阻器,该电阻器将连接到 5 伏总线原型板。

剩下的两个引脚,LED 和光电晶体管都将连接到原型板的参考总线,原型板将连接到 arduino 的 GND 引脚。

Arduino uno 将负责对整个威廉希尔官方网站 的信号进行处理,并提供电源和参考。使用的按钮将连接到参考和上拉电阻,以确保只要未按下按钮,arduino 的数字引脚 6 上的逻辑电平就很高。

LCD 显示威廉希尔官方网站 将是标准的使用 4 位连接(D4、D5、D6 和 D7)以及负责对比度的 10 kΩ 电位器和连接到阳极引脚的 330 Ω 电阻器。

教学保险箱的所有编程逻辑都是按照以下程序的注释开发的:

/*
Conexões do display LCD ao arduino uno:
* LCD RS pino para o digital pino 12
* LCD Enable pin para o digital pino 11
* LCD D4 pino para o digital pino 5
* LCD D5 pino para o digital pino 4
* LCD D6 pino para o digital pino 3
* LCD D7 pino para o digital pino 2
* LCD R/W pino para o ground
* LCD VSS pino para o ground
* LCD VDD pino para o 5V
* LCD V0 pino para o potenciômetro
*/
#include //importando a biblioteca das funçoes do LCD
//pinos de interface da biblioteca
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
//********************INICIO-SENSOR TCRT5000***********************
int Objeto = 0;//variável utilizada para as informações do sensor
int Sensor = 6;// o pino de dados do sensor será conectado ao pino digital 6 do arduino
int moedas = 0;//variavel responsavel por contar as moedas
int botao_zerar_contagem = 7;//variavel responsável pelo botao que ira reiniciar a contagem das moedas.
int estado_botao;//variável utilizada para verificar o estada do botão.
//********************FIM-SENSOR TCRT5000***********************
void setup() { //função responsável por definir os pinos de entrada e saida do arduino
//********************INICIO-SENSOR TCRT5000***********************
pinMode(Sensor,INPUT);//define o pino Sensor como entrada de dados
pinMode(botao_zerar_contagem,INPUT);//define o pino do botao como entrada de dados
//********************FIM-SENSOR TCRT5000***********************
//  Número de linhas e colunas do LCD utilizado
lcd.begin(16, 2);
// Função responsável por retornar a mensagem no LCD
lcd.setCursor(2,0);//setando o cursor do LCD na coluna 2 linha 0
lcd.print("SILICIOS LAB");//mensagem enviada para o LCD
lcd.setCursor(2,1);//setando o cursor do LCD na coluna 2 linha 1
lcd.print("Cofre 1 real");//mensagem enviada para o LCD
delay(4000);//aguarda 4 segundos para iniciar
lcd.clear();//apaga os caracteres no LCD
}
void loop() {
estado_botao = digitalRead(botao_zerar_contagem);//lendo o estado do botão.
if(estado_botao==LOW)//se o estada do botão for LOW, a contagem será reiniciada
{
lcd.setCursor(0,0);//desloca o cursor para a posição específica do texto da contagem
lcd.clear();//limpa a contagem anterior
moedas=0;//zera a contagem das moedas e reinicia a contagem.
}
else//se o estado do botão for contrário a LOW, ou seja, HIGH, o programa ira continuar o seu fluxo       normalmente
{
}
Objeto = digitalRead(Sensor);//analise o sinal enviado pelo pino de dados do sensor
if(Objeto==0)//caso o sinal do sensor seja nível lógico 0, o sensor terá detectado um objeto
{
Serial.println("Moeda Recebida");//mensagem no monitor Serial
// inicia o curso do LCD na coluna 0, linha 1
lcd.clear();//apaga os caracteres no LCD
lcd.setCursor(0, 1);//setando o cursor do LCD na coluna 0 linha 1
// print the number of seconds since reset:
lcd.print("Moeda Recebida");
moedas=moedas+1;//a cada passagem por esta linha, o contador é incrementado com o valor 1.
lcd.setCursor(0, 0);// inicia o curso do LCD na coluna 0, linha 0
// print the number of seconds since reset:
lcd.print("Moedas = ");//mensagem enviada para o LCD
lcd.print(moedas);//mostra o valor da variável "moedas" no LCD
int aux=Objeto;//variável utilizada para armazenar a leitura atual do sensor
while(aux==LOW){//loop responsável por impedir o sensor de conte mais de uma vez a moeda enquanto ela está sendo colocada no cofre.
moedas=moedas;//enquanto o loop durar, o valor da variável será o mesmo.
lcd.setCursor(0,0);
lcd.print("Moedas = ");
lcd.print(moedas);
aux=digitalRead(Sensor);
}
}
else //caso o valor seja nível lógico 1, o sensor não estará detectando a presença de nenhum objeto
{
lcd.setCursor(0, 0);// inicia o curso do LCD na coluna 0, linha 1
lcd.clear();
// print the number of seconds since reset:
lcd.print("Moedas = ");
lcd.print(moedas);
Serial.println("Objeto nao detectado");
// inicia o curso do LCD na coluna 0, linha 1
lcd.setCursor(0, 1);
// print the number of seconds since reset:
lcd.print("Esperando Moedas");
}
if(botao_zerar_contagem==0)
{
lcd.setCursor(0,0);//desloca o cursor para a posição específica do texto da contagem
lcd.clear();//limpa a contagem anterior
moedas=0;//zera a contagem das moedas e reinicia a contagem.
moedas=0;
}
}

对于这个项目,开发了一个合适的案例,它将接收 TCRT5000 反射式光学传感器、LCD 显示器和按钮,只留下 Arduino Uno 引脚连接,以便可以以教学方式使用,如图所示在图 6 中。

pYYBAGOD0B6ADRJXAABQxOBTLp0879.png
图 6 - 用于 TCRT5000 反射式传感器、LCD 显示屏和按钮的教学案例。
 

从威廉希尔官方网站 的组装和 Arduino Uno 的编程来看,可以将 LCD 显示器固定在教学箱的前面,也可以通过小支架将反射传感器安装在盖子的上部区域。硬币的入口。

按钮固定在 LCD 下方,因此,在放置硬币后,可以通过教学保险箱后面的小门将它们取出,如图 7 所示。

pYYBAGOD0CCABirMAABjLOnfWro028.png
图 7 - 机箱的小门。
 

与后部区域有一个用于从反射传感器引出电线的孔相同的方式,侧面区域也有一个用于从 LCD 显示器和按钮引出电线的孔。

教学保险箱的说明性图像有一些透明区域,以便更好地了解箱子的内部结构。

接下来,我们将展示用于现金保险箱的PCBGOGO 印刷威廉希尔官方网站 板。

PCBGOGO印刷威廉希尔官方网站 板

印刷威廉希尔官方网站 板开发是为了控制现金保险箱的设计。下图以 3D 形式显示了印刷威廉希尔官方网站 板。

poYBAGOD0COAUiSLAABY6nwKEBo704.png
图 9 - PCBGOGO 印刷威廉希尔官方网站 板。
 

PCBGOGO 印刷威廉希尔官方网站 板是通过以下电子原理图开发的。

pYYBAGOD0CeATm-fAALKxHCcfo0334.png
图 10 - 印刷威廉希尔官方网站 板的电子原理图。
 

您可以下载印刷威廉希尔官方网站 板文件并在 PCBGOGO 使用此链接中的 50 美元折扣券购买。

结论

因此,通过本项目的开发,除了通过开发的程序分析与Arduino Uno的通信外,还可以了解具有晶体管输出的TCRT5000反射式光学传感器的结构并了解其操作。

由于传感器通过 LED 发射红外光,然后反射光激活光电晶体管,因此分析对象(在本例中为 1 枚真币)必须位于距离物体 5 毫米至 10 毫米的位置。传感器,为了保证它的检测,并以这种方式,教学保险箱的主要组件适应了教学案例。

致谢

感谢PCBGOGO 印刷威廉希尔官方网站 板对本项目开发的支持。

我们还要感谢巴西的Robô Lúdico学校。


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

评论(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.obk20.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:'了解如何创建Arduino保险箱',//标题 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:"//www.obk20.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);