可变电阻

组件
image.png
image.png
连接
**

代码

  1. int sensor = A0; // 设定sensor 指向A0
  2. int sensorRead = 0; // 读取到的数值
  3. int data = 0;
  4. void setup() {
  5. Serial.begin(9600);
  6. pinMode(LED_BUILTIN, OUTPUT);
  7. }
  8. void loop() {
  9. sensorRead = analogRead(sensor); // 从A0 读取数值
  10. data = map(sensorRead, 0, 1023, 0, 100); // 默认0-1023 更改为0-100
  11. Serial.println(data);
  12. delay(1000);
  13. }

image.png

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

伺服马达

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


舵机转动脉冲图.gif
接线**

主板 模块
5V VCC 红线
GND GND棕线
~9 S 橙色线
  1. #include <Servo.h> // 导入库
  2. Servo myservo; // 定义舵机对象,最多八个
  3. int pos = 0; // 定义舵机转动位置
  4. void setup()
  5. {
  6. myservo.attach(7); // 设置舵机控制针脚
  7. }
  8. void loop()
  9. {
  10. // 0到180旋转舵机,每次延时15毫秒
  11. for(pos = 0; pos < 180; pos += 1)
  12. {
  13. myservo.write(pos);
  14. delay(5);
  15. }
  16. // 180到0旋转舵机,每次延时15毫秒
  17. for(pos = 180; pos>=1; pos-=1)
  18. {
  19. myservo.write(pos);
  20. delay(5);
  21. }
  22. }

解析

  • write() 方法 设置马达转到多少度位置

74HC595

image.png

  1. int big = 2;
  2. innt push = 3;
  3. int datain = 4;
  4. int datainput[8] = {1,0,1,0,1,0,1,0,1,0};
  5. void setup(){
  6. pinMode(big, OUTPUT);
  7. pinMode(push, OUTPUT);
  8. pinMode(datain, OUTPUT);
  9. }
  10. void loop(){
  11. digitalWrite(big, LOW); // 放下平台
  12. for(int i=0; i<8; i++){
  13. digitalWrite(push, datainput[i]); // 拉回活塞
  14. digitalWrite(datain, number);
  15. digitalWrite(push,HIGH); // 放好信号,推出去
  16. }
  17. digitalWrite(big, HIGH);
  18. }

image.png

8*8矩阵LED

接线

image.png
IMG_20190925_224138.jpg

  1. #include "MAX7219_MaxMatrix.h"
  2. //define Max7219 pins
  3. #define PIN_DIN 7 //max 7219
  4. #define PIN_CS 6
  5. #define PIN_CLK 5
  6. MaxMatrix ledmatrix(PIN_DIN,PIN_CS,PIN_CLK, 1); // init Max7219 LED Matrix, 1 module
  7. void setup(){
  8. Serial.begin(9600);
  9. ledmatrix.init();
  10. ledmatrix.setIntensity(1);
  11. delay(1000);
  12. ledmatrix.clearMatrix();
  13. 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");
  14. }
  15. void loop() {
  16. while(Serial.available()) {
  17. int val = Serial.parseInt();
  18. if (val >= 0 && val <= 30) {
  19. ledmatrix.writeFull(ledmatrix.getMouthShape(val));
  20. }
  21. delay(2000);
  22. }
  23. }

蜂鸣器IMG_20190925_225724.jpg

  • 接入9号引脚 ```c void setup() { pinMode(9,OUTPUT); }

void loop() { digitalWrite(9,HIGH); delay(2000); digitalWrite(9,LOW); delay(2000); }

  1. <a name="NkuNZ"></a>
  2. ### 无源蜂鸣器
  3. ```c
  4. int pinBuzzer = 8; //管脚D3连接到蜂鸣器模块的信号脚
  5. void setup() {
  6. pinMode(pinBuzzer, OUTPUT); //设置pinBuzzer脚为输出状态
  7. }
  8. void loop() {
  9. long frequency = 600; //频率, 单位Hz
  10. //用tone()函数发出频率为frequency的波形
  11. tone(pinBuzzer, frequency);
  12. delay(1000); //等待1000毫秒
  13. noTone(pinBuzzer);//停止发声
  14. delay(2000); //等待2000毫秒
  15. }

