Étape 2: Schémas et programmation...
Vous pouvez générer ce projet de plusieurs façons selon les schémas.
Une maquette peut être utilisé, mais vous pouvez également coller toutes les pièces (chambres) derrière la bague de conduit et son visage dans un "sandwich" comme mode séparé par double côté adhésif (photos de cette viendra ici bientôt). On peut aussi construire son propre circuit imprimé pour héberger toutes les pièces.
J’ai choisi d’utiliser un usb embarqué arduino nano pour faciliter la tâche de fournir la puissance à l’unité. Une version plus petite et plus compacte pourrait être construite à l’aide d’un convertisseur USB vers TTL comme celle ci-dessous d’ebay, mais vous devra trouver un autre moyen de fournir la puissance (5Volts) parce qu’après la programmation de l’arduino, le convertisseur TTL doit aller :
- Pro USB 2.0 pour TTL 6Pin CH340G convertisseur + Mini Module Atmega328 5v 16M F Arduino
Fichier de programmation contient des annotations pour votre compréhension.
Il y a plusieurs bibliothèques pour DS3231 là-bas, afin que je fournis ici celui que j’utilise. Aussi note que vous pouvez trouver une version de DHT11 qui déjà comprend R1 (habituellement est assis sur un petit bord et ne sont pas un composant brut). Dans ce cas, omettez R1.
Donc, vous réunir toutes les pièces comme indiqué et programmer votre arduino avec votre ordinateur. Si vous décidez d’utiliser le module mini sans port usb, vous pouvez ensuite débrancher et retirer l’adaptateur TTL. Ce faisant vous permet d’économiser espace et l’alimentation.
Code réel :
< p > #include //I2C communication bibliothèque < br > #include « ds3231.h » //Real horloge bibliothèque #include //Fast conduit bibliothèque #include //DHT humidité-température capteur < /p >< p > #define LED_PIN 5 //Control broche pour LEDs #define COLOR_ORDER GRB //Define couleur protocole #define WS2811 CHIPSET //Chipset pour WS2811 #define NUM_LEDS 12 //Declare nombre de //Declare #define luminosité 35 leds led luminosité < /p >< p > dht DHT ; Initialiser la goupille de DHT #define DHT11_PIN 2 //Data pour DHT < /p >< p > CRGB leds [NUM_LEDS] ; Reconnaissions nombre de LED à système < /p >< p > ora octets ; Heures variables byte mindec ; Dix minutes octets variable minmon ; Unité minutes octets variable secondes = 0 ; Secondes variable int counter1 ; Variable de compteur pour données montrent idex int = 0 ; Variable pour arc-en-ciel indice int ihue = 0 ; Variable pour température de flotteur de teinte arc-en-ciel ; Température humidité int variable ; Variable d’humidité < /p >< p > void setup() {FastLED.addLeds (leds, NUM_LEDS) ; FastLED.setBrightness (luminosité) ; Serial.Begin(9600) ; Initialiser le port série Wire.begin() ; Initialiser la bibliothèque de communication I2C DS3231_init(0x00) ; Initialiser l’horloge en temps réel pour 1 Hz onde carrée sortie pinMode (8 entrées) ; Mettre la broche pour la touche mode heure/date d’entrée digitalWrite (8, hauts) ; Allumez pullup résistances pinMode (9, entrée) ; Mettre broche pour heure/date set bouton entrer digitalWrite (9, HIGH) ; Allumez pullup résistances //Initialize système avec un arc en ciel pour (int i = 0; j’ai < 12; i ++) {rainbow();} pour (int j = 0; j < 12; j ++) {leds [j] = CRGB::Black ; FastLED.delay(100);} } < /p >< p > void loop() {if((DS3231_get_addr(0x0E) & 0 x 20) == 0){DS3231_init(0x20);} //Init température capteur = DS3231_get_treg() ; //Get température de CCF struct ts t; //Structure pour la récupération et le stockage des données de temps de CCF DS3231_get(&t) //Get temps de t structure int chk = DHT.read11(DHT11_PIN) ; //Obtain variable d’humidité humidité ligne données = DHT.humidity ; //Get humidité et magasin à la variable mindec = 0; //Initialize variable pour dix minutes minmon = 0; //Initialize variable pour minutes unité < /p >< p > FastLED.clear() ; Claire tout afficher //Displaying temps réel si (t.hour > = 12) {leds [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);} autre {mindec=int((t.min/10)*2) ; minmon=(t.min-((mindec/2)*10)) ; si (mindec == minmon & & minmon! = 0) {leds [mindec] = CRGB::Orange;} d’autre {leds [mindec] = CRGB :: Red ; LED [minmon] = CRGB::Yellow ; Si (minmon == 0) {leds [minmon] = CRGB::Black;}} } //Correcting chevauchement des couleurs/indications si (ora == minmon) {leds [ora] = CRGB::Green;} si (ora == mindec) {leds [ora] = CRGB::Purple;} si (ora == minmon & & ora == mindec) {leds [ora] = CRGB::White;} //Toggle secondes pour être secondes effet si (secondes == 0) {leds[int(t.sec/5)]=CRGB::DimGrey;leds[int(t.sec/5)] .nscale8 (64); secondes ++;} else {secondes--;} FastLED.show() ; Delay(800) ; counter1 ++ ; Augmenter le compteur d’affichage temp/hum si (counter1 > 70) {//Time jusqu'à affichage température et l’humidité counter1 = 0; //Initialize contre pour les prochaines données Voir la //Display température si (température < = 0) {pour (int j = NUM_LEDS; j > = 0; j--) {leds [j] = CRGB::White ; leds[j].nscale8(64) ; delay(20);}} Subzero températures apparaissent dans le fond blanc d’autre {pour (int j = NUM_LEDS; j > = 0; j--) {leds [j] = CRGB::Green ; leds[j].nscale8(64);delay(20);}} si (température < 10) {leds[int(temperature)] = CRGB::Yellow;} else {mindec=int((temperature/10)) ; minmon=(temperature-(mindec*10)) ; si (mindec == minmon) {leds [mindec] = CRGB::Orange;} d’autre {leds [mindec] = CRGB::Red ; leds [minmon] = CRGB::Yellow;}} FastLED.show() ; Afficher la température à fond vert pour 4 secondes delay(4000) ; Affichage d’humidité pour (int j = NUM_LEDS; j > = 0; j--) {leds [j] = CRGB::Teal ; leds[j].nscale8(48);delay(20);} si (humidité < 10) {leds[int(humidity)] = CRGB::Yellow;} else {mindec=int((humidity/10)) ; minmon=(humidity-(mindec*10)) ; si (mindec == minmon) {leds [mindec] = CRGB::Orange;} d’autre {leds [mindec] = CRGB::Red ; LED [minmon] = CRGB::Yellow;}} FastLED.show() ; Montrer l’humidité en arrière-plan de la Sarcelle pour 4 s delay(4000) ; Appel effet arc-en-ciel pour (int i = 0; j’ai < 12; i ++) {rainbow();} pour (int j = 0; j < 12; j ++) {leds [j] = CRGB::Black ; FastLED.delay(100);} } / / Heure réglée avec les touches < /p >< p > if(!digitalRead(8) & & digitalRead(9)) {//Increment heure si bouton maintenu dowm delay(100) ; //100ms retard pour éviter accidentel bouton déclenchement t.hour = t.hour + 1; //Increment l’heure 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 minutes si la touche enfoncée delay(100) ; //100ms retard pour éviter accidentel bouton déclenchement t.min = t.min + 1; //Increment minutes 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() ; } if(!digitalRead(9) < /p >< p > & &! digitalRead(8)) {//Reset secondes si les deux touches enfoncées de delay(100) ; //100ms retard pour éviter accidentel bouton déclenchement t.sec = 0; //Reset secondes Wire.beginTransmission(DS3231_I2C_ADDR) ; Wire.Write(0) ; Wire.Write((t.sec/10*16)+(t.sec%10)) ; Wire.endTransmission() ; } < /p >< p >} < /p >< p > rainbow() Sub //Rainbow fonction {idex ++; ihue = ihue + 22 ; if (idex > = NUM_LEDS) {idex = 0;} si (ihue > = 255) {ihue = 0;} leds[idex]=CHSV(ihue,255,255) ; FastLED.show() ; FastLED.delay(100) ; } < /p >