[作品提交] 【Follow me第二季第1期】任务提交之紧赶慢赶版

小神123   2024-9-1 17:37 楼主

一个月时间太快了,好吧,也可能是自己太菜了,不够优秀,理解太慢,不过好在能够赶上结尾去提交任务,感谢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,实物图如下:

image.png  

本次任务中我采购了三个物品,其中包括Adafruit Circuit Playground Express开发板(必备),超声波传感器(选配,为了完成距离检测),舵机(选配,为了完成章鱼哥任务),以下是全家福。

微信图片_20240901130906.jpg   接下来就是任务汇总:

【入门任务(必做):开发环境搭建,板载LED点亮】

【所需物料】Adafruit Circuit Playground Express开发板,MicroUSB线,电脑

利用板载按键,实现点亮不同LED灯的操作。这里我的软件逻辑是当点击A按键时,LED0会亮红灯,并持续500ms后熄灭;当点击B按键时,LED1会亮绿灯,并持续500ms后熄灭;当A和B按键同时按下时,LED3会亮黄灯,并持续500ms后熄灭。

image.png  

image.png  

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()
})

视频演示如下:

VID_20240825_204350_subtitle

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

【所需物料】Adafruit Circuit Playground Express开发板,MicroUSB线,电脑

软件逻辑是当A按键或者B按键都不被按下时,所有的LED灯显示为绿色;当A按键按下时,所有LED灯变成红色,并持续1s,接着显示七彩跑马灯并持续1s,然后恢复绿色LED状态;当B按键被按下时,所有LED灯变成蓝色,并持续1s,接着会有多色跑马灯显示,并持续1s,然后恢复绿色LED状态。

image.png  

image.png  

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

视频演示如下:

VID_20240825_212509

【基础任务二(必做):监测环境温度和光线,通过板载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个灯。展示图片如下:

在冰箱里,环境温度低,亮蓝灯,可能是开着门拍,未达到相应的环境温度,会有绿灯亮起现象。

image.png  

image.png  

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

视频演示如下:

202408310037

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

【所需物料】Adafruit Circuit Playground Express开发板,MicroUSB线,电脑,超声波模块

这个任务中需要用到当时选购的超声波传感器,来检测物体的距离,同时也需要的对采集的数据处理,根据距离的远近判断点亮相应数量的LED灯,距离越近,亮的越少,距离越远,亮的越多。同时设置报警阈值,当靠近5cm时会触发蜂鸣器响,用来警告。

image.png  

image.png  

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()
    }
})

视频演示如下:

VID_20240830_003508

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

【所需物料】Adafruit Circuit Playground Express开发板,MicroUSB线,电脑,猫咪不倒翁玩具

接下来,要介绍的任务就是必做任务,这个就是抢了猫咪的玩具,估计记仇了,要用拳头揍我了,附上照片。将猫咪不倒翁玩具拆开,将开发板固定在上面,改装成可以随着角度变化,点亮响应位置的LED灯,主要利用了加速度传感器,将一个圆分成四个象限,去判断x,y,z的值,去做相应LED灯的显示。

image.png  

image.png  

image.png  

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()
            }
        }
    }
})

视频演示效果如下:

VID_20240831_161642

【 创意任务二:章鱼哥——章鱼哥的触角根据环境声音的大小,章鱼哥的触角可舒展或者收缩】

【所需物料】Adafruit Circuit Playground Express开发板,MicroUSB线,电脑,矿泉水瓶,舵机,丝线,胶水,胶带,剪刀,笔、纸等工具

先准备一个空矿泉水瓶,将其一分为二,一部分做章鱼的身体和腿,一部分做章鱼的头部;

image.png  

用笔在浅蓝色纸上画出章鱼哥的样子,并用胶带粘贴在章鱼哥的头部,组装好的具体效果图如下:

image.png  

image.png  

程序逻辑是跟随外界音量的大小,LED灯点亮的数量会随着声音的大小而变化,同时,舵机的速度会随着音量的大小而变化,舵机的角度固定,在45度~135度间转动(因为之前试过,将音量映射到舵机旋转角度上,效果不太好,就更换思路,音量体现在转动速度上)

image.png  

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

演示效果如下:

VID_20240901_101032

创意任务三:水果钢琴——通过触摸水果弹奏音乐,并配合灯光效果】

【所需物料】Adafruit Circuit Playground Express开发板,MicroUSB线,电脑,水果,杜邦线等

本次任务需要用到开发板的模拟量输入功能,将每个引脚的模拟量输入利用起来,用导线将其连接到水果上,用手触碰不同引脚连接的水果,会发出相应的音调,组合起来可以弹出“优美的”音乐,谓之水果钢琴。亮出我的干巴小柠檬,来展示水果钢琴。

image.png  

image.png  

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()
    }
})

视频演示效果如下:

VID_20240828_044043

由于时间关系,并未做创意一,希望活动后再继续学习。

【学习心得】其实本次任务应该都不难,只是我自己太菜了,再加上工作之余来做的话,时间上比较紧凑。通过本次任务,学习到了点亮LED灯,流水灯,超声波测距,温度,光线,加速度传感器,喇叭,按键等应用。基本涵盖了常见的电子DIY领域,希望以后可以再次有机会参加,继续在电子世界里探索。

活动很好,下次继续!

最后,再次感谢EEworld和得捷电子,以及帮助过我的每一位小伙伴。

附件源代码:

源代码.zip (743.64 KB)
(下载次数: 1, 2024-9-1 17:35 上传)

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复