Geanimeerde RGB Wandklok – Arduino Nano & Bluetooth Gestuurd Tijdstuk
Onderdelen en benodigdheden
| Onderdeel | Aantal | Opmerking |
|---|---|---|
| Arduino Nano R3 | 1 | |
| HC-06 Bluetooth-module | 1 | |
| Maxim Integrated DS3231MPMB1 Peripheral Module | 1 | |
| RGB LED-strip | 1 | |
| 3D-printbare onderdelen | 1 |
Benodigde tools en machines
- Soldeerbout (generiek)
- 3D-printer (generiek)
Over dit project

Als je je herinnert, presenteerden we eerdere klokontwerpen als de INFINITY MIRROR CLOCK en de 7-SEGMENT DIGITAL CLOCK. Nu zijn we terug met een ander, speciaal en heel mooi tijdstuk.
Geen twijfel, je zult deze wandklok liefhebben. Voor dit project gebruikten we opnieuw een RGB-led. En een 3D-printer is natuurlijk heel belangrijk! We hebben enkele van de benodigde onderdelen voor onze WANDKLOK ontworpen en geproduceerd. En het is niet alleen een klok, het bevat ook verschillende ANIMATIES. Je kunt de klok ook als animatie gebruiken als je wilt.
Hoe bedien je deze klok en animaties, vraag je je af? Geen zorgen. We hebben het in een heel simpele applicatie voor je ontwikkeld. Je kunt de link downloaden.
Arduino is onmisbaar. We gebruikten de Arduino Nano om ruimte te besparen. Ons RGB WANDKLOK-project, met een kleine elektronische schakeling, zal je niet teleurstellen. We willen je niet langer op het spantouw houden, dus we nodigen je uit om onze video hieronder te bekijken!






