La lampe-réveil 600W avec enregistreur de température (3 / 9 étapes)

Étape 3: Programmer votre Arduino

Programme de l’Arduino avec ce beau code que j’ai écrits pour ce projet. Je sais que c’est un gâchis, mais il fonctionne très bien et je ne suis pas un programmeur.

 // Hardware Setup<br>#include #include "U8glib.h" #include #include #include #include #include #include U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does not send ACK dht DHT; RTC_DS3231 RTC; #define DHT22_PIN 11 #define SQW_FREQ DS3231_SQW_FREQ_1 
 // Output pins const int ledPin = 13; // pin that the LED is attached to const int L1 = 7; // pins for wakeup lights const int L2 = 9; const int L3 = 10; const int L4 = 6; const int L5 = 8; const int L6 = 3; const int L7 = 2; const int L8 = 4; 
 // Arduino Master setup void setup(void) { pinMode(ledPin, OUTPUT); pinMode(L1, OUTPUT); pinMode(L2, OUTPUT); pinMode(L3, OUTPUT); pinMode(L4, OUTPUT); pinMode(L5, OUTPUT); pinMode(L6, OUTPUT); pinMode(L7, OUTPUT); pinMode(L8, OUTPUT); Wire.begin(); RTC.begin(); 
 // set font for the console window u8g.setFont(u8g_font_7x14); 
 // set upper left position for the string draw procedure u8g.setFontPosTop(); 
 clear_screen(); // clear screen 
 Serial.begin(9600); 
 //------------------------------ // The main loop runs once every 15 seconds. To adjust the timing, there is a parameter called loopdelay. // This device is around 14.5 seconds and is finetuned everyday according to the real time clock. // (see timeatend parameter at the end of the code) if (EEPROM.read(255) == 0) EEPROM.write(255,200); } int short loopdelay = EEPROM.read(255)+14600; //------------------------------ 
 DateTime now; 
 // System Variables (Do Not Touch) short Cbuffer[4]; double Clastmin; short Cclose[12]; short Cinst; short Ccloseavg; short Vtemp[120]; boolean warmup = true; short ntime = 9999; short nstart; short timeatend; short nsunrise = 7*60*4; double sun; short nwakeup; double time_offset; double eps; double eqtime; double decl; double ha; short dotweek; 
 // User Variables (OK to touch) double Longitude = 3; double Latitude = 51; double timezone = 1; //0 when DST in Belgium, 1 when normal short demopause = 200; short nwakeupstart = (6*60+45)*4; 
 // XY Graph Position and Size const byte originX = 2; const byte originY = 45; 
 const byte Hpoints = 124; const byte Vpoints = 45; 
 //Graphics parameters uint8_t line_pos = 0; #define ROW_MAX 4 #define LINE_MAX 17 #define x_MAX 127 #define y_MAX 63 uint8_t screen[ROW_MAX][LINE_MAX]; uint8_t rows, cols; #define LINE_PIXEL_HEIGHT 14 #define pi 3.141592653589793 
 // Function Clear Screen void clear_screen(void) { uint8_t i, j; for( i = 0; i < ROW_MAX; i++ ) for( j = 0; j < LINE_MAX; j++ ) screen[i][j] = 0; } 
 // Draw Routine for the LCD Screen void draw(void) { // Axii u8g.drawHLine(originX, originY, Hpoints+1); u8g.drawVLine(originX, originY-Vpoints-1, Vpoints+1); 
 // Y arrow u8g.drawVLine(originX-1, originY-Vpoints+1, 2); u8g.drawVLine(originX+1, originY-Vpoints+1, 2); u8g.drawPixel(originX-2, originY-Vpoints+2); u8g.drawPixel(originX+2, originY-Vpoints+2); 
 // X arrow u8g.drawHLine(originX+Hpoints-2, originY-1, 2); u8g.drawHLine(originX+Hpoints-2, originY+1, 2); u8g.drawPixel(originX+Hpoints-2,originY-2); u8g.drawPixel(originX+Hpoints-2,originY+2); 
 // Vertical Grid Points for(int i = 20; i <= Hpoints-4; i+=20 ) { for(int j = 3; j <= Vpoints-2; j+=3 ) { u8g.drawPixel(originX+i,originY-j); } } 
 // Horizontal Grid Points for(int j = 9; j <= Vpoints-4; j+=15 ) { for(int i = 4; i <= Hpoints-4; i+=4 ) { u8g.drawPixel(originX+i,originY-j); } } 
 // The trace of the temperature over time for (int i=0; i<120; i++) { Vtemp[(i + 100) % 120] = (EEPROM.read(i)-20)*15/50; //trick by giving Vtemp another times value, thus shifting the graph if (Vtemp[i] > 0 && Vtemp[i] <= Vpoints) { u8g.drawPixel(originX+i,originY-Vtemp[i]); } } 
 // Print current time 
 if (ntime/240 < 10) { u8g.setPrintPos(originX, 63-LINE_PIXEL_HEIGHT); u8g.print(0); u8g.setPrintPos(originX+7, 63-LINE_PIXEL_HEIGHT); u8g.print(ntime/240); } else { u8g.setPrintPos(originX, 63-LINE_PIXEL_HEIGHT); u8g.print(ntime/240); } u8g.setPrintPos(originX+14, 63-LINE_PIXEL_HEIGHT); u8g.print(":"); 
 if ((ntime % 240)/4 < 10) { u8g.setPrintPos(originX+21, 63-LINE_PIXEL_HEIGHT); u8g.print(0); u8g.setPrintPos(originX+28, 63-LINE_PIXEL_HEIGHT); u8g.print((ntime % 240)/4); } else { u8g.setPrintPos(originX+21, 63-LINE_PIXEL_HEIGHT); u8g.print((ntime % 240)/4); } 
 // Print daylight time u8g.setPrintPos(originX+44, 63-LINE_PIXEL_HEIGHT); u8g.print("*"); //Print hour u8g.setPrintPos(originX+51, 63-LINE_PIXEL_HEIGHT); u8g.print(nsunrise/240); //Print the : u8g.setPrintPos(originX+58, 63-LINE_PIXEL_HEIGHT); u8g.print(":"); 
 if ((nsunrise % 240)/4 < 10) { u8g.setPrintPos(originX+65, 63-LINE_PIXEL_HEIGHT); u8g.print(0); u8g.setPrintPos(originX+72, 63-LINE_PIXEL_HEIGHT); u8g.print((nsunrise % 240)/4); } else { u8g.setPrintPos(originX+65, 63-LINE_PIXEL_HEIGHT); u8g.print((nsunrise % 240)/4); } 
 //Print the temperature for last minute u8g.setPrintPos(originX+87, 63-LINE_PIXEL_HEIGHT); u8g.print((Clastmin+100)/10, 1); u8g.setPrintPos(originX+116, 63-LINE_PIXEL_HEIGHT); u8g.print("\xb0"); 
 // Time cursor at top int plottime = ntime + 24 + 5760; int cursorpos = (((plottime)*120/5760) + 100) % 120; u8g.drawPixel(originX+cursorpos,1); u8g.drawHLine(originX+cursorpos-1,0,3); 
 } 
 // Arduino Main Loop (runs once every 15 seconds) void loop(void) { //Processing starts, light LED digitalWrite(ledPin,HIGH); 
 // get the time from RTC clock now = RTC.now(); 
 //Device has just been powered on: if (ntime == 9999) { 
 //Set relays digitalWrite(L8,HIGH); digitalWrite(L7,HIGH); digitalWrite(L6,HIGH); digitalWrite(L5,HIGH); digitalWrite(L4,HIGH); digitalWrite(L3,HIGH); digitalWrite(L2,HIGH); digitalWrite(L1,HIGH); delay(demopause); digitalWrite(L1,LOW); delay(demopause); digitalWrite(L2,LOW); delay(demopause); digitalWrite(L3,LOW); delay(demopause); digitalWrite(L4,LOW); delay(demopause); digitalWrite(L5,LOW); delay(demopause); digitalWrite(L6,LOW); delay(demopause); digitalWrite(L7,LOW); delay(demopause); digitalWrite(L8,LOW); delay(demopause*5); digitalWrite(L8,HIGH); delay(demopause); digitalWrite(L7,HIGH); delay(demopause); digitalWrite(L6,HIGH); delay(demopause); digitalWrite(L5,HIGH); delay(demopause); digitalWrite(L4,HIGH); delay(demopause); digitalWrite(L3,HIGH); delay(demopause); digitalWrite(L2,HIGH); delay(demopause); digitalWrite(L1,HIGH); 
 // Calculate Sunrise, once a day and on startup if (ntime == 1320 || ntime == 9999) { // calculate sunrise and day of the week here 
 eps=2*pi/365*(((now.month()-1)*30.3 + now.day() + 0.5)-1); eqtime=229.18*(0.000075+0.001868*cos(eps)-0.032077*sin(eps)-0.014615*cos(2*eps)-0.040849*sin(2*eps)); decl=0.006918-0.399912*cos(eps)+0.070257*sin(eps)-0.006758*cos(2*eps)+0.000907*sin(2*eps)-0.002697*cos(3*eps)+0.00148*sin(3*eps); 
 time_offset=eqtime-4*Longitude+60*timezone; ha = acos((cos(90.833/180*pi)/(cos(Latitude/180*pi)*cos(decl)))-tan(Latitude/180*pi)*tan(decl)); nsunrise = (720 + 4*(Longitude-ha/pi*180) - eqtime) * 4; 
dotweek = now.dayOfWeek() ; dotweek = now.dayOfWeek(); } 
 // Calculate time to sunrise sun = (((ntime-nsunrise)) % (24*60*4))/4; if (sun > 60) sun = sun - 24*60; 
Définissez le paramètre ntime pour corriger les temps ntime=now.hour()*60*4+now.minute()*4+((now.second()+8) / 15) ; nstart = ntime ; // Set the ntime parameter to correct time ntime=now.hour()*60*4+now.minute()*4+((now.second()+8) / 15); nstart=ntime; } 
Dispositif est déjà en cours d’exécution : else {si (ntime > (nstart + 12 * 4) || nstart > 5710) warm-up = false ; // Device is already running: else { if (ntime > (nstart + 12*4) || nstart > 5710) warmup = false; } 
 //Device is already running or just powered on, doesn't matter: //Read temp probe uint32_t start = micros(); int chk = DHT.read22(DHT22_PIN); uint32_t stop = micros(); switch (chk) 
Imprimer des entrées de sonde Temp à port série {case DHTLIB_OK : Serial.print ("OK,") ; rupture ; affaire DHTLIB_ERROR_CHECKSUM : Serial.print (« Checksum error,") ; rupture ; affaire DHTLIB_ERROR_TIMEOUT : Serial.print ("Time out error,") ; rupture ; par défaut : Serial.print ("erreur inconnue,") ; rupture ; //Print inputs from Temp probe to serial port { case DHTLIB_OK: Serial.print("OK, "); break; case DHTLIB_ERROR_CHECKSUM: Serial.print("Checksum error, "); break; case DHTLIB_ERROR_TIMEOUT: Serial.print("Time out error, "); break; default: Serial.print("Unknown error, "); break; } 
 //Print some extra debug data to serial port 
 Serial.print(now.day()); Serial.print('-'); Serial.print(now.month()); Serial.print('-'); Serial.print(now.year()); Serial.print(" "); Serial.print(now.hour()); Serial.print(':'); Serial.print(now.minute()); Serial.print(" "); Serial.print(ntime); Serial.print('/'); Serial.print(loopdelay); Serial.print('/'); Serial.print(nsunrise/60/4); Serial.print(':'); Serial.print((nsunrise%(60*4))/4); Serial.print(" "); 
 Cinst = DHT.temperature * 10 - 100; // Cinst = random(50,100); //for test Serial.print((Cinst+100)); Serial.print(" => "); Cbuffer[ntime % 4] = Cinst; Clastmin = (Cbuffer[0] + Cbuffer[1] + Cbuffer[2] + Cbuffer[3])/4; Serial.print((Clastmin+100)/10,1); 
Si (ntime % 4 == 0) {Serial.print(",\t") ; CRefermez [(ntime % 48) / 4] = Clastmin ; if (ntime % 4 == 0) { Serial.print(",\t"); Cclose[(ntime % 48) / 4] = Clastmin; } 
 if (ntime % 48 == 24) { Ccloseavg = (Cclose[0] + Cclose[1] + Cclose[2] + Cclose[3] + Cclose[4] + Cclose[5] + Cclose[6] + Cclose[7] + Cclose[8] + Cclose[9] + Cclose[10] + Cclose[11])/12; if (warmup == true) EEPROM.write(ntime/48,0); else EEPROM.write(ntime/48,Ccloseavg); Serial.print(",\t"); Serial.print((EEPROM.read(ntime/48)+100)); 
 } 
 // Wakeuplight! nwakeup = (((ntime-nwakeupstart)) % (24*60*4))/4; 
créer la fi fonctions qui allume la lumière consécutivement, ici si (nwakeup < 40 & & (nsunrise > nwakeupstart - 30 * 4)) {si (nwakeup > 0) digitalWrite(L1,LOW) ; if (nwakeup > 5) digitalWrite(L2,LOW) ; if (nwakeup > 10 & & dotweek! = 6 & & dotweek! = 0) digitalWrite(L3,LOW) ; if (nwakeup > 14 & & dotweek! = 6 & & dotweek! = 0) digitalWrite (L4 FAIBLE) ; Si (nwakeup > 18 & & dotweek! = 6 & & dotweek! = 0) digitalWrite(L5,LOW) ; Si (nwakeup > 22 & & dotweek! = 6 & & dotweek! = 0) digitalWrite(L6,LOW) ; Si (nwakeup > 25 & & dotweek! = 6 & & dotweek! = 0) digitalWrite(L7,LOW) ; Si (nwakeup > 28 & & dotweek! = 6 & & dotweek! = 0) digitalWrite(L8,LOW) ; //create the if functions that turn the light on consecutively, here if (nwakeup < 40 && (nsunrise > nwakeupstart - 30*4)) { if (nwakeup > 0) digitalWrite(L1,LOW); if (nwakeup > 5) digitalWrite(L2,LOW); if (nwakeup > 10 && dotweek != 6 && dotweek != 0) digitalWrite(L3,LOW); if (nwakeup > 14 && dotweek != 6 && dotweek != 0) digitalWrite(L4,LOW); if (nwakeup > 18 && dotweek != 6 && dotweek != 0) digitalWrite(L5,LOW); if (nwakeup > 22 && dotweek != 6 && dotweek != 0) digitalWrite(L6,LOW); if (nwakeup > 25 && dotweek != 6 && dotweek != 0) digitalWrite(L7,LOW); if (nwakeup > 28 && dotweek != 6 && dotweek != 0) digitalWrite(L8,LOW); } else { digitalWrite(L1,HIGH); digitalWrite(L2,HIGH); digitalWrite(L3,HIGH); digitalWrite(L4,HIGH); digitalWrite(L5,HIGH); digitalWrite(L6,HIGH); digitalWrite(L7,HIGH); digitalWrite(L8,HIGH); } else {digitalWrite(L1,HIGH) ; digitalWrite(L2,HIGH) ; digitalWrite(L3,HIGH) ; digitalWrite(L4,HIGH) ; digitalWrite(L5,HIGH) ; digitalWrite(L6,HIGH) ; digitalWrite(L7,HIGH) ; digitalWrite(L8,HIGH) ; // Picture loop - to draw the stuff on the screen (done once every loop) u8g.firstPage(); do { draw(); } while( u8g.nextPage() ); // End Picture Loop 
Boucle de photo - dessiner les trucs sur la u8g.firstPage() de l’écran (fait une fois chaque boucle) ; {draw() ; //Processing ended, shut down LED Serial.println(); digitalWrite(ledPin,LOW); 
 //At the end of day, adjust the loopdelay parameter to make sure each loop takes 15 seconds ntime++; if (ntime == 5760) { timeatend=now.minute()*60+now.second(); //include DST effect if (timeatend > 60*60) { loopdelay = loopdelay - (60*60-timeatend)/5760*1000; } else { loopdelay = loopdelay + timeatend/5760*1000; } EEPROM.write(255,loopdelay-14600); ntime=0; } delay(loopdelay); } 
À la fin de la journée, régler le paramètre loopdelay pour s’assurer que chaque boucle prend 15 secondes ntime ++ ; Si (ntime == 5760) {timeatend=now.minute()*60+now.second() ; effet //include DST si (timeatend > 60 * 60) {loopdelay = loopdelay - (60 * 60-timeatend) / 5760 * 1000 ;else {loopdelay = loopdelay + timeatend/5760 * 1000 ;EEPROM.write(255,loopdelay-14600) ; NTIME = 0 ;Delay(LoopDelay) ;

Articles Liés

Programmation ESP8266 ESP-12F NodeMCU v1.0 avec Arduino IDE dans l’enregistreur de température sans fil

Programmation ESP8266 ESP-12F NodeMCU v1.0 avec Arduino IDE dans l’enregistreur de température sans fil

Retour à fin 2014 et 2015 au début, votre vraiment tombé surCette ESP8266 de puce WiFi astucieux (l'ESP-01) et dois bataille parmi les documentations incompatibles provenant de diverses sources. Pour l'instant de l'éperon, il a documenté ses frustrat
ESP8266 enregistreur de température avec alarme Email

ESP8266 enregistreur de température avec alarme Email

Dans ce tutoriel, nous montrerons comment construire l'enregistreur de température DS18B20 ESP8266 avec notification d'alarme par Email. Nous il connectera à EasyIoT Cloud. Capteur est Plug and Play - aucune configuration n'est nécessaire d'ajouter l
Enregistreur de température framboise Pi

Enregistreur de température framboise Pi

Voici les instructions pour construire un enregistreur de température simple à l'aide d'une sonde de température I2C 5,00 $. Les données sont stockées sur la carte SD et peuvent être facilement importées dans excel. Simplement en changeant ou en ajou
Arduino thermomètre avec sonde de température LM35

Arduino thermomètre avec sonde de température LM35

Arduino thermomètre avec sonde de température LM35 est un très simple à mettre en œuvre le projet Arduino basé. Ses un projet parfait si vous êtes un débutant et avez juste commencé à tester pratiquement projets Arduino.Dans ce projet, nous exposera
Arduino-enregistreur avec sonde de température et de la photorésistance

Arduino-enregistreur avec sonde de température et de la photorésistance

dans ce projet, je vais créer un enregistreur de données simple avec mon Arduino et un bouclier Ethernet.Je vais utiliser une photorésistance et un capteur de température et toutes les informations seront stockées dans une carte micro SD.L'idée est q
Enregistreur de température Edison Intel avec RBG-LCD

Enregistreur de température Edison Intel avec RBG-LCD

Tout d'abord, Merci beaucoup Instructables + Intel pour le jury de Edison et le kit de démarrage de grove plu !Ce projet est la première chose que j'ai fait avec la carte juste pour le tester et il est très facile pour quiconque de le faire.Plus faci
Enregistreur de température avec mini pro & batterie uniquement

Enregistreur de température avec mini pro & batterie uniquement

Il s'agit d'un système minimal pour la température de l'exploitation forestière.Vous aurez besoin :Arduino pro mini (ATmega328p) - utiliser la sonde de température interne & EEPROMLa batterie ou autre chose peut alimenter jusqu'à le mini pro - puissa
Enregistreurs de température rapide & facile

Enregistreurs de température rapide & facile

Je travaille comme développeur de logiciels pour un laboratoire de biologie où mon travail quotidien consiste à créer des applications pour faire face à la visualisation de données volumineuses. Récemment, un de mes collègues avait toutefois la néces
WiFi sous contrôle café COASTER avec couleur changeant température indicateur LED

WiFi sous contrôle café COASTER avec couleur changeant température indicateur LED

Savoir quand boire et déguster votre café a été explorée à bien des égards. L'un d'eux est le changement de température de café coaster de couleur de LED. LED s'allume si le seuil de température est atteint. En utilisant le tri-color LED avec constru
Enregistreur de température Pi framboise par Radio

Enregistreur de température Pi framboise par Radio

Ce projet fait usage d'un pi de framboise, de lire la température de plusieurs capteurs radio et rangez-les sur une base de données Sqlite.Le même pi framboise est utilisé pour servir des pages Web avec le graphique des températures acquises.Voir la
Arduino LCD thermomètre avec sonde de température LM35

Arduino LCD thermomètre avec sonde de température LM35

: mise à jour du PIN 13 : Merci à cybersbpour les captures.Le Fritzing schématique montre à l'aide de broches 12 et 13. Cela ne résout pas. Doit utiliser les broches figurant dans le code, les bornes 11 et 12.C'est comme le titre l'indique, un Arduin
Arduino LCD Thermomètre / thermostat avec sonde de température TMP36GZ ajouté 2 relais de chanel, ajouté RTC ds1307, ajouté un case.based sur le Guide WWC.

Arduino LCD Thermomètre / thermostat avec sonde de température TMP36GZ ajouté 2 relais de chanel, ajouté RTC ds1307, ajouté un case.based sur le Guide WWC.

HY mon premier guid basé sur le guide de la CME.3 octobre 2013 ajouté cas (étape 13)23 septembre 2013 ajouté RTC (realtimeclock) Ds1307 (étape 11)13 septembre 2013 ajouté 2 relais de chanel pour éteindre l'ampoule de chauffage. (étape 8)1 Arduino Uno
Prothèse avec sensibilité à la température

Prothèse avec sensibilité à la température

notre projet est une actualisation à la prothèse mécanique ancienne qui existent maintenant un jour. Il y a beaucoup de prothèse sur le marché qui aide à récupérer la partie mécanique de votre main, mais il n'y a aucune prothèse capable de revenir vo
Enregistreur de température portable peau

Enregistreur de température portable peau

Dans le cadre du CSCI 7000 Physical Computing du CU Boulder pour le bon déroulement, j'ai créé une température cutanée de dispositif portable mesure/enregistrement et confort thermique du porteur (chaud, chaud, neutre, cool, froid). L'objectif est d'