8013浏览
查看: 8013|回复: 0

RGB炫彩时钟

[复制链接]
RGB炫彩时钟
“如果迎着风就飞,俯瞰这世界有多美,让烦恼都灰飞,别去理会自我藉慰,如果还有梦就追,至少不会遗憾后悔”上周去春熙路逛街的时候看见一家商场的大屏幕上正在播这首《远走高飞》。那时候真想把这大屏幕给搬回家。就算放在家里看看时间也是很震撼的啊。上班的时候刚好看见同事做了一个炫彩的RGB时钟,然后我就借过来玩了两天(最主要的是我也打算做一个)。大家来看看是不是很炫酷啊。备用视频地址:RGB炫彩时钟视频
借来的第一天我就想看看它到底是怎样构成的?于是我将它拆开自己又重新装了一下,顺便也了解了解需要哪些配件嘛。
[主要配件]


32x16RGB LED Matrix - 6mm pitch 点阵屏,它可以实现你想把大厦外面的广告牌搬回家的梦想。
32x16 RGB LED点阵屏是由512个RGB led按照32x16网格组成了一款全彩、高亮LED矩阵屏。在一些广告墙和显示屏会经常见到。点阵屏的背后有两个IDC 连接器,一个输入接口,一个输出接口;利用1/8扫描驱动显示屏。屏幕采用高分子防火PC塑胶面罩,该面罩不反光,不褪色,耐紫外线,同时还具备高温阻燃特性和良好的散热性能,在高低温这样恶劣的环境下工作也能保持模块之间不会相互挤压变形;这样可以确保产品的强度和外形稳定性。另外底壳还设计了有便于安装的安装孔。面罩不反光,耐紫外线,不褪色。
另外面板需要用到13个IO 引脚(6个数据位,7个控制位);一个5V电压,2A以上输出电流的电源供电。
注意:此面板在RAM和供电充足的情况下,可以任意级联,这样就能组合成更大的灯板了。但是当级联数量大于4之后,Arduino UNO的运算能力就稍显不足了,这是就需要使用Mega2560、树莓派或者其他的设备来驱动这块RGB面板。
点阵屏的背面主要分三个接口,IN-PUTOUT-PUTPOWER

其中IN-PUT和OUT-PUT引脚顺序一样,POWER电源供电5V。


另外需要选用IO传感器扩展板 V7.1扩展板的理由:
1.       省去了繁琐的面包板接线和故障排除。
2.       外部电源扩展,扩展板角落接线柱为主控器和扩展板供电,中部接线柱为数字口上的舵机供电(刚好RGB屏要外接电源,这样就省去另外找电源外接的麻烦,外接电源连线如下图)。
              外接电源连线


Gravity:I2C SD2405 RTC 实时时钟模块可以实现定时/报警中断输出,年、月、日、星期、时、分、秒的功能显示;该模块内置晶振,支持IIC接口,兼容Gravity接口的高精度时钟模块。

Arduino空气质量监测仪 (PM2.5, 甲醛, 温湿度)可测量PM10和PM2.5数值,同时内置甲醛以及温湿度传感器,可实时监测室内空气质量。据说甲醛浓度是基于电化学的原理检测,具备高精度、高稳定性的特点。

【电路连线示意图】

        RGB面板连线图