超声波测距

超声波测距模块有四个引脚VCC、Trig、Echo、GND

准备

  • 主板
  • 面包板
  • 超声波模块
  • 跳线

接线

主板 模块
GND GND
3 Echo
2 Trig
VCC VCC

原理
image.png

  • 发射接口Trig 接收接口Echo
  • IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间
  1. const int TrigPin = 2;
  2. const int EchoPin = 3;
  3. float distance; // 距离
  4. void setup()
  5. {
  6. Serial.begin(9600);
  7. pinMode(TrigPin, OUTPUT);
  8. pinMode(EchoPin, INPUT);
  9. Serial.println("准备工作完成");
  10. }
  11. void loop()
  12. {
  13. digitalWrite(TrigPin, LOW);
  14. delayMicroseconds(2); // 以微秒为单位做延迟
  15. digitalWrite(TrigPin, HIGH); // 发射开始计时
  16. delayMicroseconds(10);
  17. digitalWrite(TrigPin, LOW);
  18. distance = pulseIn(EchoPin, HIGH)/58.0; // 得出距离
  19. // 输出到控制台
  20. Serial.print("距离:");
  21. Serial.print(distance);
  22. Serial.print("cm");
  23. Serial.println();
  24. delay(1000);
  25. }

image.png

解析
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灯
  • 跳线

接线
image.png
IMG_20191028_104027.jpg
**

程序

  1. int ADPIN = A0; // 电压读取端口
  2. int LedPIN = 11; // LED灯接口
  3. int value = 0; // 定义value起始值
  4. void setup()
  5. {
  6. Serial.begin(9600);
  7. pinMode(LedPIN,OUTPUT);
  8. Serial.println("初始化完毕");
  9. }
  10. void loop()
  11. {
  12. value = analogRead(ADPIN);
  13. Serial.println(value);
  14. if(value<512){
  15. digitalWrite(LedPIN, HIGH);
  16. }else{
  17. digitalWrite(LedPIN, LOW);
  18. }
  19. delay(1000);
  20. }

image.png

image.png
解析
analogRead来获取传递过来的电压高低。值越低表示环境暗 ,值越高表示环境亮

红外遥控

image.png
库下载地址
https://github.com/z3t0/Arduino-IRremote

  1. #include "IRremote.h"
  2. int RECV_PIN = 6; //定义红外接收器的引脚为12
  3. IRrecv irrecv(RECV_PIN); // 将红外线脚位设定为6
  4. decode_results results; // 接收到的红外线迅号值
  5. void setup()
  6. {
  7. Serial.begin(9600);
  8. irrecv.enableIRIn(); // 初始化红外接收器
  9. Serial.println("正在初始化...");
  10. }
  11. void loop() {
  12. if (irrecv.decode(&results)) { // 如果接收到红外线信号
  13. Serial.println(results.value, HEX);
  14. irrecv.resume(); // 接收下一个值
  15. }
  16. delay(120);
  17. }

RGB灯 - 共阳三色雾状LED灯

image.png

image.png

image.png

  1. #define led_red 9 //Pin 9 连接上 led的红色引脚
  2. #define led_green 10
  3. #define led_blue 11
  4. void setup() {
  5. pinMode(led_red,OUTPUT); //设置为输出模式
  6. pinMode(led_green,OUTPUT);
  7. pinMode(led_blue,OUTPUT);
  8. analogWrite(led_red,255); //首先,先把所有的灯都关闭
  9. analogWrite(led_green,255); //可以随意设置开启关闭哪些灯,搭配出不同组合有不同颜色
  10. analogWrite(led_blue,255);
  11. }
  12. void loop() {
  13. // put your main code here, to run repeatedly:
  14. for(int i=200;i>0;i--) //渐亮
  15. {
  16. analogWrite(led_red,i); //慢慢开启红色和绿色会搭配出黄色
  17. analogWrite(led_green,i);
  18. analogWrite(led_blue,255);
  19. delay(10);
  20. }
  21. for(int i=0;i<200;i++) //渐灭
  22. {
  23. analogWrite(led_red,255); //慢慢关闭绿色和蓝色会搭配出较鲜艳的蓝色
  24. analogWrite(led_green,i);
  25. analogWrite(led_blue,i);
  26. delay(10);
  27. }
  28. }

