CMF海水论坛

 找回密码
 注册
查看: 27368|回复: 83

LED路数不嫌多,DIY16路LED灯控制器(已共享源码)增加滴定功能_____爱浪客

    [复制链接]
发表于 2017-7-13 10:49:19 | 显示全部楼层 |阅读模式 来自: 中国河北石家庄
本帖最后由 pengpeng 于 2017-8-16 09:57 编辑

前一阵子看来论坛上一个兄弟的帖子。其中贴了AI灯的电路板照片,有一个IC给了特写,仔细一看是PCA9685。原来AI是用的专业的PWM芯片,并不是论坛上的常见的方案,由单片机占用IO输出PWM信号。
使用PWM芯片价格不高,但是调光可以更线型,更准确(共4096级)、稳定。有自己单独的晶振。更广泛的PWM频率等。
最主要的是使用I2C,单个IC就有16路,最多还(64*16)路。

这次我们就纯DIY,不用自己画电路板,全部使用某宝可以买到元器件。


连接图.jpeg


在这版本的基础上,添加以下元器件增加滴定功能,一个可以管理两路滴定泵
00000000004.jpeg
详细内容在65楼。

评分

参与人数 1威望 +100 金币 +100 收起 理由
pls + 100 + 100 很给力!

查看全部评分

 楼主| 发表于 2017-7-13 10:58:08 | 显示全部楼层 来自: 中国河北石家庄
接下来是单独的时钟模块,我觉得这个钱还是不省,代码还可以少写很多
105806o8qqnq8mqz2zlxnl.jpg
回复 支持 1 反对 0

使用道具 举报

发表于 2017-7-13 17:30:00 | 显示全部楼层 来自: 中国
pengpeng 发表于 2017-7-13 15:07
借用一下那个兄弟的图!(兄弟如果有意见我立马撤下你的图)

多谢,这个应该是ai26,好像hd换方案了。
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2017-7-13 10:51:04 | 显示全部楼层 来自: 中国河北石家庄
先来个全家福!
105103sddqdlb75ywkyyiz.jpg
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2017-7-13 10:53:38 | 显示全部楼层 来自: 中国河北石家庄
1、单片机+wifi模块
105337arhgu1aahaaheb3b.jpg
回复 支持 1 反对 0

使用道具 举报

发表于 2017-8-8 02:10:01 | 显示全部楼层 来自: 中国浙江温州
pengpeng 发表于 2017-7-26 08:37
PWM输出的频率要在100Hz以上,否则当灯光暗下来时闪烁明显。
PWMfrequency 变量的值要大于100。
但是我买 ...

可否共享一下 手机 wifi 网页控制的源代码?
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2017-7-13 15:22:25 | 显示全部楼层 来自: 中国河北石家庄
本帖最后由 pengpeng 于 2017-7-22 06:48 编辑

下面说好的代码来了,我要提醒一下。这个是DEMO代码。本身是可以运行的并正常调光的。
调光的任务是一个变量,大家需要手动编辑这个变量才能达到编辑光谱,日出日落的功能。也就是说每次调整完了,要刷一次片子。
还有就是我没有加“EEPROM”的代码,目前状态下不影响掉电时钟、调光不影响。

有wifi的代码,下回我们可以简单的实现WiFi控制的功能。

langke_light.pdf (26.64 KB, 下载次数: 1342)
ds3231.zip (8.07 KB, 下载次数: 1391)

以下9685驱动代码,使用开源项目。
Adafruit-PWM-Servo-Driver-Library-master.zip (11.08 KB, 下载次数: 1294)


回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2017-7-22 06:06:40 | 显示全部楼层 来自: 中国河北石家庄
本帖最后由 pengpeng 于 2017-7-22 07:18 编辑
shuicaokaka 发表于 2017-7-22 00:25
另外 9685 你用的adafruit的开源代码 你要标明出处 那不是你写的… 你用别人的东西 起码也要表示一下尊重

谢谢提醒呀!我已经加上了。
我要说明一下,我并没有说引用的adafruit是我写的,不明白你为什么要这么理解?这么问呢?
论坛使用手机客户端好像看不到帖子的附件,我共享的代码附在了16楼,并提供了需要include的两个包。如果你没有看到麻烦换个浏览器。

再一个我上来就说明了是demo代码,开源给大家的。说实话就是不愿意遇到像你这样的,本来是跟大家分享的,弄的心情不愉快。


回复 支持 1 反对 0

使用道具 举报

发表于 2018-5-30 23:31:43 | 显示全部楼层 来自: 中国重庆
看不懂但还是看完,默默赞叹
回复 支持 1 反对 0

使用道具 举报

