内容介绍
内容介绍
2024年寒假练 基于搭配带屏12指神探传感器扩展版制作的颜色识别系统
一.项目介绍
本项目依托2024寒假在家一起练,基于RP2040平台,实现了基于搭配带屏12指神探传感器扩展版制作的颜色识别系统。本项目基于RP2040主控,通过LTR-381RGB-WA传感器识别颜色,并在LCD屏幕上实时显示颜色的RGB信息并恢复色块,取得了良好的效果,具有一定的价值。
项目任务:
- 可识别至少五种颜色
- 可在LCD上显示基本信息如当前识别颜色
- 可在LCD上用色块显示识别的颜色并大致接近
二.设计思路
- 通过LTR-381RGB-WA传感器识别颜色
- 在LCD屏幕上实时显示RGB信息及色块
三.硬件介绍
1.带屏12指神探
这个模块是通过Type C的USB接口提供供电、下载以及通信的功能,板上有5V转3.3V,最高支持800mA的电压变换器,在12根引脚上也将5V和3.3V引出,方便对其它外设板供电。
主控芯片:采用树莓派Pico核心芯片RP2040
- 双Arm Cortex M0+内核,可以运行到133MHz
- 264KBSRAM,板卡上外扩2MBFlash
- 性能强大、高度灵活的可编程IO(PIO)可用于高速数字接口
- 拥有2个UART、2个SPI、2个I2C、16个PWM通道以及4路12位精度ADC
- 支持MicroPython、C、C++编程
- 拖拽UF2固件至U盘的方式烧录固件,方便快捷
板上功能
- TYPE-C接口用于供电和数据传输
- 一个boot按键用于进入boot模式
- 两个可程控按键和一个拨轮用于自定义功能
- 搭载240*240分辨率的LCD彩屏,通过SPI接口进行通信,控制器为常用的ST7789芯片,例程丰富便于开发
- 扩展接口包含5v、3.3v输出、GND。9个GPIO,可同时使能最多三个通道ADC
2.传感器扩展版
扩展板搭载了几款常见传感器和功能模块,包括为初学者准备的麦克风、蜂鸣器、、红外收发、霍尔效应开关、加热电阻,为进阶操作准备的温湿度传感器、六轴传感器、接近/环境光/IR传感器、颜色传感器。其中温湿度传感器、六轴传感器、接近传感器、颜色传感器可拆卸为单个模块,通过杜邦线等连接线延伸其使用的空间范围。
颜色传感器通过IIC协议进行编程。
四.功能介绍
- 开机直接识别颜色并输出信息
- 具体使用详见视频
五.主要代码
1.LTR-381RGB-WA通过I2C协议工作,初始化传感器
# 配置LTR-381RGB-WA传感器
def init():
i2c.writeto_mem(LTR381_ADDR, 0x00, b'\x06')
i2c.writeto_mem(LTR381_ADDR, 0x04, b'\x41')
i2c.writeto_mem(LTR381_ADDR, 0x05, b'\x00')
2.读取传感器识别到的颜色信息,并返回RGB
def read():
Data0=i2c.readfrom_mem(LTR381_ADDR, 0x0A, 2)#lower byte data.
Data1=i2c.readfrom_mem(LTR381_ADDR, 0x0B, 2)#1 middle byte data.
Data2=i2c.readfrom_mem(LTR381_ADDR, 0x0C, 4)#2 upper byte data
D0=int.from_bytes(Data0, 'little')
D1=int.from_bytes(Data1, 'little')
D2=int.from_bytes(Data2, 'little')
CS_IR_Data =(D2<<16)| (D1 << 8) | D0
#红外
Data0=i2c.readfrom_mem(LTR381_ADDR, 0x0D, 1)#lower byte data.
Data1=i2c.readfrom_mem(LTR381_ADDR, 0x0E, 1)
Data2=i2c.readfrom_mem(LTR381_ADDR, 0x0F, 1)
D0=Data0[0]
D1=Data0[0]
D2=Data0[0]
CS_GREEN_ADC_Data =(D2<<16)| (D1 << 8) | D0
sr = str(hex(CS_GREEN_ADC_Data))
G=sr[2:4]
G=int(G,16)
#GREEN
Data0=i2c.readfrom_mem(LTR381_ADDR, 0x10, 1)#lower byte data.
Data1=i2c.readfrom_mem(LTR381_ADDR, 0x11, 1)
Data2=i2c.readfrom_mem(LTR381_ADDR, 0x12, 1)
D0=Data0[0]
D1=Data0[0]
D2=Data0[0]
CS_BLUE_ADC_Data =(D2<<16)| (D1 << 8) | D0
sr = str(hex(CS_BLUE_ADC_Data))
B=sr[2:4]
B=int(B,16)
#BLUE
Data0=i2c.readfrom_mem(LTR381_ADDR, 0x13, 1)#lower byte data.
Data1=i2c.readfrom_mem(LTR381_ADDR, 0x14, 1)
Data2=i2c.readfrom_mem(LTR381_ADDR, 0x15, 1)
D0=Data0[0]
D1=Data0[0]
D2=Data0[0]
CS_RED_ADC_Data =(D2<<16)| (D1 << 8) | D0
sr = str(hex(CS_RED_ADC_Data))
R=sr[2:4]
R=int(R,16)
return R,G,B
3.将RGB值转换为RGB565格式,便于在屏幕上显示色块
def rgb_to_rgb565_int(r, g, b):
# 将RGB值转换为RGB565格式
r5 = (r >> 3) & 0x1F
g6 = (g >> 2) & 0x3F
b5 = (b >> 3) & 0x1F
# 合并RGB565格式的值
rgb565 = (r5 << 11) | (g6 << 5) | b5
return rgb565
4.全部代码
import uos
import st7789_new as st7789
from test.fonts import vga2_8x8 as font1
from test.fonts import vga1_16x32 as font2
import random
import framebuf
from machine import Pin, SPI, ADC,PWM,I2C
import time, math,array
from utime import sleep_ms
import struct
from time import sleep
import utime
from micropython import const
spi_sck=Pin(2)
spi_tx=Pin(3)
spi0=SPI(0,baudrate=4000000, phase=1, polarity=1, sck=spi_sck, mosi=spi_tx)
st7789_res = 0
st7789_dc = 1
disp_width = 240
disp_height = 240
CENTER_Y = int(disp_width/2)
CENTER_X = int(disp_height/2)
display = st7789.ST7789(spi0, disp_width, disp_width,
reset=machine.Pin(st7789_res, machine.Pin.OUT),
dc=machine.Pin(st7789_dc, machine.Pin.OUT),
xstart=0, ystart=0, rotation=0)
display.fill(st7789.BLACK)
# xAxis = ADC(Pin(28))
# yAxis = ADC(Pin(29))
buttonM = Pin(5,Pin.IN, Pin.PULL_UP) #B
buttonS = Pin(6,Pin.IN, Pin.PULL_UP) #A
buttonL = Pin(7,Pin.IN, Pin.PULL_UP) #A
buttonPRESS = Pin(8,Pin.IN, Pin.PULL_UP) #A
buttonR = Pin(9,Pin.IN, Pin.PULL_UP) #A
LTR381_ADDR = 0x53
# 初始化I2C总线
i2c = I2C(0, sda=Pin(20),scl=Pin(21), freq=100000)
#print(i2c.scan())
def init():
i2c.writeto_mem(LTR381_ADDR, 0x00, b'\x06')
i2c.writeto_mem(LTR381_ADDR, 0x04, b'\x41')
i2c.writeto_mem(LTR381_ADDR, 0x05, b'\x00')
def read():
Data0=i2c.readfrom_mem(LTR381_ADDR, 0x0A, 2)#lower byte data.
Data1=i2c.readfrom_mem(LTR381_ADDR, 0x0B, 2)#1 middle byte data.
Data2=i2c.readfrom_mem(LTR381_ADDR, 0x0C, 4)#2 upper byte data
D0=int.from_bytes(Data0, 'little')
D1=int.from_bytes(Data1, 'little')
D2=int.from_bytes(Data2, 'little')
CS_IR_Data =(D2<<16)| (D1 << 8) | D0
#红外
Data0=i2c.readfrom_mem(LTR381_ADDR, 0x0D, 1)#lower byte data.
Data1=i2c.readfrom_mem(LTR381_ADDR, 0x0E, 1)
Data2=i2c.readfrom_mem(LTR381_ADDR, 0x0F, 1)
D0=Data0[0]
D1=Data0[0]
D2=Data0[0]
CS_GREEN_ADC_Data =(D2<<16)| (D1 << 8) | D0
sr = str(hex(CS_GREEN_ADC_Data))
G=sr[2:4]
G=int(G,16)
#GREEN
Data0=i2c.readfrom_mem(LTR381_ADDR, 0x10, 1)#lower byte data.
Data1=i2c.readfrom_mem(LTR381_ADDR, 0x11, 1)
Data2=i2c.readfrom_mem(LTR381_ADDR, 0x12, 1)
D0=Data0[0]
D1=Data0[0]
D2=Data0[0]
CS_BLUE_ADC_Data =(D2<<16)| (D1 << 8) | D0
sr = str(hex(CS_BLUE_ADC_Data))
B=sr[2:4]
B=int(B,16)
#BLUE
Data0=i2c.readfrom_mem(LTR381_ADDR, 0x13, 1)#lower byte data.
Data1=i2c.readfrom_mem(LTR381_ADDR, 0x14, 1)
Data2=i2c.readfrom_mem(LTR381_ADDR, 0x15, 1)
D0=Data0[0]
D1=Data0[0]
D2=Data0[0]
CS_RED_ADC_Data =(D2<<16)| (D1 << 8) | D0
sr = str(hex(CS_RED_ADC_Data))
R=sr[2:4]
R=int(R,16)
return R,G,B
def rgb_to_rgb565_int(r, g, b):
# 将RGB值转换为RGB565格式
r5 = (r >> 3) & 0x1F
g6 = (g >> 2) & 0x3F
b5 = (b >> 3) & 0x1F
# 合并RGB565格式的值
rgb565 = (r5 << 11) | (g6 << 5) | b5
return rgb565
def main():
init()
while True:
R,G,B=read()
print("R=",R,"G=",G,"B=",B)
rgb565_color = rgb_to_rgb565_int(R,G,B)
time.sleep(2)
display.fill(rgb565_color)
display.text(font2, "R="+str(R), 0, 40,st7789.WHITE,rgb565_color)
display.text(font2, "G="+str(G), 0, 70,st7789.WHITE,rgb565_color)
display.text(font2, "B="+str(B), 0, 100,st7789.WHITE,rgb565_color)
main()
六.活动总结与未来计划
通过对本项目的学习,对I2C又有了进一步的了解,本次项目锻炼了我的编程能力,对嵌入式开发有了新的体会,受益匪浅。未来期望再次参加活动,开拓电子芯片在生活中运用的视野,改变思维模式。
软硬件
团队介绍
BUPT电子人
团队成员
T-&10
BUPT业余人士
评论
0 / 100
查看更多
猜你喜欢
基于搭配12指神探的传感器扩展版制作的恒温控制系统该项目使用了树莓派Pico核心芯片RP2040、MicroPython语言、传感器扩展版,实现了PID算法控制的恒温控制系统的设计,它的主要功能为:基于RP2040主控,通过加热电阻控制环境温度,温湿度传感器感应环境温度,用按键控制目标温度,并在LCD屏幕上显示目标温度及实时温度。
jxwm
149
2024年寒假练-用搭配带屏12指神探的传感器扩展板实现颜色识别该项目使用了搭配带屏12指神探的传感器扩展板,实现了驱动颜色传感器-LTR-381RGB识别颜色的设计,它的主要功能为:通过I2C驱动颜色传感器-LTR-381RGB,进行颜色识别。。
aramy
209
2024年寒假练 - 用搭配带屏12指神探的传感器扩展板 RGB颜色识别与校验该项目使用了12指神探带传感器扩展板,实现了RGB颜色识别与校验的设计,它的主要功能为:识别颜色,校验后将颜色显示到屏幕上。
henry
89