0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ElfBoard开源项目|“智慧光伏”开源项目威廉希尔官方网站 文档

ElfBoard 2024-10-11 15:52 次阅读
wKgZomcI0SCAbJ-TAAdslccJvTs662.png【基于ELF 1开发板完成的“智慧光伏”项目】

“智慧光伏”项目能够智能追踪阳光的移动轨迹。通过内置的光敏传感器和智能控制系统,实时感知周围光源的变化,并驱动太阳能板精准调整角度,确保每一缕阳光都能被最大化地捕捉和利用。下面就和各位小伙伴详细介绍一下这一开源项目是怎样实现的。

环境说明

1.开发环境操作系统:Ubuntu18.04 64位版

2.交叉编译工具链:arm-poky-linux-gnueabi-gcc5.3.0

3.开发板使用Bootloader版本:u-boot-2016.03

4.开发板内核版本:linux-4.1.15

5.开发板移植QT版本:qt5.6.2

一、 硬件连接

1、四路光敏传感器与板卡的连接

wKgZomcI0UqAXRd7AAD4mKU6LRo152.png

2、舵机与板卡的连接

wKgZomcI0VaAfi_8AADSnETwRV8438.png

二、内核适配

1、实现舵机转动的功能

MG90S舵机采用pwm的方式来控制,该项目需要用到两个舵机,所以需要在设备树中进行pwm7、pwm8的复用。

(1)拷贝ELF1开发板资料包\02-Linux 源代码\02-0 出厂内核和uboot源码\内核源码\linux-4.1.15-elf1.tar.bz2

内核源码到开发环境/home/elf/work/目录下解压

elf@ubuntu:~/work$ tar -xvf linux-4.1.15-elf1.tar.bz2

(2)修改顶层设备树文件arch/arm/boot/dts/imx6ull.dtsi

elf@ubuntu:~/work$ cd linux-4.1.15-elf1/ elf@ubuntu:~/work/linux-4.1.15-elf1$ vi arch/arm/boot/dts/imx6ull.dtsi

wKgaoWcI1D2AUGqCAAD0VIgFxl8762.png

(3)修改设备树文件arch/arm/boot/dts/imx6ull-elf1-emmc.dts

elf@ubuntu:~/work/linux-4.1.15-elf1$ vi arch/arm/boot/dts/imx6ull-elf1-emmc.dts

添加pwm7、pwm8设备节点

&pwm7 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_pwm7>; status = "okay"; }; &pwm8 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_pwm8>; status = "okay"; };

wKgaomcI1eaAZjfMAACciSNZrIg420.png

在iomux节点下面添加pwm7、pwm8引脚复用

pinctrl_pwm7: pwm7grp { fsl,pins = < MX6UL_PAD_CSI_VSYNC__PWM7_OUT 0x110b0 >; }; pinctrl_pwm8: pwm8grp { fsl,pins = < MX6UL_PAD_CSI_HSYNC__PWM8_OUT 0x110b0 >; };

wKgZomcI1f-AaDdtAAC12TTTM_I189.png

取消其它用到csi功能的地方

wKgZomcI1iCALz2RAAC47pQs0MY660.pngwKgZomcI1iuAfdX6AADa0ymii6w527.png

至此pwm7、pwm8已经复用完成

2、实现获取光照值的功能

四路光敏传感器需要四路adc,需要在设备树中进行adc1、adc2、adc3、adc4的复用

(1)修改设备树文件arch/arm/boot/dts/imx6ull-elf1-emmc.dts

elf@ubuntu:~/work$ cd linux-4.1.15-elf1/ elf@ubuntu:~/work/linux-4.1.15-elf1$ vi arch/arm/boot/dts/imx6ull-elf1-emmc.dts

在iomux节点下面添加adc1、adc2、adc3、adc4引脚复用

pinctrl_adc1: adc1grp { fsl,pins = < MX6UL_PAD_GPIO1_IO05__GPIO1_IO05 0x00b0 MX6UL_PAD_GPIO1_IO01__GPIO1_IO01 0x00b0 MX6UL_PAD_GPIO1_IO02__GPIO1_IO02 0x00b0 MX6UL_PAD_GPIO1_IO03__GPIO1_IO03 0x00b0 MX6UL_PAD_GPIO1_IO04__GPIO1_IO04 0x00b0 >; };

wKgaomcI1miAOh9QAADCVdnkq5M265.png

注释掉其它用到GPIO1_IO01、GPIO1_IO02、GPIO1_IO03、GPIO1_IO04功能的地方

wKgaoWcI11CAFTjcAADonpe1QCg130.png

至此adc已经复用完成

3、编译并替换设备树

(1)执行环境变量

elf@ubuntu:~/work/linux-4.1.15-elf1$ . /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi

(2)编译设备树

elf@ubuntu:~/work/linux-4.1.15-elf1$ make imx6ull_elf1_defconfig elf@ubuntu:~/work/linux-4.1.15-elf1$ make dtbs

(3)将arch/arm/boot/dts/路径下的imx6ull-elf1-emmc.dtb放到U盘,通过U盘拷贝到开发板

root@ELF1:~# cp /run/media/sda1/imx6ull-elf1-emmc.dtb /run/media/mmcblk1p1/

(4)保存并重启开发板

root@ELF1:~# sync root@ELF1:~# reboot

三、数据采集和设备控制

1、程序设计

wKgZoWcI2ASABFvUAABY1jE3f8E038.png

主函数的实现main.cpp

int main() { int up = 0; int down = 0; int left = 0; int right = 0; int duty_cycle6 = DUTY_90_DEG; int duty_cycle7 = DUTY_90_DEG; int adcChannels[] = {1, 2, 3, 4}; int adcValues[4] = {0}; init_pwm(); write_file(PWM6_DUTY_CYCLE, duty_cycle6); write_file(PWM7_DUTY_CYCLE, duty_cycle7); while (1) { for (int i = 0; i < 4; ++i) { adcValues[i] = read_adc_value(adcChannels[i]); } up = (adcValues[3] + adcValues[0]) ; down = (adcValues[2] + adcValues[1]) ; left = (adcValues[3] + adcValues[2]) ; right = (adcValues[0] + adcValues[1]) ; printf("up: %d\n", up); printf("down: %d\n", down); printf("left: %d\n", left); printf("right: %d\n", right); if ((down - up >= 200) && (duty_cycle6 >= DUTY_0_DEG)) { duty_cycle6 -= 100000; write_file(PWM6_DUTY_CYCLE, duty_cycle6); usleep(10000); } if ((up - down >= 200) && (duty_cycle6 <= DUTY_180_DEG)) { duty_cycle6 += 100000; write_file(PWM6_DUTY_CYCLE, duty_cycle6); usleep(10000); } if ((right - left >= 200) && (duty_cycle7 >= DUTY_0_DEG)) { duty_cycle7 -= 100000; write_file(PWM7_DUTY_CYCLE, duty_cycle7); usleep(10000); } if ((left - right >= 200) && (duty_cycle7 <= DUTY_180_DEG)) { duty_cycle7 += 100000; write_file(PWM7_DUTY_CYCLE, duty_cycle7); usleep(10000); } usleep(100000); } return 0; }

配置pwm

int init_pwm() { write_file(PWM6_EXPORT, 0); if (-1 == write_file(PWM6_PERIOD, PWM_PERIOD)) return -1; if (-1 == write_file(PWM6_ENABLE, 1)) return -1; write_file(PWM7_EXPORT, 0); if (-1 == write_file(PWM7_PERIOD, PWM_PERIOD)) return -1; if (-1 == write_file(PWM7_ENABLE, 1)) return -1; return 0; }

设置舵机初始位置

write_file(PWM6_DUTY_CYCLE, duty_cycle6); write_file(PWM7_DUTY_CYCLE, duty_cycle7);

获取光照值

int read_adc_value(int adcNumber) { int adcValue = 0 ; FILE* adcFile; char adcValueFile[50]; char adcValueStr[10] = "0"; snprintf(adcValueFile, sizeof(adcValueFile), "/sys/bus/iio/devices/iio:device0/in_voltage%d_raw", adcNumber); adcFile = fopen(adcValueFile, "r"); if (adcFile) { fgets(adcValueStr, sizeof(adcValueStr), adcFile); adcValue = atoi(adcValueStr); fclose(adcFile); } else { fprintf(stderr, "Error opening ADC value file %s.\n", adcValueFile); } return adcValue; }

根据光照值调整舵机位置

if ((down - up >= 200) && (duty_cycle6 >= DUTY_0_DEG)) { duty_cycle6 -= 100000; write_file(PWM6_DUTY_CYCLE, duty_cycle6); usleep(10000); } if ((up - down >= 200) && (duty_cycle6 <= DUTY_180_DEG)) { duty_cycle6 += 100000; write_file(PWM6_DUTY_CYCLE, duty_cycle6); usleep(10000); } if ((right - left >= 200) && (duty_cycle7 >= DUTY_0_DEG)) { duty_cycle7 -= 100000; write_file(PWM7_DUTY_CYCLE, duty_cycle7); usleep(10000); } if ((left - right >= 200) && (duty_cycle7 <= DUTY_180_DEG)) { duty_cycle7 += 100000; write_file(PWM7_DUTY_CYCLE, duty_cycle7); usleep(10000); }

2、应用编译

(1)拷贝sun.tar.bz2到开发环境/home/elf/work目录下解压

elf@ubuntu:~/work$ tar xvf sun.tar.bz2

(2)执行环境变量

elf@ubuntu:~/work$ . /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi

(3)编译

elf@ubuntu:~/work$ cd sun/ elf@ubuntu:~/work/sun$ make

(4)拷贝sanapp到开发板/home/root路径下

root@ELF1:~# cp /run/media/sda1/sunapp ./ root@ELF1:~# sync

四、项目测试

1、确保开发板已正确连接四路光敏传感器和舵机

2、执行应用

root@ELF1:~# ./sunapp

此时可以打开手电筒interwetten与威廉的赔率体系 太阳光,调整太阳能板的角度

对于初涉嵌入式开发领域的小伙伴来说,“智慧光伏”无疑是一个兼具趣味与实践的开源项目。通过亲身参与这一开源项目的组装与调试过程,可以直接接触到真实的开发环境、工具链和代码库,从而解决实际问题,帮助初学者更快地成长为合格的嵌入式开发工程师

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6039

    文章

    44575

    浏览量

    636395
  • 嵌入式
    +关注

    关注

    5086

    文章

    19143

    浏览量

    306095
  • 开发板
    +关注

    关注

    25

    文章

    5081

    浏览量

    97692
  • Linux开发
    +关注

    关注

    0

    文章

    34

    浏览量

    6924
  • 开源代码
    +关注

    关注

    0

    文章

    36

    浏览量

    2992
收藏 人收藏

    评论

    相关推荐

    ElfBoard开源项目|智能消防车项目

    项目——利用ELF 1开发板打造的智慧消防车。该项目展现了物联网、数据处理等前沿威廉希尔官方网站 在消防领域的应用潜力,下面就和各位小伙伴展示一下这个开源
    的头像 发表于 01-04 16:43 214次阅读
    <b class='flag-5'>ElfBoard</b><b class='flag-5'>开源</b><b class='flag-5'>项目</b>|智能消防车<b class='flag-5'>项目</b>

    智慧光运维管理系统助力光运维降本增效

    智慧光运维管理系统助力光运维降本增效 智慧光运维管理系统是利用物联网、大数据、云计算、人工智能等先进
    的头像 发表于 01-03 17:00 120次阅读
    <b class='flag-5'>智慧光</b><b class='flag-5'>伏</b>运维管理系统助力光<b class='flag-5'>伏</b>运维降本增效

    开源鸿蒙荣获开放原子“2024年度操作系统领域国内活跃开源项目

    开源鸿蒙”或“OpenHarmony”)荣获“2024年度操作系统领域国内活跃开源项目”。 活跃的开源项目
    的头像 发表于 12-28 15:39 389次阅读

    ElfBoard开源项目|车牌识别项目威廉希尔官方网站 文档

    车牌识别项目基于百度智能云平台,旨在利用其强大的OCR服务实现车牌号码的自动识别。选择百度智能云的原因是其高效的API接口和稳定的服务质量,能够帮助开发者快速实现车牌识别应用。这个开源项目使用摄像头
    的头像 发表于 12-06 10:30 282次阅读
    <b class='flag-5'>ElfBoard</b><b class='flag-5'>开源</b><b class='flag-5'>项目</b>|车牌识别<b class='flag-5'>项目</b><b class='flag-5'>威廉希尔官方网站
