python代码实现树莓派3b+驱动步进电机
python代码实现树莓派3b+驱动步进电机
之前买了个树莓派,刚买回来那会儿热情高涨,折腾了一段时间,然后就放那吃灰了。前几天忽然想起来这个东西了,决定再玩玩儿,于是就从某宝上购买了一套步进电机、驱动板。东西收到后就开始折腾研究,下边来总结下折腾的结果吧。
先来说下都需要什么吧,树莓派的这一套都少不了,树莓派3b+主板、TF卡、树莓派电源、步进电机以及对应的驱动板、杜邦线6根(母对母),差不多就这么多吧。
引脚
首先,我们先看下树莓派的40个Pin都是什么功能吧!可以通过过树莓派的命令行窗口来查询,输入命令:
gpio readall
输出的结果是什么呢?见下图:

上边图中已经全部显示了40个GPIO的定义。下边是我从网上荡了一张图带颜色的图,看的会更清楚一些:

上图可以看到,这些Pin的编码方式有三种,分别是BOARD编码、BCM编码和WiringPi编码。这些都是什么含义呢?下边我们来一一说下:
BOARD编码
上图也写了,就是物理引脚嘛,怎么编码的呢,就是在一列的引脚1、2,旁边的是3、4……直接上图吧,估计也说不清楚。由于我的主板已经安装到盒子里边了,固定也挺麻烦的,我就从网上荡一张来说事儿吧!

上图从左到右、从下到上以及进行编码,物理编码的起始值为1,从1到40。
BCM编码
BCM编码起始为是从0开始编码的,并且不像BOARD编码方式那样有序,他是根据功能进行编码的。具体的编码可以结合BOARD编码查看上边那张带颜色的表,从而确定每个引脚的功能。
WiringPin编码
这是另外一种编码方式,具体也没研究的太透,这里就简单略过吧,免得误人子弟了。
至于为什么要讲这写呢,首先是连接点击要用,另外就是编写代码要用。
步进电机及驱动板
看完编码当时,加下来我们再说下步进电机和驱动板电路吧。
步进电机
我这个型号是28BYJ-48 5V DC,也没少好解释的,某宝上一搜一大把,而且还很便宜。

驱动板
驱动板必须要跟点击匹配,否则必有一坏,就是看什么坏了。这个买的时候跟老板说,都懂,顺便一起买了,白菜价。

下来就说怎么用吧,步进电机根据自己的接口进行连接,由于我的就是那个匹配白色排针接口的,所以就不解释了,就算是傻子也接不错。
重点是怎么跟树莓派连接?IN1~IN4是控制信号输入接口;G接树莓派的GND引脚,不要问我为什么,就是这么接的,查看原理图得出来的结论。V呢接树莓派5V的引脚,不要问我为什么,记住就是这么接的就行了。
怎么显示他们的工作状态呢,看到上边的D1~D4了没,那就是等,给谁信号谁亮。
我就不上我具体的接线图了,因为盒子拆装太麻烦,并且我的杜邦线都是临时凑出来的,不好看。
代码
下边我们说代码,由于我只会python,所以我就用python来编写,不要让我用C了什么的给你写个,不写,不会!
首先就是安装模块呗,装啥呢?装RPi.GPIO。我用的是python3,所以就在python3下安装的。如果你的出错了别找我,我也不会,因为我的没有出错。解决办法就是百度,网上一找一大堆。
怎么安装呢?
pip3 install RPi.GPIO
接着等提示安装成功就行了。
接下里就是写py代码了,由于我就是做了个简单的测试,所以代码也很简答,能让步进电机转起来。代码呢也是找的,因为他的比我的好看,并且也规范:
import RPi.GPIO as GPIO
import time delay=2 #delay 2ms pin_4 = 4
pin_17 = 17
pin_23 = 23
pin_24 = 24 GPIO.setmode(GPIO.BCM) #设置引脚的编码方式 def init():
GPIO.setwarnings(False)
GPIO.setup(pin_4, GPIO.OUT)
GPIO.setup(pin_17, GPIO.OUT)
GPIO.setup(pin_23, GPIO.OUT)
GPIO.setup(pin_24, GPIO.OUT) def forward(delay):
setStep(1, 0, 0, 0)
time.sleep(delay)
setStep(0, 1, 0, 0)
time.sleep(delay)
setStep(0, 0, 1, 0)
time.sleep(delay)
setStep(0, 0, 0, 1)
time.sleep(delay) def setStep(w1, w2, w3, w4):
GPIO.output(pin_4, w1)
GPIO.output(pin_17, w2)
GPIO.output(pin_23, w3)
GPIO.output(pin_24, w4) def main():
init()
while True:
forward(int(delay) / 1000.0) main() # 调用main
至于代码呢,很简单简单看下吧,设置引脚的编码方式,这就是我上边为什么那么费劲的讲编码方式的原因了,虽然你可能还是看读懂。接下来就是设置引脚的输出,说白了就是你用树莓派的那几个脚来控制步进电机,这个引脚可以根据自己的喜好进行设置。下来就是设置点击怎么转,方向自己设定。
基本上呢就这么多,我也是第一次,什么都不懂,一切都来自网络。
参考链接
python代码实现树莓派3b+驱动步进电机的更多相关文章
- 树莓派(Raspbian系统)中使用pyinstaller封装Python代码为可执行程序
一.前言 将做好的Python软件运行在树莓派上时,不想公开源码,就需要对文件进行封装(或称打包),本文主要介绍使用pyinstaller封装Python代码为可执行程序. Python是一个脚本语言 ...
- 树莓派3b无驱动打印
Linux系统下很少有对打印机做驱动支持,自己做起来又有非常麻烦,还好大多数打印机都能够支持escpos协议,因此我们可以做到无驱动打印. 1.安装python-usb库 git clone http ...
- 树莓派3b添加python时间同步脚本
树莓派没有电池,因此断电后系统时间会停止,直到你开机后又继续计时,所以会造成系统时间和实际时间有很大的误差. 因为项目需要用到本地时间,精度要求不高不想折腾(如果需要高精度,需要安装ntp),所以考虑 ...
- 在树莓派上读取土壤湿度传感器读书-python代码实现及常见问题(全面简单易懂)
本篇文章简单介绍了如何在树莓派上配置土壤湿度传感器以读取土壤湿度(以百分比的形式出现)及代码实现. 主要包含有以下4个模块: 一.土壤湿度传感器常见类型及介绍 二.实验所需设备 三.设备连线方式与代码 ...
- 在树莓派上读取DHT11温湿度传感器-python代码实现及常见问题(全面简单易懂)
最近由于自己的课题需要,想要用在树莓派上使用DHT11温湿度传感器来读取空气中温湿度,遇到了几个问题,解决之后也对之前的知识进行了回顾,总结,特整理如下,希望能给也在学习树莓派的小伙伴们带来一些帮助. ...
- [记录]学习树莓派3B接DHT11和LCD1602和修改树莓派时区
前提 树莓派系统安装好 apache web 服务器,如未安装,可在树莓派内执行sudo apt-get install apache2 进行安装apache 也可以通过命令获取GPIO信息: gpi ...
- 树莓派3B 安装微雪LCD5inch显示器(包含软键盘)
树莓派单独使用时,往往需要触摸屏和软键盘用以方便操作,微雪LCD显示器就能较好的实现这个功能, 正好实验室又买入了一个3B的板子和一个5inch的显示器,便对着官方的安装手册,亲自安装了一次. 一:材 ...
- 学习 27 门编程语言的长处,提升你的 Python 代码水平
Python猫注:Python 语言诞生 30 年了,如今的发展势头可谓如火如荼,这很大程度上得益于其易学易用的优秀设计,而不可否认的是,Python 从其它语言中偷师了不少.本文作者是一名资深的核心 ...
- 树莓派linux驱动学习之hello world
最近想学习一下linux驱动,看了一些书和教学视频,大概了解了一下,不过要想深入,肯定需要实践.手上有几块linux的板子,最终选择了树莓派作为我的实验平台,资料比较丰富,接口也比较简单. 程序员的入 ...
随机推荐
- Nginx 编译设置模块执行顺序
Nginx编译时,配置"--add-module=xxx"可以加入模块,当我们需要按照指定顺序来设置过滤模块执行顺序时,先配置的"--add-module=xxx&quo ...
- 用 Python 写一个 NoSQL 数据库Python
NoSQL 这个词在近些年正变得随处可见. 但是到底 “NoSQL” 指的是什么? 它是如何并且为什么这么有用? 在本文, 我们将会通过纯 Python (我比较喜欢叫它, “轻结构化的伪代码”) 写 ...
- wamp httpd-vhosts.conf
配置Apache的httpd.conf文件 Include conf/extra/httpd-vhosts.conf 修改apache的vhost文件 <VirtualHost *:> D ...
- MR25H10-1Mb密度SPI串行接口MRAM
everspin的MR25H10是一个1,048,576位磁阻随机存取存储器(MRAM)设备,由131,072个8位字组成.MR25H10提供串行EEPROM和串行闪存兼容的读/写时序,没有写延迟,并 ...
- LintCode_181 将整数A转换为B
题目 如果要将整数A转换为B,需要改变多少个bit位? 如把31转换为14,需要改变2个bit位. ()10=()2 ()10=()2 思路 要考虑负数的问题 如果 一正一负 将他们去全部变成正数 后 ...
- SpringCloud 融入 Python - Tornado
前言 该篇文章分享如何将Python Web服务融入到Spring Cloud微服务体系中,并调用其服务,Python Web框架用的是Tornado 构建Python web服务 引入py-eure ...
- Floyd算法模板--详解
对于无权的图来说: 若从一顶点到另一顶点存在着一条路径,则称该路径长度为该路径上所经过的边的数目,它等于该路径上的顶点数减1. 由于从一顶点到另一顶点可能存在着多条路径,每条路径上所经过的边数可能不同 ...
- Object Pool 对象池的C++11使用(转)
很多系统对资源的访问快捷性及可预测性有严格要求,列入包括网络连接.对象实例.线程和内存.而且还要求解决方案可扩展,能应付存在大量资源的情形. object pool针对特定类型的对象循环利用,这些对象 ...
- AJAX(二)-实现验证码异步验证功能
案例实现效果 用户在前端输入验证码,按键收起触发异步验证,验证验证码的对错 前端代码 checkcode.jsp <%-- Created by IntelliJ IDEA. User: cxs ...
- Direct2D 第1篇 最简单的D2D程序
原文:Direct2D 第1篇 最简单的D2D程序 编译之前,得先安装DirectX SDK #include <windows.h> #include <d2d1.h> #i ...