亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

柏林时钟

组件和用品

Arduino UNO
× 1
Maxim Integrated max7219
只是用于 LED 矩阵突破的 IC...
× 1
实时时钟 (RTC)
× 1
5 毫米 LED:黄色
× 13
5 毫米 LED:红色
× 11
电阻 10k ohm
× 1

关于这个项目

首先...

这是我在 Instructables 网站上写的教程的复制/粘贴。我仍然需要弄清楚如何从一个站点到达另一个站点。所以也许这并不像它应该的那样圆滑......但是,从一个不太日常的时钟开始。

简介:柏林时钟

柏林时钟,BerlinUhr 或 Mengenlehreuhr,可能是第一个数字时钟。

它自 1975 年以来一直存在......

您可以在这里找到很多信息:https://en.wikipedia.org/wiki/Mengenlehreuhr

是怎么制作的,怎么看时间?

简而言之,有四排灯。上面一行是小时数 x 5,下一行是从 1 到 4 的“单小时”。第三行是“分钟 x5”,底行是分钟。

如图,(实际上是一盏灯坏了……)时间是:2x5小时加3小时+6x5分钟+2分钟。

所以现在是 13:32。好吧,我想我们欧洲人更习惯于以 24 小时表示时间。格式,时钟也是。

顶部最大的灯每秒闪烁一次。

我认为在 Arduino 中制作这个时钟可能会很有趣。

第 1 步:一些电子产品

这个项目我们需要什么?

首先,(当然),我们的 Arduino。

我使用我电脑附近随处可见的 Uno 之一。

既然我们谈论时钟,我们可能会使用 RTC。我用的是便宜的 DS 1307。

对于“显示”,我们需要一些 LED。我用了 13 个黄色的、5 毫米的和 11 个红色的。 (我实际上使用 RGB 来制作红色,因为我周围没有足够的红色......)

面包板,只有孔和“焊岛”的印刷板。我只是使用了一部分所谓的“欧元卡格式”。

我用了2个电阻。一个 220 欧姆(秒 LED),另一个 68K。

还有一颗额外的IC:MAX7219。

MAX 是一个 8 位 LED 显示驱动器。我们很多人都知道它,因为它也用于 LED 矩阵。

为简单起见,我还使用了“LedControl”Arduino 库。如果您还没有,可以从这里下载:

https://github.com/wayoda/LedControl

第 2 步:设置。

你可以在这个地方找到一个非常好的 MAX 7219 数据表:

https://www.sparkfun.com/datasheets/Components/Gen...

COM-09622-MAX7219-MAX7221.pdf

我不会再深入研究那个数据表,但它值得使用,它是一种“有趣”的 IC。

跳转到 Arduino。

在该方案中,您会看到一个非常简单的结构:我使用 SDA 和 SCL 来使用时钟(A 1307 突破),以及另外四个输出:用于 MAX 7219 的 DataIn、Clock 和 Chipselect,以及我们用于我们的 OUT 13闪烁的“秒”LED。

大多数事情发生在 Arduino 中:它读取时钟,将其转换为不同类型的输出,然后将数据发送到 7219。

当你阅读代码时,你会看到我只是使用我自己的语言荷兰语。例如:我使用的 int "vijfuren" 是计数 "Five-hours" 的变量,对于 "vijfminuten" 和 "vijfminuten1" 也是如此:它们给出了 "Five-minutes" 输出。

在草图中我也使用了年、月、月中的一天和工作日,在这个特别的草图中我不需要它们,但也许以后,我可以添加一个日历。

在 Fritzing(c) 布局中,IC 没有接线:我这样做是为了方便,因为它有很多输出。

让我们总结一下:

引脚 4 和 9 连接到 GND,

19是VCC

18,ISet,通过一个电阻连接到 VCC:这个电阻限制了流向输出的电流。首先,我尝试使用 20K 电阻器,但 10 分钟左右后,一切都变黑了……现在,使用 68K 电阻器,时钟仍在运行(超过 24 小时后)。但是红色和黄色的亮度存在差异,我认为这是由于红色实际上是RGB Led。我必须解决这个问题...

引脚 1 是 DataIn,这个来自 Arduino,引脚 12

引脚 12 是负载,来自 Arduino 引脚 10

引脚 13 是 Clk,来自 Arduino 11。

7219的输入到此为止。

看看输出:

7219 有可能为 8 个 7seg 显示器供电。

这些输出,DIG 0 到 DIG 4 在这里用于驱动 LED 的“线”:由于“五分钟”线中有 11 个 LED,我使用 DIG 1 和 DIG 2 来驱动它们。

其他输出:A 到 G 段和 DP(正常 7Seg 显示)。

在这种情况下(使用 LedControl),我将二进制字发送给他们(字节格式,如 B01010100)。

