用AI设计一个手电筒方案,太强了!它真的会画电路图!

科技   2024-12-21 08:27   广东  
最近在用Cursor,很多朋友可能不知道这是什么,这是最近比较火的一款写代码的AI工具。
去B站一搜就可以搜到很多很多讲这个工具的视频,很多UP主用它做网站、做App、做微信小程序,基本上不用写一行代码,只需要把自己的想法用清晰的逻辑传递给Cursor即可。
这两年AI工具是比较火,但是我之前尝试过一些生成代码的工具,怎么说呢,就像人工智障。所以我觉得我安全了,AI暂时取代不了我这种做嵌入式软硬件的人。
可是前两天一个朋友来找我聊天。给我强烈安利了一番Cursor这个AI工具,我抱着试一试的心态试了一试。结果我真的被吓到了,这玩意水平太高了,大概有四五层楼那么高。我举几个栗子给大家看看。

案例1
在CM1相机中用Cursor生成单片机初始化RGB屏幕代码
由于CM1相机中使用的屏幕是RGB565接口的屏幕,这种屏幕一般还需要一组SPI接口,在上电之后通过这个SPI接口来初始化屏幕芯片的一些寄存器,比如显示方式、方向等等。这种代码网上一抓一大把,自己想写了写一下,不想写了从网上,或者从自己以前做的项目里CV过来就可以了。但是不管怎么样,都得花十几分钟时间。于是我用Cursor试了一下,不到一分钟搞定。
这是用它生成的部分代码,复制过去再把屏厂给的初始化数据替换掉就可以运行了。

案例2

设计一款手电筒

最近想做个手电筒玩,就给Cursor提了个需求,让帮我设计,但是我发现这个Cursor比较蠢,只能输出文字,画不了图。
但是文字其实也把手电筒的设计讲得比较明白了。主要的就是升压、然后驱动LED。主控帮我选了一个STM32F030单片机,按键电路和电量检测也都设计了。对了,还有过冲过放过流短路过温度保护,看来Cursor帮我设计的是一款高端的手电筒啊,做出来不得卖一两千啊。

案例3

优化手电筒恒流方案,写出代码

