如何使用树莓派RP2040实现“鼠标”功能?2022年寒假在家练RP2040游戏机项目分享(一)

电子森林 2022-03-15 21:56

大家好久不见,2022年开始了,大家有没有设定今年要完成的小目标呢?


2022年寒假在家一起练于2022年2月27日截止了,看到同学们提交的项目后,老师们倍感欣慰。同学们的项目都非常优秀,你们抓住了寒假的时光,为2021年的自己画了一个句号,给2022年的自己一个特别的开始。


同学们提交的项目还在陆续审核中,预计本周结束,下周开始邮件告知审核结果。大家耐心等待哦。


今天我们来欣赏一位来自华北电力大学的【xiaoyu555】同学所做的“鼠标”。





 1

项目介绍

利用rp2040的四向摇杆和按键设计一款“鼠标”,该鼠标可以对240*240的LCD屏进行菜单选择和参数控制,同时,可以利用板子上的摇杆和按钮实现控制PC屏上的光标移动和点击操作,行使电脑鼠标的功能。


 2

实现的功能

制了一个“鼠标”图案,并且不断移动这个鼠标,当B键按下时,如果鼠标图案在相应的位置,那么会加载出新的界面,如果按下A键,就可以返回最初始的页面。

当按下START按键时,会进入控制PC屏幕光标的操作,通过移动rp2040上的四向摇杆,PC屏幕光标会进行相应的移动,若按下B键,即相当于鼠标左键的功能,按下A键时即相当于鼠标右键的功能,从而实现了用rp2040来充当电脑鼠标的目的


3

设计思路

第一步绘制鼠标图案,通过st7789c的polygon函数绘画多边形从而绘制出鼠标的形状。

第二步实现鼠标的移动,通过刷新鼠标的位置,在新的位置绘制另一个鼠标图案,并且在这之前先消除掉原来位置鼠标的图案,使其融为背景色,从而最终实现鼠标移动的效果。

第三步实现利用“鼠标”来进行菜单选择和参数控制。通过判断鼠标图案的所属位置,并且当按钮按下时实现对菜单的选择,这时要实现只需要定义一个变量,当相应位置按下按键B时来改变变量,并且当变量变化时执行LCD界面的变换。同理,为了当A按键时按下回到起始页面,也只要当A按键按下时使变量变为初始值即可。

第四步实现通过USB端口来控制PC屏幕上的光标移动和点击操作。这里需要利用到python的usb_hid库,通过该库进行人机的交互,利用里面的函数对屏幕光标进行XY轴位置的变化,和光标左右键点击的判断。当四向摇杆被操控时,利用函数来对光标操作,同理,AB键按下时也执行对应的操作,B键为鼠标左键操作,A键为鼠标右键操作。

上述对LCD屏的鼠标图案和PC屏幕光标的操作完成后,实现按钮对两个模式进行转换,当START按下时用变量进行对操作模式的转换。


 4

实现的过程

1. 程序流程图:

2. 定义引脚:
orange=0xfd20xAxis = ADC(Pin(29))     #x轴yAxis = ADC(Pin(28))     #Y轴Bbutton = Pin(5,Pin.IN, Pin.PULL_UP) #B按键Abutton = Pin(6,Pin.IN, Pin.PULL_UP) #A按键buttonStart = Pin(7,Pin.IN, Pin.PULL_UP)#START按键

3. 利用st7789c驱动LCD屏幕,并且实例化一个对象方便后期调用:
背景色是白色
#调用ST7789C来驱动LCD屏幕spi0=machine.SPI(0,baudrate=4000000, phase=1, polarity=1,sck=machine.Pin(game_kit.lcd_sck, machine.Pin.OUT),                  mosi=machine.Pin(game_kit.lcd_sda, machine.Pin.OUT))print(spi0)display = st7789c.ST7789(spi0, 240, 240,                        reset=machine.Pin(game_kit.lcd_rst, machine.Pin.OUT),                        dc=machine.Pin(game_kit.lcd_dc, machine.Pin.OUT),                        rotation=0)#实例化了一个ST7789display.init()  #st7789初始化display.fill(st7789c.WHITE)