Joystick遥感模块

⭐️ 组件 - 图23

接线

  • GND-GND
  • +5V —- 5V
  • VRx —- A0
  • VRy —- A1
  • SW —- 7 (自定义)
  1. int sw =7;
  2. void setup() {
  3. Serial.begin(9600);
  4. pinMode(sw,INPUT);
  5. digitalWrite(sw,HIGH);
  6. }
  7. void loop() {
  8. int x = analogRead(A0);
  9. int y = analogRead(A1);
  10. int z = digitalRead(sw);
  11. Serial.println(x);
  12. if(x<500)
  13. {
  14. Serial.println("向左");
  15. }
  16. if(x>600)
  17. {
  18. Serial.println("向右");
  19. }
  20. if(y<500)
  21. {
  22. Serial.println("向上");
  23. }
  24. if(y>600)
  25. {
  26. Serial.println("向下");
  27. }
  28. if(x>500 &&x<600 &&y>500 &&y<600)
  29. {
  30. Serial.println("原地不动");
  31. }
  32. delay(500);
  33. }

image.png

原理

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 - 接地

原理

  • 人进入其感应范围则输出高电平, 人离开感应范围则自动延时关闭高电平,输出低电平
  1. void setup() {
  2. Serial.begin(9600);
  3. pinMode(7,INPUT);
  4. }
  5. void loop() {
  6. int n = digitalRead(7);
  7. Serial.println(n);
  8. delay(1000);
  9. }

灯带

库文件下载
https://github.com/adafruit/Adafruit_NeoPixel

连线

image.png

image.png

触摸传感器

IMG_20191106_121131.jpg

  1. const int flag = 7;
  2. void setup() {
  3. Serial.begin(9600);
  4. pinMode(flag, INPUT); // 设置输入模式
  5. }
  6. void loop() {
  7. int val = digitalRead(flag);
  8. if(val == HIGH){
  9. Serial.println("触摸了");
  10. }else{
  11. }
  12. delay(700);
  13. }

马达

image.png

  1. /**************************************/
  2. //直流电机控制
  3. //直流电机将开始向左和向右旋转,其速度将相应变化
  4. //网址http://www.qutaojiao.com/category/course/arduino
  5. //2017.10.17
  6. /***************************************/
  7. const int motorIn1 = 9; // 电机的一个引脚连接到引脚9
  8. const int motorIn2 = 10; // 电机的另一个引脚连接到引脚10
  9. /***************************************/
  10. /****************************************/
  11. //驱动电机的功能顺时针旋转
  12. void clockwise(int Speed)
  13. {
  14. analogWrite(motorIn1, Speed); ///设置电机的速度
  15. analogWrite(motorIn2, 0); //停止电机的motorIn2引脚
  16. }
  17. //驱动电机的功能逆时针
  18. void counterclockwise(int Speed)
  19. {
  20. analogWrite(motorIn1, 0); //停止电机的motorIn1引脚writeWrite
  21. analogWrite(motorIn2, Speed); //设置电机的速度
  22. }
  23. void setup()
  24. {
  25. pinMode(motorIn1, OUTPUT); //将motorIn1引脚初始化为输出引脚模式
  26. pinMode(motorIn2, OUTPUT); //将motorIn2引脚初始化为输出
  27. }
  28. /****************************************/
  29. void loop()
  30. {
  31. clockwise(200); //顺时针旋转
  32. delay(1000);
  33. counterclockwise(200); //逆时针旋转
  34. delay(1000);
  35. }
  36. /****************************************/