`
akiraray
  • 浏览: 90705 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

My Arduino vol 5 — 面向对象地编写“圆梦小车”程序 -电机

 
阅读更多

辞职得空,最近主要是看杂七杂八的书为主。前日看到“嵌入式之梦”的BOSS在微博上亮了一下。就想到了随车附送的那段arduino演示程序。我觉得大部分初学者应该都看的好痛苦吧= =。

既然arduino支持c++,我也就以我业余的c++水平写上一段小小的教程望抛砖引雨吧。

 

阅读本文需要的基本知识:H桥电路基本作用,Arduino开发的基本环境。

 

第一章 让马达动起来

基本电路及说明

小车的动力装置主要是两侧的两个大轮子,分别是用独立的H桥构建出来的。

分别引出3只脚:CT1,CT2,CT3

CT1:PWM信号输入脚,你可以认为这是油门。

CT2,CT3:两路高低输入,可以让电机正转反转和不转,你可以认为这是自动排挡。

我们枚举一下所有信号输入和其对应的行动状态。这里都只先考虑一侧电机的运动状态。

 

表1-控制电路输入值与电机工作状态

Ct1 Ct2 Ct3 状态
X 0 0 刹车
PWM 1 0 正转
PWM 0 1 反转
0 1 1 滑行
1 1 1 刹车

通过表格我们得出一侧电机的运动状态也只有4种,刹车,正转,反转,滑行,刹车。

 

建模及分析

面向对象中建模很重要的两个概念是“属性”和“行为”。通过上面的分析,现在的电机的属性只有3路输入电路,行为就是4种运动状态。

类名 Motor(马达)
属性 ct1,ct2,ct3
行为 forward
stop
backward
neutral(滑行,空挡)

 

转换为C++的代码的类定义为:

/*
 * Motor.h
 *
 *  Created on: 2011-10-17
 *      Author: Akira Panda
 */
#ifndef MOTOR_H_
#define MOTOR_H_
class Motor {
public:
    Motor();
    Motor(int ct1, int ct2, int ct3);
    void init();
    void setSpeed(int speed);
    void forward();
    void stop();
    void backward();
    void neutral();
private:
    int _ct1;
    int _ct2;
    int _ct3;
};
#endif /* MOTOR_H_ */
 

 

代码里主要多了几个比较特殊的方法分别是:

  •     Motor();
  • Motor(int ct1, int ct2, int ct3);
     两种带参数和不带参数的构造方法。

    void setSpeed(int speed);

设定速度的方法,其实就是修改Ct1的值。这里只是我把速度和运行模式分开的。这种方式大概所有学过汽车的童鞋都很好理解,排挡、刹车、油门分离。

 

一些基本的C++语法我也不多解释了,都是可以google到的。

这里主要说一些构造init方法。

这个方法是用来做初始化的。主要是当初我被电机乱转的问题给难住了,最后发现如果在代码里没有明确的设定引脚的output模式就会导致不定期的放出高电压从而扰乱电机的运行状态。所以这个init方法相当于汽车发动转钥匙的作用:初始化所有的引脚。

 

代码与实现

我们一段段来实现这些代码。

起步

首先需要实现的是构造方法

  •  Motor();
  •  Motor(int ct1, int ct2, int ct3);

默认构造方法暂时不实现。 Motor(int ct1, int ct2, int ct3);为主要的构造方法,输入参数为三路控制电路的引脚值。

Motor::Motor(int ct1, int ct2, int ct3) {
//分别赋值
    this->_ct1 = ct1;
    this->_ct2 = ct2;
    this->_ct3 = ct3;
//调用init方法进行引脚的初始化
    this->init();
}
void Motor::init() {
    pinMode(this->_ct1, OUTPUT);
    pinMode(this->_ct2, OUTPUT);
    pinMode(this->_ct3, OUTPUT);
   //起步速度0,模式改为刹车(停止)
    this->setSpeed(0);
    this->stop();
}
 

这样电机可以正常的启动初始化了,只是现在他还不太明白什么叫前进,什么叫停止。

我们在一一实现所有的运行模式。

实现运行模式

void Motor::setSpeed(int speed) {
    analogWrite(this->_ct1, this->_speed);
}
void Motor::forward() {
    digitalWrite(this->_ct2, HIGH);
    digitalWrite(this->_ct3, LOW);
}
void Motor::backward() {
    digitalWrite(this->_ct2, LOW);
    digitalWrite(this->_ct3, HIGH);
}
void Motor::stop() {
    digitalWrite(this->_ct2, LOW);
    digitalWrite(this->_ct3, LOW);
}
void Motor::neutral() {
    digitalWrite(this->_ct1, LOW);
    digitalWrite(this->_ct2, HIGH);
    digitalWrite(this->_ct3, HIGH);
}
 

如何调用代码

现在关于电机的代码已经完成了。

让我们来看看如何在arduino中使用这些代码,首先需要把刚才的Motor.h和Motor.cpp作为库放入arduino的目录中,路径为{arduino目录}libraries\{自己起个名}\。

然后在编辑器里引入头文件<Motor.h>即可

 

#include <Motor.h>
//初始化马达
//这里使用的是9,8,7三个脚
const int L_CT1 = 9;
const int L_CT2 = 8;
const int L_CT3 = 7;
//通过构造函数初始化
Motor leftMotor(L_CT1, L_CT2, L_CT3);
void setup() {
}
void loop{
//模式改为前进,速度100
leftMotor.forward();
leftMotor.setSpeed(100);
delay(1000);
//模式改为停止
leftMotor.stop();
leftMotor.setSpeed(0);
//模式改为后退,速度为50
leftMotor.backward();
leftMotor.setSpeed(100);
delay(1000);
}
 

OK,基本上电机部分已经编码完成。虽然有些地方还可以继续修改。下一篇,我将会将两个电机作为整体来描述小车的动力部分编码。

 

分享到:
评论

相关推荐

    arduino 智能小车程序

    arduino 智能小车程序,可实现,前进,后退,左转,右转,碰见障碍物返回

    arduino的蓝牙小车程序

    根据提供的Arduino蓝牙小车程序的信息,我们可以详细地探讨与该程序相关的知识点,包括硬件配置、软件编程逻辑以及蓝牙通信的基本原理。 ### Arduino蓝牙小车硬件配置 #### L298N电机驱动模块 在该程序中,可以...

    Arduino智能小车功能综合实验(避障循迹遥控跟随)程序源代码.rar

    该程序源代码用于Arduino智能小车功能综合实验(避障循迹遥控跟随)实验。 1、源代码开发软件:Arduino IDE; 2、程序对应处理器是:ATMEGA328P; 3、智能小车电机驱动芯片是:L293D; 4、智能小车电机为:TT直流...

    基于Arduino PID算法控制小车直线行驶(制作步骤+程序+PID库)_如何保持车在路中间直线行驶

    本项目涉及的是利用Arduino结合PID(比例-积分-微分)算法来实现小车的直线行驶,确保它能稳定地保持在道路中央。下面我们将详细探讨PID算法、Arduino在控制系统中的应用以及如何实现这一目标。 首先,PID算法是一...

    圆梦小车的电路和程序

    在程序方面,圆梦小车通常会使用微控制器,如Arduino或ESP32等,进行控制。编程语言可能是C++或MicroPython。程序设计涵盖了初始化设置、输入/输出管理、算法实现等部分。例如,我们需要编写代码来读取传感器数据,...

    Arduino智能小车前后左右运动程序源代码.rar

    该程序源代码用于Arduino智能小车前后左右运动实验。 1、源代码开发软件:Arduino IDE; 2、程序对应处理器是:ATMEGA328P; 3、智能小车电机驱动芯片是:L293D; 4、智能小车电机为:TT直流减速电机; 该程序源代码...

    Arduino智能小车红外遥控实验程序源代码.rar

    该程序源代码用于Arduino智能小车红外遥控实验。 1、源代码开发软件:Arduino IDE; 2、程序对应处理器是:ATMEGA328P; 3、智能小车电机驱动芯片是:L293D; 4、智能小车电机为:TT直流减速电机; 5、需要用到红外...

    arduino小车 电机校正程序

    arduino小车 电机校正程序

    圆梦小车YM1StepbyStep-2.rar

    这部分会介绍如何选择合适的主控板,以及如何编写程序让小车执行特定任务,如直线行驶、转向、避障等。可能涉及到C++或Python等编程语言的基础知识。 4. **无线通信**:为了实现遥控或自主导航,小车可能需要无线...

    Arduino智能小车循迹、测速实验程序源代码.rar

    该程序源代码用于Arduino智能小车循迹+测速实验。 1、源代码开发软件:Arduino IDE; 2、程序对应处理器是:ATMEGA328P; 3、智能小车电机驱动芯片是:L293D; 4、智能小车电机为:TT直流减速电机; 5、需要用到测速...

    步进电机示例程序_arduino电机_Arduino步进电机示例程序_

    本文将详细介绍如何利用Arduino编写程序来控制步进电机,以及涉及到的相关知识点。 首先,步进电机的工作原理是通过接收脉冲信号来驱动电机的转子按照固定的角度(通常称为“步距角”)旋转。每个脉冲使电机前进或...

    Arduino红外循迹小车

    ### Arduino红外循迹小车知识点解析 #### 一、项目概述 Arduino红外循迹小车是一种基于Arduino平台设计与开发的智能小车项目。通过在小车上安装红外传感器,能够实现对特定路径(如黑色线条)的跟踪。该类型的智能...

    Arduino前轮舵机转向智能小车测速程序源代码.rar

    该程序源代码用于Arduino前轮舵机转向智能小车测速实验。 1、源代码开发软件:Arduino IDE; 2、程序对应处理器是:MEGA328P AU; 3、智能小车电机驱动芯片是:L293D; 4、智能小车电机为:TT直流减速电机; 5、需要...

    arduino巡线小车代码

    本篇文章将详细介绍一个基于Arduino的巡线小车程序,该程序不仅包含了基本的巡线功能,还集成了蓝牙控制功能,使得用户可以通过蓝牙设备远程操控小车。 #### 二、硬件配置与接口介绍 在理解程序逻辑之前,首先需要...

    工程训练物料搬运小车Arduino程序.zip

    在本项目中,"工程训练物料搬运小车Arduino程序.zip" 是一个包含了用于教育和学习目的的编程资源。这个压缩包文件重点展示了如何利用Arduino控制物料搬运小车进行高效的自动化操作,尤其是颜色和二维码的识别。以下...

    基于Arduino的WiFi视频小车设-计-制-作-方-案

    基于Arduino的WiFi视频小车设-计-制-作-方-案

    arduino小车控制程序

    在本文中,我们将深入探讨"arduino小车控制程序"这一主题,主要关注其涉及的超声波传感器、舵机控制以及arduino与树莓派之间的通信技术。这些是构建智能小车的关键元素,使得小车能够自主导航并执行复杂的任务。 ...

    Arduino 循迹小车程序

    **Arduino 循迹小车程序详解** 在物联网和智能硬件领域,Arduino 是一款非常流行的开源电子原型开发平台,因其易用性和丰富的扩展性而受到广大爱好者的喜爱。本项目涉及的"Arduino 循迹小车程序"是基于 Arduino 的...

    Arduino-xiaoche-daima(5).zip_Arduino 小车_arduino daima_arduino小车_

    这个“Arduino-xiaoche-daima(5).zip”压缩包包含了智能小车前后左右运动实验的程序代码,为我们的探索提供了基础。 首先,我们需要理解Arduino小车的核心——微控制器。在本项目中,Arduino主板作为微控制器,负责...

    arduino蓝牙小车教程

    ### Arduino蓝牙小车教程知识点详解 #### 一、所需材料及工具 为了完成基于Arduino的蓝牙小车项目,你需要准备以下材料: 1. **Arduino控制板**:作为小车的大脑,负责处理所有的输入和输出数据。 2. **L298N电机...

Global site tag (gtag.js) - Google Analytics