4. 定义一个rpMouse类来实现对鼠标图案的初始化,鼠标位置的移动,鼠标位置的绘画,还有更新鼠标位置,使用时定义对象使用函数即可
4.1 总代码:
#设置边界width =240height=240#rp2040鼠标定义class rpMouse():        '''        Poly class to keep track of a polygon based sprite        '''        #初始化        def __init__(                self,                # list (x,y) tuples of convex polygon, must be closed                polygon,                x=None,             # 鼠标X坐标                y=None,             # 鼠标Y坐标                v_x=None,           # X轴的移动速度                v_y=None,           # Y轴的移动速度                angle=None,         # 鼠标图案的移动速度                max_velocity=25,    # 鼠标图案移动的最大速度                min_velocity=10     # 鼠标图案移动的最小速度                ):         #这边是传入的参数,对其进行一个初始化赋值
self.polygon = polygon #赋值元组
# 如果没有初始化起始位置便随便给个位置 self.x = random.randint(0, width) if x is None else x self.y = random.randint(0, width) if y is None else y
# 如果角度有给就设置 self.angle = float(0) if angle is None else angle
# 除非有给速度参数否则随便给一个 self.velocity_x = random.uniform( 0.50, 0.99)*6-3 + 0.75 if v_x is None else v_x self.velocity_y = random.uniform( 0.50, 0.99)*6-3 + 0.75 if v_y is None else v_y
self.max_velocity = max_velocity #设置最大值 self.min_velocity = min_velocity #设置最小值 #移动 def moveX(self,moveflag): self.draw(st7789c.WHITE) #使旧的鼠标图案融于背景色,达到消失的效果 if(moveflag==1) :#向左 self.x -= int(self.velocity_x*0.2) #每次以速度移动 if(self.x<0): #如果到最底端,就更新位置到最上端 self.x=240 elif(moveflag==2) : #向右 self.x += int(self.velocity_x*0.2) #每次以速度移动 self.x %= width #不会超过边界 self.draw(orange) #使之移动 def moveY(self,moveflag): self.draw(st7789c.WHITE) if moveflag==1:#向上 self.y -= int(self.velocity_y*0.2) #每次以速度移动,乘上倍数,看起来流畅 if(self.y<=0): self.y=240 if moveflag==2: self.y += int(self.velocity_y*0.2) #每次以速度移动,乘上倍数,看起来流畅 self.y %= height self.draw(orange) #使之移动 #画鼠标 def draw(self, color): display.polygon(self.polygon, self.x, self.y, color, self.angle, 0, 0) #更新鼠标的移动速度 def update(self,vflag): #1为加速,2为减速 if vflag==2 : self.velocity_x -= 1 self.velocity_y -= 1 elif vflag==1: self.velocity_x += 1 self.velocity_y += 1
if self.velocity_x > self.max_velocity: #使速度不超过最大值 self.velocity_x = self.max_velocity elif self.velocity_x < self.min_velocity: self.velocity_x = self.min_velocity #定义一个rp2040鼠标mouse_poly=[(-7,-7),(7,0),(-7,7),(-3,0),(-7,-7)] #鼠标图像元组mouse =rpMouse(mouse_poly,x=120,y=120,v_x=15,v_y=15,angle=180.0) #类对象mouse.draw(orange)

4.2 初始化: 
#初始化        def __init__(                self,                # list (x,y) tuples of convex polygon, must be closed                polygon,                x=None,             # 鼠标X坐标                y=None,             # 鼠标Y坐标                v_x=None,           # X轴的移动速度                v_y=None,           # Y轴的移动速度                angle=None,         # 鼠标图案的移动速度                max_velocity=25,    # 鼠标图案移动的最大速度                min_velocity=10     # 鼠标图案移动的最小速度                ):         #这边是传入的参数,对其进行一个初始化赋值
self.polygon = polygon #赋值元组
# 如果没有初始化起始位置便随便给个位置 self.x = random.randint(0, width) if x is None else x self.y = random.randint(0, width) if y is None else y
# 如果角度有给就设置 self.angle = float(0) if angle is None else angle
# 除非有给速度参数否则随便给一个 self.velocity_x = random.uniform( 0.50, 0.99)*6-3 + 0.75 if v_x is None else v_x self.velocity_y = random.uniform( 0.50, 0.99)*6-3 + 0.75 if v_y is None else v_y
self.max_velocity = max_velocity #设置最大值 self.min_velocity = min_velocity #设置最小值
解释:
  • polygon是绘制鼠标位置的元组,里面的元素是鼠标图案各个顶点与中心坐标(x,y)的相对位置,而且元素的顺序要按照绘画各个点的顺序来,最后一个元素要回到第一个点。
  • 定义完后,当想绘制鼠标时,要先进行初始化,将鼠标的基础信息传入,后面才得以绘制。

