19 块钱 500W 像素 CSI 摄像头,直接连在树莓派上,如下所示:
这个摄像头的像素比想象中要高很多,如下所示,肯定够用了。
使用方法,首先要在树莓派的设置中,开启 camera
在树莓派命令行中可以用下面的代码来拍照:
vcgencmd get_camera
raspistill -v -o test.jpg
这样就在桌面生成了一个 test.jpg 的图片
如果要在 Python 中使用,首先要安装一些包:
sudo apt-get install -y libopencv-dev python3-opencv
import cv2
cap=cv2.VideoCapture(0) #调用摄像头‘0'一般是打开电脑自带摄像头,‘1'是打开外部摄像头(只有一个摄像头的情况)
width=1280
height=960
cap.set(cv2.CAP_PROP_FRAME_WIDTH,width)#设置图像宽度
cap.set(cv2.CAP_PROP_FRAME_HEIGHT,height)#设置图像高度
#显示图像
while True:
ret,frame=cap.read()#读取图像(frame就是读取的视频帧,对frame处理就是对整个视频的处理)
#print(ret)#
#######例如将图像灰度化处理,
img=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)#转灰度图
cv2.imshow("img",img)
########图像不处理的情况
cv2.imshow("frame",frame)
input=cv2.waitKey(20)
if input==ord('q'):#如过输入的是q就break,结束图像显示,鼠标点击视频画面输入字符
break
cap.release()#释放摄像头
cv2.destroyAllWindows()#销毁窗口

import RPi.GPIO as GPIO #引入函数库
import time
RPi.GPIO.setmode(GPIO.BOARD) #设置引脚编号规则
RPi.GPIO.setup(11, RPi.GPIO.OUT) #将11号引脚设置成输出模式
while True
GPIO.output(channel, 1) #将引脚的状态设置为高电平,此时LED亮了
time.sleep(1) #程序休眠1秒钟,让LED亮1秒
GPIO.output(channel, 0) #将引脚状态设置为低电平,此时LED灭了
time.sleep(1) #程序休眠1秒钟,让LED灭1秒
GPIO.cleanup() #程序的最后别忘记清除所有资源
import time
import RPi.GPIO as GPIO #引入库
GPIO.setmode(GPIO.BOARD) #设置编号方式
GPIO.setup(12, GPIO.OUT) #设置12号引脚为输出模式
p = GPIO.PWM(12, 50) #将12号引脚初始化为PWM实例 ,频率为50Hz
p.start(0) #开始脉宽调制,参数范围为: (0.0 <= dc <= 100.0)
try:
while 1:
for dc in range(0, 101, 5):
p.ChangeDutyCycle(dc) #修改占空比 参数范围为: (0.0 <= dc <= 100.0)
time.sleep(0.1)
for dc in range(100, -1, -5):
p.ChangeDutyCycle(dc)
time.sleep(0.1)
except KeyboardInterrupt:
pass
p.stop() #停止输出PWM波
GPIO.cleanup() #清除
# 设置上拉或下拉电阻
GPIO.setup(channel, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(channel, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
# 读取状态
GPIO.input(channel)
# wait_for_edge(),顾名思义,会阻塞程序
channel = GPIO.wait_for_edge(channel, GPIO.RISING, timeout=5000)
if channel is None:
print('Timeout occurred')
else:
print('Edge detected on channel', channel)
# 可以输入 GPIO.RISING、GPIO.FALLING、GPIO.BOTH
# 一般用的是 event_detected() 系列的监听函数机制
# 如下就是注册回调函数的方法
def my_callback_one(channel):
print('回调 1')
def my_callback_two(channel):
print('回调 2')
GPIO.add_event_detect(channel, GPIO.RISING)
GPIO.add_event_callback(channel, my_callback_one)
GPIO.add_event_callback(channel, my_callback_two)
舵机的黄、红、棕线,分别对应信号线、电源线、地线。
这里没有直接控制舵机旋转角度的库函数,我们通过原理来控制PWM来控制旋转角度。
舵机旋转角度是由脉冲宽度决定的,旋转角度与占空比是线性函数关系,50Hz的PWM波,旋转角度到占空比的转换公式为:duty = (1/18) * direction + 2.5
实测效果还是比较好的。
本文章使用limfx的vsocde插件快速发布