417|1

11

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【Follow me第二季第1期】汇总提交帖:全部任务视频及其代码下载 [复制链接]

 

首先很荣幸参加follow me 第二季第一期的活动,在学习、工作之余有精力和时间去接触Adafruit Circuit Playground Express 这款开发板,下面我和大家分享一下开发过程。

 

全部视频演示视频:

完整版

物料展示:

本次活动中,我购买了Circuit Playground Express主板和陀机两种物料

 

购买实物图片展示:

 

任务成果展示

入门任务:01 Ardunio ide环境搭建+ 物料展示 +板载LED点亮

相对应的帖子地址:https://bbs.eeworld.com.cn/thread-1293111-1-1.html

软件环境搭建:

这次我所使用的编译软件为arduino 来实现功能。

官方下载网址:https://www.arduino.cc/en/software

软件属于一键安装的过程:

安装完成后,打开IDE,在左侧栏的Boards Manager,安装Arduino SAMD.连接开发板,就能看见上面正确显示了板子的型号

任务:点亮板载的LED灯

简单利用arduino实现闪烁板载的LED灯功能,查看官方的原理图我们可以看到D13连接到引脚是13,

软件流程图:

 

软件操作代码如下:

void setup() {
  // put your setup code here, to run once:
  pinMode(13, OUTPUT);
}
void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(13, 1); 
  delay(1000);             
  digitalWrite(13, 0); 
  delay(1000);  
}

编译之后软件效果图:

 

测试实物图片:

 

可以通过修改延时函数中的时间,改变LED的闪烁间隔

基础任务一(必做):控制板载炫彩LED,跑马灯点亮和颜色变换

对应帖子的连接:https://bbs.eeworld.com.cn/thread-1293113-1-1.html

该任务比较简单,使用这个用Adafruit_NeoPixel.h这个库就能实现,设置了七种不同的颜色进行循环切换,

 

#include <Arduino.h>
#include <Adafruit_NeoPixel.h>
#define PIN 8
#define NNUMPIN 10
Adafruit_NeoPixel pixels(NNUMPIN, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
  // write your initialization code here
  pixels.begin();
}
void loop() {
  // write your code here
  static uint8_t led_num = 0;
  //static uint32_t colors[8] = {0x040304, 0x000505, 0x050005, 0x050500, 0x050005, 0x000A00, 0x0A0000,0x0A000A};
 static uint32_t colors[7] = {0x0A0000, 0x000A00, 0x00000A, 0x050500, 0x050005, 0x000505, 0x040304};
//static uint32_t colors[8] = {0x011011, 0x22022, 0x033033, 0x44044, 0x055055, 0x66066, 0x77777,0x088088};
  static uint8_t color_num = 0;
  static Adafruit_NeoPixel pixels(NNUMPIN, PIN, NEO_GRB + NEO_KHZ800);
  pixels.clear();
  pixels.setPixelColor(led_num, colors[color_num]);
  pixels.show();
  led_num++;
  if (led_num == NNUMPIN) {
  led_num = 0;
  color_num++;
  if (color_num == 8)
    color_num = 0;
  }
  delay(200);
}

 

基础任务二(必做):监测环境温度和光线,通过板载LED展示舒适程度

对应帖子的连接:https://bbs.eeworld.com.cn/thread-1293113-1-1.html

参考官方发布的原理图和CircuitPython库的代码可以得出引脚电压(A8)与温度、光照(A9)之间的关系。

软件的流程图如下:

 

#include <Arduino.h>
#include <Adafruit_NeoPixel.h>
#include "SensorAB.h"
#define PIN 8
#define NUMPIXELS 10
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
  // write your initialization code here
  Serial.begin(115200);
  pixels.begin();
}
void loop() {
  // write your code here
  const double temperature = get_temperature(A9);
  const double photocell = get_photocell(A8);
  pixels.clear();
  if (temperature < 14) {
  pixels.setPixelColor(5, 0, 0, 10);
  } else if (temperature < 18 && temperature >= 14) {
  pixels.setPixelColor(6, 0, 5, 5);
  } else if (temperature >= 18 && temperature <= 20) {
  pixels.setPixelColor(7, 0, 10, 0);
  } else if (temperature > 20 && temperature <= 25) {
  pixels.setPixelColor(8, 5, 5, 0);
  } else if (temperature > 25) {
  pixels.setPixelColor(9, 10, 0, 0);
  }
  if (photocell > 1000) {
  pixels.setPixelColor(0, 10, 0, 0);
  } else if (photocell > 500 && photocell <= 1000) {
  pixels.setPixelColor(1, 5, 5, 0);
  } else if (photocell >= 200 && photocell <= 500) {
  pixels.setPixelColor(2, 0, 10, 0);
  } else if (photocell >= 50 && photocell < 200) {
  pixels.setPixelColor(3, 0, 5, 5);
  } else if (photocell < 50) {
  pixels.setPixelColor(4, 0, 0, 10);
  }
  pixels.show();
  Serial.print("temperature:" + String(temperature) + "  sheshidu  " + "photocell:" + String(photocell) + " lux\n");
  delay(1000);
}

