Arduino 入门程序示例之直流电机(2015-06-15)

概述

演示直流电机的控制。

示例程序

PWM控制直流电机

略过控制电机转停的示例啦,有需要就把这里的 PWM 换成数字口输出 HIGH 或 LOW 就行了。

// ----------------------------------------------------------------------------
// pwmMotor.ino
//
// Created 2015-06-11
// By seesea <seesea2517#gmail#com>
//
// PWM 控制直流电机转速
// 其实就是之前的 PWM 控制 LED 的程序,完全一样,只是硬件上加上一个三极管用来驱动电机而已
//
// 11 脚接 NPN 三极管的基极,三极管集电极接电机一脚,电机另一脚接外接电源正极,三极管发射极接外接电源负,arduino 的 GND 也接到三极管发射极
// ----------------------------------------------------------------------------

const unsigned char motor  = 11;
const unsigned char sensor = A0;

void setup()
{
    pinMode(motor,  OUTPUT);
    pinMode(sensor, INPUT);
}

void loop()
{
    // 用 map 函数进行范围的映射
    analogWrite(motor, map(analogRead(sensor), 0, 1023, 0, 255));
}

上个接线图和效果图:

H桥控制直流电机

// ----------------------------------------------------------------------------
// hBridgeMotor.ino
//
// Created 2015-06-11
// By seesea <seesea2517#gmail#com>
//
// H 桥控制直流电机演示
// 通过 H 桥控制直流电机的转动方向
// 先顺时针转一秒,再逆时针转一秒,停一秒,重复前述动作
//
// 根据 H 桥实际的电路进行接线。手头没有现成的芯片,用了四个三极管搭的粗糙的 H 桥原型来做的实验
// ----------------------------------------------------------------------------

const unsigned char pinMotorCW  = 10;   // 接控制电机顺时针转的 H 桥引脚
const unsigned char pinMotorCCW = 11;   // 接控制电机逆时针转的 H 桥引脚

// 电机停转
void motorStop()
{
    digitalWrite(pinMotorCW,  LOW);
    digitalWrite(pinMotorCCW, LOW);
}

// 电机顺时针转
void motorCW()
{
    digitalWrite(pinMotorCW,  HIGH);
    digitalWrite(pinMotorCCW, LOW);
}

// 电机逆时针转
void motorCCW()
{
    digitalWrite(pinMotorCW,  LOW);
    digitalWrite(pinMotorCCW, HIGH);
}

void setup()
{
    pinMode(pinMotorCW,  OUTPUT);
    pinMode(pinMotorCCW, OUTPUT);
}

void loop()
{
    motorCW();
    delay(1000);

    motorCCW();
    delay(1000);

    motorStop();
    delay(1000);
}

手工搭的 H 桥,太乱了就看个效果吧,建议直接用现成的芯片。

接了红绿两个 LED 用来直观的看 PWM 和 方向:

PWM + H 桥控制直流电机

同时控制直流电机的方向及转速

// ----------------------------------------------------------------------------
// pwmHBridgeMotor.ino
//
// Created 2015-06-11
// By seesea <seesea2517#gmail#com>
//
// PWM 通过 H 桥控制直流电机
// 既控制电机的转速,也控制电机的方向
// 控制电机顺时针逐渐转快,再逐渐转慢,然后逆时针由慢转快再转慢,又回到顺时针的转动循环
//
// 根据 H 桥实际的电路进行接线。手头没有现成的芯片,用了四个三极管搭的粗糙的 H 桥原型来做的实验
// ----------------------------------------------------------------------------

const unsigned char pinMotorCW  = 10;   // 接控制电机顺时针转的 H 桥引脚
const unsigned char pinMotorCCW = 11;   // 接控制电机逆时针转的 H 桥引脚

// 电机停转
void motorStop()
{
    digitalWrite(pinMotorCW, LOW);
    digitalWrite(pinMotorCCW, LOW);
}

// 电机以参数设定的 pwm 值顺时针转
void motorCW(unsigned char pwm)
{
    analogWrite(pinMotorCW,   pwm);
    digitalWrite(pinMotorCCW, LOW);
}

// 电机以参数设定的 pwm 值逆时针转
void motorCCW(unsigned char pwm)
{
    digitalWrite(pinMotorCW, LOW);
    analogWrite(pinMotorCCW, pwm);
}

void setup()
{
    pinMode(pinMotorCW,  OUTPUT);
    pinMode(pinMotorCCW, OUTPUT);
}

void loop()
{
    unsigned char i;

    // 顺时针由慢到快
    for (i = 0; i < 255; ++i)
    {
        motorCW(i);
        delay(10);
    }

    // 顺时针由快到慢
    for (i = 255; i > 0; --i)
    {
        motorCW(i);
        delay(10);
    }

    // 逆时针由慢到快
    for (i = 0; i < 255; ++i)
    {
        motorCCW(i);
        delay(10);
    }

    // 逆时针由快到慢
    for (i = 255; i > 0; --i)
    {
        motorCCW(i);
        delay(10);
    }
}

用三极管搭的简陋 H 桥就看个效果啦,建议直接用现成的芯片。

接了红绿两个 LED 用来直观的看 PWM 和 方向:

