零知两轮小车高级版(零知mini主控)系列教程-魔术手

本系列教程讲解零知小车套件以零知迷你板为主控,使用零知开源平台进行智能小车开发。
使用的硬件:零知智能小车套件-零知智能小车高级版(零知mini主控)

实现的功能:红外循迹、超声波避障、直线运行、手机蓝牙控制、灭火等基本功能。

扩展:可以在小车上加入其它传感器模块进行扩展,比如加入摄像头模块进行监控、加入更多超声波模块实现自动跟随...

高级版系列教程将使用多文件编程的方式来编写程序,教程主要包含以下几个部分:

零知两轮小车高级版(零知mini主控)系列教程-小车组装(点击跳转)

零知两轮小车高级版(零知mini主控)系列教程-程序控制电机开跑(点击跳转)

零知两轮小车高级版(零知mini主控)系列教程-加入蓝牙实现手机控制(点击跳转)

零知两轮小车高级版(零知mini主控)系列教程-红外循迹走S弯(点击跳转)

零知两轮小车高级版(零知mini主控)系列教程-超声波自动避障(点击跳转)

零知两轮小车高级版(零知mini主控)系列教程-灭火小车(点击跳转)

零知两轮小车高级版(零知mini主控)系列教程-使用PID走直线(点击跳转)

零知两轮小车高级版(零知mini主控)系列教程-魔术手(点击跳转)

零知两轮小车高级版(零知mini主控)系列教程-贴边行驶(点击跳转)

一、工具原料
(1)组装好的智能小车


二、程序代码
高级版教程将使用多文件编程的方式来编写代码,包含所有功能的完整工程可在下面下载。
魔术手的效果是通过小车前面的超声波来实现的,由于超声波只能测量手的距离,所以这里只实现小车的前进后退,主程序如下所示:


				
/**********************************************************
*    文件: LZSmartCarMotor.ino      by 零知实验室([url=http://www.lingzhilab.com]www.lingzhilab.com[/url])
*    -^^- 零知开源,让电子制作变得更简单! -^^-
*    时间: 2019/11/30 09:37
*    说明: 零知智能小车-高级版,两轮/四轮-迷你板主控
************************************************************/
 
#include "pinsdefine.h"
#include "motor.h"
#include "caravoidance.h"
 
LZSmartCarMotor myMotor;
 
//超声波避障
CarAvoidance carAvoidance;
 
void magicHand()
{
        int speed;
        int maxStopDis = 17, minStopDis = 13;  // 停车的距离范围
        int distance = carAvoidance.getDistance();  // 超声波获取手的距离
        Serial.print("距离:");Serial.println(distance);
         
        if(distance > maxStopDis + minStopDis)
                distance = maxStopDis + minStopDis;
        // 测得的距离大于停车的距离范围,小车前进
        if (distance > maxStopDis)
        {
                speed = map(distance, maxStopDis, maxStopDis+minStopDis, 60, 120);  // 距离映射到速度,加减速的效果
                myMotor.motorRun(speed,speed);
                Serial.println("前进");
        }
        // 测得的距离小于停车范围,小车后退
        else if (distance < minStopDis)
        {
                speed = map(distance, minStopDis, 0, -60, -120);
                myMotor.motorRun(speed,speed);
                Serial.println("后退");
        }
        else
        {
                myMotor.stop();
                Serial.println("停车");
        }
}
 
void setup() {
         
        Serial.begin(9600);
        Serial.println("开车啦...");
         
        myMotor.stop();
}
 
void loop() {
         
        magicHand();
}
				

包含所有功能的完整工程: lzsmartcar_v5.zip 

下载上面的完整工程,在代码里选择魔术手的功能,验证上传至小车的mini板,魔术手的功能就完成了。