软件仿真之后效果图:

 

实物图片如下:

 

基础任务三(必做):接近检测——设定安全距离并通过板载LED展示,检测到入侵时,发起声音报警

对应帖子的连接:https://bbs.eeworld.com.cn/thread-1293113-1-1.html

使用红外传感器,,通过IR LED发射一定频率的脉冲,通过读取接收器测得的模拟值,当模拟值增大即有物体靠近。

试验现象:没有物体接近时灯珠全灭或显示一个,随着物体接近灯珠会亮的越来越多。

软件代码如下:

#include <Adafruit_CircuitPlayground.h>

#define SAFE_DISTANCE 500 // 定义安全距离
const int alertTone = 500; // 警报音调

const int irTransmitterPin = 25; //引脚定义
const int irReceiverPin = A10; 

void setup() 
{
  CircuitPlayground.begin();
  Serial.begin(9600); // 
  pinMode(irReceiverPin, INPUT); // 红外传感器输入
   pinMode(irTransmitterPin, OUTPUT);// 红外led输出

  delay(100); 
  
}
void loop() {
   sendIRPulse();
  int distance = analogRead(irReceiverPin); // 读取红外传感器的值
  displayDistance(distance);
  checkForIntrusion(distance);
  delay(300); 
}
void displayDistance(int distance) {
  int ledCount = map(distance, 290, SAFE_DISTANCE, 1, 10); // 将距离值映射到0-10的LED数量
  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.print(", LED Count: ");
  Serial.println(ledCount);

  for (int i = 0; i < 10; i++) {
    if (i < ledCount) {
      CircuitPlayground.setPixelColor(i, 0, 255, 0); 
    } else {
      CircuitPlayground.setPixelColor(i, 0); 
    }
  }
 
}

void checkForIntrusion(int distance) {
  if (distance > SAFE_DISTANCE) {
    Serial.println("Intrusion detected!");
    playAlertTone();
  }
}
void sendIRPulse() {
  for (int i = 0; i < 32; i++) {
    digitalWrite(irTransmitterPin, HIGH);
    delayMicroseconds(13); 
    digitalWrite(irTransmitterPin, LOW);
    delayMicroseconds(13);
  }
}
void playAlertTone() {
  CircuitPlayground.playTone(alertTone, 500); // 播放警报音500ms
}

 

 

进阶任务(必做):制作不倒翁——展示不倒翁运动过程中的不同灯光效果

对应帖子链接:https://bbs.eeworld.com.cn/thread-1293114-1-1.html

这个任务本质上就是用板载陀螺仪检测板子的姿态,然后给出对应的灯光效果。我实现的是根据板子的倾斜方向亮起对应的灯,

软件流程图:

 

代码如下:

#include <Arduino.h>
#include <Adafruit_NeoPixel.h>

#include "Acc.h"

#define PIN 8
#define NUMPIXELS 10

Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  // write your initialization code here
  Serial.begin(115200);
  pixels.begin();
  if (!init_acceleration()) {
  Serial.println("ERROR");
  }
}

void loop() {
  // write your code here
  std::array<double, 2> data = get_acceleration();
  double length = sqrt(pow(data[0], 2) + pow(data[1], 2));
  int degree = atan(-1 * data[0] / data[1]) / M_PI * 180;
  degree += data[0] * data[1] >= 0 ? 180 : 0;
  pixels.clear();
  if (degree >= 15 && degree <= 165) {
  pixels.setPixelColor((degree-15)/30+(data[0]<0?5:0), length*10, abs(10-length*10), 0);
  }
  pixels.show();
  Serial.println("X:" + String(data[0]));
  Serial.println("Y:" + String(data[1]));
  Serial.println("degree" + String(degree));
  Serial.println();
  delay(100);
}

项目总结:

自己对这次活动做一个简单的总结,在本次活动中,我使用Arduino IDE的编译软件对Adafruit Circuit Playground 板载上面的资源做了简单的了解。经过对活动任务的学习,通过实现不同功能模块的了解,查询资料,深入对该开发板进行多种多种的学习,自己动手写代码,知道开发板的强大,

对于硬件方面来说,自己动手去制作一些DIY产品,依靠现有的资源对电路板进行开发,在工作之余、学习的同时,给自己的生活带来一些乐趣。

最后感谢EEworld与得捷电子举办的活动,希望自己以后有机会参与更多的学习。

代码如下:

20240908232053170.zip (1.54 KB, 下载次数: 2)

04sensor.zip (1.01 KB, 下载次数: 4)

20240908232053158.zip (1.39 KB, 下载次数: 3)

02跑马灯.zip (547 Bytes, 下载次数: 2)

01LED.zip (299 Bytes, 下载次数: 2)

 

 

 

最新回复

不错,谢谢分享   详情 回复 发表于 2024-9-9 07:27
点赞 关注
 
 

回复
举报

6828

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

不错,谢谢分享

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表