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

此时可以打开手电筒模拟太阳光,调整太阳能板的角度

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

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

    关注

    6074

    文章

    45340

    浏览量

    663617
  • 嵌入式
    +关注

    关注

    5186

    文章

    20151

    浏览量

    328889
  • 开发板
    +关注

    关注

    25

    文章

    6125

    浏览量

    113378
  • Linux开发
    +关注

    关注

    0

    文章

    44

    浏览量

    7613
  • 开源代码
    +关注

    关注

    0

    文章

    41

    浏览量

    3522
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    开源鸿蒙项目顺利孵化毕业

    2025年11月21日,2025开放原子开发者大会在北京隆重启幕。作为本次大会的重磅环节和核心焦点之一,在大会开幕式上,开放原子开源基金会(以下简称“基金会”)宣布开源鸿蒙项目达成开源
    的头像 发表于 11-27 14:36 306次阅读

    开源欧拉项目达成开源孵化目标顺利毕业

    11月21日,2025开放原子开发者大会在北京隆重启幕。作为本次大会的重磅环节和核心焦点之一,在大会开幕式上,开源欧拉项目达成开源孵化目标、顺利毕业。
    的头像 发表于 11-25 17:40 885次阅读

    开源鸿蒙项目达成开源孵化目标顺利毕业

    11月21日,2025开放原子开发者大会在北京隆重启幕。作为本次大会的重磅环节和核心焦点之一,在大会开幕式上,开源鸿蒙项目达成开源孵化目标、顺利毕业,这是项目
    的头像 发表于 11-25 17:36 885次阅读

    开源鸿蒙和开源欧拉成为开放原子开源基金会首批毕业项目

    11月21日,在2025开放原子开发者大会开幕式上,开放原子开源基金会宣布旗下开源鸿蒙(OpenHarmony)与开源欧拉(openEuler)成为首批毕业项目
    的头像 发表于 11-25 17:22 568次阅读

    智慧光综合管理系统中的“全维度监测”

    实现光电站从设备监控到运维决策的全流程智能化,是智慧光综合管理系统应用的效果体现,从技术融合、管理优化和价值创造等层面来实现系统的“智慧
    的头像 发表于 11-12 19:31 324次阅读
    <b class='flag-5'>智慧光</b><b class='flag-5'>伏</b>综合管理系统中的“全维度监测”

    开放原子开源基金会与新一批开源项目完成捐赠签约

    近日,在2025开放原子开源生态大会开幕式上,开放原子开源基金会与新一批开源项目完成捐赠签约,涵盖人工智能、具身智能、基础软件、区块链等多个技术
    的头像 发表于 07-28 17:04 805次阅读

    普华基础软件荣膺优秀开源项目

    近日,2025上海开源创新菁英奖评选结果正式揭晓。普华基础软件开源安全车控操作系统小满EasyXMen凭借在开源技术创新与产业应用实践方面的突出表现,荣获“优秀
    的头像 发表于 07-28 16:48 730次阅读

    RT-Thread荣获2025优秀开源项目 | 新闻速递

    6月底,RT-Thread睿赛德受邀参与由上海开源信息技术协会主办的2025上海开源创新精英荟。上海市商委副主任张杰出席会议并致辞。RT-Thread嵌入式操作系统项目凭借其卓越的
    的头像 发表于 07-04 09:04 2432次阅读
    RT-Thread荣获2025优秀<b class='flag-5'>开源</b><b class='flag-5'>项目</b> | 新闻速递

    RISC V 开源芯片项目:OpenTitan 详细解读

    OpenTitan 是由 Google 主导的开源安全芯片项目,旨在为硬件系统提供 可信的硬件信任根(Root of Trust, RoT)​ ,通过透明化设计和开源协作提升硬件安全水平。以下是其
    的头像 发表于 04-09 14:45 3746次阅读
    RISC V <b class='flag-5'>开源</b>芯片<b class='flag-5'>项目</b>:OpenTitan 详细解读

    Open Echo:一个开源的声纳项目

    开源硬件项目,Open Echo 致力于构建高精度声呐系统,主要应用于水文测绘与科研探测领域。项目遵循完全开源协议,目前已在GitHub平台公开全部
    的头像 发表于 03-20 11:14 2027次阅读
    Open Echo:一个<b class='flag-5'>开源</b>的声纳<b class='flag-5'>项目</b>

    智慧光运维管理系统

    智慧光运维管理系统 智慧光运维管理系统是专为光电站设计的一种高度集成化的智能管理系统,旨在通过先进的信息
    的头像 发表于 01-10 16:15 891次阅读
    <b class='flag-5'>智慧光</b><b class='flag-5'>伏</b>运维管理系统

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

    项目——利用ELF 1开发板打造的智慧消防车。该项目展现了物联网、数据处理等前沿技术在消防领域的应用潜力,下面就和各位小伙伴展示一下这个开源
    的头像 发表于 01-04 16:43 1053次阅读
    <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 860次阅读
    <b class='flag-5'>智慧光</b><b class='flag-5'>伏</b>运维管理系统助力光<b class='flag-5'>伏</b>运维降本增效

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

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

    开放原子开源基金会与三个开源项目举行捐赠签约仪式

    近日,在2024开放原子开发者大会暨首届开源技术学术大会开幕式上,开放原子开源基金会秘书长助理李博与openKylin、EasyAda、KWDB开源
    的头像 发表于 12-23 11:29 994次阅读