陈佳怡-2020013369-2021A-M08-91-WW8

来自iCenter Wiki
2021年11月1日 (一) 06:36陈佳怡讨论 | 贡献的版本

(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转至: 导航搜索

智能硬件控制实验

RGB LED灯实验

  • 实验原理
使用PWM(脉冲宽度调制)技术来控制RGB LED灯的亮度

(PWM技术是指通过数字信号的方式来控制模拟输出的技术,主要用于控制直流电机的速度、舵机的角度等)

  • 实验效果
运行后RGB LED灯以程序设定的频率、亮度和颜色闪烁
  • 实现代码(Python)
 import RPi.GPIO as GPIO
 import time
 colors=[0xFF0000,0x00FF00,0x0000FF,0xFFFF00,0xFF00FF,0x00FFFF]
 makerobo_R=11
 makerobo_G=12
 makerobo_B=13
 def makerobo_setup(Rpin,Gpin,Bpin):
   global pins
   global p_R,p_G,p_B
   pins={'pin_R':Rpin,'pin_G':Gpin,'pin_B':Bpin}
   GPIO.setmode(GPIO.BOARD)
   GPIO.setwarnings(False)
   for i in pins:
       GPIO.setup(pins[i],GPIO.OUT)
       GPIO.output(pins[i],GPIO.LOW)
   p_R = GPIO.PWM(pins['pin_R'], 2000)
   p_G = GPIO.PWM(pins['pin_G'], 1999)
   p_B = GPIO.PWM(pins['pin_B'], 5000)
   p_R.start(0)
   p_G.start(0)
   p_B.start(0)
 def makerobo_pwm_map(x, in_min, in_max, out_min, out_max):
   return (x-in_min)*(out_max - out_min)/(in_max - in_min) + out_min
 def makerobo_off():
   GPIO.setmode(GPIO.BOARD)
   for i in pins:
       GPIO.setup(pins[i], GPIO.OUT)
       GPIO.output(pins[i], GPIO.LOW)
 def makerobo_set_Color(col):
   R_val = (col & 0xff0000)>>16
   G_val = (col & 0x00ff00)>>8
   B_val = (col & 0x0000ff)>>0
   R_val = makerobo_pwm_map(R_val, 0, 255, 0, 100)
   G_val = makerobo_pwm_map(G_val, 0, 255, 0, 100)
   B_val = makerobo_pwm_map(B_val, 0, 255, 0, 100)           
   p_R.ChangeDutyCycle(100-R_val)
   p_G.ChangeDutyCycle(100-G_val)  
   p_B.ChangeDutyCycle(100-B_val)                 
 def makerobo_loop():
   while True:
       for col in colors:
           makerobo_set_Color(col)
           time.sleep(0.1)
 def makerobo_destroy():
   p_R.stop()
   p_G.stop()
   p_B.stop()
   makerobo_off()
   GPIO.cleanup()
 if __name__=="__main__":
  try:
     makerobo_setup(makerobo_R, makerobo_G,makerobo_B)
     makerobo_loop()
  except KeyboardInterrupt:
    makerobo_destroy() 

轻触按键实验

  • 实验原理
轻触按键模块内部有一个轻触拨盘,当按下轻触按键的时候输出低电平,当松开轻触按键的时候保持高电平,通过LED的颜色判断轻触按键的工作状态
  • 实验效果
轻触按键模块后LED灯闪亮
  • 实现代码(Python)
 import RPi.GPIO as GPIO
 makerobo_BtnPin=11
 makerobo_Rpin=12
 makerobo_Gpin=13
 def makerobo_setup():
   GPIO.setmode(GPIO.BOARD)
   GPIO.setwarnings(False)
   GPIO.setup(makerobo_Rpin,GPIO.OUT)
   GPIO.setup(makerobo_Gpin,GPIO.OUT)
   GPIO.setup(makerobo_BtnPin,GPIO.IN,pull_up_down=GPIO.PUD_UP)
   GPIO.add_event_detect(makerobo_BtnPin,GPIO.BOTH,callback=makerobo_detect,bouncetime=200)
 def double_colorLED(x):
   if x==0:
       GPIO.output(makerobo_Rpin,1)
       GPIO.output(makerobo_Gpin,0)
   if x==1:
       GPIO.output(makerobo_Rpin,0)
       GPIO.output(makerobo_Gpin,1)
 def makerobo_Print(x):
   if x==0:
       print('HELLO WORLD')
 def makerobo_detect(chn):
   double_colorLED(GPIO.input(makerobo_BtnPin))
   makerobo_Print(GPIO.input(makerobo_BtnPin))                 
 def makerobo_loop():
   while True:
       pass
 def makerobo_destroy():
   GPIO.output(makerobo_Gpin,GPIO.LOW)
   GPIO.output(makerobo_Rpin,GPIO.LOW)
   GPIO.cleanup()
 if __name__=="__main__":
  makerobo_setup()
  try:
     makerobo_loop()
  except KeyboardInterrupt:
     makerobo_destroy()

语音识别LED灯控制

  • 实验原理
利用www.smartpi.cn生成语音SDK,并烧录在语音识别模块中,连接树莓派与语音识别模块,在树莓派上可通过输出端口连接其他模块
  • 实验效果
通过语音识别开关灯或进行其他模块的控制
  • 树莓派代码(仅语音识别模块)
 import RPi.GPIO as GPIO
 import time
 GPIO.setmode(GPIO.BCM)
 GPIO.setup(25,GPIO.IN)
 GPIO.setup(26,GPIO.IN)
 GPIO.setup(5,GPIO.OUT)
 GPIO.setup(6,GPIO.OUT)
 while True:
   input1=GPIO.input(25)
   input2=GPIO.input(26)
   if(input1==True):
       GPIO.output(5,GPIO.HIGH)
   else:
       GPIO.output(5,GPIO.LOW)
   if(input2==True):
       GPIO.output(6,GPIO.HIGH)
   else:
       GPIO.output(6,GPIO.LOW)