4.3 绘制鼠标的函数:
#画鼠标        def draw(self, color):                display.polygon(self.polygon, self.x, self.y, color, self.angle, 0, 0)
解释:
  • 每次绘制时只需要传入想要的鼠标的颜色,然后进行绘制就行。


4.4 移动鼠标的函数:
#移动        def moveX(self,moveflag):                self.draw(st7789c.WHITE)  #使旧的鼠标图案融于背景色,达到消失的效果                if(moveflag==1) :#向左                    self.x -= int(self.velocity_x*0.2)  #每次以速度移动                    if(self.x<0):     #如果到最底端,就更新位置到最上端                        self.x=240                elif(moveflag==2) :  #向右                      self.x += int(self.velocity_x*0.2)  #每次以速度移动                    self.x %= width                 #不会超过边界                self.draw(orange)  #使之移动        def moveY(self,moveflag):                self.draw(st7789c.WHITE)                if moveflag==1:#向上                    self.y -= int(self.velocity_y*0.2)  #每次以速度移动,乘上倍数,看起来流畅                    if(self.y<=0):                        self.y=240                if moveflag==2:                    self.y += int(self.velocity_y*0.2)  #每次以速度移动,乘上倍数,看起来流畅                    self.y %= height                self.draw(orange)  #使之移动
解释:以在x轴移动为例,y轴是同样的道理
  • 首先先使原来的鼠标融于背景色中达到消失的效果,然后判断是要正半轴还是负半轴移动,最后更新rpMouse对象的X,Y的位置,然后在新位置绘画另一个鼠标。

5.定时器扫描按键:
#定时器检索按键,并且给显示对应画面def timercb(n):    global rporcomflag  #判断是操控rp2040的鼠标还是PC屏幕的光标,0为RP2040的,1是PC屏幕光标    global faceflag     #判断是进入初始页面还是其他页面的变量    if(Bbutton.value()==0 and rporcomflag==1): #相当于电脑鼠标左键按下        hid_mouse.press(hid_mouse.BUTTON_LEFT)    if(Bbutton.value()==1 and rporcomflag==1): #相当于电脑鼠标左键松开        hid_mouse.release(hid_mouse.BUTTON_LEFT)    if(Abutton.value()==0 and rporcomflag==1): #相当于电脑右键按下一次        hid_mouse.click(hid_mouse.BUTTON_RIGHT)    if(Bbutton.value()==0 and rporcomflag==0): #如果是rp2040按下B键,为确定键        if(mouse.y>70 and mouse.y<98 and mouse.x>=84 and mouse.x<=163): #移动到冰墩墩的位置            faceflag=1  #冰墩墩        elif(mouse.y>98 and mouse.y<128 and mouse.x>=84 and mouse.x<=163):            faceflag=2  #TEXT        elif(mouse.y>220 and mouse.y<240 and mouse.x>=110 and mouse.x<=240):            mouse.update(1)   #更新鼠标的速度            utime.sleep(0.05)        elif(mouse.y>220 and mouse.y<240 and mouse.x>=0 and mouse.x<=100):            mouse.update(2)   #更新鼠标的速度            utime.sleep(0.05)                tim=Timer(period=100, mode=Timer.PERIODIC, callback=lambda t:timercb(1))
解释:
  • 利用定时器不断地扫描按键,减少主循环中对摇杆判断的影响。

  • 利用rporcomflag来判断是操控哪个,从而判断B,A键按下时的效果。

  • 当操控RP2040鼠标图案时,判断鼠标位置,从而当B键按下时,进入不同的页面。


