arduino入门

Arduino是一款开源的电子原型平台,包含硬件(开发板)和软件(IDE)。其核心是一个基于Atmel AVR或ARM微控制器的开

Arduino是一款开源的电子原型平台,包含硬件(开发板)和软件(IDE)。其核心是一个基于Atmel AVR或ARM微控制器的开发板,通过简单编程实现硬件控制。常见型号包括Arduino Uno、Nano、Mega等,适合初学者从简单项目入手。本文章以arduino UNO为基础.

点这个可以下载 |Arduino UNO的基础编程软件

1.开启单片机世界的大门:点亮一颗LED灯 

void setup() {
    pinMode(PIN, OUTPUT);
}

void loop() {
    digitalWrite(PIN, HIGH);
    delay(1000);
    digitalWrite(PIN, LOW);
    delay(1000);  
}

Arduino UNO上有一个内置LED灯,这个灯和开发板上的13号数字引脚相连,如果给13号引脚输出高电平,LED被点亮,如果给13号引脚输出低电平,LED熄灭。如果交替给13号引脚输出高低电平,则LED灯将不断闪缩。 

2.PWM信号输出

使用Arduino中的analogWrite()函数可以很方便地输出不同空占比的PWM信号,参数范围为[0-255], 值越大,空占比越大,LED亮度越大。可借此原理实现呼吸灯。

 接线方法(LED灯泡一定要串联一个220Ω的电阻):

 代码如下:

#include <Arduino.h>



void setup() {
pinMode(9, OUTPUT);
}


void loop() {
    for (int a = 0;a<=255 ; a++) {
        digitalWrite(9, a);
        delay(10);
    }

}

3.配置环境:
由于基础的Arduino IDE内部可用库少且不方便,因而改用clion

下载链接:

CLion:JetBrains 出品的 C 和 C++ 跨平台 IDE

这是个付费软件,所以:

点击领取激活码可免费使用(密钥为8866)

还得下载python:https://www.python/downloads/

如何检测安装成功:

摁win+R,输入cmd,打开后输入python,如果不报错,则为安装成功.

这个是下载platform然后在cmd窗口执行:python get-platformio.py

全都下载完成后,进入C盘,进入这个路径然后复制(29016这个路径因人而异,是除公用以外的路径):

点开始按钮,此电脑--属性--在最下面找到高级系统设置--环境变量--path栏--编辑--新建--粘贴刚刚复制的路径

:

然后win+R,输入pio,正确的界面如下:

之后点击clion--插件--Marketplace搜索platformIO--安装后重启clion

然后  新建项目--platform IO--右边随便点击一个--输入Arduino UNO--选中Arduino UNO选项点击创建--等待其加载完毕

等待加载完毕(时间较长)会出现如下图后就可以正常使用了记得使用之前定义头文件

#include <Arduino.h>

4.声控灯:

将声音传感器连接到Uno开发板的某个数字引脚,Uno实时采集声音信号,如果为高电位,通过另一个数字引脚点亮LED灯,持续5秒自动熄灭。

这里我将LED连接到8号引脚,声音传感器连接到7号引脚

代码示例:

连接如下图:

5.用外部中断机制做一个声控灯:

实现外部有声音时,LED灯亮,无声音时LED立马熄灭的效果可用于小蜜蜂之类的麦克风:

6.一位数的数码管的控制:

如下为各个小数码管控制的引脚图:

此数码管相当于一个共阴极的一堆LED灯泡,想要控制其显示哪个数字就使其所对应的数码管输出高电平,不参与其中的数码管显示低电平就好, 代码示例(以数字2为例):

#include <Arduino.h>

#define A 5
#define B 4
#define C 9
#define D 10
#define E 11
#define F 6
#define G 7
#define DP 8

void setup() {
    pinMode(A, OUTPUT);
    pinMode(B, OUTPUT);
    pinMode(C, OUTPUT);
    pinMode(D, OUTPUT);
    pinMode(E, OUTPUT);
    pinMode(F, OUTPUT);
    pinMode(G, OUTPUT);
    pinMode(DP, OUTPUT);
}
void loop() {
    // 显示数字2
    digitalWrite(A, HIGH);
    digitalWrite(B, HIGH);
    digitalWrite(G, HIGH);
    digitalWrite(E, HIGH);
    digitalWrite(D, HIGH);
}

使用第三方库进行四位数码管的显示:

需要安装这个库:akj7/TM1637

安装教程:

点击第一个然后复制这两段代码:

lib_deps =
# RECOMMENDED
# Accept new functionality in a backwards compatible manner and patches
    akj7/TM1637 Driver @ ^2.2.1

 粘贴到下图,之后点击上上图更新工具链,就可以了

四位数码管代码示例:

#include <Arduino.h>
#include "TM1637.h"

TM1637 tm(8, 9);

