美文网首页玩转树莓派树莓派arduino
树莓派+Arduino 实现简易的手势识别智能小车(课设)

树莓派+Arduino 实现简易的手势识别智能小车(课设)

作者: 呆呆的院长 | 来源:发表于2019-05-27 21:48 被阅读110次

    本实验使用Arduino+树莓派进行简单的手势识别,实现对小车状态的控制

    材料准备:

    • Arduino开发板一块
    • 树莓派3B
    • 杜邦线若干
    • L298N
    • 小车底盘
    • HC-05蓝牙模块
    • MMA7361传感器

    实现原理:

    树莓派通过蓝牙串口与Arduino连接(实验室没有多余的蓝牙模块,零时想到用树莓派上的蓝牙代替下,使用树莓派作为主控控制小车有点大材小用哈哈),工作时Arduino作为发送端通过蓝牙传感器将佩戴在手上的加速度传感器的x,y轴变化量传输到树莓派上,树莓派作为接收端根据x,y轴变化量驱动L298N,实现对小车的状态控制。

    连线:

    Arduino+HC-05+加速度传感器 树莓派+L298N+直流电机.jpg

    树莓派蓝牙配置(图形化界面下)

    每次重启树莓派我们都需要进行配置,在树莓派上生成HC-05模块的配置文件rfcomm0
    1.点击树莓派桌面上方蓝牙标志,连接HC-05(密码默认:1234)
    2.在树莓派终端
    依次输入:

    bluetoothctl //进入蓝牙控制查看HC-05物理地址
    exit          //退出蓝牙控制
    sudo rfcomm bind0 B8:XX:XX:XX //B8:XX:XX:XX为刚刚查看的HC-05的物理地址
    

    运行结果如下图,则在/etc中成功生成配置rfcomm0文件,


    图1.png

    Arduino端代码(发送端):

    Arduino端:
    int X = A1;
    int Y = A0;
    void setup() {
      Serial.begin(9600);
      pinMode(X,INPUT);
      pinMode(Y,INPUT);
      // put your setup code here, to run once:
    
    }
    
    void loop() {
      
     /* Serial.print("X:");
      Serial.println(analogRead(X));
      Serial.print("Y:");
      Serial.println(analogRead(Y));*/
      if(analogRead(Y)>700){
        Serial.write('b');
      }
       if(analogRead(Y)<400){
        Serial.write('g');
      }
      if(analogRead(X)<400){
        Serial.write('l');
      }
       if(analogRead(X)>600){
        Serial.write('r');
      }
      delay(800);
      // put your main code here, to run repeatedly:
    }
    

    树莓派端代码(接收端):

    #coding=utf-8
    import RPi.GPIO as GPIO
    import time
    import serial
    from time import sleep
    GPIO.setmode(GPIO.BOARD) //按照树莓派物理引脚
    IN1 = 11
    IN2 = 12
    IN3 = 13
    IN4 = 15
    ENA = 16
    ENB = 18
    port = '/dev/rfcomm0'
    ser = serial.Serial(port,9600)
    ser.flushInput()
    def init():
        GPIO.setup(IN1, GPIO.OUT)
        GPIO.setup(IN2, GPIO.OUT)
        GPIO.setup(IN3, GPIO.OUT)
        GPIO.setup(IN4, GPIO.OUT)
        GPIO.setup(ENB, GPIO.OUT)
        GPIO.setup(ENA, GPIO.OUT)
    def up():
        GPIO.output(IN1, GPIO.HIGH)
        GPIO.output(IN2, GPIO.HIGH)
        GPIO.output(IN3, GPIO.LOW)
        GPIO.output(IN4, GPIO.LOW)
    def down():
        GPIO.output(IN1, GPIO.LOW)
        GPIO.output(IN2, GPIO.LOW)
        GPIO.output(IN3, GPIO.HIGH)
        GPIO.output(IN4, GPIO.HIGH)
    def turn_left():
        GPIO.output(IN1, GPIO.HIGH)
        GPIO.output(IN2, GPIO.LOW)
        GPIO.output(IN3, GPIO.LOW)
        GPIO.output(IN4, GPIO.LOW)
    def turn_right():
        GPIO.output(IN1, GPIO.LOW)
        GPIO.output(IN2, GPIO.HIGH)
        GPIO.output(IN3, GPIO.LOW)
        GPIO.output(IN4, GPIO.LOW)
    def breaking():
        GPIO.output(IN1, GPIO.LOW)
        GPIO.output(IN2, GPIO.LOW)
        GPIO.output(IN3, GPIO.LOW)
        GPIO.output(IN4, GPIO.LOW)
    
    while(1):
        init()
        GPIO.output(ENA, GPIO.HIGH)
        GPIO.output(ENB, GPIO.HIGH)
        n = ser.inWaiting()
        breaking()
        if(n):
            v=ser.read(n)
            if(v=="g"):
                print("aa")
                up()
            if(v=="b"):
                down()
            if(v=="l"):
                turn_left()
            if(v=="r"):
                turn_right()
    
        sleep(.8)
    

    注意事项:

    • 某宝购买的L298N的ENA、ENB都需要置高电平,GND与树莓派GND连接否则直流电机无法工作,L298N可以使用4节1.5V电池组供电。
    • 树莓派每次重启后都要重新配置rfcomm0文件

    演示视屏

    基本实现了功能,三等咸鱼,在线摸鱼,欢迎评论交流,如在茫茫人海中对您有所帮助,记得点赞呦,谢谢!

    相关文章

      网友评论

        本文标题:树莓派+Arduino 实现简易的手势识别智能小车(课设)

        本文链接:https://www.haomeiwen.com/subject/zmfonqtx.html