您现在的位置是:网站首页> 硬件

实用代码下载

  • 硬件
  • 2022-04-08
  • 840人已阅读
摘要

实用代码下载

基于Arduino的3D图像显示装置 



基于Arduino的3D图像显示装置 

原文下载

基于Arduino的3D图像显示装置,是利用开源硬件Arduino配合点阵显

示器显示图像,并利用旋转的方式解决显示介质问题,用视觉暂留的原理,实现

三维显示,以实现显示粗糙的三维图形.配上制图软件,用于简单的教学,装饰,

展示等.操作方便快捷 

市场上有许多三维的旋转显示器,

可仔细观察后发现,市场上所谓的“裸眼3D”,只不过是在一个面上的画面成像,

做不到从不同的角度观察,看到不同的画面。于是, 本着创客精神,我决定利用

开源硬件Arduino自己做一个图像显像更逼真、操作更简便的3D图像显示装置


1查询类似作品研究现状 

目前的3D显示风扇多为平面显示,不能达到多角度观察的目的 


2制定计划与结构 

以同样的旋转的结构来显示,但是把线条灯改为点阵灯. 


3显示系统的搭建与代码编写

 

4对运行进行调整和配重

 

5进行电脑程序的代码编写 


设计思路: 


1 Arduino简述: 


Arduino是一款便捷灵活、方便上手的开源电子原型平台,具有使用类似Java、

 

C语言的Processing/Wiring开发环境. 


主要包含两个主要的部分:硬件部分是可以用来做电路连接的Arduino电路板;另

外一个则是Arduino IDE,计算机中的程序开发环境。Arduino能通过各种各样

的传感器来感知环境,通过控制灯光、马达和其他的装置来反馈、响应环境。板

子上的微控制器可以通过Arduino的编程语言来编写程序,编译成二进制文件,

烧录进微控制器。 

Arduino是目前全球最流行的开源硬件,本作品就是用到了C++编译完成。


2 结构概括: 


本作品分为三个部分分别是显示系统(主要部分),旋转台(使显示系统旋转),制

图软件(可以用于编辑并生成图像). 

处理器分为两块单片机(Arduino Nano) 

左边的单片机用来读卡,显示画面,测速; 


右边的单片机用来处理实时数据,如遥控信息等(未来可增加传感器) 

注:显示系统和旋转台固定为一体,使用时不可拆卸.如下图

1.png

2.png

3.png

4.png


显示系统组成: 

如下图 

5.png


硬件 单元器件清单列表 器件功能 

1 单片机1#(Arduino Nano) 用来读卡,显示画面,测速; 

2 单片机2#(Arduino Nano) 用来处理实时数据,如遥控信息等(未来可增加传感器) 

3 16*16LED点阵发光板 接收单片机1#指令显示红、绿光 

3 红外遥控避障传感器 测试转速,并回馈给单片机1# 

4 红外遥控接收头 接收遥控器指令 

6 150mAH锂电池软包 提供显示系统供电 

7 锂电池充放电控制器 控制锂电芯充电安全 

8 存储卡接头 提供外插卡读取 

9 马达3V 提供转台动力 

10 连接导线、焊笔、胶枪 辅助完成 芯针连接 

软件 软件清单 功能 

1 Arduino IDE(C++语言编写) 显示系统( 单片机控制显示程序) 

2 flash CS6(AS3.0语言编写) 制图软件(可以用于编辑并生成图像). 

显示系统运行过程: 


1. 旋转台开始旋转,显示系统利用红外传感器获取当前转速 


2. 当装速测量后 通过程序计算后进行每个面的显示,将360度的一圈分为8个

画面 


程序运行过程总结如下: 

1.png

使用的操作过程: 

1使系统成像: 


->打开显示系统开关 


->给旋转台电池盒装入两节5号电池,打开电池盒开关 

->在等待8秒 左右后系统正常成像 


->显示过程中,可以使用遥控器上的数字按钮切换图像 


->也可以使用遥控器上的绿色按钮控制图像旋转(通过装速差异实现) 

->以下两图为大致的显示效果(立方体和立体2次函数) 

1.png2.png

2修改储存卡图像 


->按下读卡器,储存卡弹出 


->将储存卡插入U盘读卡器,连接电脑 


->打开U盘根目录下的dbox.exe 即可进行图像编辑

