Auca

  • 2024-09-01
  • 加入了学习《【Follow me第二季第1期】作品提交汇总视频》,观看 【Follow me第二季第1期】作品提交汇总

  • 发表了主题帖: 【Follow me第二季第1期】作品提交汇总

    本帖最后由 Auca 于 2024-9-27 22:10 编辑 物料清单: 1.Adafruit_CircuitPlayground开发板 2.舵机 对本活动的心得体会(包括意见或建议): 这是我第一次参与follow me,也参考了很多论坛大佬的思路,玩开发板最大的问题就可能是找不到参考的资料了,任务的ddl也治好了我的拖延症希望eeworld越办越好,我对想学习嵌入式的学弟学妹推荐的第一个学习路线就是follow me,任务驱动的学习方式很好。 设计思路:需求-> 结合开发板资料定位调用模块/传感器-> 查找文档/示例代码 ->调试 入门任务(必做):开发环境搭建,板载LED点亮 选择的开发环境是Arduino IDE。最近忙秋招压线交任务,能省就省。点灯程序使用Adafruit库中封装好的,按下左按钮就能点亮。 #include <Adafruit_CircuitPlayground.h> void setup() { // Initialize the circuit playground CircuitPlayground.begin(); } void loop() { if (CircuitPlayground.leftButton()) { CircuitPlayground.redLED(HIGH); // LED on } else { CircuitPlayground.redLED(LOW); // LED off } }     基础任务一(必做):控制板载炫彩LED,跑马灯点亮和颜色变换 程序流程:循环遍历10个LED,每次清空上回LED,点亮当前LED,延时。逆时针点亮红色,顺时针点亮蓝色,实现颜色变换。 #include <Adafruit_CircuitPlayground.h> void setup() { CircuitPlayground.begin(); } void loop() { for (int i = 0; i < 10; i++) { // 正向跑马灯 CircuitPlayground.clearPixels(); CircuitPlayground.setPixelColor(i, 255, 0, 0); // 红色 delay(100); } for (int i = 8; i > 0; i--) { // 反向跑马灯 CircuitPlayground.clearPixels(); CircuitPlayground.setPixelColor(i, 0, 0, 255); // 蓝色 delay(100); } }   基础任务二(必做):监测环境温度和光线,通过板载LED展示舒适程度 程序流程:获取温度和光线传感器的数值,如果温度过低/光线过暗,led蓝灯,舒适绿灯,过高红灯。左半部展示温度,右半部展示光线。 #include <Adafruit_CircuitPlayground.h> void setup() { CircuitPlayground.begin(); CircuitPlayground.clearPixels(); } void loop() { // 获取温度和光线传感器数据 float temperature = CircuitPlayground.temperature(); // 温度传感器读数 (摄氏度) int lightLevel = CircuitPlayground.lightSensor(); int temp_confort; int light_confort; // 判断温度舒适程度 if( temperature < 20 ){ temp_confort = 1; } else if (temperature >= 20 && temperature <= 27) { temp_confort = 2; } else{ temp_confort = 3; } // 判断光线舒适程度 if( lightLevel < 200 ){ light_confort = 1; } else if (lightLevel >= 200 && lightLevel <= 800) { light_confort = 2; } else{ light_confort = 3; } setAllPixelsColor(temp_confort, light_confort); delay(100); } void setAllPixelsColor(int temp_confort, int light_confort) { int red, green, blue; for (int i = 0; i < 5; i++) { if( temp_confort == 1) red = 0, green = 0, blue = 255; else if( temp_confort == 2) red = 0, green = 255, blue = 0; else red = 255, green = 0, blue = 0; CircuitPlayground.setPixelColor(i, red, green, blue); } for (int i = 5; i < 10; i++) { if( light_confort == 1) red = 0, green = 0, blue = 255; else if( light_confort == 2) red = 0, green = 255, blue = 0; else red = 255, green = 0, blue = 0; CircuitPlayground.setPixelColor(i, red, green, blue); } }   基础任务三(必做):接近检测——设定安全距离并通过板载LED展示,检测到入侵时,发起声音报警 遗憾的是,似乎通过板载的红外是无法做到测距的,因为它是用于红外通讯的?只能实现靠近检测。我也有写过通过发射统计时间来计算红外测距的代码,效果非常灾难,物体反射红外光的程度不同,然后写了一版靠近检测,十分简单,只需要收到信号就报警,但是没有完成安全距离的要求,最后改成了这一版相对距离的。 逻辑:读取模拟传感器值,如果传感器值大于或等于阈值,则点亮LED并报警。 #include <Adafruit_CircuitPlayground.h> const int analogInPin = A1; void setup() { CircuitPlayground.begin(); Serial.begin(9600); } void loop() { int sensorValue = analogRead(analogInPin); Serial.print("sensorValue: "); Serial.println(sensorValue); if (sensorValue >= 500) { for (int i = 0; i < 2; i++) { CircuitPlayground.setPixelColor(0, 255, 0, 0); CircuitPlayground.playTone(262, 300); CircuitPlayground.clearPixels(); noTone(5); delay(300); } } delay(100); // 稳定延迟 } 这个不好拍图片,放在下面视频里。   进阶任务(必做):制作不倒翁——展示不倒翁运动过程中的不同灯光效果 比起上面那个,这个就容易很多了 #include <Adafruit_CircuitPlayground.h> void setup() { CircuitPlayground.begin(); } void loop() { float x = CircuitPlayground.motionX(); float y = CircuitPlayground.motionY(); float z = CircuitPlayground.motionZ(); uint32_t color; // Determine color based on tilt direction if (z > 9) { color = CircuitPlayground.colorWheel(0); } else if (x > 3) { color = CircuitPlayground.colorWheel(85); } else if (x < -3) { color = CircuitPlayground.colorWheel(170); } else if (y > 3) { color = CircuitPlayground.colorWheel(42); } else if (y < -3) { color = CircuitPlayground.colorWheel(127); } else { color = CircuitPlayground.colorWheel(255); } for (int i = 0; i < 10; i++) { CircuitPlayground.setPixelColor(i, color); } delay(100); } ■  创意任务二:章鱼哥——章鱼哥的触角根据环境声音的大小,章鱼哥的触角可舒展或者收缩 本来是想用五个舵机的,但是连线太麻烦只用了一个。选取也不太合适,应该选声音变化很大的。 #include <Adafruit_CircuitPlayground.h> #include <Servo.h> Servo tentacle1; void setup() { tentacle1.attach(A1); } void loop() { int soundLevel = CircuitPlayground.mic.soundPressureLevel(50); int Pos = map(soundLevel, 50, 120, 0, 180); // 映射角度 tentacle1.write(Pos); delay(100); }  

  • 2024-07-27
  • 回复了主题帖: 有高质量的人体工学鼠标推荐吗?

    我用的是罗技MX Vertical 用了右手没疼过了,但是最近左手又开始疼了……有个足够深的桌子才是真的

  • 2024-07-19
  • 回复了主题帖: ROS笔记1 主要概念

    freebsder 发表于 2024-7-18 13:53 去ros化 是个什么说法? 以我目前接触的业内人员和我交流的信息,一般工程上是不会使用ros,ros的实时性不是很好,国内也有对ros进行二次开发的公司。ros工具包固然多,但是换一种说法也就是臃肿。以及上面提到的fast drone根据爱好者的说法效果也没有那么好,不过我刚刚接触飞控也没有实际飞过(也没有钱)。我目前还是准大四,还没有真正做过工程项目,更多的是打比赛和一些老板做原型机,不确定实际情况是不是如我说的这样。

  • 2024-07-17
  • 回复了主题帖: ROS笔记1 主要概念

    freebsder 发表于 2024-7-17 11:32 ROS资料比较零散。 系统点的资料又比较老。。。 开源很多都是ros1,ros又是和ubuntu强绑定的,ros2感觉一年一个版本了,也就面试有加分项,感觉入职了还是去ros化,除非做科研啥的,可能需要用一些工具

  • 2024-07-14
  • 回复了主题帖: ROS笔记1 主要概念

    lugl4313820 发表于 2024-7-14 06:55 虽然使用ros打了很多比赛,但是最近秋招面试发现也需要理清楚很多概念性的东西,写一下博客用作记录。 ... ros只是个中间件,很多地方都能用到,比赛用的比较多的在rm里,最近学了一下国内开源飞控fast drone也是基于ros的,也有专项一些的比如机械臂轨迹规划设计到urdf的也可以用到ros的工具,有的岗位对熟悉ros的有加分,梳理一下概念好面试

  • 2024-07-13
  • 发表了主题帖: ROS笔记1 主要概念

    虽然使用ros打了很多比赛,但是最近秋招面试发现也需要理清楚很多概念性的东西,写一下博客用作记录。 ### 松耦合分布式通信 松耦合:(Loose Coupling)是软件工程中的一个概念,指的是模块或组件之间的依赖关系较少或较弱,使得它们可以独立地进行修改、替换或扩展,而不影响其他模块或组件的功能。松耦合的目标是提高系统的可维护性、可扩展性和可重用性。 所有功能可以抽象为节点。 **节点(Node):** ——执行单元 执行具体任务的进程、独立运行的可执行文件; 不同节点可以使用 **不同的编程语言**   节点在系统中的名称必须是 **唯一** 的 **通讯方式**: **话题(Topic)**:——异步通讯机制 节点间用来传输数据的重要总线 单向,无反馈 使用 *发布/订阅* 模型,数据由发布者传输到订阅者,同一个话题的订阅者或发布者可以 *不唯一* *消息(Message)*:——话题数据 具有一定类型和数据结构,包括ROS提供的标准类型和用户自定义类型 使用编程语言无关的 *.msg* 文件定义,编程过程中生成对应的代码文件 **服务(Service)**: ——同步通信机制 使用 *客户端/服务器* (C/S)模型,客户端发送 *请求* 数据,服务器完成处理后返回 *应答* 数据 使用编程语言无关的 *.srv* 文件定义请求和应答数据结构,编译过程中生成对应的代码文件 请求一次,返回一次,阻塞等待 |  | 话题 | 服务 | | --- | --- | --- | | 同步性 | 异步 | 同步 | | 通信模型 | 发布/订阅 | 服务器/客户端 | | 底层协议 | ROSTCP/ROSUDP | ROSTCP/ROSUDP | | 反馈机制 | 无 | 有 | | 缓冲区 | 有 | 无 | | 实时性 | 弱 | 强 | | 节点关系 | 多对多 | 一对多(one server) | | 适用场景 | 数据传输 | 逻辑处理 | **功能包(Package):** ROS软件中的基本单元,包含节点源码、配置文件、数据定义等 **功能包清单(Package manifest)** 记录功能包的基本信息,包含作者信息、许可信息、依赖选项、编译标志等 **元功能包(Meat Packages)** 组织多个用于同一目的的功能包 ### ROSCORE `roscore` 是 ROS(Robot Operating System)中的一个基本命令,用于启动 ROS 核心组件。它是 ROS 系统的核心进程,提供了节点之间通信的基础服务。`roscore` 通常包括以下三个主要组件: 1. **节点管理器(ROS Master)** :——控制中心     - ROS Master 是 ROS 网络的核心部分,负责管理所有节点的注册信息、话题和服务。它提供名称解析服务,允许 ROS 节点查找和连接到其他节点。     - Master 记录了所有发布者、订阅者和服务的信息,当一个节点启动时,它会向 Master 注册自己,并且可以通过 Master 发现和连接其他节点。     - 提供参数服务器,节点使用此服务器存储和检索运行时的参数。 2. **参数服务器(ROS Parameter Server):**     - 可以通过 *网络 API* 访问的共享的 *多变量* 字典。在运行时节点(Nodes)使用此服务器去存储和检索参数。(类似于全局变量,存储多个节点共享的数据。)     - 这对于系统配置和节点初始化非常有用,因为参数服务器允许在启动时和*运行时调整参数*。     - 适合存储静态、非二进制的 *配置参数*,不适合存储动态配置的数据 3. **日志(ROS Logging):**     - 提供日志记录服务,支持节点发布日志消息,以便进行调试和监控。ROS 提供了多种日志级别,如 debug、info、warn、error 和 fatal。     - 日志服务允许开发者跟踪系统运行状态,调试信息和错误消息。

  • 2024-03-29
  • 加入了学习《[高精度实验室] ADC系列 7 : SAR ADC 功耗分析与计算》,观看 SAR ADC 功耗分析与计算

最近访客

< 1/2 >

统计信息

已有32人来访过

  • 芯积分:164
  • 好友:--
  • 主题:5
  • 回复:9

留言

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


现在还没有留言