我感觉它上面给我的手电筒恒流方案不好,我想自己设计电路,然后通过单片机的DAC接口注入DC-DC的FB,从而去实现恒流。让他先给我写了个代码。
我发现Cursor真的知道我想干啥,手电筒有一个按键,按键短按、长按、双击都会有不同的效果,灯亮度等级要可以调节这里面都写好了。
/* 主函数 */int main(void){    /* 系统初始化 */    GPIO_Config();    DAC_Config();        while(1)    {        /* 按键检测 */        if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == 0) // 按键按下        {            if(press_time == 0) // 按键初次按下                press_time = HAL_GetTick();                            /* 长按检测 */            if(HAL_GetTick() - press_time >= LONG_PRESS_TIME)            {                flash_mode = 0;                Set_LED_Brightness(4095); // 最大亮度            }        }        else // 按键释放        {            if(press_time > 0) // 之前按键是按下状态            {                uint32_t press_duration = HAL_GetTick() - press_time;                                if(press_duration < SHORT_PRESS_TIME) // 短按                {                    press_count++;                    if(press_count == 1)                        last_press_time = HAL_GetTick();                                            /* 双击检测 */                    if(press_count == 2)                    {                        if(HAL_GetTick() - last_press_time < DOUBLE_CLICK_TIME)                        {                            flash_mode = 1; // 进入闪烁模式                            press_count = 0;                        }                        else                        {                            press_count = 1;                            last_press_time = HAL_GetTick();                        }                    }                }                else if(press_duration < LONG_PRESS_TIME) // 单击                {                    if(!flash_mode)                    {                        brightness_level = (brightness_level + 1) % 5;                        Set_LED_Brightness(brightness_value[brightness_level]);                    }                }                press_time = 0;            }        }                /* 闪烁模式处理 */        if(flash_mode)        {            Flash_Mode_Handler();        }                /* 双击超时处理 */        if(press_count == 1 && HAL_GetTick() - last_press_time >= DOUBLE_CLICK_TIME)        {            press_count = 0;        }    }}
甚至主函数里把完整的逻辑都做好了。

案例4

DC-DC通过FB注入实现恒流的电路图设计

我还是不甘心,想让Cursor帮我把这个恒流电路设计出来,于是我又一次给了它指令。这次它的回答惊呆我了,它会画图了。
好玩的是,电感它用六个@来代替,别说还挺形象啊。这图我完全能看懂了。其实AI就像人一样,你只要给它明确的需求,它就能给你想要的结果,前提是,你表达需求的方式对不对,事讲清楚了没?

案例5

CM1相机RV1106点亮屏幕的流程

由于我Linux开发水平比较低,低到对流程性的东西都不是很熟。那就去问Cursor,让它来把流程给我写出来,我一步一步去做就行了。
/* RV1106开发板驱动ST7701S LCD屏幕开发流程 */
/*1. 硬件连接 - LCD引脚连接: * RESET -> GPIO * CS -> GPIO * RS/DC -> GPIO * RGB接口 -> RV1106 RGB接口 * CLK -> RV1106时钟输出 * 背光控制 -> GPIO 2. 驱动开发步骤
2.1 设备树配置 在arch/arm/boot/dts/rv1106-evb.dts中添加: &display { status = "okay"; panel { compatible = "sitronix,st7701s"; width = <640>; height = <480>; bus-format = <MEDIA_BUS_FMT_RGB565_1X16>; display-timings { native-mode = <&timing0>; timing0: timing0 { clock-frequency = <27000000>; hactive = <640>; vactive = <480>; hsync-len = <2>; hfront-porch = <8>; hback-porch = <8>; vsync-len = <2>; vfront-porch = <8>; vback-porch = <8>; }; }; }; }; 2.2 LCD驱动程序 在drivers/gpu/drm/panel/下创建panel-st7701s.c: - 实现panel_simple_probe()初始化函数 - 配置LCD时序参数 - 实现enable/disable函数 - 实现背光控制 2.3 Buildroot配置 make menuconfig: - 选择rv1106_defconfig - 使能DRM驱动 - 使能ST7701S面板驱动 2.4 应用程序开发 使用DRM API进行显示控制: #include <drm/drm.h> #include <drm/drm_mode.h> int main() { // 1. 打开DRM设备 int fd = open("/dev/dri/card0", O_RDWR); // 2. 获取显示资源 drmModeRes *res = drmModeGetResources(fd); // 3. 创建framebuffer struct drm_mode_create_dumb create = { .width = 640, .height = 480, .bpp = 16, // RGB565 }; drmIoctl(fd, DRM_IOCTL_MODE_CREATE_DUMB, &create); // 4. 映射framebuffer struct drm_mode_map_dumb map = { .handle = create.handle, }; drmIoctl(fd, DRM_IOCTL_MODE_MAP_DUMB, &map); void *fb = mmap(0, create.size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, map.offset); // 5. 填充红色背景 uint16_t red = 0xF800; // RGB565红色 for(int i = 0; i < 640*480; i++) { ((uint16_t*)fb)[i] = red; } // 6. 绘制黑色"hello"文字 // 使用字体库绘制文字 // 7. 显示framebuffer drmModeSetCrtc(fd, crtc_id, fb_id, 0, 0, &conn_id, 1, mode); return 0; }
3. 调试验证 - 检查LCD初始化时序 - 验证RGB时序参数 - 测试显示效果 - 优化刷新率和显示质量
4. 注意事项 - 电源时序要求 - RGB接口时序 - 背光控制时序 - DMA传输配置 - 显示缓冲区管理*/

以上就是它给我的全部。可以说非常有用,它就像一个经验丰富而又谦谦风度的嵌入式老大哥,教我这个小白一步一步做。

案例6
帮群友找合适的器件

群友在群里提出一个问题。想要找一个把信号从1V电压域转到3.3V电压域的芯片。群里我给出的方案是TI的74AVC系列的芯片,另一位群友给的是LSF0108。后来我又拿着这个需求问了一下Cursor,来看看它的回答。
太糟糕了,用的是我不懂的英语,我来气了。叼了它一句,立马就变乖了。
用汉语重新给我输出了一次,这下看懂了,给我推荐了三个芯片,其中两个我们之前人工选到了。而且还给了建议,这大兄弟人真不错,脾气好,业务能力也没话说,能处。

以上是我用Cursor来辅助我做开发的一些非常初级的案例。AI确实在很多时候能让我的工作更高效,避免造轮子。对于AI到底会不会替代嵌入式软硬件工程师这个问题,我的想法是:AI可能会替代一些思维逻辑不清晰、表达能力不强、沟通能力不强的工程师。但是对于逻辑思维缜密、表达和沟通能力较强的工程师,AI只会沦为工具!

扫码加入

硬件技术交流群


面包板社区DIY活动进行中!👇

https://mbb.eet-china.com/forum/topic/147007_1_1.html





在面包板社区博客/论坛分享你的DIY电子设计,并在发布文章时添加【电子DIY】标签,字数不限,文章通过社区评审,将有丰富奖励送给您!


↓ 扫码参加


【奖项设置】


一等奖(1位):大疆DJI Neo无人机、小米Redmi Note13Pro、海康威视 NAS Mage20PRO...(任选一个)
二等奖(不限人数):福禄克F15B PRO MAX万用表、华为WATCH FIT 2...(任选一个)
三等奖(不限人数):小米手环9 NFC版、小米mini筋膜枪2C、价值¥300电子常用工具大礼包...(任选一个)
参与奖所有参与者均可获得500个E币奖励!
过万奖励若单篇文章/单个视频,在MBB微信号阅读量过万,每篇奖1000个E币奖励(E币可在商城兑换奖品,数据统计截至时间为2025.2.28,仅限前20篇,按文章发布在MBB社区的时间排序,个人累计封顶奖励10000个E币奖励)
E币可以在E币商城(https://estore.eet-china.com/)兑换工程师常用工具及精美礼品!如,镊子、开发板、示波器、工具箱、收纳盒等。


【文章要求】

1、内容要求原创,必须和电子行业相关且首次发布于互联网

2、内容应包括:设计思路、成品展示(如电路原理、功能展示、成本控制方案或清单、代码等)涉及核心知识产权的内容可不展示。

3. 活动期间,同一ID可多次参加,等质量条件下多发作品可累积评分。


活动时间:2024.11.13 - 2025.02.13

点击阅读原文,了解活动详情!

面包板社区
分享电子技术干货,电子工程师福利!EET电子工程专辑、ESM国际电子商情、EDN电子技术设计官方社区。
 最新文章