树莓派-Pico控制舵机

目录

  • 前言
  • 一、SG90舵机是什么?
    • 参数介绍
    • 工作原理
  • 二、与舵机信号线的接线图
  • 三、给树莓派Pico注入灵魂(代码)
  • 总结


前言

这价格便宜的树莓派Pico总觉得应该拿来做点什么,它总不能只用来点亮几个灯就没别的用途了吧,所以就找了些文章研究了如何用树莓派Pico控制SG90舵机。


一、SG90舵机是什么?

SG90舵机,常用在小型机器人、智能小车、机械臂、固定翼等小型模型上,因为内部的齿轮多数为塑料的,承受不了太大的扭力。
SG90舵机

舵机类型又分为两种,一种是模拟舵机,另一种是数字舵机,像SG90就是模拟舵机。
模拟舵机和数字舵机的区别

转动角度为360°的舵机与转动角度为90°/180°的舵机工作的方式又是不一样的,360°的舵机相当于是无极变速的减速电机,只能控制转动的速度和转动的方向,不能控制转动到想要的角度,但控制的方式和一般舵机的控制信号相同。

参数介绍

型号SG90
重量9g
工作扭矩1.6kg/cm
反应速度0.12-0.13s/60°
建议使用温度-30° ~ +60°
死区设定5us
转动角度90°/180°(与程序的写法有关)
舵机类型模拟舵机
使用电压3 ~ 7.2V(推荐用5V)
结构材质塑料齿

工作原理

舵机的工作原理

控制电路板接受来自信号线的控制信号,控制电机转动,电机带动一系列齿轮组,减速后传动至输出舵盘。舵机的输出轴和位置反馈电位计是相连的,舵盘转动的同时,带动位置反馈电位计,电位计将输出一个电压信号到控制电路板,进行反馈,然后控制电路板根据所在位置决定电机的转动方向和速度,从而达到目标停止。

舵机的控制信号

舵机的控制信号为周期是20ms的脉宽调制(PWM)信号,其中脉冲宽度从0.5ms-2.5ms,相对应舵盘的位置为0-180度,呈线性变化。也就是说,给它提供一定的脉宽,它的输出轴就会保持在一个相对应的角度上,无论外界转矩怎样改变,直到给它提供一个另外宽度的脉冲信号,它才会改变输出角度到新的对应的位置上。舵机内部有一个基准电路,产生周期20ms,宽度1.5ms的基准信号,有一个比较器,将外加信号与基准信号相比较,判断出方向和大小,从而产生电机的转动信号。

二、与舵机信号线的接线图

本人是控制两个舵机,所以用到了两个端口,GP0和GP1。
在这里插入图片描述

三、给树莓派Pico注入灵魂(代码)

注入的灵魂如下(示例):

'''
该程序为树莓派pico控制180°舵机
使用的端口:0和1  用了两个舵机,上面的用0端口,下面的用1端口
'''import machine, time, urandom
from machine import Pinp1=machine.PWM(Pin(0))
p2=machine.PWM(Pin(1))p1.freq(50)#50Hz频率下周期为20ms
p2.freq(50)#50Hz频率下周期为20msp1.duty_u16(1638)#角度控制,1638-8192之间实现0度到180度转动
p2.duty_u16(1638)#角度控制,1638-8192之间实现0度到180度转动time.sleep(0.5)
numder = [5, 15, 19, 31, 57]def kk(ttime):  # 步长间隔,可以控制转动的速度和角度精确程度for i in range(1638, 8193, ttime):p1.duty_u16(i)#角度控制,1638-8192之间实现0度到180度转动p2.duty_u16(i)#角度控制,1638-8192之间实现0度到180度转动time.sleep(0.01)# print(i)# time.sleep(1)for j in range(8192, 1638, -ttime):p1.duty_u16(j)#角度控制,1638-8192之间实现0度到180度转动p2.duty_u16(j)#角度控制,1638-8192之间实现0度到180度转动time.sleep(0.01)# print(j)while 1:random_float = urandom.choice(numder)print('当前速度为:',random_float)kk(random_float)

提示:
稍微注意一下,该代码中是让舵机云台一直左右摇摆或上下摇摆,但是转动的速度是随机的,应该说是转动的精准度是随机的,因为随机抽取的是步长,而不是时间。


如果想用键盘来控制舵机云台的转动,MicroPython中有一个名为"machine"的库,它提供了与硬件交互的功能,包括检测键盘的能力。你可以使用"machine"库中的"Pin"类来检测键盘按键的状态。但本人还没能去研究如何实现用键盘来控制舵机云台的转动
想试的话,可以看看下面的代码做参考。

