失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 树莓派-10-安装jupyter并控制SG90舵机

树莓派-10-安装jupyter并控制SG90舵机

时间:2020-05-15 01:14:05

相关推荐

树莓派-10-安装jupyter并控制SG90舵机

1 开发工具jupyter notebook

1.1 安装jupyter

#(1)安装jupyter notebook$ sudo pip3 install jupyter$ sudo pip3 install -U "ipython[all]"$ sudo pip3 install --upgrade ipykernel$ sudo pip3 install --upgrade ipython#(2)生成配置文件$ jupyter notebook --generate-configWriting default config to: 文件/home/pi/.jupyter/jupyter_notebook_config.py#(3)对应修改其中的值c.NotebookApp.ip = '0.0.0.0'​​​​​​​c.NotebookApp.open_browser = Falsec.NotebookApp.port = 8888 // 开放的端口号c.NotebookApp.notebook_dir = '/home/pi/' // 可以访问的目录#(4)设置jupyter notebook的访问密码$ jupyter notebook password[NotebookPasswordApp] Wrote hashed password to 文件/home/pi/.jupyter/jupyter_notebook_config.json#(5)启动jupyter notebook$ jupyter notebook

配置下面的内容

c.NotebookApp.ip = '192.168.0.199’​​​​​​​

网址http://192.168.0.199:8888

1.2 后台运行jupyter notebook

(1)nohup 命令

用途:Run COMMAND, ignoring hangup signals.

语法: nohup COMMAND [ARG]…

输出文件:

nohup忽略hangup信号地运行程序,程序的输出默认重定向到当前文件夹下的 ‘nohup.out’ 文件中。也可以通过nohup COMMAND > FILE 命令的方式将输出文件重定位到指定的FILE文件中。如果要查看 jupyter notebook 的日志文件,可以打开 ‘nohup.out’ 文件进行查看。可以使用 vim、head、tail、cat 等命令进行查看。

(2)& 命令

作用:在后台运行程序

综上,可以在终端中键入nohup jupyter notebook & 命令,在后台运行jupyter notebook程序。

(3)查看进程

$ ps -aux | grep jupyter 查看运行的jupyter进程

http://192.168.0.199:8888

1.3 异常解决

创建新的ipynb文件报以下错误:执行python笔记本,并提示一则信息。

assert False, "wrong color format %r" % textAssertionError: wrong color format 'var(--jp-mirror-editor-variable-color)'

原因:这是因为版本不相容所造成 nbconvert。

解决方案:

$ sudo pip3 install nbconvert==6.0.0rc0

2 树莓派控制SG90舵机

参考使用树梅派控制sg90电机

参考树莓派控制SG90舵机

2.1 硬件介绍

SG90一共三根线,红线接5V电源,棕线接GND。黄线为数据控制线,该线接到GPIO上,这里我们是BOARD模式的pin 11。

最好在关闭电源的情况下进行接线拔线,因为插拔瞬间有可能电流增大等情况,烧坏树莓派。

基本运动规则:

不同的舵机有不同的旋转角度范围,如0-180度或者0-360度。

在这个范围内的,旋转任意角度。

旋转速度快。大约0.15s左右旋转60度。不同的品牌速度不同。

2.2 控制原理

主观感觉舵机基本没有延迟的执行我们的命令,但是其实并非如此。舵机会将时间分为一段段的,比如20ms,在这个时间内,用户发送一个指令它接受并执行。使用细小的离散来对世界的连续性进行模拟,绝对的连续是做不到的。

在这个周期内,用户发送一份特定时长的脉冲,舵机根据脉冲的时长来旋转特定的位置。对于sg90舵机来说,脉冲为0.5ms, 旋转到0度位置,脉冲为1.5ms时旋转到90度位置,2.5ms时旋转到180度位置。如果想让舵机从0度位置依次转到,45度,90度,135, 180度,然后再依次转回来,发送0.5, 1.0, 1.5, 2.0, 2.5, 2.0, 1.5, 1.0, 0.5的脉冲即可。

# 将角度位置转化为对应的pwm_valuedef to_dutycycle(angle):length = angle * 1.0 / 180. * (2.5 - 0.5) + 0.5dutycycle = length / 20. * 100.return dutycycle

这个函数为start()和ChangeDutyCycle()提供值,这两个函数的输入非常相似,值的范围都是0——100。

首先求输入角度angle所对应的脉冲长度:

length = angle * 1.0 / 180. * (2.5 - 0.5) + 0.5

然后这个长度除以周期长度再乘100获得dutycycle:

dutycycle = lenght / 20. * 100。

不管当前,在旋臂在什么位置,想让舵机转到0度位置,只要输入0.5ms的脉冲即可,想要转到其他位置也是同样道理。

SG90 脉冲周期为20毫秒(millisecond),也就是说最多1秒钟内可以转动50次,但是考虑到每次转动还要耗时,所以实际达不到50次。

2.2.1 PWM函数

class PWM(builtins.object)Pulse Width Modulation class脉冲宽度调制举例p_R = GPIO.PWM(11, 2000) # 设置频率为 2KHz*************************************************************ChangeDutyCycle(...)Change the duty cycle更改占空比 (1)dutycyclebetween 0.0 and 100.0*************************************************************ChangeFrequency(...)Change the frequencyfrequency - frequency in Hz (freq > 1.0)*************************************************************函数start(...)初始占空比Start software PWM(1)dutycycle the duty cycle (0.0 to 100.0)举例p_R.start(0) # 初始占空比为0*************************************************************函数stop(...)停止PWMStop software PWM

参数dutycycle规定了脉冲的时长,范围为0——100, 它表示脉冲长度与周期时长的百分比,即dutycycle=脉冲时长/周期时长 × 100。

2.2.2 代码

# -*- coding:utf-8 -*- from RPi import GPIO # 引入GPIO库import time# 将角度位置转化为对应的pwm_valuedef to_dutycycle(angle):length = angle * 1.0 / 180. * (2.5 - 0.5) + 0.5dutycycle = length / 20. * 100.return dutycycletry:GPIO.setmode(GPIO.BOARD) # 设置编码方式GPIO.setup(11, GPIO.OUT) # 设置11号pin为输出引脚# 设置11号pin为pwm模式输出,输出频率为50Hz# 此时pwm周期的时长是1s/50Hz=20mspwm_sg90 = GPIO.PWM(11, 50) pwm_sg90.start(to_dutycycle(angle=0)) # 初始化通知舵机旋到0度位置time.sleep(1) # 等待舵机将旋臂旋到0度位置,大概要0.3ms。for angle in [0, 180, 0, 90, 0, 120, 90]:dutycycle = to_dutycycle(angle)pwm_sg90.ChangeDutyCycle(dutycycle)time.sleep(1)finally:GPIO.cleanup() # 保证释放11号pin的资源

如果觉得《树莓派-10-安装jupyter并控制SG90舵机》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。