245|0

9

帖子

1

TA的资源

一粒金砂(中级)

楼主
 

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

演示视频如下:

VID_20240901_101032

章鱼哥的腿扭动的可能不太明显,线接的有点长了。。。,尴尬!不过,也算是可以扭动的“绿色”章鱼哥。

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

接下来,要介绍的任务就是必做任务,这个就是抢了猫咪的玩具,估计记仇了,要用拳头揍我了,附上照片。将猫咪不倒翁玩具拆开,将开发板固定在上面,改装成可以随着角度变化,点亮响应位置的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的值。但是,方向不对。。。。。

 

视频演示如下:

VID_20240831_161642

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

点赞 关注
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

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