->编辑图像后点击左侧的按钮将图像文件保存至U盘根目录即可 

->拔出U盘读卡器 将储存卡插回显示系统的读卡器即可正常运行 

3充电 


->旋转台的电源使用时间约为10分钟 需及时更换电池 


->显示系统电源使用时间约为30分钟 开机时,当单片机指示灯快闪,或使用时


4遥控 


->遥控按按钮短按即可 否则可能无效 

左边为按钮功能介绍 

关于核心开源代码: 

 


开机自动测量电压的函数 

 


long readVcc() { 

  long result; 


  ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1); 

  delay(2); 


  ADCSRA |= _BV(ADSC); 


  while (bit_is_set(ADCSRA,ADSC)); 

  result = ADCL; 


  result |= ADCH<<8; 


  result = 1125300L / result;  

  return result; 


if(long readVcc()+1.1<3){ 

while(1){ 


//开机时测量显示系统供电电压,如果电压小于3V,则开机无法使用,提醒充电 

 


读取储存卡16进制值 


#include <SPI.h>//库索引 

#include <SD.h> 

File myFile; 


String fien = "dm0.3dm"; 

char buf[8]; 

uint16_t tmp;  


myFile = SD.open(fien);//打开文件 


while(myFile.available()) {//一旦有内容,则读取内容 


char inCharm = (char)myFile.read(); 

if(inCharm!=','){ 


if (inCharm != '\n') { 


if (inCharm != '\r') { 


inputString+=(char)inCharm;//读取一个字节 

}else{ 


 inputString.toCharArray(buf,sizeof(buf)); 


          sscanf(buf,"%x",&tmp);//字符串转16进制 

          mais[xc][row]=tmp;//总数组赋值 


          inputString="";//清空字符串,接收下一组数据 

          row++;//排变量加1 


          if(row>23){//排变量满值后,行变量进位 

                     xc++; 

                     row=0; 

          } 


 

 

 


单片机控制LED16*16代码 


for(xc=0;xc<8;xc++){//面循环 


for(row=0;row<12;row++){//列循环 


  if(mais[xc*2][row*2]!=0x00 || mais[xc*2][row*2+1]!=0x00){ 

//检测显示数组的的数据是否不为空,如果为空,则跳过显示,减少计算量 

  co=rr;//颜色设置为红色(7,8引脚的切换) 

digitalWrite(gg,1); 


  shiftOut(co,CLK,MSBFIRST,~mais[xc*2][row*2]);//输出列数据前8 

  shiftOut(co,CLK,MSBFIRST,~mais[xc*2][row*2+1]); //输出列数据后8 

 digitalWrite(OE, 1);  //关闭显示 


  hc138sacn(row+2);     //换行,为下一行显示做准备 

  digitalWrite(LATCH, 0);  //595刷新 

  digitalWrite(LATCH, 1); 


  digitalWrite(OE,0);  //开启显示 


delayMicroseconds(30); //延迟30微秒,增加视觉暂留效果 


 


ycc++;//延迟变量加一 

  } 


digitalWrite(OE, 1);  //关闭显示 


delayMicroseconds((vt/16-ycc*0.2407-0.03)*1000); 


//延迟(当前速度/16个面-显示过的面*计算时间-总计算时间) 

ycc=0; 

 

 

 


制作时遇到的主要困难: 


1电线的焊接,旋转的配重等手工方面问题为主要困难 


2程序的编写等问题参考了CSDN,Arduino中文站等网络文献 

 

 


当前的不足: 


1因为单片机的计算速度有限,在高速状态下显示的图像出现轻微变形 有待改

善。 


2旋转台与显示系统连接处固定不佳,旋转时产生的离心力,导致图像不重合。 

 

 


创新部分: 


1经济实惠:用到一些简单的电子元器件与手工制作而成,成本仅在100元左右。 

2便携方便:占用体积较小,可以在多处展示.修改模型快捷,只需将读卡器插入

电脑简单修改后插回即可使用。 


3用处多样:可用于多种场合,如用于教学中显示数学的几何与函数图形,用于会

议上显示立体统计图。  


结语: 


此装置利用Arduino控制显示图像,实现三维立体显示的创新.利用这个装

置,人们可以从多个角度观察到三维图像, 具有很大的应用价值。 


上一篇:物联网硬件公司

下一篇:画面撕裂

Top