不带舵机驱动代码:

有障碍物的话------就右转或者左转避开

#!/usr/bin/env pythonimport RPi.GPIO as GPIO
import time
import sys
#BCM编码
PWMA   = 18
AIN1   = 22
AIN2   = 27PWMB   = 23
BIN1   = 25
BIN2   = 24BtnPin  = 19#这三个引脚不晓得干啥的
Gpin    = 5
Rpin    = 6
#超声波工作引脚
TRIG = 20       ##设置Trig和ECHO俩个引脚
ECHO = 21def t_up(speed,t_time):L_Motor.ChangeDutyCycle(speed)GPIO.output(AIN2,False)#AIN2GPIO.output(AIN1,True) #AIN1R_Motor.ChangeDutyCycle(speed)GPIO.output(BIN2,False)#BIN2GPIO.output(BIN1,True) #BIN1time.sleep(t_time)def t_stop(t_time):L_Motor.ChangeDutyCycle(0)GPIO.output(AIN2,False)#AIN2GPIO.output(AIN1,False) #AIN1R_Motor.ChangeDutyCycle(0)GPIO.output(BIN2,False)#BIN2GPIO.output(BIN1,False) #BIN1time.sleep(t_time)def t_down(speed,t_time):L_Motor.ChangeDutyCycle(speed)GPIO.output(AIN2,True)#AIN2GPIO.output(AIN1,False) #AIN1R_Motor.ChangeDutyCycle(speed)GPIO.output(BIN2,True)#BIN2GPIO.output(BIN1,False) #BIN1time.sleep(t_time)def t_left(speed,t_time):L_Motor.ChangeDutyCycle(speed)GPIO.output(AIN2,True)#AIN2GPIO.output(AIN1,False) #AIN1R_Motor.ChangeDutyCycle(speed)GPIO.output(BIN2,False)#BIN2GPIO.output(BIN1,True) #BIN1time.sleep(t_time)def t_right(speed,t_time):L_Motor.ChangeDutyCycle(speed)GPIO.output(AIN2,False)#AIN2GPIO.output(AIN1,True) #AIN1R_Motor.ChangeDutyCycle(speed)GPIO.output(BIN2,True)#BIN2GPIO.output(BIN1,False) #BIN1time.sleep(t_time)def keysacn():##按键开关引脚val = GPIO.input(BtnPin)#输入引脚while GPIO.input(BtnPin) == False:#低电平val = GPIO.input(BtnPin)while GPIO.input(BtnPin) == True:#高电平time.sleep(0.01)val = GPIO.input(BtnPin)if val == True:GPIO.output(Rpin,1)while GPIO.input(BtnPin) == False:GPIO.output(Rpin,0)else:GPIO.output(Rpin,0)def setup():GPIO.setwarnings(False)GPIO.setmode(GPIO.BCM)GPIO.setup(TRIG, GPIO.OUT)GPIO.setup(ECHO, GPIO.IN)GPIO.setup(Gpin, GPIO.OUT)     # Set Green Led Pin mode to outputGPIO.setup(Rpin, GPIO.OUT)     # Set Red Led Pin mode to outputGPIO.setup(BtnPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)    # Set BtnPin's mode is input, and pull up to high level(3.3V)GPIO.setup(AIN2,GPIO.OUT)GPIO.setup(AIN1,GPIO.OUT)GPIO.setup(PWMA,GPIO.OUT)GPIO.setup(BIN1,GPIO.OUT)GPIO.setup(BIN2,GPIO.OUT)GPIO.setup(PWMB,GPIO.OUT)
def distance():#同超声波测量距离原理GPIO.output(TRIG, 0)time.sleep(0.000002)GPIO.output(TRIG, 1)time.sleep(0.00001)GPIO.output(TRIG, 0)#准备开始阶段while GPIO.input(ECHO) == 0:a = 0time1 = time.time()while GPIO.input(ECHO) == 1:a = 1time2 = time.time()during = time2 - time1return during * 340 / 2 * 100def loop():#判断要不要规避while True:dis = distance()if (dis < 40) == True:          #前方有障碍物,进行规避右转while (dis < 40) == True:#距离《40t_down(30,0.5)          #占空比改变速度t_right(30,0.1)dis = distance()else:t_up(50,0)print(dis, 'cm')print('')def destroy():GPIO.cleanup()if __name__ == "__main__":setup()         #设置对应输入输出引脚L_Motor= GPIO.PWM(PWMA,100)    #左边使能A#L_Motor.start(0)R_Motor = GPIO.PWM(PWMB,100)R_Motor.start(0)t_stop(.1)#       keysacn()#不需要这一步也行!!!try:loop()except KeyboardInterrupt:destroy()

二、带舵机模块:

舵机运转:(如果舵机不是由树莓派供电的话,需要将该电源与树莓派共地,也就是说电源的负极必须与树莓派任意一个GND连接,否则会出现舵机控制失常等现象。如果

  1. DutyCycle =  angle/18 + 2-------通过改变占空比控制舵机转换角度
  2. 0度对应——2%占空比
  3. 90度对应——7%占空比
  4. 180度——12%占空比

工作原理:


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

带舵机小车代码 :

#!/usr/bin/env python
from Adafruit_PWM_Servo_Driver import PWM
import RPi.GPIO as GPIO
import time
import sysPWMA   = 18
AIN1   = 22
AIN2   = 27PWMB   = 23
BIN1   = 25
BIN2   = 24BtnPin  = 19#舵机接口
Gpin    = 5
Rpin    = 6TRIG = 20
ECHO = 21
# Initialise the PWM device using the default address
# bmp = PWM(0x40, debug=True)
pwm = PWM(0x40,debug = False)servoMin = 150  # Min pulse length out of 4096
servoMax = 600  # Max pulse length out of 4096def setServoPulse(channel, pulse):pulseLength = 1000000.0                   # 1,000,000 us per secondpulseLength /= 50.0                       # 60 Hzprint("%d us per period" % pulseLength)pulseLength /= 4096.0                     # 12 bits of resolutionprint("%d us per bit" % pulseLength)pulse *= 1000.0pulse /= (pulseLength*1.0)
# pwmV=int(pluse)print("pluse: %f  " % (pulse))pwm.setPWM(channel, 0, int(pulse))#调用其他函数库#Angle to PWM
def write(servonum,x):  #改变占空比-----》改变舵机角度!!!!!!!!!!!!!!!!!!!!y=x/90.0+0.5y=max(y,0.5)y=min(y,2.5)setServoPulse(servonum,y)def t_up(speed,t_time):L_Motor.ChangeDutyCycle(speed)GPIO.output(AIN2,False)#AIN2GPIO.output(AIN1,True) #AIN1R_Motor.ChangeDutyCycle(speed)GPIO.output(BIN2,False)#BIN2GPIO.output(BIN1,True) #BIN1time.sleep(t_time)def t_stop(t_time):L_Motor.ChangeDutyCycle(0)GPIO.output(AIN2,False)#AIN2GPIO.output(AIN1,False) #AIN1R_Motor.ChangeDutyCycle(0)GPIO.output(BIN2,False)#BIN2GPIO.output(BIN1,False) #BIN1time.sleep(t_time)def t_down(speed,t_time):L_Motor.ChangeDutyCycle(speed)GPIO.output(AIN2,True)#AIN2GPIO.output(AIN1,False) #AIN1R_Motor.ChangeDutyCycle(speed)GPIO.output(BIN2,True)#BIN2GPIO.output(BIN1,False) #BIN1time.sleep(t_time)def t_left(speed,t_time):L_Motor.ChangeDutyCycle(speed)GPIO.output(AIN2,True)#AIN2GPIO.output(AIN1,False) #AIN1R_Motor.ChangeDutyCycle(speed)GPIO.output(BIN2,False)#BIN2GPIO.output(BIN1,True) #BIN1time.sleep(t_time)def t_right(speed,t_time):L_Motor.ChangeDutyCycle(speed)GPIO.output(AIN2,False)#AIN2GPIO.output(AIN1,True) #AIN1R_Motor.ChangeDutyCycle(speed)GPIO.output(BIN2,True)#BIN2GPIO.output(BIN1,False) #BIN1time.sleep(t_time)def keysacn():val = GPIO.input(BtnPin)while GPIO.input(BtnPin) == False:val = GPIO.input(BtnPin)while GPIO.input(BtnPin) == True:time.sleep(0.01)val = GPIO.input(BtnPin)if val == True:GPIO.output(Rpin,1)while GPIO.input(BtnPin) == False:GPIO.output(Rpin,0)else:GPIO.output(Rpin,0)def setup():GPIO.setwarnings(False)GPIO.setmode(GPIO.BCM)GPIO.setup(TRIG, GPIO.OUT)GPIO.setup(ECHO, GPIO.IN)GPIO.setup(Gpin, GPIO.OUT)     # Set Green Led Pin mode to outputGPIO.setup(Rpin, GPIO.OUT)     # Set Red Led Pin mode to outputGPIO.setup(BtnPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)    # Set BtnPin's mode is input, and pull up to high level(3.3V)GPIO.setup(AIN2,GPIO.OUT)GPIO.setup(AIN1,GPIO.OUT)GPIO.setup(PWMA,GPIO.OUT)GPIO.setup(BIN1,GPIO.OUT)GPIO.setup(BIN2,GPIO.OUT)GPIO.setup(PWMB,GPIO.OUT)pwm.setPWMFreq(50)                        # Set frequency to 60 Hzdef distance(): #测量距离函数GPIO.output(TRIG, 0)time.sleep(0.000002)GPIO.output(TRIG, 1)time.sleep(0.00001)GPIO.output(TRIG, 0)while GPIO.input(ECHO) == 0:a = 0time1 = time.time()while GPIO.input(ECHO) == 1:a = 1time2 = time.time()during = time2 - time1return during * 340 / 2 * 100def front_detection():#测量前后间距write(0,90)time.sleep(0.5)dis_f = distance()return dis_fdef left_detection():#write(0, 175)time.sleep(0.5)dis_l = distance()return dis_ldef right_detection():write(0,5)time.sleep(0.5)dis_r = distance()return dis_rdef loop():while True:dis1 = front_detection()if (dis1 < 40) == True:t_stop(0.2)t_down(50,0.5)t_stop(0.2)dis2 = left_detection()dis3 = right_detection()if (dis2 < 40) == True and (dis3 < 40) == True:t_left(50,1)elif (dis2 > dis3) == True:t_left(50,0.3)t_stop(0.1)else:t_right(50,0.3)t_stop(0.1)else:t_up(60,0)#  print dis1, 'cm'# print ''def destroy():GPIO.cleanup()if __name__ == "__main__":setup()L_Motor= GPIO.PWM(PWMA,100)L_Motor.start(0)R_Motor = GPIO.PWM(PWMB,100)R_Motor.start(0)keysacn()try:loop()except KeyboardInterrupt:destroy()

小车运行视频 :

树莓派小车避障之——超声波控制(2.1)相关推荐

  1. 树莓派小车————避障篇

    避障模块的功能就是让小车能够检测到障碍物并且可以正确的避开障碍物.当然避障的方式有很多种.我选择的是超声波结合红外传感器来避障. 为什么要用超声波传感器结合红外传感器? 因为硬件原因,没有舵机,原本超 ...

  2. WeMos下实现小车避障与手机控制

    参考:WeMos下实现小车避障与手机控制 作者:爱学习的小王呀 发布时间:2020-10-02 10:17:45 网址:https://blog.csdn.net/hongliwong/article ...

  3. STC单片机实现智能小车避障功能的C语言例程

    使用STC单片机实现智能小车避障功能的C语言例程: #include <reg52.h>// 定义GPIO口映射宏,需根据具体型号和连接方式进行修改 #define MOTOR_LEFT_ ...

  4. 树莓派红外避障小车python_基于树莓派的环保“捡垃圾”机器人小车(避障、摄像、红外、WIFI)...

    项目:基于树莓派的环保"捡垃圾"机器人小车控制平台 功能:避障.锁定某个障碍物 概述: 目前这个控制平台能够识别是"垃圾"只是塑料瓶,核心是利用Arduino控 ...

  5. matlab智能小车避障,Arduino智能小车系列教程4——超声波避障

    Arduino智能小车系列教程4--超声波避障 Arduino智能小车系列教程 准备材料 超声波模块HC-SR04 舵机固定架 舵机安装 超声波接线 代码测试 代码详解 int getDistance ...

  6. vrep小车避障算法_V-REP 小车建模

    任务概要参考文档中 Tutorial – BubbleRob Tutorial 部分,学习:车身与轮子物理引擎的设计 动力学模型等参数的设置 传感器的添加与使用 驱动关节的设计与控制 控制脚本的编写 ...

  7. my_RIO实现小车避障

    my_RIO实现小车的超声波避障 设计思路 labVIEW程序设计![在这里插入图片描述](https://img-blog.csdnimg.cn/20210620152515364.JPG?x-os ...

  8. NI myrio+labview+红外传感器小车避障巡线控制

    一.实验设备与软件 1.NI myRIO一块,小车一台,自备iPad或手机. 2.软件系统:Win7系统,Labview2015开发软件,NI myRIO2015驱动程序,APP软件Data Dash ...

  9. 如何使用树莓派制作避障机器人

    学习Arduino或者树莓派的过程中,如果仅仅看代码或者做简单实验,那么常常会虎头蛇尾,所以我们建议还是尝试一些简单的机器人项目,这样既有趣也能不断学习提高.本文将向大家展示如何使用树莓派制作简单的避 ...

最新文章

  1. 这些Java8官方挖的坑,你踩过几个?
  2. R语言deLong‘s test:通过统计学的角度来比较两个ROC曲线、检验两个ROC曲线的差异是否具有统计显著性
  3. Linux 隐藏Windows,如何在windows不用软件隐藏重要文件
  4. 操作主机PDC Emulator[为企业维护windows server 2008系列六]
  5. 华为备忘录导入印记云笔记_原来华为手机自带会议神器,开会不用手写,这个功能就能搞定...
  6. hbase实践之写流程拾遗
  7. Python中可变类型和不可变类型的数据?
  8. python都有什么包_常用的Python包有哪些,如何快速掌握Python编程
  9. 【BZOJ2653】middle,主席树(非权值线段树)维护序列和信息+二分答案
  10. mysql 1607_Windows下Mysql启动“服务名无效”及“系统错误1607”解决办法
  11. monitor的用法Linux,usb monitor使用方法
  12. 语音识别项目报告.pdf
  13. Mac唤醒后无声的一种解决方法
  14. 定点运算之补码一位乘法(Booth算法)
  15. 2018运动场景内运动检测调研文章
  16. linux中文麻酱字_红糖麻酱卷的做法——Nice to meet you
  17. 红光光浴抗衰机制#大健康#红光光浴#红光#种光光学
  18. Amoeba for Aladdin
  19. 可汗学院统计学1-16课笔记
  20. python crc计算

热门文章

  1. 人类简史:精华语录 (尤瓦尔·赫拉利)
  2. python朋友圈数据分析_第7天|16天搞定Python数据分析,盗墓笔记重现
  3. android 解压 密码 zip 命令,GitHub - Leo0618/AndroidZip: Android端zip压缩与解压,支持使用密码对单文件多文件文件夹进行压缩以及解压操作...
  4. 基于intel x86+fpga智能驾驶舱和高级驾驶辅助系统硬件设计(二)
  5. CCIE-IGMPV2和IGMP SNOOPING
  6. WiFi driver框架的一般层次
  7. PHP中的精确计算bcadd,bcsub,bcmul,bcdiv 及 扩展安装
  8. java雍俊海_JAVA程序设计 雍俊海(学习笔记3)
  9. win10办公共享打印机报错
  10. 一个阶段的结束,意味着另一个阶段的开始