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

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

3天内不再提示

自己动手做一个好玩的POV显示设备

KiCad 来源:KiCad 2024-12-25 15:15 次阅读

读大学的时候就很喜欢这些开脑洞的小玩意儿。看到一个印度小哥用ESP32 做了个高分辨率的 POV,而且开源了全部的硬件和代码,忍不住想分享给大家。

什么是 POV?

POV(Persistence of Vision)中文翻译为“视觉暂留”,它的基本原理是使我们的眼睛能够从独立的图像中感知连续的运动,这也是电影中运动错觉的关键概念。实现原理其实也很简单,就是把一定数量的 LED 安装可以旋转或者摇晃的杆子上,通过 MCU 对 LED 编程,结合杆子摇晃和旋转的特定频率,就会在视觉上产生动态的效果。下面的视频可以直观地理解 POV 的实现和效果:

你肯定在网上看到过很多这样的项目,但它们大多分辨率很低,只能显示一些文字和几何图形。而这位印度小哥创建的 POV 显示屏不仅限于文本或简单的形状,他的 POV 显示器可以显示分辨率为 128 像素的图像和动画,而且很容易制作。

项目概览

项目选择了 ESP32 模块作为显示器的大脑,因为它便宜、容易获得,而且功能强大。显示器将有两个旋转臂,每个旋转臂装有 64 个 LED,总分辨率为 128 像素。在 ESP32 的控制下,旋转臂将以恒定的速度旋转,LED 灯以精心安排的模式闪烁。通过这种同步方式,显示屏可以生成悬浮在半空中的图像或文字,带来流畅、连续的视觉体验。

POV 显示器项目特点:

128 像素分辨率。

帧频为 20 FPS。

易于制造。

易于控制。

基于 ESP32。

完全开源。

配套网络应用程序,可轻松转换图像。

元器件 BOM

ESP32 WROOM 模块 - x1

74HC595D 移位寄存器 - x16

CH340K USB - UART 控制器 - x1

TP4056 锂离子充电器 IC - x1

AMS1117 3.3v LDO - x1

AO3401 P - MOSFET - x1

2N7002DW 双 N - MOSFET - x1

霍尔效应传感器 - x2

SS34 二极管 - x1

Typc C USB 连接器 16 针 - x1

SMD LED 蓝色 0603 - x128

775 电机 - x1

直流电机速度控制器 - x1

SMD 电阻电容

SMD LED

SMD 轻触开关

SDM 滑动开关

连接器

3D 打印部件和安装螺钉。

其他工具和耗材。

原理图

完整的原理图如下所示:

wKgZomcy1AOARzOdAASmM1MyAxA213.png

让我们看一下原理图的细节,以便更好地理解。USB Type C 端口用于充电和编程。USB 端口的电源连接到 P 沟道 MOSFET U7 和二极管 D67 构成的电源控制电路。连接器 J4 可用于提供外部 5V 电压。同一端口还可用于连接无线充电器模块,以备在不充电的情况下连续运行。在电压调节方面,使用了常用的 AMS1117 3.3V LDO,它能够提供高达 1A 的电流,满载时的压降约为 1.1V。连接器 J3 用于连接外部开关,以打开和关闭整个电路。为了给内部电池充电,我们使用了 TP4056 充电控制器,其最大充电电流为 1A。现在我们来看看编程电路,它是围绕 WCH 的 CH340K 芯片构建的。为了实现自动复位,我们使用了双 MOSFET 2N7002DW。现在,整个电路的大脑是一个 ESP32-WROOM 模块。我们之所以选择这个 SoC,是因为它价格便宜、易于获得,而且功能强大,能够以足够的帧速率驱动显示屏。LED(像素点)分别位于两个旋转臂,每个旋转臂有 64 个 LED(像素)。因此,我们总共有 128 个像素的分辨率。我们还使用了两个霍尔效应传感器进行转速测量和位置感应。在PCB中,我们原本设计了 SMD 封装,但后来决定使用 TO-92 封装的普通 A3144 传感器,因为它们更容易采购,而且易于安装到当前的支架设计中。

wKgZomcy1AOAJh1mAAFPOy3P_4s998.png

wKgZomcy1AOAbZRTAAECfkUDNQ0407.png