from machine import Pin# 设置键盘引脚
keyboard_pin = Pin(0, Pin.IN)# 检测键盘按键状态
while True:if keyboard_pin.value() == 1:print("键盘按键被按下")else:print("键盘按键未被按下")

总结

目前只是初步研究了一下树莓派pico怎么控制舵机转动,还没到真正使用起来的地步,好歹能让树莓派pico控制三个舵机组成的机械臂吧。
该文章若对你有帮助,不妨点个赞噢~


2023.12.22写
有写得不好、写得不对的地方还请各位指出,谢谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/222685.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自制数据库空洞率清理工具-C版-01-EasyClean-V1.0(支持南大通用数据库Gbase8a)

目录 一、环境信息 二、简述 三、支持功能 四、空洞率 五、工具流程图 六、安装包下载地址 七、参数介绍 1、命令模板 2、命令样例 3、参数表格 八、安装步骤 1、配置环境变量 2、生效环境变量 3、检验动态链接是否正常 九、运行效果 一、环境信息 名称值CPUInt…

力扣题目学习笔记(OC + Swift)19. 删除链表的倒数第 N 个结点

19. 删除链表的倒数第 N 个结点 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 此题目为链表题,拿出我们的杀手锏,链表解题经典三把斧: 哑巴节点栈快慢指针 关于内存问题:由于Swift及…

R语言【cli】——通过cli_abort用 cli 格式的内容显示错误、警告或信息,内部调用cli_bullets和inline-makeup

cli_abort(message,...,call .envir,.envir parent.frame(),.frame .envir ) 先从那些不需要下大力气理解的参数入手: 参数【.envir】:进行万能表达式编译的环境。 参数【.frame】:抛出上下文。默认用于参数【.trace_bottom】&#xff…

【华为鸿蒙系统学习】- HarmonyOS4.0之App项目开发|自学篇

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 💫个人格言:"没有罗马,那就自己创造罗马~" 目录 创建鸿蒙第一个App项目 项目创建 工程目录区 预览区 运行Hello World 基本工程目录 ws:工…

【Amazon 实验①】Amazon WAF功能增强之实验环境准备

文章目录 1. 实验介绍2. 实验环境准备 1. 实验介绍 在真实的网络空间中,攻击者会使用大量广泛分布的僵尸网络、肉机等发起对目标的攻击。 其来源分布一般比较分散,因此难以简单防范。 本实验联合使用有多种AWS服务:Cloudfront、 Lambdaedge…

『番外篇五』SwiftUI 进阶之如何动态获取任意视图的 tag 和 id 值

概览 在某些场景下,我们需要用代码动态去探查 SwiftUI 视图的信息。比如任意视图的 id 或 tag 值: 如上图所示:我们通过动态探查技术在运行时将 SwiftUI 特定视图的 tag 和 id 值显示在了屏幕上。 这是如何做到的呢? 在本篇博文,您将学到如下内容: 概览1. “如意如意,…

Linux基本内容学习

Linux 命令 文件命令 命令释义语法格式lslist,用于显示目录中文件及其属性信息ls [参数名] [文件名]cdchange directory,用于更改当前所处的工作目录,路径可以是绝对路径,也可以是相对路径,若省略不写则会跳转至当前…

测试工具Jmeter:界面介绍、核心选项说明、核心选项用途

本文章主要介绍Jmeter的界面布局,以及各个选项的功能和它们的用途。 JMeter基本原理是建立一个线程池,多线程运行取样器产生大量负载,在运行过程中通过断言来验证结果的正确性,通过监听器来记录测试结果。 1. Jmeter主界面 当我…

Unresolved plugin: ‘org.apache.maven.plugins‘解决报错

新建springboot项目报Unresolved plugin: ‘org.apache.maven.plugins:maven-surefire-plugin:3.1.2’ 缺什么插件 引入什么插件的依赖就行 <dependency><groupId>org.apache.maven.plugins</groupId><artifactId>maven-install-plugin</artifact…

docker数据卷数据卷容器

前言 今天调休在家&#xff0c;随便玩玩&#xff0c;简单做下学习记录 1. 数据卷特点 数据卷在容器启动时初始化&#xff0c;如果容器使用的镜像在挂载点包含了数据&#xff0c;这些数据会被拷贝到新初始化的数据卷中数据卷可以在容器之间共享和重用可以对数据卷里的内容直接…