Code
Arduino Nano-code
#include <DS3231.h>
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
#define PIN 6
#define PIN2 7
#define NUMPIXELS 60
DS3231 rtc(SDA, SCL);
Time t;
int hr;
int mnt;
int sc;
char data;
char color_select;
int h_red_deger=255;
int h_green_deger=0;
int h_blue_deger=0;
int m_red_deger=0;
int m_green_deger=255;
int m_blue_deger=0;
int s_red_deger=255;
int s_green_deger=255;
int s_blue_deger=0;
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel pixels2 = Adafruit_NeoPixel(12, PIN2, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel strip = Adafruit_NeoPixel(60, PIN, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel strip2 = Adafruit_NeoPixel(12, PIN2, NEO_GRB + NEO_KHZ800);
int delayval = 10;
void setup() {
Serial.begin(9600);
rtc.begin();
#if defined (__AVR_ATtiny85__)
if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
#endif
pixels.begin();
pixels2.begin();
strip.begin();
strip.show();
strip2.begin();
strip2.show();
}
void loop() {
while(Serial.available() > 0) {
delay(10);
char c = Serial.read();
data=c;
if(data=='m') {
data=' ';
t = rtc.getTime();
hr=t.hour;
mnt=t.min;
sc=t.sec;
while(data!='m') {
data=Serial.read();
if(data=='+') { hr++; }
if(data=='-') { hr--; }
for(int i=0;i<12;i++){pixels2.setPixelColor(i, pixels2.Color(0,255,10));}
pixels2.show();
if(hr>=12){hr=hr-12;}
if(hr<0){hr=hr+12;}
pixels2.setPixelColor(hr, pixels2.Color(255,0,0));
pixels2.show();
delay(100);
pixels2.setPixelColor(hr, pixels2.Color(0,0,0));
pixels2.show();
delay(100);
}
rtc.setTime(hr,mnt,sc);
if(data=='m') {
data=' ';
t = rtc.getTime();
hr=t.hour;
mnt=t.min;
sc=t.sec;
while(data!='m') {
data=Serial.read();
if(data=='+') { mnt++; if(mnt==60) {mnt=0;} }
if(data=='-') { if(mnt==0) {mnt=60;} mnt--; }
for(int k=0;k<60;k++){pixels.setPixelColor(k, pixels.Color(0,0,0));}
for(int k=0;k<60;k++){pixels.setPixelColor(k, pixels.Color(25,25,255));k=k+4;}
pixels.setPixelColor(mnt, pixels.Color(0,250,0));
pixels.show();
delay(100);
pixels.setPixelColor(mnt, pixels.Color(0,0,0));
pixels.show();
delay(100);
}
}
rtc.setTime(hr,mnt,sc);
data=' ';
}
if(data=='H') { color_select=data; }
if(data=='M') { color_select=data; }
if(data=='S') { color_select=data; }
if(data=='A') {
data=' ';
colorWipe(strip.Color(255, 0, 0), 50); // Rood
colorWipe(strip.Color(0, 255, 0), 50); // Groen
colorWipe(strip.Color(0, 0, 255), 50); // Blauw
//colorWipe(strip.Color(0, 0, 0, 255), 50); // Wit RGBW
theaterChase(strip.Color(127, 127, 127), 50); // Wit
theaterChase(strip.Color(127, 0, 0), 50); // Rood
theaterChase(strip.Color(0, 0, 127), 50); // Blauw
rainbow(20);
rainbowCycle(20);
theaterChaseRainbow(50);
}
if(data=='r' && color_select=='H') {
h_red_deger=Serial.parseInt();
pixels2.setPixelColor(hr, pixels2.Color(h_red_deger,h_green_deger, h_blue_deger));
pixels2.show();
}
if(data=='g' && color_select=='H') {
h_green_deger=Serial.parseInt();
pixels2.setPixelColor(hr, pixels2.Color(h_red_deger,h_green_deger, h_blue_deger));
pixels2.show();
}
if(data=='b' && color_select=='H') {
h_blue_deger=Serial.parseInt();
pixels2.setPixelColor(hr, pixels2.Color(h_red_deger,h_green_deger, h_blue_deger));
pixels2.show();
}
if(data=='r' && color_select=='M') {
m_red_deger=Serial.parseInt();
pixels.setPixelColor(mnt, pixels.Color(m_red_deger,m_green_deger,m_blue_deger));
pixels.show();
}
if(data=='g' && color_select=='M') {
m_green_deger=Serial.parseInt();
pixels.setPixelColor(mnt, pixels.Color(m_red_deger,m_green_deger,m_blue_deger));
pixels.show();
}
if(data=='b' && color_select=='M') {
m_blue_deger=Serial.parseInt();
pixels.setPixelColor(mnt, pixels.Color(m_red_deger,m_green_deger,m_blue_deger));
pixels.show();
}
if(data=='r' && color_select=='S') {
s_red_deger=Serial.parseInt();
pixels.setPixelColor(sc, pixels.Color(s_red_deger,s_green_deger,s_blue_deger));
pixels.show();
}
if(data=='g' && color_select=='S') {
s_green_deger=Serial.parseInt();
pixels.setPixelColor(sc, pixels.Color(s_red_deger,s_green_deger,s_blue_deger));
pixels.show();
}
if(data=='b' && color_select=='S') {
s_blue_deger=Serial.parseInt();
pixels.setPixelColor(sc, pixels.Color(s_red_deger,s_green_deger,s_blue_deger));
pixels.show();
}
}
t = rtc.getTime();
hr=t.hour;
mnt=t.min;
sc=t.sec;
pixels.setPixelColor(sc, pixels.Color(s_red_deger,s_green_deger,s_blue_deger));
pixels.setPixelColor(mnt, pixels.Color(m_red_deger,m_green_deger,m_blue_deger));
pixels.show();
for(int i=0;i<12;i++){
if(i==hr) {i++;}
pixels2.setPixelColor(i, pixels2.Color(0,255,0));
}
pixels2.show();
if(hr>=12){hr=hr-12;}
pixels2.setPixelColor(hr, pixels2.Color(h_red_deger,h_green_deger,h_blue_deger));
pixels2.show();
delay(10);
pixels.setPixelColor(sc, pixels.Color(0,0,0));
for(int k=0;k<60;k++){pixels.setPixelColor(k, pixels.Color(0,0,0));}
for(int k=0;k<60;k++){pixels.setPixelColor(k, pixels.Color(25,25,255));k=k+4;}
pixels.setPixelColor(mnt, pixels.Color(0,0,0));
pixels.show();
}
void colorWipe(uint32_t c, uint8_t wait) {
for(uint16_t i=0; i
Schema's

Besturing via je telefoon
clockconnect__Ieit1qA91l.apk
Productieproces
- Koekeklok: geschiedenis, vakmanschap en moderne evolutie
- Arduino POV-klok: Bouw een Persistence-of-Vision LED-display
- Een stijlvolle wandklok bouwen met Adafruit 60-LED Neopixel Ring & Arduino
- DIY Arduino Woordklok – Bouw een Elegant Real-Time Display
- Bouw een Aangepaste LED Hoofdklok met Alarm – Zichtbaar vanaf 12 Meter
- 3D RGB Arduclock – Bluetooth LED Tijdstuk met Real-Time Clock
- Bouw een Italiaanse Woordklok met Arduino Nano, NeoPixel, LCD en RTC
- JX Wave Generator – Arduino-compatibele DDS-oscillator met OLED-display
- Bouw een Berlijnse Klok met Arduino UNO – DIY LED-matrix klok
- Bouw een Precieze 7-Segment Klok met Arduino Pro Mini & DS1302 RTC
- Oneindige Spiegel Klok: Oneindige Elegantie Trefst Nauwkeurige Tijd