void setup() {
    // 初始化TM驱动
    tm.init();
    // 设置亮度级别为3
    tm.setBrightness(3);
}

/**
 tm.display(1, true, true, 2)这个函数有四个参数
 第一个参数:需要显示的内容,可以是字母,整数,或者小数
 第二个参数:显示位数溢出时,是否丢弃超出显示范围的内容,都填true即可
 第三个参数:当显示的数据少于可用数码管位数时,是否在末尾补零
 第四个参数:从第几个数码管开始显示内容,0表示从第一位,1表示从第二位,以此类推。
 */
void loop() {
    // 从第一位开始,显示数字1234,将显示"1234"
    tm.display(1234, true, true, 0);
    delay(3000);

    // 从第二位开始,显示5678,溢出的忽略,将显示" 567"
    tm.display(5678, true, true, 1);
    delay(3000);

    // 从第一位开始,显示小数12.45,将显示"12:45"
    tm.display(12.45, true, true, 0);
    delay(3000);

    // 从第二位数码管开始显示数字1,并且在末尾添加0,将显示" 100"
    tm.display(1, true, true, 1);
    delay(3000);

    // 从第一位数码管开始显示字母"ABC",并且在末尾补0,将显示"ABC0"
    tm.display("ABC", true, true, 0);
    delay(3000);
}

 7.温湿度检测

安装的库  adafruit/DHT sensor library @ ^1.4.4,步骤同上

实现代码:

#include <Arduino.h>
#include "TM1637.h"
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>

// 数码管显示对象的创建
TM1637 tm(8, 9);
DHT_Unified dht(10, DHT11);

void setup() {
    Serial.begin(115200);
    tm.init();
    tm.setBrightness(3);
    dht.begin();
}

void loop() {
    // 1. 读取温湿度数据
    sensors_event_t event;
    dht.temperature().getEvent(&event);
    if (isnan(event.temperature)) {
        Serial.println(F("Error reading temperature!"));
    } else {
        Serial.print(F("Temperature: "));
        Serial.print(event.temperature);
        Serial.println(F("°C"));
        // 显示温度
        tm.display(event.temperature, true, true, 0);
        delay(1000);
    }
    // Get humidity event and print its value.
    dht.humidity().getEvent(&event);
    if (isnan(event.relative_humidity)) {
        Serial.println(F("Error reading humidity!"));
    } else {
        Serial.print(F("Humidity: "));
        Serial.print(event.relative_humidity);
        Serial.println(F("%"));
        // 显示湿度
        tm.display(event.relative_humidity, true, true, 0);
        delay(1000);
    }

}

8.红外倒车检测

代码示例:

#include <Arduino.h>

#define TRIG_PIN 8  // 超声波触发引脚
#define ECHO_PIN 9  // 超声波回波接收引脚
#define BEE_PIN 13  // 报警器报警引脚

void setup() {
    Serial.begin(9600);
    pinMode(TRIG_PIN, OUTPUT);
    pinMode(ECHO_PIN, INPUT);
    pinMode(BEE_PIN, OUTPUT);
}

void loop() {
    // 模拟10us的高电平脉冲信号
    digitalWrite(TRIG_PIN, LOW);
    delayMicroseconds(2);
    digitalWrite(TRIG_PIN, HIGH);
    delayMicroseconds(10);
    digitalWrite(TRIG_PIN, LOW);

    // 超声波从发出到回来经历的总时间,单位us
    unsigned long time = pulseIn(ECHO_PIN, HIGH);
    double dis = 0.017 * time;
    Serial.println(dis);

    // 报警逻辑
    unsigned long delayTime = time / 5;   // 每一段报警持续时间,或者两段报警声的间隔时间
    digitalWrite(BEE_PIN, HIGH);
    delay(delayTime);
    digitalWrite(BEE_PIN, LOW);
    delay(delayTime);
}

 连接方式:

9.步进电机的使用

如何使用步进电机

确定转一圈需要多少步

一圈360度,步进电机输出轴的步距角为5.625/64,所以要让输出轴转动一圈,则步进电机需要转动

四相四拍:

360 ÷ (5.625÷32) = 360 ÷ 5.625 * 32 = 2048(步)

四相八拍:

360 ÷ (5.625÷64) = 360 ÷ 5.625 * 64 = 4096(步)

安装依赖库

arduino-libraries/Stepper

代码示例:

#include <Arduino.h>
#include "Stepper.h"

// 这里使用的库是按照四相四拍的方式运行的
#define STEP_NUMBER_ONE_CIRCLE 2048
#define PIN1 8
#define PIN2 9
#define PIN3 10
#define PIN4 11

Stepper stepper(STEP_NUMBER_ONE_CIRCLE, PIN1, PIN3, PIN2, PIN4);