发表于 2017-7-13 18:49:25 | 显示全部楼层 来自: 中国广东
支持不易盈利为目的 的DIY分享
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2017-7-13 11:01:05 | 显示全部楼层 来自: 中国河北石家庄
再来就是PWM模块了
测试可以用
110104avisvknuj5vuhi8s.jpg
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-13 11:04:13 | 显示全部楼层 来自: 中国河北石家庄
本帖最后由 pengpeng 于 2017-7-22 09:26 编辑

再有就是一块降压模块了,2-3块钱。
14+6.2+9.45+3=32.65用杜邦线连接就可以了
因为时钟模块与PWM模块均使用I2C连接,直接连接单片机的D1、D2口即可(认清SCL、SDA别弄错就好了)

抱歉写错了!已经改回D1,D2口
连接.jpeg
回复 支持 反对

使用道具 举报

发表于 2017-7-13 11:36:45 | 显示全部楼层 来自: 中国江苏徐州
关键是软件系统
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-13 11:47:49 | 显示全部楼层 来自: 中国河北石家庄

下面开始贴代码!

#include <Adafruit_PWMServoDriver.h>

Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();

int PWMfrequency = 1000;

void setPWM(uint8_t pwmnum, uint16_t pwmval) {
#ifdef ESP8266
  yield();
#endif
  pwm.setPWM(pwmnum, 0, pwmval );
}


setPWM(ledpin, (unsigned short) (map(light, 0, 100, 0, 4095)));

void setup() {
  pwm.begin();
  pwm.setPWMFreq(PWMfrequency);
}

回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-13 11:48:40 | 显示全部楼层 来自: 中国河北石家庄
有空我会给大家提供一份代码做demo
回复 支持 反对

使用道具 举报

发表于 2017-7-13 12:45:15 | 显示全部楼层 来自: 中国山西晋中
这个方案也蛮不错的。爱好者?程序员?还是嵌入式工程师?
回复 支持 反对

使用道具 举报

发表于 2017-7-13 13:20:24 | 显示全部楼层 来自: 中国江苏
厉害了,会单片机的都是高手
回复 支持 反对

使用道具 举报

发表于 2017-7-13 14:12:40 | 显示全部楼层 来自: 中国天津
支持,这个可以有!
回复 支持 反对

使用道具 举报

发表于 2017-7-13 14:43:02 | 显示全部楼层 来自: 中国
请问你是ai的哪款灯上看到这个pca9685的?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-13 15:07:27 | 显示全部楼层 来自: 中国河北石家庄
alpha91_cn1 发表于 2017-7-13 14:43
请问你是ai的哪款灯上看到这个pca9685的?

借用一下那个兄弟的图!(兄弟如果有意见我立马撤下你的图)

063807e2kvv2pl2r2l9pzo.jpg
回复 支持 反对

使用道具 举报

发表于 2017-7-13 15:12:10 来自手机 | 显示全部楼层 来自: 中国上海
这个led控制器666,支持楼主diy精神!
回复 支持 反对

使用道具 举报

发表于 2017-7-13 15:25:50 | 显示全部楼层 来自: 中国福建福州
厉害 膜拜
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-13 15:44:49 | 显示全部楼层 来自: 中国河北石家庄
本帖最后由 pengpeng 于 2017-7-26 08:38 编辑

代码简单说明一下:
1、PWMfrequency   这个变量是PWM的频率的; 变量的值要大于100,否则灯光闪烁肉眼可见。
2、useTask 这个变量是led光谱和日出日落设定的;
#0620003000000000000001002000   “#”分隔的一段字符串代表一个调光时间点(我们这次写了个8路的,16路的以此类推)
#0620   代表时间     06:20  触发调光
003后面的每三位代表一路LED的亮度(0-100,本身这个PWM芯片是0-4095。中间准换了一下,大家需要这个精度4096级调光在自行修改代码吧)

3、uint8_t ledpin[8] = {14, 15, 6, 7, 8, 9, 10, 11};   这个是PWM输出IO口的数组,对应PWM那块板子上的编号,这个上面的顺序对应上面具体的设置。
顺序可以自己调整。调整好记得接驱动模块时,必须是刚刚你在数组中设定的。(驱动模块目前都是根据LED驱动IC厂家提供的标准电路做的,我觉得没有必要DIY了。一般10块一路30W)
举例:
#0620
003            14口 LED输出功率 3%。
000            15口 LED输出功率 0%。
000            6口 LED输出功率 0%。
000            7口 LED输出功率 0%。
000            8口 LED输出功率 0%。
001            9口 LED输出功率 1%。
002
000

回复 支持 反对

使用道具 举报

发表于 2017-7-13 15:50:19 | 显示全部楼层 来自: 中国福建福州
表示看不懂
不过PP是我最佩服的极客
回复 支持 反对

使用道具 举报

发表于 2017-7-13 18:03:27 | 显示全部楼层 来自: 中国江苏徐州
又要加精的节奏啊
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|CMF海水观赏鱼网 ( 琼ICP备12003277号 )

GMT+8, 2024-11-22 11:29 , Processed in 0.116574 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表