注意:图中标有绿色数字的线表示连接在UNO板上的数字端口(2~9,标有蓝色数字的线连接在模拟端口的(0~3)。黑色的接地。
  
Arduino空气质量监测仪和时钟模块的连线图

【实物连线示意图】

发现我除了改进了一下转接板的连线,其他的本没有实质性的改变啊。
后面发现DFRobot官网上的RGB点阵屏产品的配送清单里直接有16pin的IDC转IDC连接线。这样往UNO R3上连线就方便多了。

组装完成后,接上电池就可以看见下面的炫彩效果了。(也可USB供电。)

【实物效果图】
RGB炫彩时钟一共设置了三种颜色,时间显示的是绿色,日期、温湿度、PM2.5则是随机显示红色和蓝色。另外还可以更改代码里的参数设置其他颜色。
  
显示日期。
  
显示温度
显示湿度
  
显示PM2.5
       RGB炫彩时钟的亮度还是很有穿透力的,可以放在比较显眼的地方提示自己几点了,今天的温度是多少。外接电源的rgb屏亮度比较高,在远处也能清晰的看见,如果觉得刺眼睛的话可以在RGB面板的表面加一块遮挡物(如黑色的塑料纸)这样能有效地减弱光线,保护咱们心灵的窗户
【程序代码】
  1. #include <SoftwareSerial.h>
  2. #include <Adafruit_GFX.h>   // Core graphics library
  3. #include <RGBmatrixPanel.h> // Hardware-specific library
  4. #include <Wire.h>
  5. #include "GravityRtc.h"
  6. SoftwareSerial Serial1(10, 11);
  7. GravityRtc rtc;
  8. #define CLK 8  // MUST be on PORTB! (Use pin 11 on Mega)
  9. #define LAT A3
  10. #define OE  9
  11. #define A   A0
  12. #define B   A1
  13. #define C   A2
  14. RGBmatrixPanel matrix(A, B, C, CLK, LAT, OE, false);
  15. char col;
  16. unsigned int PMSa = 0, FMHDSa = 0, TPSa = 0, HDSa = 0, PMSb = 0, FMHDSb = 0, TPSb = 0, HDSb = 0;
  17. unsigned int PMS = 0, FMHDS = 0, TPS = 0, HDS = 0, CR1 = 0, CR2 = 0;
  18. unsigned char buffer_RTT[40] = {}; //The serial port receives data
  19. char tempStr[15];
  20. char* str[] = {"error", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"};
  21. int r, y, b, z;
  22. int model = 1;
  23. void setup()
  24. {
  25.   matrix.begin();
  26.   rtc.setup();
  27.   //rtc.initRtc(2017,9,27,3,16,20,3);//  setup time
  28.   Serial.begin(9600);
  29. }
  30. void loop()
  31. {
  32.   if (model == 3)
  33.   {
  34.     model = 1;
  35.   }
  36.   switch (model) {
  37.     case 1: r = 0; y = 7; b = 0; break;
  38.     case 2: r = 0; y = 0; b = 7; break;
  39.   }
  40.   rtc.update();
  41.   while (Serial.available() > 0) //Check whether there is serial data
  42.   {
  43.     for (int i = 0; i < 40; i++) //Read serial data
  44.     {
  45.       col = Serial.read();
  46.       buffer_RTT = (char)col;
  47.       delay(2);
  48.     }
  49.     Serial.flush();
  50.     CR1 = (buffer_RTT[38] << 8) + buffer_RTT[39];
  51.     CR2 = 0;
  52.     for (int i = 0; i < 38; i++)
  53.       CR2 += buffer_RTT;
  54.     if (CR1 == CR2)              //check
  55.     {
  56.       PMSa = buffer_RTT[12];      //Read PM2.5 high octet data
  57.       PMSb = buffer_RTT[13];      //Read PM2.5 low octet data
  58.       PMS = (PMSa << 8) + PMSb;   //PM2.5 data
  59.       FMHDSa = buffer_RTT[28];    //Read the high octet data
  60.       FMHDSb = buffer_RTT[29];    //Read the low octet data
  61.       FMHDS = (FMHDSa << 8) + FMHDSb; //Formaldehyde data
  62.       TPSa = buffer_RTT[30];      //Read the high octet data
  63.       TPSb = buffer_RTT[31];      //Read the low temperature 8-bit data
  64.       TPS = (TPSa << 8) + TPSb;   //Temperature data
  65.       HDSa = buffer_RTT[32];      //Read the humidity high octet data
  66.       HDSb = buffer_RTT[33];      //Read low humidity eight bits of data
  67.       HDS = (HDSa << 8) + HDSb;    //Humidity data
  68.     }
  69.   }
  70.   matrix.fillScreen(0);
  71.   // draw some text!
  72.   // start at top left, with one pixel of spacing
  73.   matrix.setTextSize(1);    // size 1 == 8 pixels high
  74.   matrix.setCursor(0, 0);
  75.   matrix.setTextSize(1);
  76.   matrix.setTextColor(matrix.Color333(0, 7, 0));
  77.   if (rtc.hour < 10)
  78.   {
  79.     matrix.print('0');
  80.     matrix.print(rtc.hour);
  81.   }
  82.   else
  83.     matrix.print(rtc.hour);
  84.   matrix.print(':');
  85.   if (rtc.minute < 10)
  86.   {
  87.     matrix.print('0');
  88.     matrix.print(rtc.minute);
  89.   }
  90.   else
  91.     matrix.println(rtc.minute);
  92.   sprintf(tempStr, "%d%d.%d", TPS / 100, (TPS / 10) % 10, TPS % 10);
  93.   matrix.setTextColor(matrix.Color333(y, r, b));
  94.   matrix.setCursor(0, 8);
  95.   matrix.print(tempStr);
  96.   matrix.print("C");
  97.   matrix.fillRect(30, 9, 30, 2, matrix.Color333(y, r, b));
  98.   delay(5000);
  99.   // draw some text!
  100.   matrix.fillRect(0, 7, 32, 9, matrix.Color333(0, 0, 0));
  101.   matrix.setCursor(12, 0);
  102.   matrix.setTextColor(matrix.Color333(0, 0, 0));
  103.   matrix.print(':');
  104.   delay(300);
  105.   matrix.setCursor(12, 0);
  106.   matrix.setTextColor(matrix.Color333(0, 7, 0));
  107.   matrix.print(':');
  108.   matrix.setCursor(6, 8);
  109.   matrix.setTextColor(matrix.Color333(0, 0, 7));
  110.   matrix.print(str[rtc.week]);
  111.   delay(5000);
  112.   matrix.fillRect(0, 7, 32, 9, matrix.Color333(0, 0, 0));
  113.   matrix.setCursor(12, 0);
  114.   matrix.setTextColor(matrix.Color333(0, 0, 0));
  115.   matrix.print(':');
  116.   delay(300);
  117.   matrix.setCursor(12, 0);
  118.   matrix.setTextColor(matrix.Color333(0, 7, 0));
  119.   matrix.print(':');
  120.   matrix.setTextColor(matrix.Color333(y, r, b));
  121.   matrix.setCursor(0, 8);
  122.   if (rtc.month < 10)
  123.   {
  124.     matrix.print('0');
  125.     matrix.print(rtc.month);
  126.   }
  127.   else
  128.     matrix.print(rtc.month);
  129.   matrix.print('-');
  130.   if (rtc.day < 10)
  131.   {
  132.     matrix.print('0');
  133.     matrix.print(rtc.day);
  134.   }
  135.   matrix.print(rtc.day);
  136.   delay(5000);
  137.   matrix.fillRect(0, 7, 32, 9, matrix.Color333(0, 0, 0));
  138.   matrix.setCursor(12, 0);
  139.   matrix.setTextColor(matrix.Color333(0, 0, 0));
  140.   matrix.print(':');
  141.   delay(300);
  142.   matrix.setCursor(12, 0);
  143.   matrix.setTextColor(matrix.Color333(0, 7, 0));
  144.   matrix.print(':');
  145.   matrix.setTextColor(matrix.Color333(b, r, y));
  146.   matrix.setCursor(0, 8);
  147.   matrix.print(PMS);
  148.   matrix.print("ug");
  149.   delay(5000);
  150.   matrix.fillRect(0, 7, 32, 9, matrix.Color333(0, 0, 0));
  151.   matrix.setCursor(12, 0);
  152.   matrix.setTextColor(matrix.Color333(0, 0, 0));
  153.   matrix.print(':');
  154.   delay(300);
  155.   matrix.setCursor(12, 0);
  156.   matrix.setTextColor(matrix.Color333(0, 7, 0));
  157.   matrix.print(':');
  158.   sprintf(tempStr, "%d%d.%d", HDS / 100, (HDS / 10) % 10, HDS % 10);
  159.   matrix.setTextColor(matrix.Color333(y, r, b));
  160.   matrix.setCursor(0, 8);
  161.   matrix.print(tempStr);
  162.   matrix.print("%");
  163.   delay(5000);
  164.   model += 1;
  165. }
复制代码

3D打印外壳】
用到的库文件
PS3D打印外壳时,如果采用激光成型技术,有支撑和无支撑都可以打印出模型,如果采用熔融层积成型技术,选用有支撑的文件效果较好。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail