MatrixPulse

  • 2024-12-09
  • 加入了学习《直播回放: DigiKey FollowMe 第二季 第4期 Arduino Nano RP2040 Connect 任务讲解》,观看 Arduino Nano RP2040 Connect 任务讲解

  • 2024-10-09
  • 加入了学习《【Follow me第二季第2期】任务完成视频》,观看 【Follow me第二季第2期】汇总提交帖:全部任务

  • 2024-10-06
  • 加入了学习《Follow Me 第二季第二期总结视频》,观看 follow me 集合

  • 上传了资料: 【Follow me第二季第2期】汇总代码

  • 加入了学习《【Follow me第二季第1期】全部任务演示》,观看 全部任务演示2.0

  • 2024-10-05
  • 发表了主题帖: 【Follow me第二季第2期】汇总提交帖:全部任务

    本帖最后由 MatrixPulse 于 2024-10-6 14:46 编辑 # 【Follow me第二季第2期】汇总提交帖:全部任务 [TOC] ## 前言 Follow me 活动是 DigiKey 联合 EEWorld 发起的大型开发板体验活动,每期技术大咖推荐可玩性与可学性较强的开发板/仪器套件,参与者完成任务即返京东卡,出色完成者,还将获得额外200元京东卡奖励。 我参加的是 Follow me 第二季第 2 期任务,本次任务核心板为 Arduino UNO R4 WiFi,我选择的搭配器件为 LTR-329 环境光传感器和 Qwiic 线缆。 ### 活动物料购买链接如下: - 主板:[Arduino UNO R4 Wi-Fi](https://www.digikey.cn/zh/products/detail/arduino/ABX00087/20371539)(核心板) - 扩展板:[5591](https://www.digikey.cn/zh/products/detail/adafruit-industries-llc/5591/16733167)( LTR-329 光传感器扩展板) - 缆线:[PRT-14426](https://www.digikey.cn/zh/products/detail/sparkfun-electronics/PRT-14426/7652739)( Qwiic 缆线 - 50 mm) ### **物料实物展示:** ![](https://s2.loli.net/2024/10/01/pI6QAYdjitL5Buv.jpg) ![IMG_6399](https://s2.loli.net/2024/10/01/pUc1rH6i57JoOvy.jpg) ## 任务展示 [localvideo]19da8eef42b272e178fe4ee27f880835[/localvideo] ## 任务简介 - **入门任务(必做):**搭建环境并开启第一步 Blink / 串口打印 Hello EEWorld! - **基础任务(必做):**驱动 12x8 点阵 LED;用 DAC 生成正弦波;用 OPAMP 放大 DAC 信号;用 ADC 采集并且打印数据到串口等其他接口可上传到上位机显示曲线 - **进阶任务(必做):**通过Wi-Fi,利用MQTT协议接入到开源的智能家居平台 HA(HomeAssistant) - **扩展任务:**通过外部 LTR-329 环境光传感器,上传光照度到 HA,通过 HA 面板显示数据 ## 引脚功能图 要对 Arduino UNO R4 WiFi 进行编程,我们需要参考其引脚功能图,如下所示:(PS:Arduino 引脚功能图真是直观又漂亮!): ![image-20241001224137576](https://s2.loli.net/2024/10/01/DTcJmQhCg1pz7F6.png) ## 设计思路及实现效果 ### 1.  入门任务 首先是 Blink 任务,我们将编写代码点亮 Arduino 内置 LED (LED_BUILTIN),使其实现间隔时间 1s 的闪烁 #### Blink 流程图 : #### Blink 代码: ```c++ // the setup function runs once when you press reset or power the board void setup() {   // initialize digital pin LED_BUILTIN as an output.   pinMode(LED_BUILTIN, OUTPUT); } // the loop function runs over and over again forever void loop() {   digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)   delay(1000);                       // wait for a second   digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW   delay(1000);                       // wait for a second } ``` #### Blink 效果: [localvideo]0a0ae887d9fde1550b4566438c2f9b1c[/localvideo] 串口打印任务,我们将编写代码使 Arduino 通过串口每隔 1s 输出“Hello EEWorld!” #### 串口打印流程图: #### 串口打印代码: ```c++ void setup() {    //初始化函数,这个函数内的代码只在启动时运行一次   Serial.begin(9600);    //设置串口波特率 } void loop() {     //循环函数,这个函数内的代码会一直循环运行   Serial.println("Hello EEWorld!"); //向串口打印"Hello EEWorld!"   delay(1000); } ``` #### 串口打印效果: ![](https://s2.loli.net/2024/10/02/tUbagrP4HTRisBj.jpg) ### 2. 基础任务 Arduino UNO R4 WiFi 自带了一个 12x8 LED 矩阵,通过 Arduino 库管理器安装 ArduinoGraphics,我们可以方便地生成想要的 LED 矩阵图形。 ![LED矩阵](https://s2.loli.net/2024/10/02/Bphj1xzVfXs5ZMG.png) #### LED 矩阵流程图: #### LED 矩阵代码: ```c++ // To use ArduinoGraphics APIs, please include BEFORE Arduino_LED_Matrix #include #include "Arduino_LED_Matrix.h" ArduinoLEDMatrix matrix; void setup() {   Serial.begin(115200);   matrix.begin();   matrix.beginDraw();   matrix.stroke(0xFFFFFFFF);   // add some static text   // will only show "UNO" (not enough space on the display)   const char text[] = "^_^";   matrix.textFont(Font_4x6);   matrix.beginText(0, 1, 0xFFFFFF);   matrix.println(text);   matrix.endText();   matrix.endDraw();   delay(2000); } void loop() {   // Make it scroll!   matrix.beginDraw();   matrix.stroke(0xFFFFFFFF);   matrix.textScrollSpeed(50);   // add the text   const char text[] = "    Hello EEWorld and DigiKey!    ";   matrix.textFont(Font_5x7);   matrix.beginText(0, 1, 0xFFFFFF);   matrix.println(text);   matrix.endText(SCROLL_LEFT);   matrix.endDraw(); } ``` #### LED 矩阵效果: [localvideo]dc9bd59e9f1966b1679f7b8e89fbe905[/localvideo] 接下来我们通过 DAC 生成正弦波信号,用 OPAMP 将 DAC 信号放大两倍,并输出至 ADC,通过两个模拟引脚采集信号并打印至串口。 要实现两倍的放大效果,我们需要添加两个10 kΩ 的电阻,仿真电路如下:可以看到正弦波被放大至原来两倍 硬件实物连接图: #### 放大信号程序流程图: #### 放大信号代码: ```c++ #include "analogWave.h" // Include the library for analog waveform generation #include analogWave wave(DAC);   // Create an instance of the analogWave class, using the DAC pin int freq = 200;  // in hertz, change accordingly void setup() {   Serial.begin(2000000);  // Initialize serial communication at a baud rate of 115200      /* By default, the resolution is set to 10-bit, which can be updated to both 12-bit (0-4096)    and 14-bit (0-16383) resolutions for improved accuracy on analog readings.*/   analogReadResolution(14);//Change to 14-bit resolution 分辨率      wave.sine(freq);       // Generate a sine wave with the initial frequency   wave.amplitude(0.5);   OPAMP.begin(OPAMP_SPEED_HIGHSPEED); } void loop() {   Serial.print(analogRead(A4));//DAC output   Serial.print(" ");   Serial.println(analogRead(A5));//OPAMP output } ``` #### 放大信号效果: 打开串口监视器,可以观测到经 ADC 转换后的数值: ![SineSerialMonitor](https://s2.loli.net/2024/10/02/UoX497AtrEBzcn1.png) 串口绘图器显示效果: 示波器显示效果: ### 3. 进阶任务 进阶任务为利用 Wi-Fi,通过 MQTT 协议接入到开源智能家居平台 HomeAssistant HomeAssistant 的安装方式有四种,区别如下: ![HomeAssistant_version](https://s2.loli.net/2024/10/02/wbW3AlpMkv5iCGT.jpg) 这里我们采用在 BeagleBone Black(简称:BBB) 上安装 HomeAssistant Core 的方式运行,用到的硬件如下: ![BeagleBoneBlack](https://s2.loli.net/2024/10/02/P35vIditG8XEV1R.jpg) MQTT Broker 我们选用  Mosquitto,其特点是轻量、开源。 ![](https://s2.loli.net/2024/10/03/caoRmeTu2PKj6Mp.png) #### 操作流程: *安装过程可参考:如何在BBB上安装 Home Assistant?*(待完成) #### 关键代码: ```c++ //arduino.secrets.h #define MQTT_SERVER "192.168.1.10" //BeagleBone Black IP地址 #define MQTT_PORT 1884 //定义MQTT服务器的端口 #define MQTT_CLIENT_ID "arduino" #define HA_CONNECTION "UNO/arduino/status/cmd_t" #define TOPIC_SUBSCRIBE1 "UNO/arduino/myButtonA/cmd_t"        //定义订阅的主题 #define TOPIC_SUBSCRIBE2 "UNO/arduino/myButtonB/cmd_t" #define SECRET_PASS "3fzts5qh"  //路由器Wi-Fi密码 ``` ```c++ //MQTT_HA_Connection.ino #include #include #include #include "WiFiS3.h" #include "arduino_secrets.h" #include "analogWave.h" // Include the library for analog waveform generation /*         ......                         */ WiFiClient client; HADevice device (MQTT_CLIENT_ID); // HADevice device (mac, sizeof(mac)); HAMqtt mqtt(client, device); HASensorNumber analogSensor ("myAnalogInput", HASensorNumber::PrecisionP1); HASensorNumber uptimeSensor("myUptime"); HAButton buttonA("myButtonA"); HAButton buttonB("myButtonB"); /*         ......                         */ void onMqttConnected(){   Serial.println("Connected to the broker!");      // 订阅两个按键的 MQTT 主题   mqtt.subscribe(TOPIC_SUBSCRIBE1);     // myButtonA   mqtt.subscribe(TOPIC_SUBSCRIBE2);     // myButtonB   Serial.println("subscribed to topic:" HA_CONNECTION);   mqtt.publish(HA_CONNECTION, "Hi HomeAssistant, I'm Arduino UNO R4 WIFI ^^"); } ``` ***完整代码见附件...*** #### 实现效果: ![Snipaste_2024-10-03_18-48-15](https://s2.loli.net/2024/10/03/dIGOepLgBm2v7hu.jpg) [localvideo]bbfcd74780a9ce1127594956e04b4fc6[/localvideo] ### 4. 扩展任务: 本次扩展任务我选择的是任务一,使用 LTR-329 环境光传感器(见下方视频)收集光照数据上传到 HA,并通过 HA 卡片显示。 环境光传感器是一种感应周围环境光线强度的器件,它通常用来调节设备的显示亮度,以提供更好的使用体验,常见的应用包括用于智能手机、平板和笔记本电脑等显示屏上的亮度调节。在电子阅读装置和电视上,环境光传感器可用于调整屏幕色温,以获得更舒适的阅读或观看体验。 [localvideo]18411d8bbd59d158f11307765d3aa4ab[/localvideo] LTR-329 扩展板基于集成型环境光传感器,其具有以下特点: - I2 C 接口,最高支持快速模式 @ 400kbit/s,地址为 0x29 - 超小型 4 针 ChipLED 封装 2.0mm x 2.0mm x 0.7mm - 内置温度补偿电路 - 待机模式下低功耗 - 电源电压范围为 2.4V 至 3.6V,能够提供 1.7V 逻辑电压 - 工作温度范围为 -30C 至 +70C - 符合 RoHS 标准 - 接近人眼光谱响应 - 不受红外/紫外光源影响 - 自动抑制 50/60 Hz 照明闪烁 - 全动态范围从 0.01 勒克斯到 64k 勒克斯 - 16 位有效分辨率      前面我们已经完成了 Arduino 通过 MQTT 协议与 HA 通信,下面我们将在代码中集成环境光传感器:    #### 流程图 #### 关键代码: ```C++ // MQTT_HA_Connection.ino #include "Adafruit_LTR329_LTR303.h" HASensorNumber lightSensor0("lightCH0"); // LTR-329_CH0 HASensorNumber lightSensor1("lightCH1"); // LTR-329_CH1 ``` ```c++ void setup() {         //        ......  // if (!ltr.begin(&Wire1)) {     Serial.println("Couldn't find LTR sensor!");     while (1) delay(10);   }   Serial.println("Found LTR sensor!");   ltr.setGain(LTR3XX_GAIN_2);   Serial.print("Gain : ");   switch (ltr.getGain()) {     case LTR3XX_GAIN_1: Serial.println(1); break;     case LTR3XX_GAIN_2: Serial.println(2); break;     case LTR3XX_GAIN_4: Serial.println(4); break;     case LTR3XX_GAIN_8: Serial.println(8); break;     case LTR3XX_GAIN_48: Serial.println(48); break;     case LTR3XX_GAIN_96: Serial.println(96); break;   }   ltr.setIntegrationTime(LTR3XX_INTEGTIME_100);   Serial.print("Integration Time (ms): ");   switch (ltr.getIntegrationTime()) {     case LTR3XX_INTEGTIME_50: Serial.println(50); break;     case LTR3XX_INTEGTIME_100: Serial.println(100); break;     case LTR3XX_INTEGTIME_150: Serial.println(150); break;     case LTR3XX_INTEGTIME_200: Serial.println(200); break;     case LTR3XX_INTEGTIME_250: Serial.println(250); break;     case LTR3XX_INTEGTIME_300: Serial.println(300); break;     case LTR3XX_INTEGTIME_350: Serial.println(350); break;     case LTR3XX_INTEGTIME_400: Serial.println(400); break;   }   ltr.setMeasurementRate(LTR3XX_MEASRATE_200);   Serial.print("Measurement Rate (ms): ");   switch (ltr.getMeasurementRate()) {     case LTR3XX_MEASRATE_50: Serial.println(50); break;     case LTR3XX_MEASRATE_100: Serial.println(100); break;     case LTR3XX_MEASRATE_200: Serial.println(200); break;     case LTR3XX_MEASRATE_500: Serial.println(500); break;     case LTR3XX_MEASRATE_1000: Serial.println(1000); break;     case LTR3XX_MEASRATE_2000: Serial.println(2000); break;   }              // ...... //    } ``` ```c++ void loop() {         // ...... //     bool valid;     uint16_t visible_plus_ir, infrared;     // ...... //     if (ltr.newDataAvailable()) {             valid = ltr.readBothChannels(visible_plus_ir, infrared);         if (valid) {         // 上传传感器数值         lightSensor0.setValue(visible_plus_ir);         lightSensor1.setValue(infrared);         delay(500);         }      } } ``` ***完整代码见附件...*** #### 实现效果 [localvideo]b450018fc43de7ebba785df49bfbf79c[/localvideo] 以上就是本次活动全部任务的完成与展示,通过本次活动我学习到了: - Arduino 开发环境的部署 - Home Assistant 的安装与部署 - Mosquitto Broker 的安装 - 还有一些常用的 Linux 命令 再次感谢 DigiKey 和 EEWorld 举办本次活动,为我们工程师提供了一个很好的学习机会!期待 Fllow Me 活动推出更多好玩的板卡!Respect!如果您觉得我的文章对您有所帮助,欢迎点赞支持哦! #### 下载源码: https://download.eeworld.com.cn/detail/eew_M98Yam/634538

  • 2024-09-30
  • 加入了学习《FollowMe 第二季:2 - Arduino UNO R4 Wi-Fi 及任务讲解》,观看 Arduino UNO R4 Wi-Fi 及任务讲解

最近访客

< 1/1 >

统计信息

已有2人来访过

  • 芯积分:32
  • 好友:--
  • 主题:1
  • 回复:0

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言