6.主循环,扫描摇杆进行对应的操作:
#定义hid鼠标hid_mouse=Mouse()rporcomflag=0enterflag=0  #每次进入图像后置1,不让再次刷新图像,返回后再置0,使得下一次得以进入图像。             #这样子可以避免影响返回键A的判断while True:    if (rporcomflag==1):                    #1为电脑鼠标控制        xValue = xAxis.read_u16()    #读取摇杆位移        yValue = yAxis.read_u16()        if buttonStart.value()==0:   #当按下START时,使rporcomflag置0            rporcomflag-=1            utime.sleep(0.2)        if  xValue <=600:            #当摇杆向左            hid_mouse.move(-1,0)     #进行对应的位移        elif xValue >= 60000:        #当摇杆向右            hid_mouse.move(1,0)        if yValue <= 600:            #当摇杆向上            hid_mouse.move(0,-1)        elif yValue >= 60000:        #当摇杆向下            hid_mouse.move(0,1)    elif rporcomflag==0 and faceflag==0:      #0为rp2040鼠标控制        xValue = xAxis.read_u16()        yValue = yAxis.read_u16()        if buttonStart.value()==0:            rporcomflag+=1            utime.sleep(0.2)        if xValue <= 600:#左            mouse.moveX(1)            utime.sleep(0.00835)        elif xValue >= 60000:            mouse.moveX(2)            utime.sleep(0.0083)        if yValue <= 600:            mouse.moveY(1)            utime.sleep(0.0083)        elif yValue >= 60000:            mouse.moveY(2)            utime.sleep(0.0083)        interface1()                  #每次移动后要再进行一次页面的刷新,防止鼠标图像清空时使背景色消失        mouse.draw(orange)    if(Abutton.value()==0 and rporcomflag==0):#返回操作        display.fill(st7789c.WHITE)        interface1()        faceflag=0        enterflag=0    elif(faceflag==1 and enterflag==0):  # 冰墩墩界面        display.jpg("bingdundun.jpg", 0, 0, st7789c.SLOW)        enterflag=1   #每次进入图像后置1,不让再次刷新图像,返回后再置0,使得下一次得以进入图像。                    #这样子可以避免影响返回键A的判断    elif(faceflag==2 and enterflag==0):  #text界面        display.jpg("text.jpg", 0, 0, st7789c.SLOW)        enterflag=1
解释:
  • 利用循环不断地扫描摇杆,并且判断是操作rp2040鼠标图案还是屏幕光标,当摇杆移动时,对rp2040和屏幕光标进行移动,屏幕光标的移动只需要利用硬禾学堂官方库中的hid的move进行对鼠标的移动即可。rp2040在鼠标移动后还需要再进行背景的刷新,避免背景被鼠标刷新时局部刷新掉。


 5

遇到的难题和解决方法

1. 问题一
1.1 问题:LCD屏鼠标闪烁频率过高:当鼠标进行移动时,鼠标会不停的进行闪烁,此时鼠标图案的效果太差。
1.2 原因:当进行一个新位置鼠标的绘画,此时再移动时,这个新位置鼠标会被擦除,这时由于擦除旧位置鼠标和绘制新位置鼠标的间隔太短,新的鼠标显示完成后就马上被擦除,这时就会出现闪烁的现象。
1.3 解决方法:在每次位移函数后,进行一个延时,从而增加鼠标的存在时长,从而减轻闪烁的问题,经试验,延时的时长在08秒到0.085秒之间效果最好。

2. 问题二
2.1 问题:当进入另一个界面时会出现返回键(A键)的检索不灵敏,会出现得按好多次的问题。
2.2 原因:当页面进入新的界面后,由于这时faceflag没有进行更改,所以会不断的进入这个if的分支语句里面,从而不断刷新页面,这时会对树莓派加深负担,从而影响对A按键的判断。
if(Abutton.value()==0 and rporcomflag==0):        display.fill(st7789c.WHITE)        interface1()        faceflag=0    elif(faceflag==1):  # 冰墩墩界面        display.jpg("bingdundun.jpg", 0, 0, st7789c.SLOW)
解决方法:定义一个变量,当进入一次界面后,便将其置1,并且只有当其为0时才能再次进入这个界面,这时就能控制其进入一次,并且,当按下返回键时,就会将该变量重新置为0,变成可进入的状态,从而解决问题。
if(Abutton.value()==0 and rporcomflag==0):        display.fill(st7789c.WHITE)        interface1()        faceflag=0        enterflag=0    elif(faceflag==1 and enterflag==0):  # 冰墩墩界面        display.jpg("bingdundun.jpg", 0, 0, st7789c.SLOW)        enterflag=1   #每次进入图像后置1,不让再次刷新图像,返回后再置0,使得下一次得以进入图像。                      #这样子可以避免影响返回键A的判断


6

成品展示

1. 初始界面:
2. 当位移到冰墩墩的文字并按下B键进入新页面
3. 当鼠标位移到TEXT并且按下B键后会进入TEXT说明的界面
4. 当鼠标位移到最下方数字的右边并且按下B键时,鼠标速度会对应增加。
5. 当鼠标位移到最下方数字的左边并且按下B键时,鼠标速度会对应减小。
6. 当按下START按键后,进入对PC屏幕光标的操控,摇杆控制光标移动,B键充当鼠标左键功能,A键充当鼠标右键功能,并且当长按B键并且移动摇杆时,能够进行多选。

 7

