0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何将柔性传感器与树莓派连接并在LCD屏幕上显示其值

科技观察员 来源:circuitdigest 作者:阿斯文斯·拉吉 2022-12-31 09:33 次阅读

Raspberry Pi是一款基于ARM架构处理器的主板,专为电子工程师和业余爱好者设计。PI是目前最值得信赖的项目开发平台之一。凭借更高的处理器速度和 1 GB RAM,PI 可用于许多备受瞩目的项目,如图像处理和物联网。PI可以做很多很酷的事情,但一个可悲的功能是它没有内置的ADC模块。

在这个项目中,我们将学习如何将柔性传感器树莓派连接并在LCD屏幕上显示其值。

所需材料:

树莓派(任何型号)

ADC0804 集成电路

16*2液晶显示屏

柔性传感器

电阻器电容器

面包板或性能板。

ADC0804 单通道 8 位 ADC 模块:

在继续之前,让我们了解一下这款ADC0804 IC,以及如何将其与树莓派配合使用。ADC0804是一款单通道8位IC,这意味着它可以读取单个ADC值并将其映射到8位数字数据。这些 8 位数字数据可以被树莓派读取,因此值将是 0-255,因为 2^8 是 256。如下面IC的引脚排列所示,引脚DB0至DB7用于读取这些数字值。

poYBAGOs7n-ATRdCAABJc5HV-08457.gif

现在,另一个重要的事情是,ADC0804工作在5V,因此它提供5V逻辑信号输出。在8引脚输出(代表8位)中,每个引脚提供+5V输出以表示逻辑“1”。所以问题是PI逻辑是+3.3V,所以你不能给PI的+3.3VGPIO引脚提供+5V逻辑。如果为PI的任何GPIO引脚提供+5V,电路板就会损坏。

因此,为了从+5V降压逻辑电平,我们将使用分压器电路。我们之前已经讨论了分压器电路,以进一步澄清。我们要做的是,我们使用两个电阻将+5V逻辑分频为2*2.5V逻辑。因此,除法后,我们将为树莓派提供+2.5v逻辑。因此,每当ADC0804提供逻辑“1”时,PI GPIO引脚上都会看到+2.5V,而不是+5V。在此处了解有关ADC的更多信息:ADC0804简介。

以下是我们在Perf板上构建的采用ADC0804的ADC模块的图片:

pYYBAGOs7oGADuDWAACRJl3jwEU281.jpg

电路图及说明:

柔性传感器与树莓派接口的完整电路图如下所示。解释如下。

poYBAGOs7oOAckluAACwAYLFjKs909.png

这个树莓派柔性传感器电路可能看起来有点复杂,有很多电线,但如果你仔细观察,大多数电线都直接从LCD和8位数据引脚连接到树莓派。下表将帮助您建立和验证连接。

引脚名称 覆盆子别针编号 树莓派 GPIO 名称
液晶屏与液晶屏 引脚 4
液晶显示器 Vdd 引脚 6 伏直流 (+5V)
液晶 V 形 引脚 4
液晶显示器 Rs 引脚 38 GPIO 20
液晶显示器 RW 引脚 39
液晶显示器 E 引脚 40 GPIO 21
液晶屏 D4 引脚 3 GPIO 2
液晶屏 D5 引脚 5 GPIO 3
液晶屏 D6 引脚 7 GPIO 4
液晶屏 D7 引脚 11 GPIO 17
ADC0804 虚拟交流系统 引脚 2 伏直流 (+5V)
ADC0804 B0 引脚 19(至 5.1K) GPIO 10
ADC0804 B1 引脚 21(至 5.1K) GPIO 9
ADC0804 B2 引脚 23(至 5.1K) GPIO 11
ADC0804 B3 引脚 29(至 5.1K) GPIO 5
ADC0804 B4 引脚 31(至 5.1K) GPIO 6
ADC0804 B5 引脚 33(至 5.1K) GPIO 13
ADC0804 B6 引脚 35(至 5.1K) GPIO 19
ADC0804 B7 引脚 37(至 5.1K) GPIO 26
ADC0804 WR/INTR 引脚 15 GPIO 22

您可以使用下图来确定树莓上的引脚编号。

pYYBAGOs7oaABZ7xAAA8Mxok4OY526.png

