Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Horloge Murale RGB Animée – Arduino Nano & Contrôle Bluetooth

Composants et fournitures

Composant Quantité
Arduino Nano R3 1
Module Bluetooth HC-06 1
Module RTC Maxim Integrated DS3231MPMB1 1
Bandeau LED RGB 1
Pièces imprimables en 3D 1

Outils et machines nécessaires

À propos de ce projet

Si vous vous souvenez, nous avons présenté nos projets d'horloges comme l'INFINITY MIRROR CLOCK et l'HORLOGE NUMÉRIQUE 7 SEGMENTS dans les sections précédentes. Nous voici de retour avec une pièce temporelle différente, spéciale et très esthétique.

Il n'y a aucun doute que vous allez adorer cette horloge murale. Pour ce projet, nous avons à nouveau utilisé des LED RGB. Et une imprimante 3D est bien sûr essentielle ! Nous avons conçu et produit certaines pièces nécessaires pour notre HORLOGE MURALE. Et ce n'est pas qu'une horloge, elle contient aussi différentes ANIMATIONS. Vous pouvez aussi utiliser l'horloge comme simple animation si vous le souhaitez.

Comment contrôler cette horloge et ces animations, demandez-vous ? Pas d'inquiétude. Nous l'avons développée avec une application très simple pour vous. Vous pouvez la télécharger via le lien.

Arduino est indispensable. Nous avons utilisé un Arduino Nano pour gagner de la place. Notre projet d'HORLOGE MURALE RGB, avec son circuit électronique compact, ne vous décevra pas. Nous ne voulons pas vous faire languir plus longtemps, alors nous vous invitons à regarder notre vidéo ci-dessous !

Horloge Murale RGB Animée – Arduino Nano & Contrôle Bluetooth
Horloge Murale RGB Animée – Arduino Nano & Contrôle Bluetooth
Horloge Murale RGB Animée – Arduino Nano & Contrôle Bluetooth
Horloge Murale RGB Animée – Arduino Nano & Contrôle Bluetooth
Horloge Murale RGB Animée – Arduino Nano & Contrôle Bluetooth
Horloge Murale RGB Animée – Arduino Nano & Contrôle Bluetooth
Horloge Murale RGB Animée – Arduino Nano & Contrôle Bluetooth

Code

Code Arduino Nano

Les codes pour l'heure et les animations sont dans les fichiers :

#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, mnt, sc;
char data;
char color_select;

int h_red_deger = 255, h_green_deger = 0, h_blue_deger = 0;
int m_red_deger = 0, m_green_deger = 255, m_blue_deger = 0;
int s_red_deger = 255, s_green_deger = 255, 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);   // Rouge
            colorWipe(strip.Color(0, 255, 0), 50);   // Vert
            colorWipe(strip.Color(0, 0, 255), 50);   // Bleu
            theaterChase(strip.Color(127, 127, 127), 50); // Blanc
            theaterChase(strip.Color(127, 0, 0), 50);     // Rouge
            theaterChase(strip.Color(0, 0, 127), 50);     // Bleu
            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 < strip.numPixels(); i++) {
        strip.setPixelColor(i, c);
        strip.show();
        strip2.setPixelColor(i, c);
        strip2.show();
        delay(wait);
    }
}

void rainbow(uint8_t wait) {
    uint16_t i, j;
    for (j = 0; j < 256; j++) {
        for (i = 0; i < strip.numPixels(); i++) {
            strip.setPixelColor(i, Wheel((i + j) & 255));
            strip2.setPixelColor(i, Wheel((i + j) & 255));
        }
        strip2.show();
        strip.show();
        delay(wait);
    }
}

void rainbowCycle(uint8_t wait) {
    uint16_t i, j;
    for (j = 0; j < 256 * 5; j++) {
        for (i = 0; i < strip.numPixels(); i++) {
            strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
            strip2.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
        }
        strip.show();
        strip2.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 (int i = 0; i < strip.numPixels(); i = i + 3) {
                strip.setPixelColor(i + q, c);
                strip2.setPixelColor(i + q, c);
            }
            strip2.show();
            strip.show();
            delay(wait);
            for (int i = 0; i < strip.numPixels(); i = i + 3) {
                strip.setPixelColor(i + q, 0);
                strip2.setPixelColor(i + q, 0);
            }
        }
    }
}

void theaterChaseRainbow(uint8_t wait) {
    for (int j = 0; j < 256; j++) {
        for (int q = 0; q < 3; q++) {
            for (int i = 0; i < strip.numPixels(); i = i + 3) {
                strip.setPixelColor(i + q, Wheel((i + j) % 255));
                strip2.setPixelColor(i + q, Wheel((i + j) % 255));
            }
            strip2.show();
            strip.show();
            delay(wait);
            for (int i = 0; i < strip.numPixels(); i = i + 3) {
                strip.setPixelColor(i + q, 0);
                strip2.setPixelColor(i + q, 0);
            }
        }
    }
}

uint32_t Wheel(byte WheelPos) {
    WheelPos = 255 - WheelPos;
    if (WheelPos < 85) {
        return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
    }
    if (WheelPos < 170) {
        WheelPos -= 85;
        return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
    }
    WheelPos -= 170;
    return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}

Schémas

Horloge Murale RGB Animée – Arduino Nano & Contrôle Bluetooth Contrôle par votre téléphone

clockconnect__Ieit1qA91l.apk (application Android de contrôle)

Processus de fabrication

  1. L'Horloge à Coucou : Histoire, Artisanat et Évolution Moderne
  2. Horloge POV Arduino : Construire un affichage LED à persistance rétinienne
  3. Construire une horloge murale design avec anneaux Neopixel 60 LED Adafruit et Arduino
  4. Horloge à Mots DIY Arduino – Afficheur Temps Réel Élégant et Personnalisable
  5. Construire une horloge maître LED personnalisée avec alarme – Visible à 12 mètres
  6. Horloge 3D RGB Arduclock – Montre LED Bluetooth avec horloge temps réel
  7. Horloge à Mots Italienne avec Arduino Nano, NeoPixel, LCD et RTC
  8. JX Wave Generator – Générateur DDS compatible Arduino avec affichage OLED
  9. Horloge Miroir Infini : Élégance Infinie et Précision Temporelle