重学设计模式-Iterator(迭代器模式)

Iterator迭代器模式 介绍&#xff1a; 迭代器模式是一种行为型设计模式&#xff0c;它允许你在不暴露集合底层表示&#xff08;并不知道集合底层使用何种方式对数据尽心存储&#xff09;的情况下遍历集合中的元素。 这种模式提供了一种方法&#xff0c;可以顺序访问一个聚合…

Tomcat转SpringBoot、tomcat升级到springboot、springmvc改造springboot

Tomcat转SpringBoot、tomcat升级到springboot、springmvc改造springboot 起因&#xff1a;我接手tomcat-springmvc-hibernate项目&#xff0c;使用tomcat时问题不大。自从信创开始&#xff0c;部分市场使用国产中间件&#xff0c;例如第一次听说的宝兰德、东方通&#xff0c;还…

让AIGC成为你的智能外脑,助力你的工作和生活

人工智能成为智能外脑 在当前的科技浪潮中&#xff0c;人工智能技术正在以前所未有的速度改变着我们的生活和工作方式。其中&#xff0c;AIGC技术以其强大的潜力和广泛的应用前景&#xff0c;正在引领着这场革命。 AIGC技术是一种基于人工智能的生成式技术&#xff0c;它可以通…

光模块市场分析与发展趋势预测

光模块是光通信领域的重要组成部分&#xff0c;随着数字经济&#xff0c;大数据&#xff0c;云计算&#xff0c;人工智能等行业的兴起&#xff0c;光模块市场经历了快速发展&#xff0c;逐渐在数据中心、无线回传、电信传输等应用场景中得到广泛应用。本文将基于当前光模块全球…

[JS设计模式]Flyweight Pattern

Flyweight pattern 享元模式是一种结构化的设计模式&#xff0c;主要用于产生大量类似对象而内存又有限的场景。享元模式能节省内存。 假设一个国际化特大城市SZ&#xff1b;它有5个区&#xff0c;分别为nanshan、futian、luohu、baoan、longgang&#xff1b;每个区都有多个图…

STM32F4的DHT11初始化与实例分析

STM32—— DHT11 本文主要涉及STM32F4 的DHT11的使用以及相关时序的介绍&#xff0c;最后有工程下载地址。 文章目录 STM32—— DHT11一、 DHT11的介绍1.1 DHT11的经典电路 二、DHT11的通信2.1 DHT11的传输数据格式2.2 DHT11 通信分步解析 三、 DHT11 代码3.1 引脚图3.2 电路图…

设计师都在用的5个设计灵感网站,赶紧收藏~

设计没灵感&#xff0c;就上这5个网站&#xff0c;绝对能打开新世界大门&#xff0c;全世界设计师的分享、互交站&#xff0c;最优秀的设计作品都在这&#xff0c;赶紧收藏好了~ pinterest​&#xff08;梯子&#xff09; https://www.pinterest.es/ Pinterest是以瀑布流的方式…

基于Java+SpringBoot+Mybaties-plus+Vue+ElementUI+Vant 电影院订票管理系统 的设计与实现

一.项目介绍 基于SpringBootVue 电影院订票管理系统 分为前端和后端。 前端&#xff08;用户&#xff09;&#xff1a; 登录后支持查看首页、电影、影院和我的信息 支持查看正在热映和即将上映的电影信息 支持购票&#xff08;需选择影院座位&#xff09;、看过&#xff08;评论…

千帆 AppBuilder 初体验,不仅解决解决了我筛选简历的痛苦,更是让提效10倍!

文章目录 &#x1f31f; 前言&#x1f31f; 什么是百度智能云千帆 AppBuilder&#x1f31f; 百度智能云千帆 AppBuilder 初体验&#x1f31f; 利用千帆AppBuilder搭建简历小助手&#x1f31f; 让人眼前一亮的神兵利器 - 超级助理 &#x1f31f; 前言 前两天朋友 三掌柜 去北京…

3. BlazorSignalRApp 结合使用 ASP.NET Core SignalR 和 Blazor

参考&#xff1a;https://learn.microsoft.com/zh-cn/aspnet/core/blazor/tutorials/signalr-blazor?viewaspnetcore-8.0&tabsvisual-studio 1.创建新项目 BlazorSignalRApp 2.添加项目依赖项 依赖项&#xff1a;Microsoft.AspNetCore.SignalR.Client 方式1 管理解决方案…