找回密码
 立即注册
查看: 751|回复: 44

[硬件DIY] 玩转ESPHome之九 - - - - 太阳自动追踪控制器

[复制链接]

57

主题

1438

回帖

6719

积分

论坛DIY达人

积分
6719
金钱
5224
HASS币
30
发表于 3 天前 | 显示全部楼层 |阅读模式
本帖最后由 sorrypqa 于 2025-6-13 08:57 编辑

      这个是为山东大佬制作的太阳自动跟踪控制器,感谢山东大佬的支持!第一版,主要用来验证方案和程序的可行性。


      这款控制器的最大特点是免调试,接线简单,不受刮风下雨等任何外部环境的影响,无需外挂一大堆各种玩具级别的光敏、光照传感器,这类传感器平时被日晒雨淋的,最容易出现异常

      它的主要工作原理是通电后,利用GPS获取控制器所在位置的时间和经纬度并储存在控制器里,以便下次开机时直接调用,然后计算出所在位置的太阳方位角和高度角,用来控制方位电机和仰角电机,到目前为止,控制器和程序运行都非常完美。


     关闭自动跟踪,它就是个单纯的伺服电机控制器,可以手动或者通过HA的自动化控制任意角度,可以用来
控制任意需要使用舵机的设备,比如动物的自动投食等,打开自动跟踪,它就是个太阳自动跟踪控制器

     打开自动跟踪功能后,能在太阳低于地平线时自动返回日出位置,可以无网、无HA主机的情况下独立工作、如果由HA集中管理,能方便实现根据天气状况,比如风速大于XX公里/小时自动置于水平状态,减少背风.


     内置实时时钟,有没有网络都可以正常工作。

     内置直流电压、电流、功率检测,用于实时了解太阳能电池板输出状态

     预留了I2C接口的OLED显示屏安装位置,可以用来显示时间、经纬度、电压、电流、功率等


   由于使用了LM5164DDAR和LM2576HVS-5.0/TR的DC-DC电源芯片,
   所以控制器支持工作电压10-60V,支持控制5V、12-60V的伺服电机。
   检测电压0-100V,电流0-30A



Screenshot_20250421-083743_Edge.jpg


GPS模块使用的是大夏龙雀的DX-GP10-A:

20250421_093648.jpg

目前测试用仰角和方位电机都是180°伺服电机

20250421_134409.jpg



SNAG-2025-6-10_0017.png


在完全没有校准的情况下,已经能以很少的误差全程跟踪太阳,而且这误差是来自电机和这支长筒的垂直度

SmartSelect_20250610-202523_WeChat.jpg

如需要最低成本测试此控制器的自动跟踪功能,可以买个几十元像下图类似的舵机云台:

SNAG-2025-6-11_0000.png

使用servo组件作为伺服电机控制:
servo:
  - id: elevation_servo
    output: pwm1_output #伺服器使用的输出组件的ID
    min_level: 3% #最小值(-100%)将映射到的PWM占空比。默认为3%。
    idle_level: 7.5% #空闲值(0%)将映射到的 PWM 占空比。这也是启动时伺服的状态。默认为7.5%。
    max_level: 12% #最大值(100%)将映射到的 PWM 占空比。默认为12.0%。
    restore: false #是否在启动时恢复伺服电机的状态。如果您有一个绝对伺服电机并且它在启动时回到其 0 位置,这将很有用。默认为false。
    auto_detach_time: 0s #达到目标值后伺服器分离的时间,如果设置为零,伺服器将不会分离。默认为0s。
    transition_length: 0s #完成一次完整移动所需的时间(-1.0 到 1.0)。这将有效限制伺服器的速度,值越大,伺服器移动的速度越慢。默认为0s。

  - id: azimuth_servo
    output: pwm2_output #伺服器使用的输出组件的ID
    min_level: 2.5% #最小值(-100%)将映射到的PWM占空比。默认为3%。
    idle_level: 7.5% #空闲值(0%)将映射到的 PWM 占空比。这也是启动时伺服的状态。默认为7.5%。
    max_level: 12.5% #最大值(100%)将映射到的 PWM 占空比。默认为12.0%。
    restore: false #是否在启动时恢复伺服电机的状态。如果您有一个绝对伺服电机并且它在启动时回到其 0 位置,这将很有用。默认为false。
    auto_detach_time: 0s #达到目标值后伺服器分离的时间,如果设置为零,伺服器将不会分离。默认为0s。
    transition_length: 0s #完成一次完整移动所需的时间(-1.0 到 1.0)。这将有效限制伺服器的速度,值越大,伺服器移动的速度越慢。默认为0s。