资料获取

作者已将项目分享在电子森林和百度网盘,大家可自行获取,如有参考请备注参考来源:
  • 电子森林链接:https://www.eetree.cn/project/detail/912

  • 百度网盘链接:https://pan.baidu.com/s/1w96ahikxAOgv7YJZrb5abQ?pwd=0000 提取码:0000


最后祝泥萌女神节快乐!

END


硬禾学堂

硬禾团队一直致力于给电子工程师和相关专业的同学,带来规范的核心技能课程,帮助大家在学习和工作的各个阶段,都能有效地提升自己的职业能力。

硬禾学堂

我们一起在电子领域探索前进

关注硬禾公众号,随时直达课堂


点击阅读原文查看更多



电子森林 讲述电子工程师需要掌握的重要技能: PCB设计、FPGA应用、模拟信号链路、电源管理等等;不断刷新的行业新技术 - 树莓派、ESP32、Arduino等开源系统;随时代演进的热点应用 - 物联网、无人驾驶、人工智能....
评论
  • 在智能家居领域中,Wi-Fi、蓝牙、Zigbee、Thread与Z-Wave等无线通信协议是构建短距物联局域网的关键手段,它们常在实际应用中交叉运用,以满足智能家居生态系统多样化的功能需求。然而,这些协议之间并未遵循统一的互通标准,缺乏直接的互操作性,在进行组网时需要引入额外的网关作为“翻译桥梁”,极大地增加了系统的复杂性。 同时,Apple HomeKit、SamSung SmartThings、Amazon Alexa、Google Home等主流智能家居平台为了提升市占率与消费者
    华普微HOPERF 2025-01-06 17:23 141浏览
  • 每日可见的315MHz和433MHz遥控模块,你能分清楚吗?众所周知,一套遥控设备主要由发射部分和接收部分组成,发射器可以将控制者的控制按键经过编码,调制到射频信号上面,然后经天线发射出无线信号。而接收器是将天线接收到的无线信号进行解码,从而得到与控制按键相对应的信号,然后再去控制相应的设备工作。当前,常见的遥控设备主要分为红外遥控与无线电遥控两大类,其主要区别为所采用的载波频率及其应用场景不一致。红外遥控设备所采用的射频信号频率一般为38kHz,通常应用在电视、投影仪等设备中;而无线电遥控设备
    华普微HOPERF 2025-01-06 15:29 125浏览
  • 本文介绍Linux系统更换开机logo方法教程,通用RK3566、RK3568、RK3588、RK3576等开发板,触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。制作图片开机logo图片制作注意事项(1)图片必须为bmp格式;(2)图片大小不能大于4MB;(3)BMP位深最大是32,建议设置为8;(4)图片名称为logo.bmp和logo_kernel.bmp;开机
    Industio_触觉智能 2025-01-06 10:43 87浏览
  • PLC组态方式主要有三种,每种都有其独特的特点和适用场景。下面来简单说说: 1. 硬件组态   定义:硬件组态指的是选择适合的PLC型号、I/O模块、通信模块等硬件组件,并按照实际需求进行连接和配置。    灵活性:这种方式允许用户根据项目需求自由搭配硬件组件,具有较高的灵活性。    成本:可能需要额外的硬件购买成本,适用于对系统性能和扩展性有较高要求的场合。 2. 软件组态   定义:软件组态主要是通过PLC
    丙丁先生 2025-01-06 09:23 83浏览
  •     为控制片内设备并且查询其工作状态,MCU内部总是有一组特殊功能寄存器(SFR,Special Function Register)。    使用Eclipse环境调试MCU程序时,可以利用 Peripheral Registers Viewer来查看SFR。这个小工具是怎样知道某个型号的MCU有怎样的寄存器定义呢?它使用一种描述性的文本文件——SVD文件。这个文件存储在下面红色字体的路径下。    例:南京沁恒  &n
    电子知识打边炉 2025-01-04 20:04 98浏览
  • 彼得·德鲁克被誉为“现代管理学之父”,他的管理思想影响了无数企业和管理者。然而,关于他的书籍分类,一种流行的说法令人感到困惑:德鲁克一生写了39本书,其中15本是关于管理的,而其中“专门写工商企业或为企业管理者写的”只有两本——《为成果而管理》和《创新与企业家精神》。这样的表述广为流传,但深入探讨后却发现并不完全准确。让我们一起重新审视这一说法,解析其中的矛盾与根源,进而重新认识德鲁克的管理思想及其著作的真正价值。从《创新与企业家精神》看德鲁克的视角《创新与企业家精神》通常被认为是一本专为企业管
    优思学院 2025-01-06 12:03 113浏览
  • 根据环洋市场咨询(Global Info Research)项目团队最新调研,预计2030年全球无人机锂电池产值达到2457百万美元,2024-2030年期间年复合增长率CAGR为9.6%。 无人机锂电池是无人机动力系统中存储并释放能量的部分。无人机使用的动力电池,大多数是锂聚合物电池,相较其他电池,锂聚合物电池具有较高的能量密度,较长寿命,同时也具有良好的放电特性和安全性。 全球无人机锂电池核心厂商有宁德新能源科技、欣旺达、鹏辉能源、深圳格瑞普和EaglePicher等,前五大厂商占有全球
    GIRtina 2025-01-07 11:02 61浏览
  • 村田是目前全球量产硅电容的领先企业,其在2016年收购了法国IPDiA头部硅电容器公司,并于2023年6月宣布投资约100亿日元将硅电容产能提升两倍。以下内容主要来自村田官网信息整理,村田高密度硅电容器采用半导体MOS工艺开发,并使用3D结构来大幅增加电极表面,因此在给定的占位面积内增加了静电容量。村田的硅技术以嵌入非结晶基板的单片结构为基础(单层MIM和多层MIM—MIM是指金属 / 绝缘体/ 金属) 村田硅电容采用先进3D拓扑结构在100um内,使开发的有效静电容量面积相当于80个
    知白 2025-01-07 15:02 65浏览
  • 根据Global Info Research项目团队最新调研,预计2030年全球封闭式电机产值达到1425百万美元,2024-2030年期间年复合增长率CAGR为3.4%。 封闭式电机是一种电动机,其外壳设计为密闭结构,通常用于要求较高的防护等级的应用场合。封闭式电机可以有效防止外部灰尘、水分和其他污染物进入内部,从而保护电机的内部组件,延长其使用寿命。 环洋市场咨询机构出版的调研分析报告【全球封闭式电机行业总体规模、主要厂商及IPO上市调研报告,2025-2031】研究全球封闭式电机总体规
    GIRtina 2025-01-06 11:10 103浏览
  • By Toradex 秦海1). 简介嵌入式平台设备基于Yocto Linux 在开发后期量产前期,为了安全以及提高启动速度等考虑,希望将 ARM 处理器平台的 Debug Console 输出关闭,本文就基于 NXP i.MX8MP ARM 处理器平台来演示相关流程。 本文所示例的平台来自于 Toradex Verdin i.MX8MP 嵌入式平台。  2. 准备a). Verdin i.MX8MP ARM核心版配合Dahlia载板并
    hai.qin_651820742 2025-01-07 14:52 38浏览
  • 这篇内容主要讨论三个基本问题,硅电容是什么,为什么要使用硅电容,如何正确使用硅电容?1.  硅电容是什么首先我们需要了解电容是什么?物理学上电容的概念指的是给定电位差下自由电荷的储藏量,记为C,单位是F,指的是容纳电荷的能力,C=εS/d=ε0εrS/4πkd(真空)=Q/U。百度百科上电容器的概念指的是两个相互靠近的导体,中间夹一层不导电的绝缘介质。通过观察电容本身的定义公式中可以看到,在各个变量中比较能够改变的就是εr,S和d,也就是介质的介电常数,金属板有效相对面积以及距离。当前
    知白 2025-01-06 12:04 167浏览
  • 大模型的赋能是指利用大型机器学习模型(如深度学习模型)来增强或改进各种应用和服务。这种技术在许多领域都显示出了巨大的潜力,包括但不限于以下几个方面: 1. 企业服务:大模型可以用于构建智能客服系统、知识库问答系统等,提升企业的服务质量和运营效率。 2. 教育服务:在教育领域,大模型被应用于个性化学习、智能辅导、作业批改等,帮助教师减轻工作负担,提高教学质量。 3. 工业智能化:大模型有助于解决工业领域的复杂性和不确定性问题,尽管在认知能力方面尚未完全具备专家级的复杂决策能力。 4. 消费
    丙丁先生 2025-01-07 09:25 77浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