362|0

14

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【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);  
}



 

code.zip

4.02 KB, 下载次数: 1

点赞 关注
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表