使用
number组件作为手动的方位和仰角控制:

number:
  - platform: template
    name: "A1.仰角控制"
    id: "elevation_servo_control"
    min_value: -100
    initial_value: 0
    max_value: 100
    step: 1
    optimistic: true
    set_action:
      then:
        - servo.write:
            id: "elevation_servo"
            level: !lambda 'return x / 100.0;'

  - platform: template
    name: "A2.方位控制"
    id: "azimuth_servo_control"
    min_value: -100
    initial_value: 0
    max_value: 100
    step: 1
    optimistic: true
    set_action:
      then:
        - servo.write:
            id: "azimuth_servo"
            level: !lambda 'return -x / 100.0;'

使用
GPS组件获取经度和纬度,
由于GPG需要一定数量的卫星信号,才能获取准确的位置信息,所以利用卫星数量作为条件,只有卫星数量大于6个时,才会把获取到的经纬度保存起来:

gps:
  uart_id: gps_uart #指定gps使用的串口
  latitude:
    name: "C1.纬度"
    id: "gps_latitude"
  longitude:
    name: "C2.经度"
    id: "gps_longitude"
  satellites:
    name: "C3.卫星数量"
    id: "gps_satellites"
    on_value:
      then:
        - if:
            condition:
              - lambda: 'return id(gps_satellites).state > 6 ;'
            then:
              - lambda: |-
                  id(sun_latitude_gl) = id(gps_latitude).state;
                  id(sun_longitude_gl) = id(gps_longitude).state;
                  id(sun_id).set_latitude(id(sun_latitude_gl));
                  id(sun_id).set_longitude(id(sun_longitude_gl));


游客,如果您要查看本帖隐藏内容请回复






















评分

参与人数 1金钱 +10 收起 理由
shadowba + 10

查看全部评分

回复

使用道具 举报

4

主题

62

回帖

382

积分

中级会员

积分
382
金钱
316
HASS币
0
发表于 3 天前 | 显示全部楼层
啥也没看到
回复

使用道具 举报

57

主题

1438

回帖

6719

积分

论坛DIY达人

积分
6719
金钱
5224
HASS币
30
 楼主| 发表于 3 天前 | 显示全部楼层

手抖,点错发表了出去,哈哈~~!
回复

使用道具 举报

4

主题

62

回帖

382

积分

中级会员

积分
382
金钱
316
HASS币
0
发表于 3 天前 | 显示全部楼层
大佬上架构

评分

参与人数 1金钱 +16 收起 理由
sorrypqa + 16 论坛有你更精彩!

查看全部评分

回复

使用道具 举报

52

主题

274

回帖

1631

积分

金牌会员

积分
1631
金钱
1305
HASS币
50
发表于 3 天前 | 显示全部楼层
这个必须顶!

评分

参与人数 1金钱 +16 收起 理由
sorrypqa + 16 论坛有你更精彩!

查看全部评分

回复

使用道具 举报

6

主题

268

回帖

3136

积分

论坛元老

积分
3136
金钱
2862
HASS币
0
发表于 3 天前 | 显示全部楼层
这个必须顶

评分

参与人数 1金钱 +16 收起 理由
sorrypqa + 16 论坛有你更精彩!

查看全部评分

回复

使用道具 举报

innx 手机认证

25

主题

190

回帖

2814

积分

论坛DIY达人

积分
2814
金钱
2594
HASS币
30
发表于 3 天前 | 显示全部楼层
666,我只用了6块5w的小板子放阳台,接了小夜灯用了好几年了电量也够
回复

使用道具 举报

57

主题

1438

回帖

6719

积分

论坛DIY达人

积分
6719
金钱
5224
HASS币
30
 楼主| 发表于 3 天前 | 显示全部楼层
innx 发表于 2025-6-10 22:54
666,我只用了6块5w的小板子放阳台,接了小夜灯用了好几年了电量也够

我想玩都没地方玩!
回复

使用道具 举报

14

主题

182

回帖

2867

积分

金牌会员

积分
2867
金钱
2671
HASS币
0
发表于 3 天前 | 显示全部楼层
感谢楼主分享 回复看看
回复

使用道具 举报

14

主题

1566

回帖

5116

积分

论坛元老

积分
5116
金钱
3536
HASS币
0
发表于 3 天前 | 显示全部楼层
厉害,厉害,请问太阳方位角怎么算?
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian ( 晋ICP备17001384号-1 )

GMT+8, 2025-6-13 10:13 , Processed in 1.284158 second(s), 27 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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