可变电阻
组件

连接
**
代码
int sensor = A0; // 设定sensor 指向A0int sensorRead = 0; // 读取到的数值int data = 0;void setup() {Serial.begin(9600);pinMode(LED_BUILTIN, OUTPUT);}void loop() {sensorRead = analogRead(sensor); // 从A0 读取数值data = map(sensorRead, 0, 1023, 0, 100); // 默认0-1023 更改为0-100Serial.println(data);delay(1000);}

map()
描述:将数据从一个范围映射到另一个范围。
函数原型:map(value, fromLow, fromHigh, toLow, toHigh)
参数:
value: 要映射的数据
fromLow: 当前范围的下限值。
formHigh: 当前范围的上限值。
toLow: 目标范围的下限值。
toHigh: 目标范围的上限值。
返回值:重新映射后的数据。
伺服马达

原理
它内部有一个基准电路,产生周期为 20ms,宽度为 1.5ms 的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。

接线**
| 主板 | 模块 |
|---|---|
| 5V | VCC 红线 |
| GND | GND棕线 |
| ~9 | S 橙色线 |
#include <Servo.h> // 导入库Servo myservo; // 定义舵机对象,最多八个int pos = 0; // 定义舵机转动位置void setup(){myservo.attach(7); // 设置舵机控制针脚}void loop(){// 0到180旋转舵机,每次延时15毫秒for(pos = 0; pos < 180; pos += 1){myservo.write(pos);delay(5);}// 180到0旋转舵机,每次延时15毫秒for(pos = 180; pos>=1; pos-=1){myservo.write(pos);delay(5);}}
解析
- write() 方法 设置马达转到多少度位置
74HC595

