Oneindige Spiegel Klok: Oneindige Elegantie Trefst Nauwkeurige Tijd
Onderdelen en Benodigdheden
| Real Time Clock (RTC) | 1 |
| Arduino Nano R3 | 1 |
| Weerstand 10k ohm | 3 |
Over Dit Project
We hebben een prachtig ontwerp dat je zowel voor jezelf kunt maken als als cadeau: de Oneindige Spiegel Klok. Wil je niet dat de spiegel die je bezit een oneindig uiterlijk heeft en tegelijkertijd de tijd aangeeft? We zijn erg blij om dit project met je te delen, gemaakt met RGB LED's die vandaag de dag wijd worden gebruikt. Je kunt leren hoe je een oneindige spiegelklok maakt door de video te bekijken.
Code
Arduino Code
#include <Adafruit_NeoPixel.h>
#include <stdio.h>
#include <DS1302.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
#define PIN 8
#define NUMPIXELS 60
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel strip = Adafruit_NeoPixel(60, PIN, NEO_GRB + NEO_KHZ800);
namespace {
byte ysaat;
byte ydak;
byte saat;
byte dak;
byte sn;
byte kontrol=0;
const int kCePin = 5;
const int kIoPin = 6;
const int kSclkPin = 7;
DS1302 rtc(kCePin, kIoPin, kSclkPin);
}
void printTime() {
Time t = rtc.time();
saat=t.hr;
dak=t.min;
sn=t.sec;
if(saat>=12){saat=saat-12;}
pixels.setPixelColor(5*saat, pixels.Color(25,25,255));
pixels.setPixelColor(dak, pixels.Color(0,200,10));
pixels.setPixelColor(sn, pixels.Color(255,0,0));
pixels.show();
if(sn==0) {
pixels.setPixelColor(dak-1, pixels.Color(0,0,0));
pixels.setPixelColor(dak, pixels.Color(0,200,10));
pixels.show();
for(int i=1;i<60;i++) {
pixels.setPixelColor(i, pixels.Color(0,0,0));
}
}
if(dak==0) {
pixels.setPixelColor(59, pixels.Color(0,0,0));
}
}
void animasyon() {
colorWipe(strip.Color(255, 0, 0), 25);
colorWipe(strip.Color(0, 255, 0), 25);
colorWipe(strip.Color(0, 0, 255), 25);
theaterChase(strip.Color(127, 127, 127), 50);
theaterChase(strip.Color(127, 0, 0), 50);
theaterChase(strip.Color(0, 0, 127), 50);
for(int i=1;i<60;i++) {
pixels.setPixelColor(i, pixels.Color(0,0,0));
}
}
void colorWipe(uint32_t c, uint8_t wait) {
for(uint16_t i=0; i<strip.numPixels(); i++) {
strip.setPixelColor(i, c);
strip.show();
delay(wait);
}
}
void theaterChase(uint32_t c, uint8_t wait) {
for (int j=0; j<10; j++) {
for (int q=0; q < 3; q++) {
for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
strip.setPixelColor(i+q, c);
}
strip.show();
delay(wait);
for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
strip.setPixelColor(i+q, 0);
}
}
}
}
void yenisaat() {
saat=ysaat;
dak=ydak;
Time t(2018, 2, 23, ysaat, ydak, 0, Time::kFriday);
rtc.time(t);
}
int clockSet = 10;
int up = 11;
int down = 12;
void setup() {
Serial.begin(9600);
#if defined (__AVR_ATtiny85__)
if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
#endif
strip.begin();
strip.show();
pixels.begin();
pinMode(clockSet, INPUT);
rtc.writeProtect(false);
rtc.halt(false);
}
void loop() {
if (kontrol==1) {
pixels.setPixelColor(5*ysaat, pixels.Color(25,25,255));
pixels.show();
delay(100);
pixels.setPixelColor(5*ysaat, pixels.Color(0,0,0));
pixels.show();
delay(100);
if (digitalRead(up)==HIGH) {
ysaat++;
while(digitalRead(up)==HIGH);
if(ysaat==12){ysaat=0;}
}
if (digitalRead(down)==HIGH) {
ysaat--;
while(digitalRead(down)==HIGH);
if(ysaat==255){ysaat=11;}
}
pixels.setPixelColor(5*ysaat, pixels.Color(25,25,255));
pixels.show();
delay(100);
pixels.setPixelColor(5*ysaat, pixels.Color(0,0,0));
pixels.show();
delay(100);
yenisaat();
if(digitalRead(clockSet)==HIGH) {
while(digitalRead(clockSet)==HIGH) {
pixels.setPixelColor(kontrol, pixels.Color(255,255,255));
pixels.show();
}
pixels.setPixelColor(kontrol, pixels.Color(0,0,0));
pixels.show();
kontrol++;
ysaat=saat; ydak=dak;
}
}
if (kontrol==2) {
if(digitalRead(clockSet)==HIGH) {
kontrol++;
while(digitalRead(clockSet)==HIGH) { }
ysaat=saat; ydak=dak;
}
if (digitalRead(up)==HIGH) {
ydak++;
while(digitalRead(up)==HIGH);
if(ydak==60){ysaat=0;}
}
if (digitalRead(down)==HIGH) {
ydak--;
while(digitalRead(down)==HIGH);
if(ydak==255){ydak=59;}
}
pixels.setPixelColor(ydak, pixels.Color(0,205,10));
pixels.show();
yenisaat();
delay(100);
pixels.setPixelColor(ydak, pixels.Color(0,0,0));
pixels.show();
delay(100);
}
if (kontrol==3) {
kontrol=0;
yenisaat();
}
while (kontrol==0) {
if(digitalRead(up)==HIGH) {
animasyon();
}
if(digitalRead(clockSet)==HIGH) {
kontrol++;
while(digitalRead(clockSet)==HIGH);
ysaat=saat; ydak=dak;
}
printTime();
}
}
Aangepaste Onderdelen en Behuizingen



Schema's

Productieproces
- Koekeklok: geschiedenis, vakmanschap en moderne evolutie
- De Wetenschap en Vakmanschap van Moderne Spiegels
- Infinity Gears: 41-traps tandwielkast met 346 quintiljoen jaar rotatie
- Arduino POV-klok: Bouw een Persistence-of-Vision LED-display
- DIY Arduino Woordklok – Bouw een Elegant Real-Time Display
- DIY Arduino Koelspiegel-hygrometer: Precieze temperatuur- en vochtigheidsmeting
- DIY Kaleidoscoop Oneindige Spiegel – Bouw een Indrukwekkende LED-lichtdisplay
- Bouw een Aangepaste LED Hoofdklok met Alarm – Zichtbaar vanaf 12 Meter
- Bouw een Italiaanse Woordklok met Arduino Nano, NeoPixel, LCD en RTC
- Bouw een Berlijnse Klok met Arduino UNO – DIY LED-matrix klok
- Verilog Clock Generator: Ontwerp & Implementatie Gids