下一部分是 LED 及其驱动。我们使用 74HC595D 移位寄存器来驱动 LED。由于单个 s74HC595 最多可以驱动 8 个 LED,因此总共使用了 16 个这样的芯片来驱动全部 128 个 LED。我们使用了一个 1KOhms 电阻器来限制电流,但您可以根据自己需要的亮度来改变电阻值。由于有两只旋转臂,因此只需要转半圈就能绘制整个画面或图像。一只旋转臂绘制图像的一半,另一只旋转臂绘制图像的另一半。通过这种方法,我们可以将帧频提高一倍。显示屏可以提供大约 20FPS 的帧频。

wKgZomcy1ASAAWO5AAN57dmA448002.png

wKgZomcy1ASAKyfCAAOR9hMfgDI136.png

PCB

PCB 的尺寸约为 210 毫米 x 60 毫米。下面是 PCB 的顶层和底层。

wKgZomcy1ASAW-VHAAKlJEK7NM8159.png

wKgZomcy1ASAaBT0AAJOaCaD0Wc684.png

wKgZomcy1ASAdA5kAAJKFJR-xQw366.png

wKgZomcy1ASAa_ObAAIag-olS9w529.png 装配完成后的样子:

wKgZomcy1ASAdgI9AAHIs7Dm5TU625.png

wKgZomcy1AWAPzN0AAFUMmJhTY4013.png

wKgZomcy1AWANSatAAT56_7-L-Q531.png

工作原理

现在让我们来看看 POV 显示屏是如何工作的。请看下图,我们将一个圆平均分成 32 块。如果用这样分割来的方式完成一幅图像,必须在每次旋转就绘制 32 行像素。在显示每一行像素时时,必须根据像素数据来决定每个LED(像素)是点亮还是熄灭。通过快速旋转和逐行点亮像素,就可以在观察者眼中形成一幅连续的图像。

wKgZomcy1AWAe0c5AANGrG8ZJxs528.png

图像分割

在实际项目中,我们将每个图像径向分成 360 块。也就是说必须在每次旋转时画 360 条相距 1 度的线来绘制图像。

线条和像素

每条线上将有 64 个像素或 LED 灯(两条手臂上共有 128 个 LED 灯),这些像素或LED需要根据像素数据进行操作。

坐标系统问题

一般图像使用的是笛卡尔坐标系。但为了在旋转 POV 显示器上显示图像,我们必须使用极坐标。在笛卡尔坐标系中,位置由水平距离(x)和垂直距离(y)指定。而极坐标则基于圆形网格,位置由半径(r)和水平角度(θ)指定。因此,像素并不均匀:随着与原点距离的增加,像素的面积也会增加,形状也会改变。

wKgZomcy1AWAaZwgAAH96jJlFWw082.png

要从图像中获取像素数据,我们必须使用一些三角函数计算和插值法。然而,对每幅图像的每个像素都进行这样的计算将耗费大量时间,并会减慢像素的响应时间。为了避免这种情况,并获得极短的像素响应时间和最高的刷新率,我们决定使用预计算值来处理图像,这将在编码部分进行说明。根据我们目前的设置,绘制一帧或一幅分辨率为 128 像素、360 段的图像大约需要 50 毫秒,因此有效帧频为 20fps。

下一个挑战是优化图像的存储方式。使用传统工具转换的普通图像阵列,每个像素也会占用 1 个字节的空间。也就是说,128x128 的图像需要 16384 字节的空间。但这样一来,我们在代码空间内存储的图像数量就会受到限制。为了克服这个问题,并获得更好的优化效果,我们采用了一种新方法。每行图像像素将存储在 16 个字节中。每个字节将包含 8 个像素的数据,即黑色或白色。然后使用一个简单的函数对这些数据进行解码,得到实际的像素数据。使用这种方法,一幅 128x128 像素的图像只需要 2048 (128x16) 个字节空间。使用这种方法,我们可以将图像的大小缩小 8 倍。

代码 & 仓库

所有的代码及 KiCad 设计文件都可以在以下仓库找到,这里就不再赘述:

https://github.com/Circuit-Digest/POV-Display

结束语

今天的分享就到这儿,感兴趣的小伙伴赶紧动手实践吧!