与所有ADC模块一样,ADC0804 IC也需要时钟信号才能工作,幸运的是该IC具有内部时钟源,因此我们只需将RC电路添加到CLK输入和CLK R引脚,如图所示。我们使用了 10K 和 105pf 的值,但我们可以使用任何接近的值,例如 1uf、0.1uf、0.01uf 也应该有效。

然后,为了连接Flex传感器,我们使用了一个使用100K电阻的分压器电路。当 Flex 传感器弯曲时,其两端的电阻会发生变化,电阻两端的电位降也会发生变化。该压降由ADC0804 IC测量,并相应地生成8位数据。

poYBAGOs7omAXHUGAADfq3ODGmU491.jpg

对树莓派进行编程

完成连接后,我们应该使用 Raspberry Pi 读取这些 8 位的状态并将它们转换为十进制,以便我们可以使用它们。本页末尾给出了用于执行相同操作并在LCD屏幕上显示结果值的程序。此外,代码在下面解释为小垃圾。

我们需要一个 LCD库来将 LCD 与 Pi 连接。为此,我们使用 shubham 开发的库,它将帮助我们在四线模式下将 16*2 LCD 显示器与 Pi 连接。此外,我们还需要库来利用时间和 Pi GPIO 引脚。

注意:lcd.py 应从此处下载,并放置在保存此程序的同一目录中。只有这样,代码才会编译。

import lcd #Import the LCD library by shubham@electro-passion.com
import time #Import time
import RPi.GPIO as GPIO #GPIO will be reffered as GPIO only

LCD引脚定义分配给变量,如下所示。请注意,这些数字是 GPIO 引脚编号,而不是实际引脚编号。可以使用上表将 GPIO 编号与引脚编号进行比较。数组二进制文件将包括所有数据引脚编号,数组位将存储所有 GPIO 引脚的结果值。

#LCD pin definitions
D4=2
D5=3
D6=4
D7=17
RS=20
EN=21

binarys = (10,9,11,5,6,13,19,26) #Array of pin numbers connect to DB0-DB7

bits = [0,0,0,0,0,0,0,0] #resulting values of 8-bit data
现在,我们必须定义输入和输出引脚。七个数据引脚将是输入引脚,触发引脚(RST 和 INTR)将是输出引脚。只有当我们根据数据表触发输出引脚在特定时间内为高电平时,我们才能从输入引脚读取 8 位数据值。由于我们已经在二进制数组中声明了二进制引脚,因此可以使用 for 循环进行声明,如下所示。

for binary in binarys:
GPIO.setup(binary, GPIO.IN) #All binary pins are input pins

#Trigger pin
GPIO.setup(22, GPIO.OUT) #WR and INTR pins are output
现在使用 LCD 库命令,我们可以初始化 LCD 模块并显示一条小的介绍消息,如下所示。

mylcd=lcd.lcd()
mylcd.begin(D4,D5,D6,D7,RS,EN)

#Intro Message
mylcd.Print("Flex Sensor with")
mylcd.setCursor(2,1)
mylcd.Print("Raspberry Pi")
time.sleep(2)
mylcd.clear()
在无限 while 循环中,我们开始读取二进制值将它们转换为十进制并在 LCD 上更新结果。如前所述,在读取ADC值之前,我们应该使触发引脚在特定时间内保持高电平,以激活ADC转换。这是使用以下行完成的。

GPIO.output(22, 1) #Turn ON Trigger
time.sleep(0.1)
GPIO.output(22, 0) #Turn OFF Trigger
现在,我们应该读取 8 个数据引脚并更新 bit 数组中的结果。为此,我们使用 for 循环将每个输入引脚与 True 和 False 进行比较。如果为 true,则相应的位数组将设为 1,否则将设为 0。这是所有8位数据将被分别读取的0和1值。

#Read the input pins and update result in bit array
for i in range(8):
if(GPIO.input(binarys[i]) == True):
bits[i] = 1
if(GPIO.input(binarys[i]) == False):
bits[i] = 0
更新 bits 数组后,我们应该将此数组转换为十进制值。这只不过是二进制到十进制的转换。对于 8 位二进制数据,2^8 为 256。因此,我们将获得从 0 到 255 的十进制数据。在python中,运算符“**”用于查找任何值的幂。由于位[0]以MSB开头,我们将其乘以2^(7位)。这样,我们可以将所有二进制值转换为十进制数据,然后将其显示在LCD上

#calculate the decimal value using bit array
for i in range(8):
decimal = decimal + (bits[i] * (2**(7-i)))
一旦我们知道十进制值,就很容易计算电压值。我们只需要将其乘以 19.63。因为对于 8 位 5VADC,每个位都是 19.3 毫伏的类比。得到的电压值是ADC0804 IC引脚Vin+和Vin-两端出现的电压值。

#calculate voltage value
Voltage = decimal * 19.63 *0.001 #one unit is 19.3mV

使用电压值,我们可以确定柔性传感器是如何弯曲的,以及它是如何弯曲的。在下面的几行中,我刚刚将读取的电压值与预定的电压值进行了比较,以指示Flex传感器在LCD屏幕上的位置。

#compare voltage and display status of sensor
mylcd.setCursor(1,1)
if (Voltage>3.8):
mylcd.Print("Bent Forward")
elif (Voltage<3.5):
mylcd.Print("Bent Backward")
else:
mylcd.Print("Stable")

同样,您可以使用电压值来执行您希望树莓派执行的任何任务。

使用树莓派在液晶屏上显示柔性传感器值:

该项目的工作非常简单。但请确保您已下载 lcd.py头文件并将其放置在当前程序所在的同一目录中。然后使用面包板或性能板在电路图中显示连接,并在Pi上运行以下程序,您应该开始工作。您的设置应如下所示。

pYYBAGOs7ouAW36iAADHYAvDKiA833.jpg

如图所示,LCD将显示十进制值,电压值和传感器位置。只需向前或向后弯曲传感器,您应该能够看到电压和十进制值发生变化,还会显示状态文本。您可以连接任何传感器,并注意到其两端的电压发生变化。

import lcd #Import the LCD library by electro-passionindia

import time #Import time

import RPi.GPIO as GPIO #GPIO will be referred as GPIO only



GPIO.setmode(GPIO.BCM)

GPIO.setwarnings(False)



#LCD pin definitions

D4=2

D5=3

D6=4

D7=17

RS=20

EN=21



binarys = (10,9,11,5,6,13,19,26) #Array of pin numbers connect to DB0-DB7





bits = [0,0,0,0,0,0,0,0] #resulting values of 8-bit data





for binary in binarys:

GPIO.setup(binary, GPIO.IN) #All binary pins are input pins



#Trigger pin

GPIO.setup(22, GPIO.OUT) #WR and INTR pins are output





mylcd=lcd.lcd()

mylcd.begin(D4,D5,D6,D7,RS,EN)



#Intro Message

mylcd.Print("Flex Sensor with")

mylcd.setCursor(2,1)

mylcd.Print("Raspberry Pi")

time.sleep(2)

mylcd.clear()



while 1:



decimal = Voltage = 0 #intitialize to zero



GPIO.output(22, 1) #Turn ON Trigger

time.sleep(0.1)

GPIO.output(22, 0) #Turn OFF Trigger

mylcd.clear()



#Read the input pins and update result in bit array

for i in range(8):

if(GPIO.input(binarys[i]) == True):

bits[i] = 1

if(GPIO.input(binarys[i]) == False):

bits[i] = 0



#print binary values if required for debugging

## mylcd.Print("Binary= ")

## mylcd.setCursor(1,8)

## for i in range(8):

## mylcd.Print(bits[i])



#calculate the decimal value using bit array

for i in range(8):

decimal = decimal + (bits[i] * (2**(7-i)))



#Display decimal value

mylcd.setCursor(2,1)

mylcd.Print("D=")

mylcd.setCursor(2,3)

mylcd.Print(decimal)



#calculate voltage value

Voltage = decimal * 19.63 *0.001 #one unit is 19.3mV



#compare voltage and display status of sensor

mylcd.setCursor(1,1)

if (Voltage>3.8):

mylcd.Print("Bent Forward")

elif (Voltage<3.5):

mylcd.Print("Bent Backward")

else:

mylcd.Print("Stable")



Voltage = str(round(Voltage,2)) #limit to two digit after decimal



#display voltage

mylcd.setCursor(2,8)

mylcd.Print("V=")

mylcd.setCursor(2,10)

mylcd.Print(Voltage)


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

    关注

    2526

    文章

    48104

    浏览量

    740099
  • lcd
    lcd
    +关注

    关注

    34

    文章

    4278

    浏览量

    164117
  • 树莓派
    +关注

    关注

    113

    文章

    1639

    浏览量

    104746
收藏 人收藏

    评论

    相关推荐

    如何将DHT11与树莓连接在16x2 LCD屏幕显示温度和湿度的值

    在本教程中,我们将学习如何将流行的DHT11传感器与Raspberry Pi连接并在16x2 LCD
    的头像 发表于 11-14 16:53 3297次阅读
    <b class='flag-5'>如何将</b>DHT11与<b class='flag-5'>树莓</b>派<b class='flag-5'>连接</b>在16x2 <b class='flag-5'>LCD</b><b class='flag-5'>屏幕</b>上<b class='flag-5'>显示</b>温度和湿度的值

    树莓之鬼影实录(≖ ‿ ≖)✧

    到投影仪、热释电红外运动传感器树莓和一块薄喷了反光漆的有机玻璃做屏幕。视频投影仪:用HDMI接口和转换电缆投影仪接到
    发表于 01-08 14:03

    树莓派系列教程3:访问树莓

    本帖最后由 kaloha 于 2017-5-15 16:02 编辑 一、外接HDMI显示器,鼠标键盘 如果把树莓当作一个小电脑,那么可以外接鼠标键盘操作树莓
    发表于 03-28 11:09

    树莓3通过串口连接温度传感器求助!!!

    实验:温度传感器VCCGND RXD TXD连接树莓派上面的VCCGND TXD RXD, 通过Python编写的程序无法读取温度,读取的数值都是空,请大侠帮帮忙????impor
    发表于 10-03 22:07

    树莓使用3.5寸屏幕教程

    连接到电脑,打开Win32DiskImager.exe软件,选择第1步准备的.img文件,点击write烧写镜像。3) 烧写完成后,树莓LCD
    发表于 02-12 23:12

    如何将传感器传输回来的数据显示在液晶显示

    如何将传感器传输回来的数据(十六进制数组)显示在液晶显示
    发表于 03-22 12:00

    树莓不能正常显示

    我使用树莓连接HDMI转VGA接口线,连接到DELL显示器连接键盘,启动后
    发表于 05-24 05:55

    如何连接温湿度传感器并写程序显示LCD

    本人菜鸟一枚,刚入手了RPi B+ & Arduberry & Grove Base Shield各一枚,连起来并已启动系统,请问如何连接温湿度传感器并写程序
    发表于 08-22 05:55

    如何将脉冲传感器连接到PSoCoad?

    我有一个脉冲传感器(PPG),我试图把它连接到一个模拟引脚,以便我可以存储脉冲,但我有这个问题。所以,我的问题是如何将脉冲传感器
    发表于 09-26 10:01

    如何将树莓网关与外网连接——手把手教你如何将树莓网关连接到服务之第三篇

    本文为系列文章——手把手教你如何将树莓网关连接到服务之第三篇,涉及最后一个步骤,即步骤三:如何将
    发表于 05-20 07:00

    如何将树莓网关连接到TTN——手把手教你如何将树莓网关连接到服务之第四篇

    接下来,我们用实际应用实践的例子,来告诉大家如何将树莓网关连接到TTN服务
    发表于 05-20 08:00

    树莓DIY:无线感应报警

    LCD1602,蜂鸣器,单路径循迹传感器模块。其主要作用如下:  树莓:主控芯片,根据外部输入控制输出。主要利用树莓
    发表于 05-23 08:00

    如何将温度传感器中的数值在LCD显示出来?

    如何将温度传感器中的数值在LCD显示出来?
    发表于 10-20 07:46

    树莓传感器教程

    树莓传感器教程
    发表于 10-07 07:13

    连接到STM32的LCD屏幕显示BLE传感器读数

    电子发烧友网站提供《在连接到STM32的LCD屏幕显示BLE传感器读数.zip》资料免费下载
    发表于 06-14 11:29 15次下载
    在<b class='flag-5'>连接</b>到STM32的<b class='flag-5'>LCD</b><b class='flag-5'>屏幕</b>上<b class='flag-5'>显示</b>BLE<b class='flag-5'>传感器</b>读数