void setup() {
    // 设置转动速度,每分钟输出轴转6圈,10s一圈
    // 速度不能设置得太大,速度太大力矩会变小,甚至出现丢不,无法转动
    stepper.setSpeed(6);
}

void loop() {
    // 顺时针转一圈
    stepper.step(STEP_NUMBER_ONE_CIRCLE);
    delay(1000);

    // 逆时针转半圈
    stepper.step(-STEP_NUMBER_ONE_CIRCLE/2);
    delay(1000);
}

10.ESP8266配网教程

用电脑连接ESP8266,上传以下代码到ESP8266:

#include <Arduino.h>
#include "ESP8266WiFi.h"

void setup() {
    Serial.begin(9600);
    WiFi.mode(WIFI_STA);
    WiFi.begin("邓超", "8888888");
    while (WiFi.status() != WL_CONNECTED) {
        delay(100);
    }
    Serial.println("Wifi connect successfully");
}

void loop() {
}

11.用手机通过局域网控制LED

用到一些简单的前端知识

需要用手机连接该代码产生的WIFI信号,通过复制该WIFI信号的IP地址到浏览器打开来控制灯的开关

代码示例如下:

#include <Arduino.h>
#include "ESP8266WiFi.h"
#include "ESP8266WebServer.h"

ESP8266WebServer server(80);

void handleRoot() {
    String html = "<!DOCTYPE html>\n"
    "<html lang=\"en\">\n"
    "<head>\n"
    "    <meta charset=\"UTF-8\">\n"
    "</head>\n"
    "<body>\n"
    "<h2>板载LED控制</h2>\n"
    "<a href=\"/on\">打开</a>\n"
    "<a href=\"/off\">关闭</a>\n"
    "</body>\n"
    "</html>";
    server.send(200, "text/html", html);
}

void handleOn() {
    digitalWrite(LED_BUILTIN, LOW);
    server.sendHeader("Location", "/");
    server.send(303);
}

void handleOff() {
    digitalWrite(LED_BUILTIN, HIGH);
    server.sendHeader("Location", "/");
    server.send(303);
}

void setup() {
    Serial.begin(115200);
    pinMode(LED_BUILTIN, OUTPUT);
    WiFi.mode(WIFI_AP);
    WiFi.softAP("led-control", "12345678");
    server.begin();
    server.on("/", handleRoot);
    server.on("/on", handleOn);
    server.on("/off", handleOff);
}

void loop() {
    server.handleClient();
}

12.点灯科技的应用

点此链接来下载点灯科技的对应版本

复制用手机添加设备后出现的设备码来添加设备

比如我的设备码为:58e76f1b96ee

示例代码

#define BLINKER_WIFI

#include <Arduino.h>
#include "Blinker.h"

BlinkerButton btn("btn1");

void handleBtn(const String &state) {
    if (state == "on") {
        digitalWrite(LED_BUILTIN, LOW);
        btn.print("on");
    } else {
        digitalWrite(LED_BUILTIN, HIGH);
        btn.print("off");
    }
}

void setup() {
    pinMode(LED_BUILTIN, OUTPUT);
    // 这里的三个参数分别是你手机APP上设备的key,你家里的wifi名,以及wifi密码
    Blinker.begin("58e76f1b96ee", "Xiaomi_E15A", "19910226");
    btn.attach(handleBtn);
    digitalWrite(LED_BUILTIN, HIGH);
}

void loop() {
    Blinker.run();
}

此操作可以随时随地用手机来控制灯泡的亮灭

用手机控制三色灯:

原理同上,代码如下

#define BLINKER_WIFI

#include <Arduino.h>
#include "Blinker.h"

#define RED_PIN D5
#define GREEN_PIN D6
#define BLUE_PIN D8

BlinkerRGB rgb("rgb");

void callback(uint8_t r_data, uint8_t g_data, uint8_t b_data, uint8_t bright_data) {
    Serial.print(r_data);
    Serial.print(" ");
    Serial.print(g_data);
    Serial.print(" ");
    Serial.println(b_data);
    analogWrite(RED_PIN, r_data);
    analogWrite(GREEN_PIN, g_data);
    analogWrite(BLUE_PIN, b_data);
}

void setup() {
    Serial.begin(9600);
    pinMode(RED_PIN, OUTPUT);
    pinMode(GREEN_PIN, OUTPUT);
    pinMode(BLUE_PIN, OUTPUT);
    Blinker.begin("4a7330ca228a", "Xiaomi_E15A", "19910226");
    rgb.attach(callback);
}

void loop() {
    Blinker.run();
}

13.PCB的使用

下载路径:

国产嘉立创EDA - 一个用心为中国人定制的电路板开发平台

 这里即可低级DIY自己想要的电路板

创建项目如下图:

发布者:admin,转转请注明出处:http://www.yc00.com/web/1754594214a5179491.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信