存档12月 2022

ps2摇杆控制可视化小车(一)

前段时间实验了ps2摇杆控制多舵机实验;今天尝试将ps2摇杆数据转换为四驱小车的方向控制。实验将分两部分,第一部分将叙述整个流程的概要;第二部分将具体去实现。

其中用到的知识点:
1、四驱小车驱动封装参考:https://www.shumeijiang.com/2021/09/23/四驱小车循迹实验-直流电机驱动封装;
2、PCF8591数模转换参考:https://www.shumeijiang.com/2022/10/30/pcf8591-da数模转换实验.html;
3、树莓派间socket通信参考:https://www.shumeijiang.com/2021/10/18/树莓派间通信-socket通信.html;
4、ps2摇杆数据获取参考:https://www.shumeijiang.com/2022/12/07/ps2摇杆传感器实验.html;
5、摄像头数据流参考:https://www.shumeijiang.com/2021/11/14/树莓派摄像头实验(一).html。
实验思路:
1、用到两个树莓派,一个树莓派负责获取摇杆数据;另一个树莓派负责接收指令然后驱动小车行驶;
2、第一个树莓派获取到摇杆数据后,将数据发送给PCF8591数模转换板,转换为数字信号;3、第一个树莓派然将数字信号转换为对应的方向控制,然后通过socket通信将命令发给第二个树莓派;
4、负责执行的树莓派,接收到通信数据后,驱动小车执行对应的命令。
组装示例:
第二篇文章将具体实现如何控制小车行驶起来。

ps2摇杆传感器实验

实验目的:通过实验获取摇杆传感器对应的方向以及数值。从而为摇杆应用提供支持。
传感器示例
    因为摇杆获取的是模拟信号,我们需要将模拟信号转换为数字信号;因此传感器需要配合PCF8591数模转换模块使用。
接线示例:
引脚连接引脚
摇杆GND树莓派GND
摇杆+5V树莓派5V
摇杆VRXPCF8591的AIN0
摇杆VRYPCF8591的AIN1
摇杆SWPCF8591的AIN2

代码示例:


#!/usr/bin/env python
#coding:utf-8

'''
from JiuJiang
树莓酱的操作实例
https:://www.suhmeijiang.com
'''

import time      ##引入time库
import smbus     ##引入控制总线

address = 0x48    ##传感器地址
xAddress = 0x40   ##x轴使用的地址 对应的AIN0
yAddress = 0x41   ##y轴使用的地址 对应的AIN1
zAddress = 0x42   ##z轴使用的地址 对应的AIN2

bus = smbus.SMBus(1)   ##开启总线

##定义监测方法
def getStatus(n):
    if not n: return
    global address

    map = {'x':xAddress, 'y':yAddress, 'z':zAddress}
    if n not in map.keys():
        return False

    #发送一个控制字节到设备 表示要读取n通道的数据
    bus.write_byte(address, map[n])

    #空读一次 消费掉无效数据(重要)
    bus.read_byte(address)

    #返回某通道输入的模拟值A/D转换后的数字值
    return bus.read_byte(address)

##获取方位信息
def getDirection(n):
    if not n: return
    num = getStatus(n)
    num = int(num)

    mess = ''
    if n == 'x':
        if num > 150: mess = 'backward'
        if num < 125: mess = 'forward'

    if n == 'y':
        if num > 150: mess = 'left'
        if num < 125: mess = 'right'

    if n == 'z':
        if num == 0: mess = 'pressed'

    return mess
其中PCF8591数模转换模块参考:https://www.shumeijiang.com/2022/10/30/pcf8591-da数模转换实验.html