查看: 22902|回复: 264

[经验] 一块扩展板完成Arduino的10类37项实验(代码+图形+仿真)

[复制链接]
  • TA的每日心情
    开心
    2021-1-22 07:16
  • 签到天数: 560 天

    [LV.9]以坛为家II

    发表于 2019-6-10 08:24 | 显示全部楼层 |阅读模式
    本帖最后由 eagler8 于 2019-8-10 07:16 编辑

    000.jpg

    实验目录(动手做):
    一、LED 实验
    01 Blink:D13蓝色 LED 闪烁
    02 Blink2:D12、D13红蓝色 LED 交替闪烁
    03 Blink3:模拟爆闪警灯
    04 Breath_LED:D9 全彩 LED 模拟红色呼吸灯
    二、按键实验
    05 Button:D2 按键控制 D13蓝色 LED
    06 Button_Lock:D3 按键控制 D13 蓝色LED 自锁实验
    三、电位器实验
    07 RS232_AD:串口读取 A0 电位器采集数值(旋转角度270°输出0-3.3V/5V电压信号电位器阻值10K)
    08 Rotation_LED:A0 电位器控制 D11 全彩 LED 蓝色端亮度
    09 RC_Motor:A0 电位器控制 D7 输出口的舵机控制其转动角度(舵机需自备Arduino 需要外部供电)
    四、RGB 全彩 LED 实验
    10 LED_RGB_Text:全彩 LED 基本颜色变化
    11 LED_RGB:全彩 LED 彩虹变化
    五、红外传感器D6实验(红外遥控器需自备)
    12 IRrelay:按红外遥控器任意键,可以控制 D13 LED 开关(控制距离1-8米,频率38KHz,兼容市面上大部分红外遥控器)
    13 IRrecord:串口显示读取的红外遥控代码
    六、温度传感器实验
    14 LM35_RS232AD:串口显示 A2 口 LM35 温度传感器读取的温度(可测试室内外温度,范围-50-150°C,灵敏度好)
    七、温湿度传感器实验
    15 DHT11_Test:串口显示 D4 口 DHT11 温湿度传感器读取的温湿度数据(测温范围0-50°C,湿度范围20%-90%PH)
    八、亮度传感器实验
    16 Light Sensor:串口显示 A1 口光敏电阻采集的数值
    17 Light_LED:A1 口光敏电阻控制 D13 LED 开关(感光比较灵敏,适合教学实验及民用设备)
    九、蜂鸣器实验
    18 Buzzer:D5 口无源蜂鸣器模拟救护车警笛(可发出简单的音乐声,音乐需要通过程序编写)
    十、扩展实验
    19 模拟超声波测距传感器(探测类I,IIC/I2C接口)
    20 总线DS18B20温度传感器(数值类,接扩展板数字D7接口)
    21 TM1637四位数码管(数码管和点阵类,接扩展板数字D7/D8接口)
    22 GY-BMP280-3.3 大气压强高度计传感器模块 ( 数值类,IIC/I2C接口)
    23 GY-NEO-6MV2新款飞控GPS卫星信号接收模块 (数值类,TTL接口)
    24 5V低电平触发单路继电器模块(执行类,数字D7接口)
    25 带驻极话筒4线制声音传感器模块(触发类,数字D7接口)
    26 BH1750FVI 数字光强度模块光照传感器(数值类, IIC/I2C接口)
    27 开源DFPlayer Mini TF卡MP3播放模块(输出执行器类D7/D8数字接口)
    28 LCD1602液晶屏模块(输出显示器类, IIC/I2C接口)
    29 人体红外热释电运动传感器模块 (触发类,数字D7接口)
  • TA的每日心情
    开心
    2021-1-22 07:16
  • 签到天数: 560 天

    [LV.9]以坛为家II

     楼主| 发表于 2019-6-13 14:49 | 显示全部楼层
    本帖最后由 eagler8 于 2021-1-13 15:20 编辑

    13 IRrecord:串口显示读取的红外遥控代码

    1. /*
    2. Eagler8实验程序列表
    3. 13 IRrecord:串口显示读取的红外遥控代码
    4. */

    5. #include <IRremote.h>

    6. int RECV_PIN = 8;
    7. int BUTTON_PIN = 12;
    8. int STATUS_PIN = 13;

    9. IRrecv irrecv(RECV_PIN);
    10. IRsend irsend;

    11. decode_results results;

    12. void setup()
    13. {
    14.   Serial.begin(9600);
    15.   irrecv.enableIRIn(); // Start the receiver
    16.   pinMode(BUTTON_PIN, INPUT);
    17.   pinMode(STATUS_PIN, OUTPUT);
    18. }

    19. // Storage for the recorded code
    20. int codeType = -1; // The type of code
    21. unsigned long codeValue; // The code value if not raw
    22. unsigned int rawCodes[RAWBUF]; // The durations if raw
    23. int codeLen; // The length of the code
    24. int toggle = 0; // The RC5/6 toggle state

    25. // Stores the code for later playback
    26. // Most of this code is just logging
    27. void storeCode(decode_results *results) {
    28.   codeType = results->decode_type;
    29.   int count = results->rawlen;
    30.   if (codeType == UNKNOWN) {
    31.     Serial.println("Received unknown code, saving as raw");
    32.     codeLen = results->rawlen - 1;
    33.     // To store raw codes:
    34.     // Drop first value (gap)
    35.     // Convert from ticks to microseconds
    36.     // Tweak marks shorter, and spaces longer to cancel out IR receiver distortion
    37.     for (int i = 1; i <= codeLen; i++) {
    38.       if (i % 2) {
    39.         // Mark
    40.         rawCodes[i - 1] = results->rawbuf*USECPERTICK - MARK_EXCESS;
    41.         Serial.print(" m");
    42.       }
    43.       else {
    44.         // Space
    45.         rawCodes[i - 1] = results->rawbuf*USECPERTICK + MARK_EXCESS;
    46.         Serial.print(" s");
    47.       }
    48.       Serial.print(rawCodes[i - 1], DEC);
    49.     }
    50.     Serial.println("");
    51.   }
    52.   else {
    53.     if (codeType == NEC) {
    54.       Serial.print("Received NEC: ");
    55.       if (results->value == REPEAT) {
    56.         // Don't record a NEC repeat value as that's useless.
    57.         Serial.println("repeat; ignoring.");
    58.         return;
    59.       }
    60.     }
    61.     else if (codeType == SONY) {
    62.       Serial.print("Received SONY: ");
    63.     }
    64.     else if (codeType == RC5) {
    65.       Serial.print("Received RC5: ");
    66.     }
    67.     else if (codeType == RC6) {
    68.       Serial.print("Received RC6: ");
    69.     }
    70.     else {
    71.       Serial.print("Unexpected codeType ");
    72.       Serial.print(codeType, DEC);
    73.       Serial.println("");
    74.     }
    75.     Serial.println(results->value, HEX);
    76.     codeValue = results->value;
    77.     codeLen = results->bits;
    78.   }
    79. }

    80. void sendCode(int repeat) {
    81.   if (codeType == NEC) {
    82.     if (repeat) {
    83.       irsend.sendNEC(REPEAT, codeLen);
    84.       Serial.println("Sent NEC repeat");
    85.     }
    86.     else {
    87.       irsend.sendNEC(codeValue, codeLen);
    88.       Serial.print("Sent NEC ");
    89.       Serial.println(codeValue, HEX);
    90.     }
    91.   }
    92.   else if (codeType == SONY) {
    93.     irsend.sendSony(codeValue, codeLen);
    94.     Serial.print("Sent Sony ");
    95.     Serial.println(codeValue, HEX);
    96.   }
    97.   else if (codeType == RC5 || codeType == RC6) {
    98.     if (!repeat) {
    99.       // Flip the toggle bit for a new button press
    100.       toggle = 1 - toggle;
    101.     }
    102.     // Put the toggle bit into the code to send
    103.     codeValue = codeValue & ~(1 << (codeLen - 1));
    104.     codeValue = codeValue | (toggle << (codeLen - 1));
    105.     if (codeType == RC5) {
    106.       Serial.print("Sent RC5 ");
    107.       Serial.println(codeValue, HEX);
    108.       irsend.sendRC5(codeValue, codeLen);
    109.     }
    110.     else {
    111.       irsend.sendRC6(codeValue, codeLen);
    112.       Serial.print("Sent RC6 ");
    113.       Serial.println(codeValue, HEX);
    114.     }
    115.   }
    116.   else if (codeType == UNKNOWN /* i.e. raw */) {
    117.     // Assume 38 KHz
    118.     irsend.sendRaw(rawCodes, codeLen, 38);
    119.     Serial.println("Sent raw");
    120.   }
    121. }

    122. int lastButtonState;

    123. void loop() {
    124.   // If button pressed, send the code.
    125.   int buttonState = digitalRead(BUTTON_PIN);
    126.   if (lastButtonState == HIGH && buttonState == LOW) {
    127.     Serial.println("Released");
    128.     irrecv.enableIRIn(); // Re-enable receiver
    129.   }

    130.   if (buttonState) {
    131.     Serial.println("Pressed, sending");
    132.     digitalWrite(STATUS_PIN, HIGH);
    133.     sendCode(lastButtonState == buttonState);
    134.     digitalWrite(STATUS_PIN, LOW);
    135.     delay(50); // Wait a bit between retransmissions
    136.   }
    137.   else if (irrecv.decode(&results)) {
    138.     digitalWrite(STATUS_PIN, HIGH);
    139.     storeCode(&results);
    140.     irrecv.resume(); // resume receiver
    141.     digitalWrite(STATUS_PIN, LOW);
    142.   }
    143.   lastButtonState = buttonState;
    144. }
    复制代码


  • TA的每日心情
    开心
    2021-1-22 07:16
  • 签到天数: 560 天

    [LV.9]以坛为家II

     楼主| 发表于 2019-12-2 08:12 | 显示全部楼层
    yzhkpli 发表于 2019-12-1 23:26
    谢谢。这个店里没有arduino的亚克力垫板卖啊。


    O1CN01xTdLob1t4QgMoWmoQ_!!2761015848.jpg
    O1CN01WkzG1G1t4QgTe1nPC_!!2761015848.jpg
    O1CN01JxN2W51t4QgRB2hbR_!!2761015848.jpg
  • TA的每日心情
    开心
    2021-1-22 07:16
  • 签到天数: 560 天

    [LV.9]以坛为家II

     楼主| 发表于 2019-12-1 17:11 | 显示全部楼层
    yzhkpli 发表于 2019-12-1 16:43
    最便宜的好像是这个
    https://item.taobao.com/item.htm?spm=a230r.1.14.50.3e1f4e22zyfcFn&id=5394736391 ...

    这个 https://item.taobao.com/item.htm ... 3&_u=1cmbdsae23

    系列实验使用的这款

    3D图00.jpg
  • TA的每日心情
    开心
    2021-1-22 07:16
  • 签到天数: 560 天

    [LV.9]以坛为家II

     楼主| 发表于 2019-8-26 16:13 | 显示全部楼层
    本帖最后由 eagler8 于 2019-10-25 11:10 编辑

    [mw_shl_code=arduino,true]/*
    【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)
    实验九十七: 0.96寸I2C IIC通信128*64显示器 OLED液晶屏模块
    安装驱动库:<MENU.h>(新手之帆)
    实验接线:A4---SDA, A5---SCL
    项目:多级菜单
    */

    #include<MENU.h>
    Menu test;
    String s[5]={"time","weather","arduino","esp32","esp8266"};
    void setup() {
      test.Begin(2,3,45,3,"--",0);
      test.Inputstring(s,5,0);
      test.Inputfun_0("a","b","c");
      test.Inputfun_1("f","e","f");
      test.Inputfun_2("fe","h","i");
      test.Inputfun_3("1","k","l");
      test.Inputfun_4("24·","n","o");
    }

    void loop() {
      test.Loop();
    }[/mw_shl_code]
  • TA的每日心情
    开心
    2021-1-22 07:16
  • 签到天数: 560 天

    [LV.9]以坛为家II

     楼主| 发表于 2019-6-10 08:27 | 显示全部楼层
    Aduino UNO 9in1 实验扩展板电原理图
    00线路图.jpg





  • TA的每日心情
    开心
    2021-1-22 07:16
  • 签到天数: 560 天

    [LV.9]以坛为家II

     楼主| 发表于 2019-6-10 08:29 | 显示全部楼层
    Aduino UNO 9in1 实验扩展板de模块与板载端口:


    复位按键(REST)

    10K旋转电位器模块(A0)

    2路SW按键模块(D2、D3)

    Light亮度传感器模块(A1)

    LM35D温度传感器模块(A2)

    Buzzer无源蜂鸣器模块(D5)

    DHT11温湿度传感器模块(D4)

    ER Receiver红外接收模块(D6)

    1路Analog Port模拟量端口(A3)

    RGB全彩LED模块(D9、D10、D11)

    2路Digital Port数字量端口(D7、D8)

    1个TTL串口(可接入蓝牙或WIFI模块等)

    2路3mm LED模块(红色D12、蓝色D13)

    1个双向同步串行总线I2C接口(A4 SDA及A5 SCL,可接显示屏等)



    3D图.jpg
  • TA的每日心情
    开心
    2021-1-22 07:16
  • 签到天数: 560 天

    [LV.9]以坛为家II

     楼主| 发表于 2019-6-10 08:37 | 显示全部楼层
    扩展板主要特性


    优秀PCB设计,美观大方
    完全兼容Arduino UNO R3接口
    预留了5个扩展端口,可以完成其他模块实验
    提供了Arduino初学入门基本实验九种模块
    不用焊接,不用连线,直接下载程序就可以完成实验
    定制加高排针,不会与UNO板的USB接口接触发生短路
    一块板子集成九种模块功能,轻而易举完成18种程序实验
    提供所有模块代码库文件,逐一经过测试,直接就可以使用

    0000-0.jpg

  • TA的每日心情
    开心
    2021-1-22 07:16
  • 签到天数: 560 天

    [LV.9]以坛为家II

     楼主| 发表于 2019-6-10 08:39 | 显示全部楼层
    01 Blink:D13蓝色 LED 闪烁
    [mw_shl_code=arduino,true]/*
      Eagler8实验程序列表
      01 Blink:D13蓝色 LED 闪烁
    */

    int led = 13;

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

    void loop() {
      digitalWrite(led, HIGH);   
      delay(1000);              
      digitalWrite(led, LOW);  
      delay(1000);              
    }[/mw_shl_code]


    01--.jpg



  • TA的每日心情
    开心
    2021-1-22 07:16
  • 签到天数: 560 天

    [LV.9]以坛为家II

     楼主| 发表于 2019-6-10 09:22 | 显示全部楼层
    01-0.jpg


  • TA的每日心情
    开心
    2021-1-22 07:16
  • 签到天数: 560 天

    [LV.9]以坛为家II

     楼主| 发表于 2019-6-10 09:33 | 显示全部楼层
    02 Blink2:D12、D13红蓝色 LED 交替闪烁
    [mw_shl_code=arduino,true]/*
    Eagler8实验程序列表
    02 Blink2:D12、D13红蓝色 LED 交替闪烁
    */
      
    int led1 = 12;
    int led2 = 13;

    void setup() {               
      pinMode(led1, OUTPUT);     
      pinMode(led2, OUTPUT);
    }

    void loop() {
      digitalWrite(led1, HIGH);  
      delay(1000);               
      digitalWrite(led1, LOW);
      digitalWrite(led2, HIGH);  
      delay(1000);
      digitalWrite(led2, LOW);  
    }[/mw_shl_code]





  • TA的每日心情
    开心
    2021-1-22 07:16
  • 签到天数: 560 天

    [LV.9]以坛为家II

     楼主| 发表于 2019-6-10 13:42 | 显示全部楼层
    01-0.jpg
  • TA的每日心情
    开心
    2021-1-22 07:16
  • 签到天数: 560 天

    [LV.9]以坛为家II

     楼主| 发表于 2019-6-10 13:51 | 显示全部楼层
    02 Blink2:D12、D13红蓝色 LED 交替闪烁


    [mw_shl_code=arduino,true]/*
    Eagler8实验程序列表
    02 Blink2:D12、D13红蓝色 LED 交替闪烁
    */
      
    int led1 = 12;
    int led2 = 13;

    void setup() {               
      pinMode(led1, OUTPUT);     
      pinMode(led2, OUTPUT);
    }

    void loop() {
      digitalWrite(led1, HIGH);  
      delay(1000);               
      digitalWrite(led1, LOW);
      digitalWrite(led2, HIGH);  
      delay(1000);
      digitalWrite(led2, LOW);  
    }[/mw_shl_code]

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    热门推荐

    一个通过串口操作Wemos D1连接无线网的程序
    一个通过串口操作Wemos D1
    [md]# 作案动机 前段时间买了一块Wemos D1的板子,集成了ESP8266,理论上8266能干的它
    如何制作一个带指纹识别的机械键盘
    如何制作一个带指纹识别的
    在Windows 10发布时,除了使用传统的登陆密码,操作系统还支持三种Windows Hello类
    串口丢失接收的字符
    串口丢失接收的字符
    程序是循环发送字符串 abc 给uno板,然后测试uno板有没有正确的接收到字符串 abc,测
    无法安装驱动
    无法安装驱动
    和教学贴里面不一样的是,我这个板子在我的电脑上出现了八个未知设备,但是在其他电脑
    arduino 串口通信AT设置
    arduino 串口通信AT设置
    在直接把ATK-LORA-01模块通过USB-TTL接口接到电脑上在串口里输入AT+命令的时候会有ERR
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表