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条)