时间: 2024-12-29 07:27:28

Arduino 入门程序示例之直流电机(2015-06-15)的相关文章

Arduino 入门程序示例之一个 LED(2015-06-11)

前言 答应了群主写一些示例程序,一直拖延拖延拖延唉.主要还是害怕在各大高手面前班门弄斧……(这也算是给拖延症找一个美好的理由吧),这几天终于下决心要写出来了,各位高手拍砖敬请轻拍啊. 示例程序 首先是闪灯程序 示例自带的闪灯就略过了,这里写个不大一样的,使用 millis() 来进行时间间隔的判断,与示例使用 delay() 的方式比较,这种方式不会阻塞主进程,以后很多地方会用得上的: // ----------------------------------------------------

Arduino 入门程序示例之一排 LED(2015-06-11)

概述 最简单的一个 LED 的实验之后,自然是增加几个 LED,咱排成一排来玩吧.最后,再把一排的 LED 排成一个 8 字来玩——七段数码管. 示例程序 流水灯 第一个出场的肯定是经典的流水灯,也叫跑马灯 // ---------------------------------------------------------------------------- // flowingLEDS.ino // // Created 2015-05-31 // By seesea <seesea25

Arduino 入门程序示例之步进流电机(2015-06-28)

概述 演示单极步进电机的控制.没有现成的 H 桥模块,双极步进电机就不做实验啦. 这里没有使用 stepper 库,用 IO 粗糙地原始地驱动,更增进对步进电机驱动的理解. 示例程序 整步驱动 // ---------------------------------------------------------------------------- // unipolarStepperTest_fullStep.ino // // Created 2015-06-27 // By seesea

Arduino 入门程序示例之一片 LED(2015-06-11)

概述 从点到线,从线到面.现在开始要来一片的 LED 了,一大泼 LED 正在到来! 示例程序 因为手头没有现成的模块,手头只有 595,所以这里每一个示例程序都是使用 74HC595 扩展 IO 口的.后面不多加备注了. 现成的模块还有其它专门的驱动芯片的,程序写起来就更简单了,要根据具体的驱动芯片来决定程序,这个程序不通用的哦. 点阵显示静止的心 别看到静止两个字,这里点阵可是动态扫描的哟.所以程序里不能有 delay() 等阻塞主函数的延时函数. // ------------------

2015.06.15,学习,读书笔记-《语法俱乐部》学习笔记

第一篇先介绍简单句,从基本句型切入.第二篇探讨的是复句和合句.第三篇的简化从句又建立在第二篇复句.合句的基础上. 第一章:基本句型及补语 提出了五种基本句型: S+V,主语+动词 S+V+O,主语+动词+宾语 S+V+C,主语+动词+补语 S+V+O+O,主语+动词+宾语+宾语 S+V+O+C,主语+动词+宾语+补语 笔记: 像die这种可以独立发生.不牵涉别的人或物,这种动词叫做不及物动词:像kill这种动作,必须发生在另一个对象身上,叫做及物动词,后面通常必须跟着一个宾语来接受这个动作. 系

JavaCV入门之示例程序

最近因项目需要用到JavaCV,所以本小白在项目正式开始之前先学习了一下JavaCV,记录一下学习过程.附上第一个入门程序: 1.JavaCV简介 JavaCV 是一款开源的视觉处理库,使用它可以采集视频和音频,给这些音视频编解码,然后是用指定格式封装这些音视频数据,以及用什么协议传输 GitHub: https://github.com/bytedeco/javacv 2.maven引入jar包 <dependency> <groupId>org.bytedeco</gro

06.Lucen入门程序-Field

需求: 实现一个歌词搜索系统,通过关键字搜索,凡是文件名或文件内容包括关键字的文件都要找出来. 注意:该入门程序只对文本文件(.txt)搜索. Lucene中包含两个重要的类: IndexWriter:写索引,维护索引库,增删改操作. IndexReader:读取索引. IndexSearcher:索引库查询需要用到 创建索引库步骤: 第一步:指定索引库存放的位置.指定一个磁盘目录. 第二步:指定创建索引的分析器. 第三步:创建文档对象,在文档对象中指定域. 第四步:创建索引库

Arduino入门学习

一直听到许多做物联网.智能家居的控制器使用的是Arduino,从师兄那里拿到了一块Arduino开发板,进行了一下午的学习,感觉这个适合小孩子们玩:) 废话少说,总结一下,便于以后可能会用得到.我主要参考了百度文库的一个60+页的<arduino从零开始学>和一些技术论坛如极客工坊吧. 由于之前学习过若干块开发板,这里主要探究他们的异同,移植问题. 个人总结为三部分: 一.arduino IDE环境的搭建 由于无法进入官网下载,这里选择了1.6.11免安装版,并且是中文环境,非常方便 (2)驱

Lucene入门程序-Java API的简单使用

Lucene入门程序 准备环境 JDK: 1.8.0_162 IDE: Eclipse Neon.3 数据库: MySQL 5.7.20 Lucene: 4.10.4(已经很稳定了,高版本对部分分词器支持不好) 准备数据 SET FOREIGN_KEY_CHECKS=0; -------------------------------- Table structure for `book` -------------------------------- DROP TABLE IF EXISTS