在那里我犯了一个错误。一些逻辑告诉我 SEG A 将是 MSB,B 是第二个最高有效位,依此类推,直到 DP,我认为这将是最低有效位 (LSB)。错误...出于某种原因,IC 制造商认为 DP 将是 MSB。看不出逻辑...

这让我改变了我的编码,因为我已经焊接了 LED ......

第 3 步:LED

在这个原理图上,您可以看到 LED 是如何连接在一起的。我只画了前三个,其他的都是一样的。

秒 LED 直接连接到引脚 13。

图为“它是如何工作的”。现在是 17 点 47 分...

好吧,底行不是很清楚,它在面包板上。我希望你相信我它真的有效。 (确实如此!)。

哦,还有一步……

第 4 步:步骤“最后”,代码。

#include  #include const int DS1307 =0x68;// A5 =SCL, A4 =SDA const char* days[] ={"Sunday", "Monday" , "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};const char*months[] ={"January", "February", "March", "April", "May", “六月”、“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月”};字节秒=0;字节分钟 =0;字节小时 =0;字节工作日=0;字节月日 =0;字节月 =0;字节年 =0;字节最后一分钟 =0;字节 lastSecond =0;国际LED =13;字节空 =B0000000;字节 een =B01000000;字节 twee =B01100000;字节干 =B01110000;字节 vier =B01111000;字节 vijf =B01111100;字节 zes =B01111110;字节 zeven =B01111111;字节 acht =B11111111;字节负数 =B01000000; byte tien =B01100000;byte elf =B01110000; int a=0; int b =0; int c =0; int vijfMinTwee=0;int uitgang =低; /*pin 12连接到DataIn pin 11连接到CLK pin 10连接到LOAD */LedControl lc=LedControl(12, 11, 10, 1);unsigned long delaytime=100; void setup() { Wire.begin(); Serial.begin(9600);pinMode (Led, OUTPUT);lc.shutdown(0, false); /* 将亮度设置为中等值 */ lc.setIntensity(0, 8); /* 并清除显示 */ lc.clearDisplay(0);}void loop() { readTime(); digitalWrite(Led, uitgang); if (second !=lastSecond){ if (uitgang ==LOW) uitgang =HIGH;否则 uitgang =低; digitalWrite (Led, uitgang); lastSecond =秒; } if (minute !=lastMinute) { printTime(); lastMinute =minute;}}byte bcdToDec(byte val) {return ((val/16*10) + (val%16));}void printTime() { char buffer[3];long minuten =minute;long uren =小时;int vijfmin =分钟/5; int eenminuut =分钟 -(vijfmin * 5);int vijfuren =uren/5; int eenuren =uren - (vijfuren *5); a =vijfmin;数字(); vijfmin =b; vijfMinTwee =c;a =eenminuut;digitaal(); eminuut =b; a =维杰富伦; digitalaal();vijfuren =b;a =eenuren;数字();eenuren =b; lc.setRow(0, 4, vijfuren);lc.setRow(0, 3, eenuren); lc.setRow(0, 1, vijfmin);lc.setRow(0, 2, vijfMinTwee); lc.setRow(0, 0, eenminuut);}void readTime() { Wire.beginTransmission(DS1307); Wire.write(byte(0)); Wire.endTransmission();Wire.requestFrom(DS1307, 7); second =bcdToDec(Wire.read());minute =bcdToDec(Wire.read());hour =bcdToDec(Wire.read());工作日 =bcdToDec(Wire.read()); monthday =bcdToDec(Wire.read());month =bcdToDec(Wire.read());年 =bcdToDec(Wire.read()); }void digitalaal(){switch (a){ case 0:b=nul; c=空;休息;情况 1:b =een; c=空;休息;情况 2:b =twee; c=空;休息;情况 3:b =干燥; c=空;休息;情况 4:b =vier; c=空;中断;案例 5:b =vijf; c=空;休息;情况 6:b =zes; c=空;休息;情况 7:b =zeven; c=空;休息;情况 8:b =acht; c=空;休息;案例 9:b =acht; c =负;休息;情况 10:b=acht; c =田;休息;情况 11:b=acht; c =小精灵;休息; } } 

我相信很简单。

此草图的另一个好处:现在您将学习如何用荷兰语进行计数...从 0 到 11...;-)

希望你喜欢这个!

马克

代码

Github
https://github.com/wayoda/LedControlhttps://github.com/wayoda/LedControl

制造工艺

  1. 时间常数方程
  2. 布谷鸟钟
  3. 沙漏
  4. 观看
  5. Python 睡眠()
  6. Rpibot – 关于学习机器人
  7. Arduino pov 视觉时钟
  8. Verilog 模拟
  9. Verilog 时钟发生器
  10. Python - 日期和时间
  11. 简单字时钟(Arduino)
  12. 无限镜时钟