Paso 2: Esquemas y programación...
Usted puede construir este proyecto de varias maneras según esquemas.
Puede utilizar un protoboard, pero también puede pegar todas las piezas (juntas) detrás del anillo del led y su cara en un sandwich como moda separado por doble cinta adhesiva de cara (fotos de esto vendrá por aquí pronto). Uno puede también construir su propio impreso para albergar todas las piezas.
He decidido utilizar un usb integrado arduino nano por la facilidad de proporcionar energía a la unidad. Una versión más pequeña y más compacta podría construirse usando un convertidor de USB a TTL como éste debajo de ebay, pero tendría que encontrar una manera alternativa para proporcionar energía (5Volts) porque después de programar el arduino, el convertidor TTL tiene que ir:
- Pro USB 2.0 convertidor de CH340G TTL 6Pin + Mini módulo Atmega328 5v 16M F Arduino
Archivo de programación contiene anotaciones para su comprensión.
Hay varias bibliotecas para DS3231 por ahí, así que estoy ofreciendo aquí que utilizo. También nota que usted puede encontrar una versión de DHT11 ya incluye R1 (generalmente se sienta en un pequeño tablero y no es un componente crudo). En este caso omitir R1.
Así puede reunir todas las piezas como se indica y programa tu arduino con el ordenador. Si usted decide utilizar el módulo mini sin puerto usb, luego puede Desconecte y quite el adaptador TTL. Esto le ahorra espacio y energía.
Código:
< p > #include //I2C comunicación biblioteca < br > #include "ds3231.h" //Real reloj biblioteca #include //Fast llevó la biblioteca #include //DHT humedad-temperatura sensor < /p >< p > #define LED_PIN 5 //Control pin para LEDs #define COLOR_ORDER GRB //Define color protocolo #define CHIPSET WS2811 //Chipset para WS2811 #define NUM_LEDS 12 //Declare número de leds #define brillo 35 //Declare llevó brillo < /p >< p > dht DHT; Inicializar el pin de //Data #define DHT11_PIN 2 DHT para DHT < /p >< p > CRGB leds [NUM_LEDS]; Número de conocimientos de leds sistema < /p >< p > ora bytes; Hora variable byte mindec; Diez minutos variable byte minmon; Unidad minutos bytes variable segundos = 0; Counter1 de variable int segundos; Variable contador para datos idex int = 0; Variable para arco iris índice int ihue = 0; Variable para la temperatura de flotador de color arco iris; Temperatura humedad int variable; Variable de humedad < /p >< p > void setup() {FastLED.addLeds (leds, NUM_LEDS); FastLED.setBrightness (brillo); Serial.Begin(9600); Inicializar el puerto serie Wire.begin(); Inicializar la biblioteca de comunicación I2C DS3231_init(0x00); Inicializar el reloj en tiempo Real para salida de onda cuadrada de 1 Hz pinMode (8, entrada); Pin set para botón hora/fecha para entrada digitalWrite (8, alto); Activar resistencias de pullup pinMode (9, entrada); Pin set para fecha/hora ajuste botón introducir digitalWrite (9, alto); Encienda resistencias de pullup //Initialize sistema con un arco iris para (int i = 0; i < 12; i ++) {rainbow();} para (int j = 0; j < 12; j ++) {LED [j] = CRGB::Black; FastLED.delay(100);} } < /p >< p > void loop() {if((DS3231_get_addr(0x0E) & 0 x 20) == 0){DS3231_init(0x20);} temperatura de sensor de temperatura //Init = DS3231_get_treg(); //Get temperatura de RTC estructura ts t; //Structure para recuperar y almacenar datos de tiempo de RTC DS3231_get(&t), //Get momento de t estructura int chk = DHT.read11(DHT11_PIN); //Obtain variable de humedad de humedad de línea de datos = DHT.humidity; //Get humedad y tienda a mindec variable = 0; //Initialize variable para diez minutos minmon = 0; //Initialize variable de minutos unidad < /p >< p > FastLED.clear(); Claro todos Mostrar tiempo real //Displaying si (t.hour > = 12) {LED [t.hour-12] = CRGB::Blue; ora=t.hour-12;} else {leds[t.hour]= CRGB::Blue; ora=t.hour;} si (t.min < 10 & & t.min!=0) {leds[t.min]=CRGB::Yellow;minmon=(t.min);} otro {mindec=int((t.min/10)*2); minmon=(t.min-((mindec/2)*10)); si (mindec == minmon & & minmon! = 0) {LED [mindec] = CRGB::Orange;} otro {leds [mindec] = CRGB :: Rojo, leds [minmon] = CRGB::Yellow; Si (minmon == 0) {LED [minmon] = CRGB::Black;}} } //Correcting superposición de colores/indicaciones si (ora == minmon) {leds [ora] = CRGB::Green;} si (ora == mindec) {leds [ora] = CRGB::Purple;} si (ora == minmon & & ora == mindec) {leds [ora] = CRGB::White;} //Toggle segundos segundos efecto si (segundos == 0) {.nscale8 leds[int(t.sec/5)]=CRGB::DimGrey;leds[int(t.sec/5)] (64); segundos ++;} persona {segundos--;} FastLED.show(); Delay(800); counter1 ++; Aumentar el contador para la visualización de temp/hum si (counter1 > 70) {//Time hasta la pantalla de temperatura y humedad counter1 = 0; //Initialize contador siguiente datos Mostrar //Display temperatura si (temperatura < = 0) {para (int j = NUM_LEDS; j > = 0; j--) {LED [j] = CRGB::White; leds[j].nscale8(64); delay(20);}} Bajo cero tempratures aparecen en fondo blanco más {para (int j = NUM_LEDS; j > = 0; j--) {leds [j] = CRGB::Green; leds[j].nscale8(64);delay(20);}} si (temperatura < 10) {leds[int(temperature)] = CRGB::Yellow;} otro {mindec=int((temperature/10)); minmon=(temperature-(mindec*10)); si (mindec == minmon) {LED [mindec] = CRGB::Orange;} otro {leds [mindec] = CRGB::Red; leds [minmon] = CRGB::Yellow;}} FastLED.show(); Mostrar temperatura en fondo verde para delay(4000) 4 segs; Humedad para la exhibición (int j = NUM_LEDS; j > = 0; j--) {leds [j] = CRGB::Teal; leds[j].nscale8(48);delay(20);} si (humedad < 10) {leds[int(humidity)] = CRGB::Yellow;} más {mindec=int((humidity/10)); minmon=(humidity-(mindec*10)); si (mindec == minmon) {leds [mindec] = CRGB::Orange;} otro {leds [mindec] = CRGB::Red; leds [minmon] = CRGB::Yellow;}} FastLED.show(); Mostrar humedad en fondo verde azulado para delay(4000) 4 seg; Llamada de efecto de arco iris para (int i = 0; i < 12; i ++) {rainbow();} para (int j = 0; j < 12; j ++) {LED [j] = CRGB::Black; FastLED.delay(100);} } / / Tiempo con botones < /p >< p > if(!digitalRead(8) & & digitalRead(9)) {//Increment hora si mantiene el pulsador dowm delay(100); //100ms de retardo para evitar accidental botón disparo t.hour = t.hour + 1; //Increment la hora si (t.hour > 23){t.hour=0;} Wire.beginTransmission(DS3231_I2C_ADDR); Wire.Write(2); Wire.Write((t.hour/10*16)+(t.hour%10)); Wire.endTransmission(); } < /p >< p > Si ()! digitalRead(9) & & digitalRead(8)) {//Increment minutos si mantiene el botón de abajo delay(100); //100ms de retardo para evitar accidental botón disparo t.min t.min = 1; //Increment minutos si (t.min > 59){t.min=0;} Wire.beginTransmission(DS3231_I2C_ADDR); Wire.Write(1); Wire.Write((t.min/10*16)+(t.min%10)); Wire.endTransmission(); } < /p >< p > if(!digitalRead(9) & &! digitalRead(8)) {//Reset segundos si ambos botones pulsado delay(100); //100ms retraso para evitar accidental botón disparo t.sec = 0; //Reset segundos Wire.beginTransmission(DS3231_I2C_ADDR); Wire.Write(0); Wire.Write((t.sec/10*16)+(t.sec%10)); Wire.endTransmission(); } < /p >< p >} < /p >< p > rainbow() void //Rainbow función {idex ++; ihue = ihue + 22; si (idex > = NUM_LEDS) {idex = 0;} si (ihue > = 255) {ihue = 0;} leds[idex]=CHSV(ihue,255,255); FastLED.show(); FastLED.delay(100); } < /p >