int big = 2;innt push = 3;int datain = 4;int datainput[8] = {1,0,1,0,1,0,1,0,1,0};void setup(){pinMode(big, OUTPUT);pinMode(push, OUTPUT);pinMode(datain, OUTPUT);}void loop(){digitalWrite(big, LOW); // 放下平台for(int i=0; i<8; i++){digitalWrite(push, datainput[i]); // 拉回活塞digitalWrite(datain, number);digitalWrite(push,HIGH); // 放好信号,推出去}digitalWrite(big, HIGH);}

8*8矩阵LED
接线


#include "MAX7219_MaxMatrix.h"//define Max7219 pins#define PIN_DIN 7 //max 7219#define PIN_CS 6#define PIN_CLK 5MaxMatrix ledmatrix(PIN_DIN,PIN_CS,PIN_CLK, 1); // init Max7219 LED Matrix, 1 modulevoid setup(){Serial.begin(9600);ledmatrix.init();ledmatrix.setIntensity(1);delay(1000);ledmatrix.clearMatrix();Serial.println("zero:0\none:1\ntwo:2\nthree:3\nfour:4\nfive:5\nsix:6\nseven:7\neight:8\nnine:9\nsmile:10\nhappyOpen:11\nhappyClosed:12\nheart:13\nbigSurprise:14\nsmallSurprise:15\ntongueOut:16\nvamp1:17\nvamp2:18\nlineMouth:19\nconfused:20\ndiagonal:21\nsad:22\nsadOpen:23\nsadClosed:24\nokMouth:25\nxMouth:26\ninterrogation:27\nthunder:28\nculito:29\nangry:30");}void loop() {while(Serial.available()) {int val = Serial.parseInt();if (val >= 0 && val <= 30) {ledmatrix.writeFull(ledmatrix.getMouthShape(val));}delay(2000);}}
蜂鸣器
- 接入9号引脚 ```c void setup() { pinMode(9,OUTPUT); }
void loop() { digitalWrite(9,HIGH); delay(2000); digitalWrite(9,LOW); delay(2000); }
<a name="NkuNZ"></a>### 无源蜂鸣器```cint pinBuzzer = 8; //管脚D3连接到蜂鸣器模块的信号脚void setup() {pinMode(pinBuzzer, OUTPUT); //设置pinBuzzer脚为输出状态}void loop() {long frequency = 600; //频率, 单位Hz//用tone()函数发出频率为frequency的波形tone(pinBuzzer, frequency);delay(1000); //等待1000毫秒noTone(pinBuzzer);//停止发声delay(2000); //等待2000毫秒}
超声波测距
超声波测距模块有四个引脚VCC、Trig、Echo、GND
准备
- 主板
- 面包板
- 超声波模块
- 跳线
接线
| 主板 | 模块 |
|---|---|
| GND | GND |
| 3 | Echo |
| 2 | Trig |
| VCC | VCC |
原理
- 发射接口Trig 接收接口Echo
- IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间
const int TrigPin = 2;const int EchoPin = 3;float distance; // 距离void setup(){Serial.begin(9600);pinMode(TrigPin, OUTPUT);pinMode(EchoPin, INPUT);Serial.println("准备工作完成");}void loop(){digitalWrite(TrigPin, LOW);delayMicroseconds(2); // 以微秒为单位做延迟digitalWrite(TrigPin, HIGH); // 发射开始计时delayMicroseconds(10);digitalWrite(TrigPin, LOW);distance = pulseIn(EchoPin, HIGH)/58.0; // 得出距离// 输出到控制台Serial.print("距离:");Serial.print(distance);Serial.print("cm");Serial.println();delay(1000);}

解析
pulseIn(pin, value, timeout)函数:用于检测引脚输出的高低电平的脉冲宽度
- pin 需要读取脉冲的引脚
- value 需要读取的脉冲类型,HIGH或LOW
- timeout 超时时间,单位微秒
pulseIn测出来的是超声波从发射到接收所经过的时间
us = 微妙声波在光中传播速度343m/s=>34300cm/s 34300cm/s => 0.0343cm/us
做转换 由 0.0343cm 1微妙 =》 1/0.0343*1 = 29.154 us/cm。 29.154微秒表示1厘米的距离
因为发送-接受。 测得的时间即往返的时间。 所以由测得的时间/(29*2) = 真实距离
光敏传感器
原理
有光->电阻小
无光->电阻大
准备
- 主板
- 光敏电阻
- LED灯
- 跳线
接线

**
程序
int ADPIN = A0; // 电压读取端口int LedPIN = 11; // LED灯接口int value = 0; // 定义value起始值void setup(){Serial.begin(9600);pinMode(LedPIN,OUTPUT);Serial.println("初始化完毕");}void loop(){value = analogRead(ADPIN);Serial.println(value);if(value<512){digitalWrite(LedPIN, HIGH);}else{digitalWrite(LedPIN, LOW);}delay(1000);}


解析
analogRead来获取传递过来的电压高低。值越低表示环境暗 ,值越高表示环境亮
红外遥控

库下载地址
https://github.com/z3t0/Arduino-IRremote
#include "IRremote.h"int RECV_PIN = 6; //定义红外接收器的引脚为12IRrecv irrecv(RECV_PIN); // 将红外线脚位设定为6decode_results results; // 接收到的红外线迅号值void setup(){Serial.begin(9600);irrecv.enableIRIn(); // 初始化红外接收器Serial.println("正在初始化...");}void loop() {if (irrecv.decode(&results)) { // 如果接收到红外线信号Serial.println(results.value, HEX);irrecv.resume(); // 接收下一个值}delay(120);}
RGB灯 - 共阳三色雾状LED灯



#define led_red 9 //Pin 9 连接上 led的红色引脚#define led_green 10#define led_blue 11void setup() {pinMode(led_red,OUTPUT); //设置为输出模式pinMode(led_green,OUTPUT);pinMode(led_blue,OUTPUT);analogWrite(led_red,255); //首先,先把所有的灯都关闭analogWrite(led_green,255); //可以随意设置开启关闭哪些灯,搭配出不同组合有不同颜色analogWrite(led_blue,255);}void loop() {// put your main code here, to run repeatedly:for(int i=200;i>0;i--) //渐亮{analogWrite(led_red,i); //慢慢开启红色和绿色会搭配出黄色analogWrite(led_green,i);analogWrite(led_blue,255);delay(10);}for(int i=0;i<200;i++) //渐灭{analogWrite(led_red,255); //慢慢关闭绿色和蓝色会搭配出较鲜艳的蓝色analogWrite(led_green,i);analogWrite(led_blue,i);delay(10);}}
Joystick遥感模块
接线
- GND-GND
- +5V —- 5V
- VRx —- A0
- VRy —- A1
- SW —- 7 (自定义)
int sw =7;void setup() {Serial.begin(9600);pinMode(sw,INPUT);digitalWrite(sw,HIGH);}void loop() {int x = analogRead(A0);int y = analogRead(A1);int z = digitalRead(sw);Serial.println(x);if(x<500){Serial.println("向左");}if(x>600){Serial.println("向右");}if(y<500){Serial.println("向上");}if(y>600){Serial.println("向下");}if(x>500 &&x<600 &&y>500 &&y<600){Serial.println("原地不动");}delay(500);}

原理
x,y 模拟输出,z 数字输出
不动: 519 507 0
向下:519 1024 0
向上:519 0 0
向左:0 507 0
向右:1023 507 0
按下: 519 507 1
因此:上下左右由x,y 就可以确定 按下由z确定
微型人体感应模块
接线
- VCC - 正极
- OUT - 信号引脚
- GND - 接地
原理
- 人进入其感应范围则输出高电平, 人离开感应范围则自动延时关闭高电平,输出低电平
void setup() {Serial.begin(9600);pinMode(7,INPUT);}void loop() {int n = digitalRead(7);Serial.println(n);delay(1000);}
灯带
库文件下载
https://github.com/adafruit/Adafruit_NeoPixel
连线


触摸传感器

const int flag = 7;void setup() {Serial.begin(9600);pinMode(flag, INPUT); // 设置输入模式}void loop() {int val = digitalRead(flag);if(val == HIGH){Serial.println("触摸了");}else{}delay(700);}
马达

/**************************************///直流电机控制//直流电机将开始向左和向右旋转,其速度将相应变化//网址http://www.qutaojiao.com/category/course/arduino//2017.10.17/***************************************/const int motorIn1 = 9; // 电机的一个引脚连接到引脚9const int motorIn2 = 10; // 电机的另一个引脚连接到引脚10/***************************************//****************************************///驱动电机的功能顺时针旋转void clockwise(int Speed){analogWrite(motorIn1, Speed); ///设置电机的速度analogWrite(motorIn2, 0); //停止电机的motorIn2引脚}//驱动电机的功能逆时针void counterclockwise(int Speed){analogWrite(motorIn1, 0); //停止电机的motorIn1引脚writeWriteanalogWrite(motorIn2, Speed); //设置电机的速度}void setup(){pinMode(motorIn1, OUTPUT); //将motorIn1引脚初始化为输出引脚模式pinMode(motorIn2, OUTPUT); //将motorIn2引脚初始化为输出}/****************************************/void loop(){clockwise(200); //顺时针旋转delay(1000);counterclockwise(200); //逆时针旋转delay(1000);}/****************************************/

