查看: 982|回复: 1

歼20航模遥控器开源项目计划(基于STM32)| 先做一个开机界面

[复制链接]

352

主题

388

帖子

1093

积分

金牌飞友

Rank: 6Rank: 6

积分
1093
飞币
703
注册时间
2017-7-23
发表于 2022-10-25 05:52:09 | 显示全部楼层 |阅读模式
为什么要用STM32做航模遥控器?Arduino不香嘛?

之前用Arduino Pro Mini制作了一个航模遥控器+接收机,不得不说Arduino开发起来非常方便,但是博主用的开发板比较廉价,芯片资源较少,只能实现基础功能,遥控性能也不能令人满意。我们的经费又不够来买大几百的UNO,怎么办?我找到了同价位的STM32F103C8T6开发板,十元包邮解君愁!这个小板子于我们遥控器而言,资源足够用了,别人甚至拿它来玩平衡车、四旋翼、智能家居,足见其强大!
为什么要命名为J20遥控器?

其一,我们自己DIY的遥控器,当然要用我国之重器-J20来命名!相信如果当年LUOLI大佬开发遥控器时,我们祖国的J20面世了,他也会用J20来命名自己的遥控器,而不是SU27,每个人都有自己的民族自豪感,我也一样!
其二,J20的总设计师-杨伟院士,是我的学长!招生宣传一波哈哈哈哈哈哈,欢迎报考西北工业大学!(招生办是不是该打钱了)我们学校真是太低调了,当年报考前我压根没听说过西工大,宣传力度要加强啊。
其三,今年是2020年,就说应景不应景!J20中的数字也象征着我们的开发时间,独特的年份,用来命名我们的遥控器刚刚好~
为什么要记录开发制作过程?

博主也是边学边做,并且是利用业余时间(导师:论文看累了,就敲点代码放松一下),实际上很耗费时间和精力啊!把学习过程记录下来,一是方便加深自己的理解,二是希望能帮到别人叭,三是提供给DIY玩家自己改造的空间,一千个人心中有一千个哈姆雷特,每个人都有自己的想法,授人以鱼不如授人以渔,教程可以帮助读者完成自己的个性化设计,比如设计开机界面、添加修改功能。
项目完全开源,还附带教程,怎么样?上车吧!
<hr/>1. 项目计划

前天,北斗三号最后一颗全球组网卫星发射成功,实现全球组网。不得不说我们祖国越来越强大了,我们自己也要更努力才行啊,现在我们总被漂亮国卡脖子,但是莫欺少年穷!我们每个人都为祖国建设添砖加瓦,迟早祖国会实现伟大复兴!
北斗系统建设采用“三步走”战略-【从无到有-服务亚太-全球组网】,那么我们的遥控器也分三步走,先完成基础版,实现遥控器的基础功能,再进行升级,添加屏幕界面交互,最后添加更高级人性化的功能。先会爬 再会走路 最后学会奔跑,这样看,万物是不是都相通的?


歼20航模遥控器开源项目计划(基于STM32)| 先做一个开机界面-1.jpg

2. 开机界面制作

侃了这么多,来开工吧,万事开头难,我们先做一个帅气的J20开机界面!


歼20航模遥控器开源项目计划(基于STM32)| 先做一个开机界面-2.jpg

歼20航模遥控器开源项目计划(基于STM32)| 先做一个开机界面-3.jpg

(1)修改图片尺寸

找一张J20图片,用2345看图王修改图片尺寸128像素64像素(或者比这个范围小一点),因为我们的OLED显示屏只有12864个像素点,这一步也可以和第二步一起用程序实现。
(2)图像二值化

所谓图像二值化,就是将彩色图片变成黑白的,我们的显示屏单个像素只有亮/暗两种状态,对应1/0二值。可以用MATLAB/Python/Photoshop等来处理成黑白的,这里我用的是MATLAB,图片和m文件放在同一文件夹,代码如下:

  •     close all
  •     clear all
  •     clc
  • %%
  •     A=imread('j20.jpg');% 输入图片
  •     n = graythresh(A);
  • % D=imbinarize(A,n);
  •     D=im2bw(A,n);
  • % figure;
  • % imshow(D);
  •     imwrite(D,'j20.bmp');% 输出图片
  •     e=imread('j20.bmp');
  • [m,n] = size(e);
  •     img = zeros(m,n);
  •     fd=[m,n,3];%设置空白图片矩阵
  •     f=uint8 (round (fd*255)); %转换为RGB值
  •     bg=255;%灰色背景51
  • for i=1:1:m
  • for j=1:1:n
  • if (e(i,j)<=200)
  •                f(i,j,1)=91;
  •                f(i,j,2)=155;
  •                f(i,j,3)=213;
  • else
  •                f(i,j,1)=255;
  •                f(i,j,2)=255;
  •                f(i,j,3)=255;
  •            end
  •        end
  •     end
  • % figure;
  • % imshow(f);
  • % sa=imcrop(f,[0,0,140,140]);%裁剪[左上角起始位置x,y,裁剪宽,高]
  • % imwrite(f,'j20.png');

生成j20.bmp后,有一些不满意的地方,接下来我们拿PS来修一下。
花费一点时间, 把边边角角清理干净,把线条补充上,再加个J-20文字,最后保存成bmp文件。
(3)Img2Lcd图片转数组(3)Img2Lcd图片转数组

打开刚才修好的bmp图片,按如下四步操作,保存数组。如果发现显示不对,可以尝试改变图中设置,如果你不想搞懂OLED显示原理,那么一个一个试就可以了。扫描模式(4种选项)和6个选项栏(勾选/不勾选),最多4*2^6=256次,我比较幸运,只试了10次。


歼20航模遥控器开源项目计划(基于STM32)| 先做一个开机界面-4.jpg

奉上我做好的两个数组,建议给我们的UI设计师加鸡腿!最后一张太好看了叭!
完整的工程文件详情:https://www.icxbk.com/article/detail/1568.html

37

主题

827

帖子

1629

积分

金牌飞友

Rank: 6Rank: 6

积分
1629
飞币
800
注册时间
2017-9-6
发表于 2022-10-25 06:04:57 | 显示全部楼层
妈呀 喜欢的两个方面竟然重叠了
您需要登录后才可以回帖 登录 | 加入联盟

本版积分规则

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