</b><b class='flag-5'>文档</b>

    无人机AI智慧光巡检系统的威廉希尔官方网站 实现与运维革新

    无人机AI智慧光巡检系统的威廉希尔官方网站 实现与运维革新 在绿色能源领域,光发电正以其清洁、可再生的特性引领着能源转型的浪潮。然而,随着光电站规模
    的头像 发表于 11-28 16:32 437次阅读

    凌蒙派OpenHarmony开源项目荣获本期Gitee官方推荐

    近日,我司凌蒙派OpenHarmony开源项目荣获本期Gitee官方推荐。本期Gitee官方推荐不仅是对凌蒙派OpenHarmony开源项目的高度认可,也是对我司在推动
    的头像 发表于 11-20 01:04 317次阅读
    凌蒙派OpenHarmony<b class='flag-5'>开源</b><b class='flag-5'>项目</b>荣获本期Gitee官方推荐

    真格基金宣布捐赠开源AI项目vLLM

    开源威廉希尔官方网站 处于 AI 革命的中心。Llama 3、Mistral 等开源大模型迅速追赶 GPT-4,TensorFlow、Pytorch 等开源深度学习框架提供了丰富的库和工具。GitH
    的头像 发表于 09-24 16:13 399次阅读

    ElfBoard开源项目|“智慧教室”开源项目威廉希尔官方网站 文档

    智慧教室”项目的目标是实现实时采集环境中的温度、湿度及光照信息,并将这些数据可视化地呈现在Qt图形界面上。用户既可以选择手动控制风扇与窗帘的开关,也可以设置系统根据所采集的环境参数自动调节,以达到舒适的室内环境。接下来,将和各位小伙伴深入探讨这一
    的头像 发表于 09-11 10:51 559次阅读
    <b class='flag-5'>ElfBoard</b><b class='flag-5'>开源</b><b class='flag-5'>项目</b>|“<b class='flag-5'>智慧</b>教室”<b class='flag-5'>开源</b><b class='flag-5'>项目</b><b class='flag-5'>威廉希尔官方网站
</b><b class='flag-5'>文档</b>

    Matepad pro12.2 已上市半个月,但是还没有在开源网站看到该项目开源信息,违背开源精神

    Matepad pro12.2 已上市半个月,本人自己也购买了同款12+256的pad,想要同步学习下这款pad的一些体验还不错的功能点,但是目前为止还没有在开源网站看到该项目开源信息,也查询不到
    发表于 08-27 17:25

    智慧光运维管理系统引领光电站管理新时代

           智慧光运维管理系统引领光电站管理新时代        随着全球对可再生能源需求的不断增长,光电站作为清洁能源的代表,正迅速扩展器市场份额。然而,随着光
    的头像 发表于 07-30 16:00 833次阅读
    <b class='flag-5'>智慧光</b><b class='flag-5'>伏</b>运维管理系统引领光<b class='flag-5'>伏</b>电站管理新时代

    嵌入式学习-飞凌嵌入式ElfBoard-项目分享|基于ELF 1S开发板完成的物联网开源项目

    工程师借助ELF 1S开发板完成的嵌入式物联网项目,见证智慧威廉希尔官方网站 的火花。 关于这个项目的思维导图,如下图所示: 接下来,将会从云-网-边-端的物联网体系架构出发,描述整个
    发表于 05-16 09:19

    飞凌嵌入式-ElfBoard-项目分享|基于ELF 1S开发板完成的物联网开源项目

    工程师借助ELF 1S开发板完成的嵌入式物联网项目,见证智慧威廉希尔官方网站 的火花。 关于这个项目的思维导图,如下图所示: 接下来,将会从云-网-边-端的物联网体系架构出发,描述整个
    发表于 05-16 09:12

    项目分享|基于ELF 1S开发板完成的物联网开源项目

    ElfBoard作为飞凌嵌入式旗下教育品牌,自成立以来,持续吸引着各界的瞩目,其中也赢得了一些工程师的青睐。今天,就和各位小伙伴分享一位杰出工程师借助ELF1S开发板完成的嵌入式物联网项目,见证智慧
    的头像 发表于 05-14 09:03 1381次阅读
    <b class='flag-5'>项目</b>分享|基于ELF 1S开发板完成的物联网<b class='flag-5'>开源</b><b class='flag-5'>项目</b>

    项目分享|基于ElfBoard的远程监测系统

    威廉希尔官方网站 领域的专业素养。值得一提的是,社群内部已经涌现出许多富有创意的产品设计理念与威廉希尔官方网站 解决方案,今天就跟大家分享一名共创官完成的项目报告“基于ElfBoard的远程监测系
    的头像 发表于 01-17 11:14 620次阅读
    <b class='flag-5'>项目</b>分享|基于<b class='flag-5'>ElfBoard</b>的远程监测系统

    关于FPGA的开源项目介绍

    Hello,大家好,之前给大家分享了大约一百多个关于FPGA的开源项目,涉及PCIe、网络、RISC-V、视频编码等等,这次给大家带来的是不枯燥的娱乐项目,主要偏向老的游戏内核使用FPGA进行硬解,涉及的内核数不胜数,主要目标是
    的头像 发表于 01-10 10:54 1485次阅读
    关于FPGA的<b class='flag-5'>开源</b><b class='flag-5'>项目</b>介绍