小神123

  • 2024-11-01
  • 发表了主题帖: 【2024 DigiKey创意大赛】环境智眼-可视化智能环境观测器

    环境智眼-可视化智能环境观测器                                                                                                                                                                                                                                                                                作者:小神123 一、作品简介           环境智眼是一款革命性的智能环境观测器,它能够实时监测和分析各种环境参数,如温度、湿度、空气质量等。通过集成的高精度传感器阵列和强大的数据处理能力,环境智眼为用户提供了一个全面、实时的环境监测平台。核心特性:多参数监测: 能够同时监测多种环境参数,为用户提供全面的环境数据。智能数据分析: 利用先进的人工智能算法,对收集到的数据进行深入分析,识别模式和趋势。实时可视化: 通过直观的图形界面,用户可以实时查看环境数据的变化,包括动态图表、热图和趋势线。预警系统: 当环境参数超出预设的安全范围时,系统会自动发出预警,帮助用户及时采取措施。易于部署: 设计轻巧,安装简便,适用于室内外多种环境。应用场景:智能家居系统,提升居住舒适度和安全性。工业环境监测,确保生产环境符合安全标准。农业领域,优化作物生长条件,提高产量。城市环境管理,监测和改善城市空气质量和噪音污染。 本次采用的物料清单有ESP32-S3-LCD-EV-Board开发板以及气体传感器BME680,其中ESP32-S3-LCD-EV-Board搭配一块3.95英寸的屏幕,可以用来显示空气质量等。气体传感器BME680环境传感器是一款四合一MEMS环境传感器,可测量VOC(挥发性有机物)、温度、湿度、气压这四个参数,非常适用于监测空气质量。由于采用了MEMS技术,该传感器体积小、功耗低,因此也适用于低功耗场合,如可穿戴等。 二、系统框图 整体设计思路如下:通过气体传感器BME680采集空气中的数据,然后将数据通过I2C通讯或者SPI通讯传输到ESP32-s3控制板上,进过数据处理,实时将其显示在显示屏上,实现狂徒如下所示:   三、各部分功能说明 1、读取空气质量部分 通过SPI或者I2C形式,均可以读取到气体传感器的信息,接线示意图按照官方给出的文档示意如下: 通过Arduino IDE上编译代码,具体截图如下: 感觉读到的数据不太正确。 2、显示数据部分 显示部分的话,需要用到LVGL,这里的话,选择squareline_studio,其界面可以直接选择开发板ESP32-S3-LCD-EV-BOARD,显示如下: 进入编辑界面后,根据自己的喜欢设计布局,通过拖拽的形式,非常方便,大大缩减了开发界面的时间。以下是我搭建的界面。 四、作品源码 作品代码如下所示: #include <Wire.h> #include <SPI.h> #include <Adafruit_Sensor.h> #include "Adafruit_BME680.h" #define BME_SCK 13 #define BME_MISO 12 #define BME_MOSI 11 #define BME_CS 10 #define SEALEVELPRESSURE_HPA (1013.25) Adafruit_BME680 bme(&Wire); // I2C //Adafruit_BME680 bme(&Wire1); // example of I2C on another bus //Adafruit_BME680 bme(BME_CS); // hardware SPI //Adafruit_BME680 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); void setup() { Serial.begin(9600); while (!Serial); Serial.println(F("BME680 test")); if (!bme.begin()) { Serial.println("Could not find a valid BME680 sensor, check wiring!"); while (1); } // Set up oversampling and filter initialization bme.setTemperatureOversampling(BME680_OS_8X); bme.setHumidityOversampling(BME680_OS_2X); bme.setPressureOversampling(BME680_OS_4X); bme.setIIRFilterSize(BME680_FILTER_SIZE_3); bme.setGasHeater(320, 150); // 320*C for 150 ms } void loop() { if (! bme.performReading()) { Serial.println("Failed to perform reading :("); return; } Serial.print("Temperature = "); Serial.print(bme.temperature); Serial.println(" *C"); Serial.print("Pressure = "); Serial.print(bme.pressure / 100.0); Serial.println(" hPa"); Serial.print("Humidity = "); Serial.print(bme.humidity); Serial.println(" %"); Serial.print("Gas = "); Serial.print(bme.gas_resistance / 1000.0); Serial.println(" KOhms"); Serial.print("Approx. Altitude = "); Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA)); Serial.println(" m"); Serial.println(); delay(2000); }   #include <Arduino.h> #include <ESP_Panel_Library.h> #include <lvgl.h> #include "lvgl_port_v8.h" /** /* To use the built-in examples and demos of LVGL uncomment the includes below respectively. * You also need to copy `lvgl/examples` to `lvgl/src/examples`. Similarly for the demos `lvgl/demos` to `lvgl/src/demos`. */ // #include <demos/lv_demos.h> // #include <examples/lv_examples.h> void setup() { String title = "LVGL porting example"; Serial.begin(115200); Serial.println(title + " start"); Serial.println("Initialize panel device"); ESP_Panel *panel = new ESP_Panel(); panel->init(); #if LVGL_PORT_AVOID_TEAR // When avoid tearing function is enabled, configure the RGB bus according to the LVGL configuration ESP_PanelBus_RGB *rgb_bus = static_cast<ESP_PanelBus_RGB *>(panel->getLcd()->getBus()); rgb_bus->configRgbFrameBufferNumber(LVGL_PORT_DISP_BUFFER_NUM); rgb_bus->configRgbBounceBufferSize(LVGL_PORT_RGB_BOUNCE_BUFFER_SIZE); #endif panel->begin(); Serial.println("Initialize LVGL"); lvgl_port_init(panel->getLcd(), panel->getTouch()); Serial.println("Create UI"); /* Lock the mutex due to the LVGL APIs are not thread-safe */ lvgl_port_lock(-1); /* Create a simple label */ lv_obj_t *label = lv_label_create(lv_scr_act()); lv_label_set_text(label, title.c_str()); lv_obj_align(label, LV_ALIGN_CENTER, 0, 0); /** * Try an example. Don't forget to uncomment header. * See all the examples online: https://docs.lvgl.io/master/examples.html * source codes: https://github.com/lvgl/lvgl/tree/e7f88efa5853128bf871dde335c0ca8da9eb7731/examples */ // lv_example_btn_1(); /** * Or try out a demo. * Don't forget to uncomment header and enable the demos in `lv_conf.h`. E.g. `LV_USE_DEMO_WIDGETS` */ // lv_demo_widgets(); // lv_demo_benchmark(); // lv_demo_music(); // lv_demo_stress(); /* Release the mutex */ lvgl_port_unlock(); Serial.println(title + " end"); } void loop() { Serial.println("IDLE loop"); delay(1000); } 五、作品功能演示视频 [localvideo]7e734e996152b061b55711e869fa3fd7[/localvideo]   六、项目总结 本次项目是一个很好的机会,再次感谢得捷电子以及EEworld提供的平台与支持。但是由于个人原因(工作时间较忙以及对ESP32产品熟悉较少,与预期计划偏差较大),未能成功将全部功能实现,希望在后续的时间里自己可以将这个想法实现,并多多学习ESP32-s3的操作。 七、其他  

  • 2024-09-01
  • 加入了学习《【Follow me第二季第1期】任务提交》,观看 【Follow me第二季第1期】任务提交

  • 发表了主题帖: 【Follow me第二季第1期】任务提交之紧赶慢赶版

    一个月时间太快了,好吧,也可能是自己太菜了,不够优秀,理解太慢,不过好在能够赶上结尾去提交任务,感谢EEworld和得捷电子的大力支持,提供这么好的一个活动让我们去学习。接下来就是自己的任务汇总。 汇总的视频链接:https://training.eeworld.com.cn/video/40822 软件代码链接:https://download.eeworld.com.cn/detail/%E5%B0%8F%E7%A5%9E123/634247 先进行一下自我简介,我是小神,一名业余电子爱好者,利用工作之余看到【Follow me第二季第1期】有活动,便参加,没想到第一次参加竟然有幸获得机会。此次活动选用的是一款Adafruit Circuit Playground Express开发板,板载丰富的传感器,如光线传感器,红外传感器,麦克风,加速度传感器,以及按键,LED灯,扬声器等。板子尺寸小巧,方便做一些电子DIY,实物图如下:   本次任务中我采购了三个物品,其中包括Adafruit Circuit Playground Express开发板(必备),超声波传感器(选配,为了完成距离检测),舵机(选配,为了完成章鱼哥任务),以下是全家福。   接下来就是任务汇总: 【入门任务(必做):开发环境搭建,板载LED点亮】 【所需物料】Adafruit Circuit Playground Express开发板,MicroUSB线,电脑 利用板载按键,实现点亮不同LED灯的操作。这里我的软件逻辑是当点击A按键时,LED0会亮红灯,并持续500ms后熄灭;当点击B按键时,LED1会亮绿灯,并持续500ms后熄灭;当A和B按键同时按下时,LED3会亮黄灯,并持续500ms后熄灭。     input.buttonA.onEvent(ButtonEvent.Click, function () { light.setPixelColor(0, 0xff0000) pause(500) light.clear() }) input.buttonB.onEvent(ButtonEvent.Click, function () { light.setPixelColor(1, 0x00ff00) pause(500) light.clear() }) input.buttonsAB.onEvent(ButtonEvent.Click, function () { light.setPixelColor(3, 0xffff00) pause(500) light.clear() }) 视频演示如下: [localvideo]74cf0c2e8c31f91553cdffcac3dc0342[/localvideo] 【基础任务一(必做):控制板载炫彩LED,跑马灯点亮和颜色变换】 【所需物料】Adafruit Circuit Playground Express开发板,MicroUSB线,电脑 软件逻辑是当A按键或者B按键都不被按下时,所有的LED灯显示为绿色;当A按键按下时,所有LED灯变成红色,并持续1s,接着显示七彩跑马灯并持续1s,然后恢复绿色LED状态;当B按键被按下时,所有LED灯变成蓝色,并持续1s,接着会有多色跑马灯显示,并持续1s,然后恢复绿色LED状态。     forever(function () { if (input.buttonA.isPressed()) { light.setAll(0xff0000) pause(1000) light.showAnimation(light.rainbowAnimation, 1000) } else { light.setAll(0x00ff00) } if (input.buttonB.wasPressed()) { light.setAll(0x0000ff) pause(1000) light.showAnimation(light.cometAnimation, 1000) } else { light.setAll(0x00ff00) } }) 视频演示如下: [localvideo]a4f985d99b109e1eebc9cf59879be612[/localvideo] 【基础任务二(必做):监测环境温度和光线,通过板载LED展示舒适程度】 【所需物料】Adafruit Circuit Playground Express开发板,MicroUSB线,电脑,电池, 利用板载的温度传感器和光线传感器,去感知外界环境温度的变化以及环境光线的变化,以LED的颜色以及LED的点亮数量来展示不同的区别。这里我的软件逻辑是将温度分成三个区间,[-5~22][23~26][27~50],当温度为[-5~22]LED灯显示蓝色,并且随着温度降低,点亮LED灯数量越多;当温度为[23~26]时,LED灯显示绿色,并且随着温度升高,点亮LED数量越多;当温度为[27~50]时,LED灯显示红色,并且当温度升高时,点亮LED灯越多。较为适宜的温度是绿色的,并且数量越多越适宜。同时将光线判断为亮度越高,点亮的LED越多,较为适宜的是2~3个灯。展示图片如下: 在冰箱里,环境温度低,亮蓝灯,可能是开着门拍,未达到相应的环境温度,会有绿灯亮起现象。     let value = input.lightLevel() let value2 = input.temperature(TemperatureUnit.Celsius) let list = [0, 1, 2, 3, 4] let list2 = [5, 6, 7, 8, 9] forever(function () { value = Math.min(input.lightLevel() / 51.2, 5) for (let i = 0; i <= value; i++) { light.setPixelColor(list[i], 0xffff00) } for (let k = value; k <= 10; k++) { light.setPixelColor(list[k], 0x000000) } }) forever(function () { if (input.temperature(TemperatureUnit.Celsius) < 22) { value2 = Math.min(Math.abs(input.temperature(TemperatureUnit.Celsius) - 21) / 5.4, 5) for (let j = 0; j <= value2; j++) { light.setPixelColor(list2[j], 0x0000ff) } for (let l = value; l <= 10; l++) { light.setPixelColor(list[l], 0x000000) } } else { if (input.temperature(TemperatureUnit.Celsius) >= 22 && input.temperature(TemperatureUnit.Celsius) <= 26) { value2 = Math.min((input.temperature(TemperatureUnit.Celsius) - 21) / 1, 5) for (let m = 0; m <= value2; m++) { light.setPixelColor(list2[m], 0x00ff00) } for (let n = value; n <= 10; n++) { light.setPixelColor(list[n], 0x000000) } } else { value2 = Math.min((input.temperature(TemperatureUnit.Celsius) - 26) / 4.8, 5) for (let o = 0; o <= value2; o++) { light.setPixelColor(list2[o], 0xff0000) } for (let p = value; p <= 5; p++) { light.setPixelColor(list[p], 0x000000) } } } }) 视频演示如下: [localvideo]d10815ac275c8b88739314e89de778dc[/localvideo] 【基础任务三(必做):接近检测——设定安全距离并通过板载LED展示,检测到入侵时,发起声音报警】 【所需物料】Adafruit Circuit Playground Express开发板,MicroUSB线,电脑,超声波模块 这个任务中需要用到当时选购的超声波传感器,来检测物体的距离,同时也需要的对采集的数据处理,根据距离的远近判断点亮相应数量的LED灯,距离越近,亮的越少,距离越远,亮的越多。同时设置报警阈值,当靠近5cm时会触发蜂鸣器响,用来警告。     let distance = 0 loops.forever(function () { pins.A2.digitalWrite(false) control.waitMicros(2) pins.A2.digitalWrite(true) control.waitMicros(10) pins.A2.digitalWrite(false) distance = pins.A1.pulseIn(PulseValue.High) / 58 light.graph(distance, 30) if (distance < 5) { music.siren.play() } else { music.stopAllSounds() } }) 视频演示如下: [localvideo]8afe14f37ad337e6bf2f6d30edbb9406[/localvideo] 【进阶任务(必做):制作不倒翁——展示不倒翁运动过程中的不同灯光效果】 【所需物料】Adafruit Circuit Playground Express开发板,MicroUSB线,电脑,猫咪不倒翁玩具 接下来,要介绍的任务就是必做任务,这个就是抢了猫咪的玩具,估计记仇了,要用拳头揍我了,附上照片。将猫咪不倒翁玩具拆开,将开发板固定在上面,改装成可以随着角度变化,点亮响应位置的LED灯,主要利用了加速度传感器,将一个圆分成四个象限,去判断x,y,z的值,去做相应LED灯的显示。       forever(function () { if (input.acceleration(Dimension.X) == 0 && input.acceleration(Dimension.Y) == 0 && input.acceleration(Dimension.Z) == 1023) { light.clear() } else { if (input.acceleration(Dimension.X) > 0) { if (input.acceleration(Dimension.Y) > 0) { if (input.acceleration(Dimension.X) > input.acceleration(Dimension.Y)) { light.setPixelColor(7, 0xff0000) control.waitMicros(100000) light.clear() } else { if (input.acceleration(Dimension.X) < input.acceleration(Dimension.Y)) { light.setPixelColor(5, 0xff0000) control.waitMicros(100000) light.clear() } else { light.setPixelColor(6, 0xff0000) control.waitMicros(100000) light.clear() } } } else { light.setPixelColor(9, 0xff0000) light.setPixelColor(8, 0xff0000) control.waitMicros(100000) light.clear() } } else { if (input.acceleration(Dimension.X) < 0) { if (input.acceleration(Dimension.Y) < 0) { if (input.acceleration(Dimension.X) > input.acceleration(Dimension.Y)) { light.setPixelColor(0, 0xff0000) control.waitMicros(100000) light.clear() } else { if (input.acceleration(Dimension.X) < input.acceleration(Dimension.Y)) { light.setPixelColor(1, 0xff0000) control.waitMicros(100000) light.clear() } else { light.setPixelColor(3, 0xff0000) control.waitMicros(100000) light.clear() } } } else { light.setPixelColor(2, 0xff0000) control.waitMicros(100000) light.clear() } } else { light.setPixelColor(4, 0xff0000) control.waitMicros(100000) light.clear() } } } }) 视频演示效果如下: [localvideo]022056c548a07bcd609abb2576294793[/localvideo] 【 创意任务二:章鱼哥——章鱼哥的触角根据环境声音的大小,章鱼哥的触角可舒展或者收缩】 【所需物料】Adafruit Circuit Playground Express开发板,MicroUSB线,电脑,矿泉水瓶,舵机,丝线,胶水,胶带,剪刀,笔、纸等工具 先准备一个空矿泉水瓶,将其一分为二,一部分做章鱼的身体和腿,一部分做章鱼的头部;   用笔在浅蓝色纸上画出章鱼哥的样子,并用胶带粘贴在章鱼哥的头部,组装好的具体效果图如下:     程序逻辑是跟随外界音量的大小,LED灯点亮的数量会随着声音的大小而变化,同时,舵机的速度会随着音量的大小而变化,舵机的角度固定,在45度~135度间转动(因为之前试过,将音量映射到舵机旋转角度上,效果不太好,就更换思路,音量体现在转动速度上)   let VOL = 0 let speed = 0 let LEDcount = 0 let pos = 0 let list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] let numLED = 10 servos.A1.setRange(45, 135) servos.A1.setAngle(45) forever(function () { speed = Math.map(VOL, 0, 255, 0, 100) servos.A1.run(speed) servos.A1.setAngle(45) pause(40) servos.A1.setAngle(90) pause(40) servos.A1.setAngle(135) pause(40) servos.A1.setAngle(90) pause(40) pause(100) }) forever(function () { let angle = 0 VOL = input.soundLevel() LEDcount = Math.map(VOL, 60, 150, 0, 10) for (let i = 0; i <= LEDcount; i++) { light.setPixelColor(list[i], 0xff00ff) control.waitMicros(10000) } for (let j = LEDcount; j <= 10; j++) { light.setPixelColor(list[j], 0x000000) } console.logValue("x", input.soundLevel()) console.logValue("y", angle) console.logValue("z", VOL) }) 演示效果如下: [localvideo]0e842d40869d866dd074d91615a46c48[/localvideo] 【创意任务三:水果钢琴——通过触摸水果弹奏音乐,并配合灯光效果】 【所需物料】Adafruit Circuit Playground Express开发板,MicroUSB线,电脑,水果,杜邦线等 本次任务需要用到开发板的模拟量输入功能,将每个引脚的模拟量输入利用起来,用导线将其连接到水果上,用手触碰不同引脚连接的水果,会发出相应的音调,组合起来可以弹出“优美的”音乐,谓之水果钢琴。亮出我的干巴小柠檬,来展示水果钢琴。     forever(function () { if (input.touchA1.isPressed()) { music.playTone(988, music.beat(BeatFraction.Double)) pause(1) music.stopAllSounds() } if (input.touchA2.wasPressed()) { music.playTone(880, music.beat(BeatFraction.Double)) pause(1) music.stopAllSounds() } if (input.touchA3.wasPressed()) { music.playTone(784, music.beat(BeatFraction.Double)) pause(1) music.stopAllSounds() } if (input.touchA4.wasPressed()) { music.playTone(698, music.beat(BeatFraction.Double)) pause(1) music.stopAllSounds() } if (input.touchA5.wasPressed()) { music.playTone(659, music.beat(BeatFraction.Double)) pause(1) music.stopAllSounds() } if (input.touchA6.wasPressed()) { music.playTone(587, music.beat(BeatFraction.Double)) pause(1) music.stopAllSounds() } if (input.touchA7.wasPressed()) { music.playTone(523, music.beat(BeatFraction.Double)) pause(1) music.stopAllSounds() } }) 视频演示效果如下: [localvideo]40ffcb814f5bc42f5d82a2c38d8f5f36[/localvideo] 由于时间关系,并未做创意一,希望活动后再继续学习。 【学习心得】其实本次任务应该都不难,只是我自己太菜了,再加上工作之余来做的话,时间上比较紧凑。通过本次任务,学习到了点亮LED灯,流水灯,超声波测距,温度,光线,加速度传感器,喇叭,按键等应用。基本涵盖了常见的电子DIY领域,希望以后可以再次有机会参加,继续在电子世界里探索。 活动很好,下次继续! 最后,再次感谢EEworld和得捷电子,以及帮助过我的每一位小伙伴。 附件源代码:

  • 上传了资料: 【Follow me第二季第1期】源代码

  • 发表了主题帖: 【Follow me第二季第1期】不倒翁+“绿色”章鱼哥

            没想到一个月时间很快就过去了,利用工作之余将【Follow me第二季第一期】的进阶任务和创意任务完成,再次感谢得捷电子以及EEworld的大力支持,让自己将工作的闲暇时光利用起来,学习编程方面的相关知识,并动手操作。         看到标题后,可能有的小伙伴就有疑问了,“我记得《海绵宝宝》中的章鱼哥是浅蓝色的呀,怎么是绿色的呢?”,因为我制作章鱼哥的时候是选择的矿泉水瓶,也算是一种响应国家号召,不随意丢垃圾,变废为宝的一种方式,这样就将原本一无是处的空矿泉水瓶变成一个有意思的创意作品,也是体现了矿泉水瓶的价值呢,所以我这里选择了“绿色”的章鱼哥的标题,也是希望看到帖子的小伙伴能从身边做起,让我们为世界更绿色,付出自己的一点努力。话不多说,直接进入正题。 【所需物料】Adafruit Circuit Playground Express开发板,MicroUSB线,电脑,矿泉水瓶,舵机,鸡毛不倒翁猫玩具,丝线,胶水,胶带,剪刀,笔、纸等工具 【编程软件】windows自带的Microsoft MakeCode,图形化编程工具,让更多玩家更易上手 【 创意任务二:章鱼哥——章鱼哥的触角根据环境声音的大小,章鱼哥的触角可舒展或者收缩】 先准备一个空矿泉水瓶,将其一分为二,一部分做章鱼的身体和腿,一部分做章鱼的头部;   按照章鱼的样子,剪下八条腿,并利用胶水将其固定在身体上;   利用丝线将章鱼哥的八条腿拉紧,并固定在舵机旋转盘上,   用笔在浅蓝色纸上画出章鱼哥的样子,并用胶带粘贴在章鱼哥的头部,组装好的具体效果图如下:   程序逻辑是跟随外界音量的大小,LED灯点亮的数量会随着声音的大小而变化,同时,舵机的速度会随着音量的大小而变化,舵机的角度固定,在45度~135度间转动(因为之前试过,将音量映射到舵机旋转角度上,效果不太好,就更换思路,音量体现在转动速度上),具体的图形化编程界面如下:   代码如下: let VOL = 0 let speed = 0 let LEDcount = 0 let pos = 0 let list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] let numLED = 10 servos.A1.setRange(45, 135) servos.A1.setAngle(45) forever(function () { speed = Math.map(VOL, 0, 255, 0, 100) servos.A1.run(speed) servos.A1.setAngle(45) pause(40) servos.A1.setAngle(90) pause(40) servos.A1.setAngle(135) pause(40) servos.A1.setAngle(90) pause(40) pause(100) }) forever(function () { let angle = 0 VOL = input.soundLevel() LEDcount = Math.map(VOL, 60, 150, 0, 10) for (let i = 0; i <= LEDcount; i++) { light.setPixelColor(list[i], 0xff00ff) control.waitMicros(10000) } for (let j = LEDcount; j <= 10; j++) { light.setPixelColor(list[j], 0x000000) } console.logValue("x", input.soundLevel()) console.logValue("y", angle) console.logValue("z", VOL) }) 演示视频如下: [localvideo]6bbd2dc72caabe63d9a8ce80949340fd[/localvideo] 章鱼哥的腿扭动的可能不太明显,线接的有点长了。。。,尴尬!不过,也算是可以扭动的“绿色”章鱼哥。 【进阶任务(必做):制作不倒翁——展示不倒翁运动过程中的不同灯光效果】 接下来,要介绍的任务就是必做任务,这个就是抢了猫咪的玩具,估计记仇了,要用拳头揍我了,附上照片。将猫咪不倒翁玩具拆开,将开发板固定在上面,改装成可以随着角度变化,点亮响应位置的LED灯,主要利用了加速度传感器,将一个圆分成四个象限,去判断x,y,z的值,去做相应LED灯的显示。     具体图形化编程界面如下图所示:   实现代码如下: forever(function () { if (input.acceleration(Dimension.X) == 0 && input.acceleration(Dimension.Y) == 0 && input.acceleration(Dimension.Z) == 1023) { light.clear() } else { if (input.acceleration(Dimension.X) > 0) { if (input.acceleration(Dimension.Y) > 0) { if (input.acceleration(Dimension.X) > input.acceleration(Dimension.Y)) { light.setPixelColor(7, 0xff0000) control.waitMicros(100000) light.clear() } else { if (input.acceleration(Dimension.X) < input.acceleration(Dimension.Y)) { light.setPixelColor(5, 0xff0000) control.waitMicros(100000) light.clear() } else { light.setPixelColor(6, 0xff0000) control.waitMicros(100000) light.clear() } } } else { light.setPixelColor(9, 0xff0000) light.setPixelColor(8, 0xff0000) control.waitMicros(100000) light.clear() } } else { if (input.acceleration(Dimension.X) < 0) { if (input.acceleration(Dimension.Y) < 0) { if (input.acceleration(Dimension.X) > input.acceleration(Dimension.Y)) { light.setPixelColor(0, 0xff0000) control.waitMicros(100000) light.clear() } else { if (input.acceleration(Dimension.X) < input.acceleration(Dimension.Y)) { light.setPixelColor(1, 0xff0000) control.waitMicros(100000) light.clear() } else { light.setPixelColor(3, 0xff0000) control.waitMicros(100000) light.clear() } } } else { light.setPixelColor(2, 0xff0000) control.waitMicros(100000) light.clear() } } else { light.setPixelColor(4, 0xff0000) control.waitMicros(100000) light.clear() } } } }) 这里还要提醒各位小伙伴,这个makecode的界面上,开发板放置相当于就是面对着我们,并不是与地面水平的关系,因为我用界面的仿真工具调了半天,才发现下载进板子后,程序效果不对,太坑了,希望以后小伙伴在使用时候,避坑。。。。,本来都调好了,还能看到,x,y,z的值。但是,方向不对。。。。。   视频演示如下: [localvideo]b360872bb5964fb15207ab76c4297d0c[/localvideo] 由于时间关系,并未做创意一,希望活动后再继续学习。

  • 2024-08-31
  • 加入了学习《【Follow me第二季第1期】全部任务演示短视频》,观看 【Follow me第二季第1期】任务演示视频

  • 加入了学习《Follow me第二季第1期》,观看 创意任务二:章鱼哥

  • 发表了主题帖: 【Follow me第二季第1期】基础任务二、三+创意任务三

    经过了前面入门任务和基础任务,让我们对adafruit circuit playgrand express这款开发板有了进一步的了解,同时结合基础任务二、基础任务三,以及创意任务三让我们继续深入探究开发板的有趣玩法。   【所需物料】Adafruit Circuit Playground Express开发板,MicroUSB线,电脑,水果若干,超声波传感器 【编程软件】windows自带的Microsoft MakeCode,图形化编程工具,让更多玩家更易上手 下面我将分开展示每一个任务: 【基础任务二(必做):监测环境温度和光线,通过板载LED展示舒适程度】利用板载的温度传感器和光线传感器,去感知外界环境温度的变化以及环境光线的变化,以LED的颜色以及LED的点亮数量来展示不同的区别。这里我的软件逻辑是将温度分成三个区间,[-5~22][23~26][27~50],当温度为[-5~22]LED灯显示蓝色,并且随着温度降低,点亮LED灯数量越多;当温度为[23~26]时,LED灯显示绿色,并且随着温度升高,点亮LED数量越多;当温度为[27~50]时,LED灯显示红色,并且当温度升高时,点亮LED灯越多。较为适宜的温度是绿色的,并且数量越多越适宜。同时将光线判断为亮度越高,点亮的LED越多,较为适宜的是2~3个灯。展示图片如下: 在冰箱里,环境温度低,亮蓝灯,可能是开着门拍,未达到相应的环境温度,会有绿灯亮起现象。    环境温度合适的绿色。   代码的截图如下:   具体代码如下: let value = input.lightLevel() let value2 = input.temperature(TemperatureUnit.Celsius) let list = [0, 1, 2, 3, 4] let list2 = [5, 6, 7, 8, 9] forever(function () { value = Math.min(input.lightLevel() / 51.2, 5) for (let i = 0; i <= value; i++) { light.setPixelColor(list[i], 0xffff00) } for (let k = value; k <= 10; k++) { light.setPixelColor(list[k], 0x000000) } }) forever(function () { if (input.temperature(TemperatureUnit.Celsius) < 22) { value2 = Math.min(Math.abs(input.temperature(TemperatureUnit.Celsius) - 21) / 5.4, 5) for (let j = 0; j <= value2; j++) { light.setPixelColor(list2[j], 0x0000ff) } for (let l = value; l <= 10; l++) { light.setPixelColor(list[l], 0x000000) } } else { if (input.temperature(TemperatureUnit.Celsius) >= 22 && input.temperature(TemperatureUnit.Celsius) <= 26) { value2 = Math.min((input.temperature(TemperatureUnit.Celsius) - 21) / 1, 5) for (let m = 0; m <= value2; m++) { light.setPixelColor(list2[m], 0x00ff00) } for (let n = value; n <= 10; n++) { light.setPixelColor(list[n], 0x000000) } } else { value2 = Math.min((input.temperature(TemperatureUnit.Celsius) - 26) / 4.8, 5) for (let o = 0; o <= value2; o++) { light.setPixelColor(list2[o], 0xff0000) } for (let p = value; p <= 5; p++) { light.setPixelColor(list[p], 0x000000) } } } }) 视频如下: [localvideo]97526fddcd3c2b388c11a0587a3b914e[/localvideo]   【基础任务三(必做):接近检测——设定安全距离并通过板载LED展示,检测到入侵时,发起声音报警】这个任务中需要用到当时选购的超声波传感器,来检测物体的距离,同时也需要的对采集的数据处理,根据距离的远近判断点亮相应数量的LED灯,距离越近,亮的越少,距离越远,亮的越多。同时设置报警阈值,当靠近5cm时会触发蜂鸣器响,用来警告。 以下为图形化编程界面:   具体实现代码如下: let distance = 0 loops.forever(function () { pins.A2.digitalWrite(false) control.waitMicros(2) pins.A2.digitalWrite(true) control.waitMicros(10) pins.A2.digitalWrite(false) distance = pins.A1.pulseIn(PulseValue.High) / 58 light.graph(distance, 30) if (distance < 5) { music.siren.play() } else { music.stopAllSounds() } }) 视频如下: [localvideo]1a3c24eb87ced23fa5af1afd6db1fa9f[/localvideo]   【创意任务三:水果钢琴——通过触摸水果弹奏音乐,并配合灯光效果】本次任务需要用到开发板的模拟量输入功能,将每个引脚的模拟量输入利用起来,用导线将其连接到水果上,用手触碰不同引脚连接的水果,会发出相应的音调,组合起来可以弹出“优美的”音乐,谓之水果钢琴。亮出我的干巴小柠檬,来展示水果钢琴。   以下是实现的图形化编程界面:   具体实现代码: forever(function () { if (input.touchA1.isPressed()) { music.playTone(988, music.beat(BeatFraction.Double)) pause(1) music.stopAllSounds() } if (input.touchA2.wasPressed()) { music.playTone(880, music.beat(BeatFraction.Double)) pause(1) music.stopAllSounds() } if (input.touchA3.wasPressed()) { music.playTone(784, music.beat(BeatFraction.Double)) pause(1) music.stopAllSounds() } if (input.touchA4.wasPressed()) { music.playTone(698, music.beat(BeatFraction.Double)) pause(1) music.stopAllSounds() } if (input.touchA5.wasPressed()) { music.playTone(659, music.beat(BeatFraction.Double)) pause(1) music.stopAllSounds() } if (input.touchA6.wasPressed()) { music.playTone(587, music.beat(BeatFraction.Double)) pause(1) music.stopAllSounds() } if (input.touchA7.wasPressed()) { music.playTone(523, music.beat(BeatFraction.Double)) pause(1) music.stopAllSounds() } }) 视频展示如下: [localvideo]cd99a384d1a1917041807936ee97ae55[/localvideo]  

  • 2024-08-25
  • 发表了主题帖: 【Follow me第二季第1期】入门任务+基础任务一

    大家好,我是小神123,很荣幸能够入选【Follow me第二季第1期】活动,作为活动参与者,跟着官方一起学习adafruit circuit playgrand express这款开发板。第一次参加【follow me】活动,自己是一名电子爱好者,接着这次机会,可以让自己对编程有个更加深入的动手实践,大大提升自己的动手能力以及思维逻辑能力,同时再次感谢得捷电子给予此次机会。这款开发板     Adafruit Circuit Playground Express是一体化设计板,具有处理器、传感器、LED、USB等,非常适合用于电子产品和编程,能够让创意充分发挥。 【所需物料】Adafruit Circuit Playground Express开发板,MicroUSB线,电脑 【编程软件】windows自带的Microsoft MakeCode,图形化编程工具,让更多玩家更易上手 【入门任务(必做):开发环境搭建,板载LED点亮】利用板载按键,实现点亮不同LED灯的操作。这里我的软件逻辑是当点击A按键时,LED0会亮红灯,并持续500ms后熄灭;当点击B按键时,LED1会亮绿灯,并持续500ms后熄灭;当A和B按键同时按下时,LED3会亮黄灯,并持续500ms后熄灭。因为是图形化编程,这里直接放一下截图:     具体代码如下:   input.buttonA.onEvent(ButtonEvent.Click, function () { light.setPixelColor(0, 0xff0000) pause(500) light.clear() }) input.buttonB.onEvent(ButtonEvent.Click, function () { light.setPixelColor(1, 0x00ff00) pause(500) light.clear() }) input.buttonsAB.onEvent(ButtonEvent.Click, function () { light.setPixelColor(3, 0xffff00) pause(500) light.clear() }) 【基础任务一(必做):控制板载炫彩LED,跑马灯点亮和颜色变换】这个任务已经在我们熟悉了入门点亮LED灯之后,我们依旧利用按键与LED的搭配来完成这一任务。这里软件逻辑是当A按键或者B按键都不被按下时,所有的LED灯显示为绿色;当A按键按下时,所有LED灯变成红色,并持续1s,接着显示七彩跑马灯并持续1s,然后恢复绿色LED状态;当B按键被按下时,所有LED灯变成蓝色,并持续1s,接着会有多色跑马灯显示,并持续1s,然后恢复绿色LED状态。图形化编程界面如下图所示:     具体代码如下: forever(function () { if (input.buttonA.isPressed()) { light.setAll(0xff0000) pause(1000) light.showAnimation(light.rainbowAnimation, 1000) } else { light.setAll(0x00ff00) } if (input.buttonB.wasPressed()) { light.setAll(0x0000ff) pause(1000) light.showAnimation(light.cometAnimation, 1000) } else { light.setAll(0x00ff00) } }) 附上视频: [localvideo]3d077d822b06cad1c04db219f7ed48f4[/localvideo] [localvideo]1259d6fa23fc0afe1862adb3322c2dd8[/localvideo]  

  • 加入了学习《【Follow me第二季第1期】任务汇总展示》,观看 【Follow me第二季第1期】任务汇总展示

  • 发表了主题帖: 【Follow me第二季第1期】入门任务+基础任务一

    本帖最后由 小神123 于 2024-8-25 22:42 编辑         大家好,我是小神123,很荣幸能够入选【Follow me第二季第1期】活动,作为活动参与者,跟着官方一起学习adafruit circuit playgrand express这款开发板。第一次参加【follow me】活动,自己是一名电子爱好者,接着这次机会,可以让自己对编程有个更加深入的动手实践,大大提升自己的动手能力以及思维逻辑能力,同时再次感谢得捷电子给予此次机会。这款开发板  Adafruit Circuit Playground Express是一体化设计板,具有处理器、传感器、LED、USB等,非常适合用于电子产品和编程,能够让创意充分发挥。 【所需物料】Adafruit Circuit Playground Express开发板,MicroUSB线,电脑 【编程软件】windows自带的Microsoft MakeCode,图形化编程工具,让更多玩家更易上手 【入门任务(必做):开发环境搭建,板载LED点亮】利用板载按键,实现点亮不同LED灯的操作。这里我的软件逻辑是当点击A按键时,LED0会亮红灯,并持续500ms后熄灭;当点击B按键时,LED1会亮绿灯,并持续500ms后熄灭;当A和B按键同时按下时,LED3会亮黄灯,并持续500ms后熄灭。因为是图形化编程,这里直接放一下截图:   具体代码如下: input.buttonA.onEvent(ButtonEvent.Click, function () {     light.setPixelColor(0, 0xff0000)     pause(500)     light.clear() }) input.buttonB.onEvent(ButtonEvent.Click, function () {     light.setPixelColor(1, 0x00ff00)     pause(500)     light.clear() }) input.buttonsAB.onEvent(ButtonEvent.Click, function () {     light.setPixelColor(3, 0xffff00)     pause(500)     light.clear() }) 【基础任务一(必做):控制板载炫彩LED,跑马灯点亮和颜色变换】这个任务已经在我们熟悉了入门点亮LED灯之后,我们依旧利用按键与LED的搭配来完成这一任务。这里软件逻辑是当A按键或者B按键都不被按下时,所有的LED灯显示为绿色;当A按键按下时,所有LED灯变成红色,并持续1s,接着显示七彩跑马灯并持续1s,然后恢复绿色LED状态;当B按键被按下时,所有LED灯变成蓝色,并持续1s,接着会有多色跑马灯显示,并持续1s,然后恢复绿色LED状态。图形化编程界面如下图所示:   具体代码如下: forever(function () {     if (input.buttonA.isPressed()) {         light.setAll(0xff0000)         pause(1000)         light.showAnimation(light.rainbowAnimation, 1000)     } else {         light.setAll(0x00ff00)     }     if (input.buttonB.wasPressed()) {         light.setAll(0x0000ff)         pause(1000)         light.showAnimation(light.cometAnimation, 1000)     } else {         light.setAll(0x00ff00)     } }) 附上视频: [localvideo]21db80d10ed56a367a4179c268951440[/localvideo] [localvideo]ce2222079b61093b99d328b0edaaec62[/localvideo]  

  • 加入了学习《【Follow me第二季第1期】在arduino环境下多app调度全部任务》,观看 【Follow me第二季第1期】在arduino环境下多app调度全部任务

  • 加入了学习《FollowMe 第二季: 1 Adafruit Circuit Playground Express及任务讲解》,观看 Adafruit Circuit Playground Express 及任务讲解

  • 2024-08-11
  • 回复了主题帖: 【2024 DigiKey 创意大赛】开箱贴ESP32-S3-LCD与BME680

    秦天qintian0303 发表于 2024-8-9 10:04 这两个开发板或者传感器可以说是这次活动选择最多的了吧 是吗?,看来要拿奖就有点悬了,看各位大佬们表演

  • 2024-08-08
  • 发表了主题帖: 【2024 DigiKey 创意大赛】开箱贴ESP32-S3-LCD与BME680

    首先,很荣幸能够入选【2024 DigiKey 创意大赛】,本次主题是DigiKey “感知万物,乐享生活”创意大赛。怀着激动的心情,用颤抖的双手打开参与活动的物料,本次我选择的是一块ESP32-S3-LCD-EV-Board和BME680传感器。 先来一波包装图, 接下来引入眼帘的是ESP32-S3-LCD-EV-Board,ESP32-S3-LCD-EV-Board 是一款基于 ESP32-S3 芯片的屏幕交互开发板,通过搭配不同类型的 LCD 子板,可以驱动 IIC、SPI、8080 以及 RGB 接口的 LCD 显示屏。同时它还搭载双麦克风阵列,支持语音识别和近/远场语音唤醒,具有触摸屏交互和语音交互功能,满足用户对多种不同分辨率以及接口的触摸屏应用产品的开发需求。满满的高级感,好大一块屏幕, 屏幕和主板之间通过排针连接,主板预留了GPIO口,方便我们做更多的扩展。 给主板供电后,有显示厂家的出厂默认界面UI,感受这款产品在智能家居类产品上的应用。界面风格不错,支持触摸和语音,   另外就是BME680环境传感器是一款四合一MEMS环境传感器,可测量VOC(挥发性有机物)、温度、湿度、气压这四个参数,非常适用于监测空气质量。由于采用了MEMS技术,该传感器体积小、功耗低,因此也适用于低功耗场合,如可穿戴等。 板载电源稳压芯片和I2C电平转换电路并引出了SPI接口。非常便于系统集成和场景应用。 希望自己可以利用这么优秀的参赛物料,完美完成自己的创意与作品,一起学习,冲吧,小神。    

最近访客

< 1/1 >

统计信息

已有7人来访过

  • 芯积分:49
  • 好友:--
  • 主题:7
  • 回复:1

留言

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


现在还没有留言