部分内容引用自: https://circuitdigest.com/microcontroller-projects/diy-pov-display-using-ESP32-Arduino

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

    关注

    7

    文章

    2702

    浏览量

    47456
  • 显示屏
    +关注

    关注

    28

    文章

    4485

    浏览量

    74270
  • POV
    POV
    +关注

    关注

    4

    文章

    14

    浏览量

    23106
收藏 人收藏

    评论

    相关推荐

    旋转LED屏原理介绍

    POV led”词(POV即persistancd of vision),LED旋转屏。你是否想过自己亲自动手做一个LED旋转屏呢?说白了
    发表于 03-19 13:59 5.2w次阅读

    自己动手做简单移动电源

    网上淘了块压克力板,自己动手做移动电源自己动手做移动电源
    发表于 10-26 11:51

    自己做一个项目比看十教程都管用

    我接触pic单片机也有段时间了,根据我的经验,看什么教程啊什么的都是浮云,想要真正搞懂pic单片机要实实在在接触些项目,就算是很小的项目也很重要,自己动手做一个比上网看十
    发表于 03-07 16:01

    自己动手做单片机的问题

    自己动手做了单片机最小系统,MAX232,STC89C52,RS232,等做成了简单的串口通信,MAX232的转换TTL电平!当然这些大家都知道,我是想请教如果没有复位电路会怎样?但是其他的电源电路,晶振电路都是完整的。
    发表于 04-05 15:54

    冰雪的STM32 参加自己动手做示波器活动

    直想做个ARM开发试验板,这个自己动手做示波器活动刚刚好合适,希望能够成功。
    发表于 06-09 00:30

    自己动手做的VI

    自己动手做的,有什么不懂就直接问
    发表于 04-23 15:12

    怎么用最基本的元件做一个遥控钥匙,我想自己动手做一个

    不知道需要准备些什么工具和材料自己动手做一个遥控钥匙那样的遥控器,或者买些元件组装起来也行,重要的是能稳定的实现遥控开关的功能
    发表于 03-15 19:43

    自己动手做原电池

    自己动手做原电池 1、以食醋为电解质,锌棒和铜棒为电极,串联上万用表------指针会偏转;        
    发表于 10-22 09:07 2204次阅读

    自己动手做-制作简易扬声器

    自己动手做-制作简易扬声器 .目的和要求   了解动圈式扬声器的构造,并理解它的发声原理。
    发表于 01-04 12:03 1.4w次阅读

    自己动手DIY录音机

    diy 自己动手做录音机,主要原件isd1820.爱好者发烧友最爱
    发表于 01-07 16:55 55次下载

    DIY:自己动手做数码相机

    DIY:自己动手做数码相机
    发表于 01-24 16:38 12次下载

    超简单!如何自己动手做一个简易的逆变器?

    逆变器可以把直流电转换成交流电,通常还要有升压变压器,电路部分通常很复杂,不适合初学者制作。但在寻找了几天之后,我终于找到简单,好做的逆变器,而且有定的实用性。电路图在此
    的头像 发表于 08-07 11:26 6.3w次阅读

    arduino loar_Arduino动手做(6)声音传感器模块

    Arduino动手做(1)干簧管传感器模块Arduino动手做(2)光敏电阻模块Arduino动手做(3)微波雷达感应模块Arduino动手做(4)振动传感器模块Arduino
    发表于 12-14 19:11 4次下载
    arduino loar_Arduino<b class='flag-5'>动手做</b>(6)声音传感器模块

    自己动手做简单移动电源 - 工程师创意 - 中国电子技术论坛 - 最好最受欢迎电子论坛!...

    自己动手做简单移动电源 - 工程师创意 - 中国电子技术论坛 - 最好最受欢迎电子论坛! 自己动手做简单移动电源 - 工
    发表于 01-05 14:51 26次下载
    <b class='flag-5'>自己</b><b class='flag-5'>动手做</b>简单移动电源 - 工程师创意 - 中国电子技术论坛 - 最好最受欢迎电子论坛!...

    万圣节来临,动手做一个无线充电的南瓜灯吧

    万圣节来临,动手做一个无线充电的南瓜灯吧
    发表于 11-07 08:07 0次下载
    万圣节来临,<b class='flag-5'>动手做一个</b>无线充电的南瓜灯吧