- 2024-09-27
-
发表了主题帖:
【Follow me第二季第1期】进阶 不倒翁
本帖最后由 crimsonsnow 于 2024-9-27 09:48 编辑
这个任务可以通过检测倾角的变化来进行制作,十个彩灯有固定的一轮颜色,当板子向哪里倾斜的时候,那个角度上的彩灯会变成绿色
import math
import time
from adafruit_circuitplayground import cp
# 定义颜色轮函数
def color_wheel(position):
if position < 0 or position > 255:
return (0, 0, 0)
if position < 85:
return (int(position * 3), int(255 - position * 3), 0)
if position < 170:
position -= 85
return (int(255 - position * 3), 0, int(position * 3))
position -= 170
return (0, int(position * 3), int(255 - position * 3))
while True:
accel_x, accel_y, accel_z = cp.acceleration
inclination = math.atan2(accel_x, accel_y) # 获取倾角
inclination_deg = inclination * (180 / math.pi) # 将倾角转换为度
# 限制倾角在-90到90度之间
inclination_deg = max(min(inclination_deg, 90), -90)
# 映射倾角到LED索引
led_index = int((inclination_deg + 90) / 18)
# 确保led_index在0到9之间
led_index = max(min(led_index, 9), 0)
# 更新LED灯颜色
for i in range(10):
if i == led_index:
# 当前倾角对应的LED显示绿色
cp.pixels[i] = (0, 255, 0)
else:
# 根据LED位置计算颜色
color = color_wheel(255 * i // 10)
cp.pixels[i] = color
# 稍微延迟后再次检测
time.sleep(0.1)
我本想固定基底色然后变化颜色但现在好像有点刺眼
以及如果倾角过大,它会发生反判定,跑到对面的led上去
-
发表了主题帖:
【follow me第二季第一期】任务三,入侵检测报警
本帖最后由 crimsonsnow 于 2024-9-27 09:22 编辑
import time
from adafruit_circuitplayground import cp
# 设定一个阈值来表示检测到物体时的红外值
# 这个值可能需要根据你的环境和测试进行调整
IR_THRESHOLD = 10
while True:
# 读取板载红外传感器数据
ir_value = cp.ir_proximity
# 检查是否有人或物体靠近
if ir_value > IR_THRESHOLD:
# 点亮所有LED灯
cp.pixels.brightness = 0.5 # 设置LED亮度
for i in range(10):
cp.pixels[i] = (255, 0, 0) # 红色表示警告
# 发出声音报警
# 播放一个简单的警报音
for _ in range(3):
cp.start_tone(2000) # 发出2000Hz的音调
time.sleep(0.1)
cp.stop_tone()
time.sleep(0.1)
else:
# 关闭LED灯
cp.pixels.brightness = 0.0 # 关闭LED灯
cp.stop_tone() # 停止声音
# 稍微延迟后再次检测
time.sleep(0.1)
任务指示建议使用红外发射与接收来操作,但是红外的效果似乎比较一般,不是一直在报警就是一直不报警
有用光线传感器做的方法,原理是接近后光量下降,从而进行判定
效果很不错
import time
from adafruit_circuitplayground import cp
# 设定一个阈值来表示光线强度低时的值
# 这个值可能需要根据你的环境和测试进行调整
LIGHT_THRESHOLD = 100
while True:
# 读取板载光线传感器数据
light_value = cp.light
# 检查光线强度是否低于阈值
if light_value < LIGHT_THRESHOLD:
# 点亮所有LED灯
cp.pixels.brightness = 0.5 # 设置LED亮度
for i in range(10):
cp.pixels[i] = (255, 0, 0) # 红色表示警告
# 发出声音报警
# 播放一个简单的警报音
for _ in range(3):
cp.start_tone(2000) # 发出2000Hz的音调
time.sleep(0.1)
cp.stop_tone()
time.sleep(0.1)
else:
# 关闭LED灯
cp.pixels.brightness = 0.0 # 关闭LED灯
cp.stop_tone() # 停止声音
# 稍微延迟后再次检测
time.sleep(0.1)
遮挡之后迅速反应,亮灯报警
-
发表了主题帖:
【Follow me第二季第1期】任务汇总,代码下载
本帖最后由 crimsonsnow 于 2024-10-21 05:18 编辑
[localvideo]ee3719609b0a090fb6bd63b6f3be35cd[/localvideo]
本次使用的产品是Circuit Playground Express,它是由 Adafruit Industries LLC 设计并生产的一款多功能入门级开发板。Adafruit 提供了很丰富的教育支持来帮助入门编程它们的开发板。
可以在adafruit的官方网站上搜索进入circuit playground的产品界面。Circuit Playground Express:ID 3333:Adafruit Industries,独特且有趣的DIY电子产品和套件
在描述中,可以找到一个帮助开始的链接。Overview | Adafruit Circuit Playground Express | Adafruit Learning System
这块开发板是express版本。支持运行 MakeCode、CircuitPython、Arduino 和 Code.org CS Discoveries。
我使用了thonny和MU两个针对初学者级别的python IDE开发。
express开发板使用的连接端口是micro端口,因此要准备良好的micro数据线。
这款开发板有很多的传感器外设,在任务中,体验了光线传感器,温度传感器,运动传感器。它还有一个小麦克风和一个迷你扬声器,扬声器通过引脚#11上的关机控制能够将其关闭。
它还有一个红外接收器和传输器,在“距离检测”任务中,很多人尝试使用红外来进行处理,但是效果不太好。
跟随开始教程,官方提供了固件,直接通过USB下载,就可以进行烧录。
教程特别提示了如果你是MAC系统,最好跟随教程更新bootloader。而如果你是windows系统,你应该先下载驱动。如果你是win10,可能内置驱动已经包含了,所以如果没有安装驱动的步骤但是能成功烧录,也是有可能的。在设备管理器能成功看到COM口信息即可。
Windows 驱动程序安装 |Adafruit Circuit 游乐场快车 |Adafruit 学习系统
有一些开发板进入boot模式需求上电的同时按下reset软件。至于express,我没有搞清楚。按照官网的说明,新板子连接USB线之后,再按一到两下reset就能进入boot模式,我尝试的结果似乎是连续按两下,虽然这么小的按键按动起来需要一点运气。。总而言之,最后是能够成功的,看到所有灯同时闪烁绿色就是进入了boot模式。
这个板子还有个很优秀的故障提示,如果彩色 LED 指示灯变为红色,请检查 USB 电缆,尝试使用其他电缆或其他 USB 端口。可以提醒你是否是线缆和电脑的问题。
接下来就是各个任务部分
入门任务:配置开发环境,点灯
https://bbs.eeworld.com.cn/thread-1292198-1-1.html
物料:circuit playground express开发板的D13 LED灯
流程:下载官方固件,进入boot模式,自动烧录
烧录成功之后会齐闪黄灯。
[localvideo]08c90bf6a7872f46bb18a36f1a1f542e[/localvideo]
点灯程序
import board
import digitalio
import time
led = digitalio.DigitalInOut(board.LED)
led.direction = digitalio.Direction.OUTPUT
while True:
led.value = not led.value
time.sleep(0.1)
基础任务一,炫彩LED跑马灯
https://bbs.eeworld.com.cn/thread-1292210-1-1.html
物料:circuit playground express开发板的neopixel灯带
流程:
import time
import board
import neopixel
from rainbowio import colorwheel
import digitalio
# 自定义常量
BOARD_NEO_QTY = 10
BOARD_NEQ_BRI = 0.2
RED = (255, 0, 0)
YELLOW = (255, 150, 0)
GREEN = (0, 255, 0)
CYAN = (0, 255, 255)
BLUE = (0, 0, 255)
PURPLE = (180, 0, 255)
WHITE = (255, 255, 255)
OFF = (0, 0, 0)
# 初始化 NeoPixel
pixels = neopixel.NeoPixel(board.NEOPIXEL, BOARD_NEO_QTY, brightness=BOARD_NEQ_BRI,auto_write=False)
# 每0.5秒,按顺序改变一个灯珠的颜色
def color_chase(color, wait):
for i in range(10):
pixels[i] = color
time.sleep(0.1)
pixels.show()
time.sleep(0.4)
def rainbow_cycle(wait):
for j in range(255):
for i in range(10):
rc_index = (i * 256 // 10) + j * 5
pixels[i] = colorwheel(rc_index & 255)
time.sleep(0.1)
pixels.show()
while True:
rainbow_cycle(0.1)
'''color_chase(RED, 0.1)
color_chase(YELLOW, 0.1)
color_chase(GREEN, 0.1)
color_chase(CYAN, 0.1)
color_chase(BLUE, 0.1)
color_chase(PURPLE, 0.1)
color_chase(OFF, 0.1)'''
基础任务二,检测环境温度和光线
https://bbs.eeworld.com.cn/thread-1292215-1-1.html
物料:circuit playground express开发板的温度传感器与光线传感器,灯带
流程:
# 在这里写上你的代码 :-)
import time
import board
import neopixel
import analogio
import simpleio
import adafruit_thermistor
# 自定义常量
BOARD_NEO_QTY = 10
BOARD_NEQ_BRI = 0.008
RED = (255, 0, 0)
YELLOW = (255, 150, 0)
GREEN = (0, 255, 0)
CYAN = (0, 255, 255)
BLUE = (0, 0, 255)
PURPLE = (180, 0, 255)
WHITE = (255, 255, 255)
OFF = (0, 0, 0)
# 灯带初始化
pixels = neopixel.NeoPixel(board.NEOPIXEL, BOARD_NEO_QTY,brightness=BOARD_NEQ_BRI,auto_write=False)
pixels.fill((0, 0, 0))
pixels.show()
# 传感器
sensor_light = analogio.AnalogIn(board.LIGHT)
sensor_temp = adafruit_thermistor.Thermistor(board.TEMPERATURE, 10000, 10000, 25, 3950)
# 定义颜色序列
brightness_colors = [GREEN, YELLOW, RED]
temperature_colors = [BLUE, YELLOW, RED]
while True:
# 获取环境的亮度和温度
peak_light = simpleio.map_range(sensor_light.value, 2000, 62000, 0, 5)
peak_temp = simpleio.map_range(sensor_temp.temperature, 33, 33.5, 0, 5)
print("light.value:", sensor_light.value)
print("--peak_light ", int(peak_light))
print("temp.value:", sensor_temp.temperature)
print("**peak_temp ", int(peak_temp))
# 右侧灯珠表示 亮度
for i in range(0, 5, 1):
if i <= peak_light:
pixels[i] = GREEN
if peak_light > 2 and i >= 2:
pixels[i] = YELLOW
if peak_light > 3 and i >= 3:
pixels[i] = RED
else:
pixels[i] = OFF
# 左侧灯珠表示 温度
for j in range(9, 4, -1):
if j >= 9 - peak_temp:
pixels[j] = BLUE
if peak_temp > 2 and j <= 7:
pixels[j] = YELLOW
if peak_temp > 3 and j <= 6:
pixels[j] = RED
else:
pixels[j] = OFF
pixels.show()
time.sleep(0.1)
基础任务三,入侵检测报警
https://bbs.eeworld.com.cn/thread-1292649-1-1.html
物料:circuit playground express开发板的光线传感器,灯带
使用光线检测的效果,比红外检测的效果明显
流程:
import time
from adafruit_circuitplayground import cp
# 设定一个阈值来表示光线强度低时的值
LIGHT_THRESHOLD = 100
while True:
# 读取板载光线传感器数据
light_value = cp.light
# 检查光线强度是否低于阈值
if light_value < LIGHT_THRESHOLD:
# 点亮所有LED灯
cp.pixels.brightness = 0.5 # 设置LED亮度
for i in range(10):
cp.pixels[i] = (255, 0, 0) # 红色表示警告
# 发出声音报警
# 播放一个简单的警报音
for _ in range(3):
cp.start_tone(2000) # 发出2000Hz的音调
time.sleep(0.1)
cp.stop_tone()
time.sleep(0.1)
else:
# 关闭LED灯
cp.pixels.brightness = 0.0 # 关闭LED灯
cp.stop_tone() # 停止声音
# 稍微延迟后再次检测
time.sleep(0.1)
[localvideo]5487ca0fce8a4044362681ec01340d70[/localvideo]
进阶任务一,不倒翁
https://bbs.eeworld.com.cn/thread-1294921-1-1.html
物料:circuit playground express开发板的运动传感器,neopixel灯带
流程:
import math
import time
from adafruit_circuitplayground import cp
# 定义颜色轮函数
def color_wheel(position):
if position < 0 or position > 255:
return (0, 0, 0)
if position < 85:
return (int(position * 3), int(255 - position * 3), 0)
if position < 170:
position -= 85
return (int(255 - position * 3), 0, int(position * 3))
position -= 170
return (0, int(position * 3), int(255 - position * 3))
while True:
accel_x, accel_y, accel_z = cp.acceleration
inclination = math.atan2(accel_x, accel_y) # 获取倾角
inclination_deg = inclination * (180 / math.pi) # 将倾角转换为度
# 限制倾角在-90到90度之间
inclination_deg = max(min(inclination_deg, 90), -90)
# 映射倾角到LED索引
led_index = int((inclination_deg + 90) / 18)
# 确保led_index在0到9之间
led_index = max(min(led_index, 9), 0)
# 更新LED灯颜色
for i in range(10):
if i == led_index:
# 当前倾角对应的LED显示绿色
cp.pixels[i] = (0, 255, 0)
else:
# 根据LED位置计算颜色
color = color_wheel(255 * i // 10)
cp.pixels[i] = color
# 稍微延迟后再次检测
time.sleep(0.1)
Circuit Playground Express是一款设计精良的电子编程学习工具,它以其紧凑的设计和丰富的功能赢得了用户的喜爱。这款设备集合了多种传感器和LED灯,为学习编程和电子制作提供了便利。它的用户界面友好,使得即使是初学者也能轻松上手。Circuit Playground Express在教育和娱乐之间取得了良好的平衡,让学习过程变得更加有趣和互动。此外,它的稳定性和兼容性也赢得了用户的信赖,是一款值得推荐的电子学习工具。
- 2024-09-02
-
加入了学习《FollowMe 第二季: 1 Adafruit Circuit Playground Express及任务讲解》,观看 Adafruit Circuit Playground Express 及任务讲解
- 2024-09-01
-
发表了主题帖:
【follow me第二季第一期】任务二,检测环境温度和光线
这部分是教学里面两个事例例程的整合
第一个是光线强度检测:
光线传感器数据读取,analogio模块,读取模拟信号并进行转换
关键代码
light = anlogio.Analogln(board.LIGHT)
print(light.value)
出来的结果是这样
第二个是温度检测
关键代码
thermistor = adafruit_thermistor.Thermistor(board.TEMPERATURE,10000,10000,25,3950)
while True:
temp_c = thermistor.temperature
出来的结果是这样
同时显示了摄氏度和华氏度的读数
把手摁在传感器上面温度会略微升高
眼睛是光线传感器,温度计是温度传感器,丝印标记很清楚
这里有两个官方的示例例程参考。
游乐场光线传感器 |Adafruit Circuit 游乐场快车 |Adafruit 学习系统
操场温度 |Adafruit Circuit 游乐场快车 |Adafruit 学习系统
先下载官方例程,将库拷贝到板子上
然后code部分整合到一起,可以正常运行了
# 在这里写上你的代码 :-)
import time
import board
import neopixel
import analogio
import simpleio
import adafruit_thermistor
# 自定义常量
BOARD_NEO_QTY = 10
BOARD_NEQ_BRI = 0.008
RED = (255, 0, 0)
YELLOW = (255, 150, 0)
GREEN = (0, 255, 0)
CYAN = (0, 255, 255)
BLUE = (0, 0, 255)
PURPLE = (180, 0, 255)
WHITE = (255, 255, 255)
OFF = (0, 0, 0)
# 灯带初始化
pixels = neopixel.NeoPixel(board.NEOPIXEL, BOARD_NEO_QTY,brightness=BOARD_NEQ_BRI,auto_write=False)
pixels.fill((0, 0, 0))
pixels.show()
# 传感器
sensor_light = analogio.AnalogIn(board.LIGHT)
sensor_temp = adafruit_thermistor.Thermistor(board.TEMPERATURE, 10000, 10000, 25, 3950)
# 定义颜色序列
brightness_colors = [GREEN, YELLOW, RED]
temperature_colors = [BLUE, YELLOW, RED]
while True:
# 获取环境的亮度和温度
peak_light = simpleio.map_range(sensor_light.value, 2000, 62000, 0, 5)
peak_temp = simpleio.map_range(sensor_temp.temperature, 33, 33.5, 0, 5)
print("light.value:", sensor_light.value)
print("--peak_light ", int(peak_light))
print("temp.value:", sensor_temp.temperature)
print("**peak_temp ", int(peak_temp))
# 右侧灯珠表示 亮度
for i in range(0, 5, 1):
if i <= peak_light:
pixels[i] = GREEN
if peak_light > 2 and i >= 2:
pixels[i] = YELLOW
if peak_light > 3 and i >= 3:
pixels[i] = RED
else:
pixels[i] = OFF
# 左侧灯珠表示 温度
for j in range(9, 4, -1):
if j >= 9 - peak_temp:
pixels[j] = BLUE
if peak_temp > 2 and j <= 7:
pixels[j] = YELLOW
if peak_temp > 3 and j <= 6:
pixels[j] = RED
else:
pixels[j] = OFF
pixels.show()
time.sleep(0.1)
绿色的灯表示,没有光线,就是光线检测量化为0的情况
蓝色的灯表示温度正常
-
发表了主题帖:
【follow me第二季第一期】基础一,炫彩LED跑马灯
本帖最后由 crimsonsnow 于 2024-9-1 19:42 编辑
控制板载neopixel LED
使用neopixel扩展库,控制WS2812B灯带,10颗灯珠使用了MCU的一个IO ,但是可以通过程序分别控制每一个的颜色和明暗
在前人的经验里找到了一个教学网站Adafruit Circuit Playground Express - Blocks / Javascript editor
MakeCode 是微软开发的一款基于图形化编程的在线编程工具,它支持 Adafruit Circuit Playground Express,我们只需要在浏览器中打开 MakeCode 的网站,然后选择 Adafruit Circuit Playground Express,即可开始编程。
总的来说这块板子的目标就是让入门级的人都能轻松使用的感觉,灯带的集成化也是这个目的
还蛮适合那种艺术家创作使用的
根据视频例程,可以做出跑马灯的几种模式,比如先转完一圈再换个颜色,或者不断改变颜色的彩虹环
import time
import board
import neopixel
from rainbowio import colorwheel
import digitalio
# 自定义常量
BOARD_NEO_QTY = 10
BOARD_NEQ_BRI = 0.2
RED = (255, 0, 0)
YELLOW = (255, 150, 0)
GREEN = (0, 255, 0)
CYAN = (0, 255, 255)
BLUE = (0, 0, 255)
PURPLE = (180, 0, 255)
WHITE = (255, 255, 255)
OFF = (0, 0, 0)
# 初始化 NeoPixel
pixels = neopixel.NeoPixel(board.NEOPIXEL, BOARD_NEO_QTY, brightness=BOARD_NEQ_BRI,auto_write=False)
#模式切换
color_chase_demo = 0
flash_demo = 0
rainbow_demo = 0
rainbow_cycle_demo = 1
# 每0.5秒,按顺序改变一个灯珠的颜色
def color_chase(color, wait):
for i in range(10):
pixels[i] = color
time.sleep(0.1)
pixels.show()
time.sleep(0.4)
def rainbow_cycle(wait):
for j in range(255):
for i in range(10):
rc_index = (i * 256 // 10) + j * 5
pixels[i] = colorwheel(rc_index & 255)
time.sleep(0.1)
pixels.show()
while True:
rainbow_cycle(0.1)
'''color_chase(RED, 0.1)
color_chase(YELLOW, 0.1)
color_chase(GREEN, 0.1)
color_chase(CYAN, 0.1)
color_chase(BLUE, 0.1)
color_chase(PURPLE, 0.1)
color_chase(OFF, 0.1)'''
如果要转一圈换一个颜色的模式,就把彩虹环函数注释,放出下面的循环函数
不知道为啥视频传不上来
-
发表了主题帖:
[follow me 第二季第一期]配置开发环境,入门,点灯
本次使用circuitpython语言进行开发
首先,下载thonny IDE或MU ide,作为python开发环境的预备,直接搜索进入官网就可下载安装
MU可以直接选择circuitpython开发模式
如果是thonny,烧录完成之后,开发板会自己连载电脑上,右下角有个提示
首先下载UF2文件进行烧录
circuitpython.org
可能要注意挂梯子,我出现了一点连接失败的情况
双击reset按键
开发板上面的按键一般都很难按,尤其是这种在中间的,必须要快速连续按两下才成功进入boot模式,标志也非常一目了然,就是闪绿灯
如果没成功就是闪烁一次红灯
然后电脑会自动弹出连接有一个cplayboot的盘
把UF2文件直接拷贝进去就自动烧录成功了,非常的方便
code是自带的hello world事例,在MU中打开它运行就会输出文字
我一开始不太理解经常强行停止运行开发板,卡死时候按reset就可以重启了
根据视频教程,可以在命令行直接输入运行,也可以运行电脑上的例程,也可以将例程存到开发板空间内运行
总体上来说,对新手还是很友好的,属于一键装机的友好度了
然后是入门任务,点灯
点亮供电口旁边的D13 LED
import board
import digitalio
import time
led = digitalio.DigitalInOut(board.LED)
led.direction = digitalio.Direction.OUTPUT
while True:
led.value = not led.value
time.sleep(0.1)
我直接将python文件保存在了板子上,然后运行run
不知道为什么有时候会卡死说检测不到端口
其他八个常亮的情况下,D13开始根据设定的周期闪烁
点灯结束
- 2024-07-24
-
回复了主题帖:
有谁和我一样,动过给产品加AI的心思?
应该能在一定程度上简化程序结构吧,以前异常判断都是要靠参数判断来实现的,对入门门槛利好吧
- 2024-07-21
-
回复了主题帖:
多高的薪资能让你工作到凌晨3点半
除非第二天下午三点半上班。。
- 2024-07-15
-
发表了主题帖:
[beetle ESP32-C6 MINI]开发板分享3 烧录micropython
1 下载需要使用的micropython固件
2 下载ESPtool flash烧录工具
both解压
运行运行文件
官网提供的这个让我选择C6但我没C6选择啊
所以我又在网上找了一个更新版本的,3.9.7版本
工具|乐鑫科技 (espressif.com.cn)
wiki提供的是3.9.2版本,不知道为什么差别这么多,但反正是能选择了
选择完之后,点击OK,按住板子上的boot,点击rst,左边是boot,右边是rst,为了省空间,丝印没有印出来,会听到轻微的提示声咯噔一声
选择下载的固件,擦除flash之后烧录固件
官网上面的图片标记的顺序非常好,但我下载不下来
总之,先点击空白栏旁边的三个小点,选择你刚刚下载的固件,然后右边的小空白栏输入0x0,再点击左边的勾,根据自己的设置,改串口,改波特率
最后注意要先点击擦除ERASE,再START烧录,绿色块的部分会提示你进行到了什么部分,出现湖蓝色的finish就可以进行下一步了
然后配置micropython编译器
首先下载thonny
Thonny, Python IDE for beginners
直接运行运行文件,傻瓜式安装,一直next(除了改路径,大家都懂)
它居然有自带汉化
2 进入软件 对解释器进行设置 run-configure interpreter 运行-配置解释器
选一下
复制以下代码到代码框
import time
from machine import Pin
led=Pin(15,Pin.OUT)
while True:
led.value(1)
time.sleep(1)
led.value(0)
time.sleep(1)
保存文件到micropython设备
选择下面那个
我又出问题了,说设备正忙
你要先stop掉在运行的进程,而且不能在boot模式
就会出现这个
改掉文件名,确认
按rst重启esp32
看到L灯闪烁,成功
- 2024-07-09
-
发表了主题帖:
[beetle ESP32 C6mini开发板]开发板结构与环境配置
本帖最后由 crimsonsnow 于 2024-7-10 22:25 编辑
Beetle ESP32-C6的3D示意图是这样。
开发板用typeC供电。普通USB5V输入就可以,经过电源电路转成3.3V供电。
左右有两个LED,左边的IO15/D13是可用的板载LED。
右边的charge是充电指示灯,这块板子是能够接锂电池的,集成锂电池充电管理功能,可以安全的对锂电池进行充电,该开发板还支持电池电压监测。充电指示灯熄灭表示未接入电源或者已经充满,常亮是充电中,闪烁是电池未接入,一般都是电池没有接入的,LED灯会闪烁。TP4057就是锂电池充电管理芯片,RT9080是 LDO电源芯片。
电源方面有一个3.3V输出。
有JTAG调试接口。
首次使用ESP32的步骤:
1添加开发板JSON链接
2下载主控的核心
3选择开发板以及串口
4烧录程序
可以使用arduino开发,首先配置arduino环境。
第一步添加URL板卡连接,打开arduino IDE,点击file-preferences,点击弹出窗口additional boards URLs后面的按钮,填入需要使用的版本连接。
稳定版:https://espressif.github.io/arduino-esp32/package_esp32_index.json
开发版:https://espressif.github.io/arduino-esp32/package_esp32_dev_index.json
我一开始选择的是稳定版但是下载不了。后来换了开发版的连接就下载好了。
wiki说请根据芯片支持情况选择合适的版本,但是事实上它全系列都支持这两个版本的。
也可以两个版本都下载,填入一个连接之后换行,添加新连接就可以
ESP这个包的下载经常出现网络问题,比如我稳定版就可能因为网络问题总是下载一半就没有了,所以后来才换了开发板。我查找之后发现cdsn的一些文章上面也有类似的现象,具体问题是,电脑虽然挂了T,可以魔法上网到GitHub,但是IDE却没法连接到网络。有一些方法是给IDE配置代理,还有一些方法是下载离线包,但因为我后来换链接后成功了,这些折腾的办法不再详述。
然后下载和更新板卡,打开tools-board:"xxxxx"-boards manager
或者直接打开左边侧边栏,点击第二个图标,就直接打开板卡管理器了,然后会出现一个搜索栏,直接搜索ESP32,下载所有出现的东西
这个下载操作不知道为什么挺占据内存的,因为我C盘已经完全红了,所以又折腾了我一段时间,最后是用了硬盘助手合并了一部分空间过去
一开始我的C盘还有大概5G空间这样的,但是当时已经一直提示空间不够不能install。不知道这板卡包是否有这么大。
下一步是选择开发板和串口。点击tools-board-esp32,选择DFRobot FireBeetle 2 ESP32-C6型号。
然后再点击tool对开发板进行设置
USB CDC On Boot:
Enabled: 通过USB接口打印串口数据
Disable: 通过TX、RX打印串口数据
Partition Scheme: 磁盘分区方案,请根据开发板Flash选择合适的存储空间
Port: 开发板端口(COM号正确即可,与后面芯片型号无关)
按照wiki图片上面的参数选择就可以了,port是自动识别的,如果你的设备正确介入了,端口是可以自动识别的,其他参数基本没什么要修改的
比起wiki就是多了一个zigbee mode
下一步丨烧录代码
int led = 15;
void setup() {
pinMode(led,OUTPUT);
}
void loop() {
digitalWrite(led,HIGH);
delay(1000);
digitalWrite(led,LOW);
delay(1000);
}
点击upload上传
这就是成功点灯的第一步。
- 2024-07-08
-
发表了主题帖:
《开关电源仿真与设计-基于spice》读书心得1 从电阻分压器到线性调压器
说实话,这本书比我想象的难读好多!知识点实在是太硬了。还有一部分翻译的问题还是有点翻译腔,让我想起了大学的时候用外文翻译过来的教材的痛苦,翻译过来的译本总是会有一些奇怪的很难理解的问题。
先来第一章吧
任何商业上成功的仿真软件,必定拥有一个友好的用户界面,这说的很对。
最普遍使用的仿真软件应该是multisim,归功于大学课程的普及(以及盗版软件的普及),multisim的界面是很容易使用的,元件拉出来,然后直接就可以开始连接导线,电路图怎么用笔画出来,就可以怎么连出来,然后按开始键就可以开始仿真了。
书中说仿真可以避免时间和金钱的浪费。准备做实验之前或者等待实验样品送达之前,可以通过下载元件模型进行仿真,从而熟悉主要的单元电路。这话没错,我大学的时候,刚开始学习运放的时候,老师就是让我们用multisim来进行几个基础运放电路的仿真,然后通过模拟示波器和波谱仪来观察信号的变化。比如说加法器,微分电路,以及最基础的同相,反相放大。 不过multisim的放大器的模型似乎基本上参数都是一样的,都是用的是通用模型,我记得当时有一个查看信噪比还是噪声的情况换了几个不同“型号”的放大器都是一样的。不过模型参数也是可以自己修改的。
第三点,在设计者没有相应的测试设备和无法做实际测试的情况下,SPICE随时可以为设计者做仿真测试。比如说波谱仪就是非常贵的,第一次用的时候老师还特别强调了一下。
第四点,电源库是绝对安全的,不会爆炸!简而言之,这很电源笑话。
第一章介绍开关电源技术和变换器的类型,并引入帮助读者更好理解平均技术的几个重要结果。
正文的第一节,用电阻变换电源。非常好理解的原理,就是所谓的电阻分压。因为在同一块电路板上面,MCU和DSP需要3.3V,前端采集卡需要15V,逻辑器件需要5V,而多数板子只会提供单一电源供电,为了提供不同电压给不同器件,电阻分压是最简单快捷的方法。
但是电阻会产生持续压降,它会以热的形式产生功率消耗,计算之后得到12V要得到压降到3.3V和5V的电阻分压器的系统效率是33%。不是特别高。
第二小节是闭环系统。意思就是,在第一个分压电阻器的条件下,加入反馈,能够调节变化的输入电压。如果负载变化或者输入电压漂移,输出电压也会发生变化。对于一个设计良好的系统,变换器需要能够独立于输入电压变化进行适当的调整。在这之中要使用几个特殊的元件,第一个是参考电压(TL431可调整齐纳二极管),第二个是运算放大器,用来观测输出电压的一部分并且于参考电压比较。作为可变电阻的串联元件,工作于线性模式下的MOSFET或双极型晶体管。
这是构建了一个线性调压器。当输出电压和输入电压差值较小的时候,应用线性调压器可以得到较高的效率。但是如果输出电压远大于差值,同样可以得到很高的效率。
第三小节用线性调压器推导实用式。推导过程就不写了。推到结果是,增大直流增益G(0)能够帮助减小静态误差,而静态误差最终会影响输出电压精度。另一个受到环路增益影响的重要参数是闭环输出阻抗。
有如下结论
1 如果直流环路增益大,那么输出阻抗无限接近于0
2 为了稳定的目的,电路有一个补偿反馈回路G(s),当频率增加时候,环路增益T(s)减小,输出阻抗开始增大。阻抗和电感器一样随频率增加。
3 当闭环增益T(s)下降为0时候,系统呈现出的输出阻抗和没有反馈时候一样,系统运行在开环状态
实际上的输出电压由两部分组成,理论输出电压和输出电压的贡献
电路的直流增益大,可以确保对输入电压纹波有很好的抑制作用,当T(s)在高频区减小时候系统运行于开环
第四小节是SPICE仿真一个完整的理论调压器的例子
下载spice软件
Download (spice-space.org)
第五小节,构建简单通用的线性调压器
上述的调压器加上简单的积分补偿,是调压器呈现出稳定的性能。
负调压器,比正调压器有更宽的带宽,而且电路是稳定的。
线性调压器的总结:
不适合做高频变换,除非输入输出的差值减小到几百毫伏。但是可以很好地抑制纹波。可以在有较大噪声的输出线路上用作滤波整流器。它们对于AD变换器之类的噪声敏感电路供电是安全的。
-
回复了主题帖:
现在BMS领域主流的上位机开发软件是什么
qt?LabVIEW的图形化界面也很好,前段时间还被介绍了electron
- 2024-06-22
-
发表了主题帖:
#AI挑战营终点站#幸狐RV1106手写数字识别应用部署
本帖最后由 crimsonsnow 于 2024-7-7 12:56 编辑
之前大家都感慨过了,这个板子最大的特点就是很小,迷你型。和最经典系列STM32C8T6最小系统板比一下是这样的。
可以看到除去网线接口,几乎就和比它小一圈的STM32的MCU芯片的最小系统板差不多大了,元件基本除了去耦用的0402电容,其他用的都是0201规格的。这个体积缩减应该是很厉害的。
那么缺点也是非常明显的了,就是散热。每次板子出问题,都害怕是不是不小心烧坏了,但是实际上证明芯片还是很扛造的,基本都是自己的问题。首先呢谨记我们使用的板子型号是luckfox Pico PRO。在wiki可以看到mini和plus/pro/max有一定的操作区别,mini是阉割了一定的功能的,它们没有自带SPI NAND FLASH,要进行SD卡烧录,但是本次使用的就不用担心这个问题。还有一个不同就是摄像头插入的方向,摄像头插头的部分是贴了一张蓝色塑料胶片作为指示的,PRO型号,蓝色必须朝向网线接口那个方向。mini就是相反了,所以一开始我看到wiki图片的时候还有点困惑。后面才看到pro的图片在下面。它们的板卡布局也是不一样。这一点在wiki的CSI 摄像头那部分有介绍。
总之看wiki进行新手教程的时候一定要多注意设置的条件和环境和型号,这些我想也不需要多阐述了。比如说我遇到的第一个问题就是,wiki所有的操作都是默认在Ubuntu22.04版本环境下面的,如果是别的环境,就要用docker,也不是不能用,但是用亲身实践证明了就是直接操作是没有兼容性的,必须用docker,要么就是必须用22.04版本。
幸狐这款板子是在TB有售卖的,指定代理商是微雪电子,微雪旗舰店那家店就是它们官店。我觉得有时候没有思路的时候看一看TB商品详情界面也是有帮助的。比如说我看了才知道送的那个像磁铁一样的东西是自带电池,不过这边都是用usb供电,所以没有怎么用到。
然后按照官方的wiki准备好开发板。这里不得不提到就是我完成路上的一些阻碍吧,主要就是那个线的问题。Type-A转Type-C线是有一种李鬼线的。就是只有充电功能,而不能够当数据线用。我当时查了一下,正常要当数据线的有11组线,但是充电线只有5组。但是一般也不会拆开typeC口看,不过现在的手机基本都是C口的,所以连上手机看看电脑有没有显示新设备接入就可以分辨了,micro口要分辨李鬼线就比较麻烦了,毕竟现在手机也没有micro口,而STM的板子都还坚持用micro口(不知道为什么坚持用micro口还不肯给一条数据线,吐槽一下)。简而言之李鬼线比数据线一般会轻一点,质量不好嘛。我type-c连续遇到了两条李鬼线,差点以为是板子的问题,在换到第三条线的时候,终于破除了这个李鬼线真身,只不过当时出问题的是USB口...因为我为了排除 电脑的问题,换了一台测试电脑,结果没想到那台电脑USB口有问题,识别不出设备,就是下图这样子。但是设备倒是显示出来了。差一点又和问题擦肩而过,所以,控制变量法,只能改变一个变量
然后具体准备步骤按照wiki来,就可以。首先下载RK驱动助手,这里我不贴下载地址了,因为外链再转到wiki仓库好像会识别失败?还是直接在wiki界面去访问就好。下载驱动之后安装,重启,一般驱动都不会出什么问题。
然后开始准备烧录镜像。首先,下载烧录工具,进行SPI NAND Flash 镜像烧录。把板子连接到电脑上,并且进入boot模式。操作是摁住boot按键的时候再将USB插上电脑上电,必须要摁住boot按键的时候上电。上电之后才可以松开,然后就进入boot模式了,可以进行烧录了。
选择RV1106。
USB设备那一栏选择MaskRom设备。点击“搜索路径”,定向到之前下载好的固件库的目录 ,重载env文件。列表里面出现很多项目,然后勾选所有项。再点击“下载”。等待完成。
这次的手写图像识别,最主要用到的外设就是这颗官方的摄像头。跟随wiki上面的教程进行摄像头配置就可以。这个摄像头接收到的图像是通过网络推流到视频软件,官方推荐的视频软件是VLC media player。首先插入摄像头,自动识别到生成一个文件rkipc.ini。
查看这一个文件,就需要通过SSH登录,账号是看你之前烧录的镜像是哪一个的,我选择了buildroot版本
账号:root
密码:luckfox
IP:172.32.0.93
在命令行用命令
ifconfig
可以查看设备的IP地址,之前官方也已经提供了板子的默认IP是172.32.0.93,这串IP我们在之后可能会非常频繁地用到。如果你的网络连接不太好,可能就需要更加频繁地登入确认了。
以及防火墙和杀毒软件一定要关掉,并且在登录操作之前就要关掉,不然就只能关掉终端重新来,不然会显示连接失败。这是我个人遇到的问题,也不知道是不是一个普遍问题。暂且线列出。
这个板卡是需要设置虚拟网口的。按照wiki操作,首先一定一定要关闭防火墙
设置—>高级网络设置—>更改适配器选项,网卡Remote NDIS based nternet Sharing Device,我和wiki上面都是一样的。双击 internet 协议版本(TCP/IPv4),IPV4地址设置为 172.32.0.100。就结束
然后在电脑终端使用口令登录。
ssh root@172.32.0.93
可以看到第一次登录操作的时候出现了一点问题,说IP不能识别,这个问题我遇到了几次,不太清楚成因。可能是连接不好(但这个不是无线登录吗),也可能是上述防火墙的问题,我在CSDN里面搜到一篇文章说类似的问题似乎要清除一下IP登录记录,但是我清除之后马上在同一个终端窗口重新登陆是没用的,结果是重启了一下终端就解决了,是的,就是这么神奇。所以,嗯,遇到问题,大胆重启吧!然后图中遇到的问题和那一个提示是不太一样的,但是也可以看到他系统马上提示你按yes,操作了之后就成功登录了。所以,问题也不是很大。
登录进去之后在终端使用命令查看板内全部文件
ls /
wiki还提供了一个远程登陆软件MobaXterm。界面挺好看,但是我基本是在powershell登录完成的,不做赘述。
刚刚提到的 摄像头文件,可以在userdata文件夹下面看到了
然后就可以用网络串流看看摄像头是否使用正常。 打开 VLC media player 软件,在媒体—>打开网络串流,输入默认的 IP 地址:rtsp://172.32.0.93/live/0。
点击播放。
摄像头工作是正常的。
然后有一个优化操作,是去减小他的缓存时间,这个是可以操作一下的,因为默认的缓存时间比较大,摄像头迟缓性会比较严重。
以上所有的准备工作已经做好,接下来就是基于第二站的模型部署了,在第二站我们已经转好了RKNN模型。在这里感谢之前所有的部署好的大佬,所有的大佬的文章我都看过好多遍了,不知道咋@人,总之感谢所有的大佬。
呃我是先按照knv大佬的指示去配置了开发环境,下载官方的SDK。总之这部分,保证在Ubuntu22.04环境下,按官方教程从头输入到尾就可以了,如果出问题了,一定是版本不对。版本不对的话,就只能用下面的docker了。
https://wiki.luckfox.com/zh/Luckfox-Pico/Luckfox-Pico-SDK/
这个主要编译过程是非常非常长的,大概一次要三小时。下面几个要单独编译的不是特别长,但是好像也有两个是要几分钟的。
然后在编译的时候最好别断网断线。可能是因为我是使用虚拟机。要是有事我只能说重新编译几个小时真的挺够呛的。
然后我使用的是例程部署
git clone https://github.com/luckfox-eng29/luckfox_pico_rtsp_opencv
export LUCKFOX_SDK_PATH=<Your Luckfox-pico Sdk Path>
mkdir build
cd build
cmake ..
make && make install
如果出问题了一定是版本不对
我一开始很纠结是不是SDK路径出了问题,SDK路径其实就是那个刚刚下载的luckfox-pico的文件夹,然后我就一直换来换去,后来knv大佬告诉我是版本不对,一定注意这个过程是在22.04下版本下配置,当时发了一堆私信打扰了很多大佬,向他们道歉一下!
输入完上面这堆指令就自己编译了,其实这堆指令也是例程readme里面的官方指令
然后会有个文件夹生成一堆文件,luckfox_rtsp_opencv_demo/luckfox_rtsp_opencv 和 lib目录
将这堆文件通过SSH传文件那个操作传到板子上才可以用
然后登录ssh进去终端,进入文件夹运行,看到板子里面文件夹下面有那堆文件,就可以运行了
RkLunch-stop.sh
./luckfox_rtsp_opencv
这个也是readme里面的代码,直接输入运行,就行
运行前注意把 rkipc 程序关掉,执行
RkLunch-stop.sh
打开串流视频软件就可以收到画面了
可能因为我用的是完全没优化的例程,效果还是有点问题的,首先它就很吃这个画面的光影,在光线不太好的时候,识别效果也比较感人
以及摄像头是可以扭动前面的镜头对焦的,对焦对不上的时候,它识别到画面里面其他乱七八糟的东西效果也会比较感人
这里就识别到充电线上去了
总觉得我这个帖子是识别失败大赏
还好后来还是识别成功了的
例程是一次只能识别一个,当同框时候,它会选择更加清晰的一个来识别,但是,也有可能2是倒着的不是正常角度,所以它没有优先识别
角度倒是不会影响识别效果
在识别4的时候遭遇了滑铁卢,首先是宁愿识别旁边的缝也不识别数字
这是5
这是8
就是不是4
也有可能是这时候运行得有点久板子已经发烫了,整个程序跑起来算力要求其实还是挺高的,我的老电脑已经在拉风箱了
8一开始也有识别错误的现象
但后来好了
只是4一直都没有识别出来,难道是我写的4真的很不标准吗?
- 2024-06-19
-
回复了主题帖:
#AI挑战营终点站#它好像不太喜欢4这个数字
hellokitty_bean 发表于 2024-6-17 17:35
它竟然会有偏好?????这个不应该呀。。。。。。
只是比喻而已啦,一定是模型或者其他的问题
-
回复了主题帖:
#AI挑战营终点站#它好像不太喜欢4这个数字
wangerxian 发表于 2024-6-17 16:54
应该是和训练模型区别太大。
是的,测试的时候也感觉到光影和杂物对测试的精度影响还是蛮大的
-
发表了主题帖:
关于微信手气红包,一个有趣的事情
微信的手气红包似乎并不是一个合理的平均概率分布模型,越靠后,抢到手气最佳的概率越大。这事好像网上也有不少说的了
起因是学校有家店铺靠微信手气红包搞抽奖,结果某几个人中奖概率奇高。今天看到别人提了一嘴是不是开挂了,结果对方特别自信说绝对没有,不信可以查。但是某个人概率这么高明显是不符合分布模型的。所以我心血来潮翻了一下以前的红包记录分析了一下数据,发现这几个人总是稳定抢到倒数几个。然后在网上查了一下,发现就有这样的说法说微信红包尾包中奖率特别特别高的说法。其实他们想要稳定实现这样的效果当然不用开科技,只要先有一个人抢到然后一直盯着列表等到尾部然后几个号一起去抢就能实现了,当然可以自信地说不是开挂。
所以说这种算不算是微信的一个漏洞呢?或者说,这些全都是凭空揣测,人家真的是微信的天选之子呢当然,我是不信的,发帖出来自然也不是谴责人家,毕竟也是合理利用规则(?)只不过这件事情还是蛮有趣的,所以分享一下
- 2024-06-17
-
回复了主题帖:
【AI挑战营终点站】应用落地:部署手写数字识别应用到幸狐RV1106开发板
占位,很不容易的复现,谢谢管理员的鼓励和其他大神的帮助 https://m.eeworld.com.cn/bbs_thread-1285186-1-1.html?mobile=2
-
发表了主题帖:
#AI挑战营终点站#它好像不太喜欢4这个数字
占位,晚上回来补完整过程
- 2024-05-28
-
回复了主题帖:
选KiCAD还是国产立创EDA求建议
立创6层以上,几百个元件,可能是因为在线服务器会微卡,小板子现在有很多很方便的功能,自动扇出什么的,不是听他们的发布会还不知道,而且可以网页版很方便,个人感觉4层是可以用的