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 analogique, numérique et thermomètre sur écran LCD 128 x 64

Composants et fournitures

Arduino Nano R3
× 1
Maxim Integrated DS3231M - ±5 ppm, horloge temps réel I2C
× 1
Potentiomètre à un tour - 10k ohms
× 1
Bouton-poussoir, momentané
× 1
Affichage graphique LCD 128x64
× 1

Outils et machines nécessaires

Fer à souder (générique)

À propos de ce projet

Sur la page web d'arduinoecia est présenté l'horloge Arduino avec écran graphique LCD 128x64, un potentiomètre pour régler le contraste de l'écran, le module DS3231 RTC et un bouton poussoir. Le module RTC est connecté à l'Arduino sur les broches A4 (SDA) et A5 (SCL). Le bouton est connecté à la broche numérique 3, avec la résistance de rappel interne de l'Arduino activée via un logiciel. Le programme utilise certaines bibliothèques que vous devrez installer avant de compiler. Décompressez les bibliothèques et placez-les dans le dossier LIBRARIES de l'IDE Arduino.

Le programme a deux écrans :le premier (screen_1), montre l'horloge analogique, l'horloge numérique, ainsi que la date et la température actuelles.

Le deuxième écran ( screen_2 ) affiche l'horloge numérique, le jour de la semaine, la date et les informations sur la température actuelle, la température minimale et la température maximale. Les écrans sont sélectionnés en appuyant sur le bouton poussoir, connecté à la broche numérique 3.

Pour régler la date et l'heure du module RTC DS3231, utilisez le moniteur série et saisissez les informations au format année, mois, jour, heure, minute, seconde.

Si vous avez correctement saisi les informations, le message " " s'affichera.

Code

  • code
  • bibliothèques
codeArduino
//Programa : Affichage LCD 128x64 et RTC DS3231//Autor :Arduino et Cia#include #include #include #include #include //A linha abaixo défini comme conexoes affichent e deve ser //ajustada conforme o modelo utilizadoU8GLIB_ST7920_128X64_1X u8g(6, 5, 4 , 7); //Activer, RW, RS, RESETint X2 =0;int Y2 =0;int X3 =0;int Y3 =0;float angulo =0;int posicao =0;int posicaoh =0;int temperature =0;int min_temp =500;int max_temp =-500;int ScreenWith =128;int ScreenWithC =96;int ScreenHeight =64;int ScreenHeightC =32;#define botao 3int estado_botao =0;char* dia_da_semana[]={ "Sun", "Mon ", "Mar", "Mer", "Jeu", "Ven", "Sam"};void tela_1() { u8g.drawRFrame(0, 0, 128, 64, 3); //Mostra temperature u8g.setPrintPos(20, 30); u8g.print(température); u8g.drawStr( 42, 30, "C"); u8g.drawCircle (37, 34, 2); mostra_relogio_digital(); //Mostra relogio analogico fundo_relogio(); //Atualiza Ponteiro de horas desenha_ponteiro(hour()-1, 12.0, 10); //Atualiza Ponteiro de minutos desenha_ponteiro(minute()-5, 60.0, 19); //Atualiza Ponteiro de segundos desenha_ponteiro(second()-5, 60, 21);}void tela_2(){ u8g.drawRFrame(0, 0, 128, 64, 3); u8g.drawRFrame (68, 4, 55, 56, 2); mostra_relogio_digital(); u8g.setFont(u8g_font_5x8) ; u8g.drawStr( 78, 35, "MIN"); u8g.drawStr( 78, 53, "MAX"); u8g.setFont(u8g_font_6x13); u8g.setPrintPos (25, 41); u8g.print(dia_da_semana[(weekday()-1)]); //Mostra temperature atual u8g.setPrintPos(83, 19); u8g.print(température); u8g.drawStr( 105, 19, "C"); u8g.drawCircle (100, 12, 2); //Mostra temperatura minima u8g.setPrintPos(98, 36); u8g.print(min_temp); u8g.drawCircle(113, 29, 2); //Mostra temperatura maxima u8g.setPrintPos(98, 54); u8g.print(max_temp); u8g.drawCircle(113, 47, 2);} void desenha_ponteiro(float valor, float rotacao, int Radius) { angulo =valor * 2,0 * 3,1415 / rotacao - 1 5707; X2 =ÉcranAvecC + Rayon * cos(angulo); Y2 =ScreenHeightC + Rayon * sin(angulo); u8g.drawLine(ScreenWithC, ScreenHeightC, X2, Y2);}void fundo_relogio() { u8g.drawCircle(ScreenWithC, ScreenHeightC, 27); u8g.drawCircle(ScreenWithC, ScreenHeightC, 1); u8g.setFont(u8g_font_6x13); u8g.setFontPosTop(); u8g.drawStr(90, 9, "12"); u8g.drawStr(114, 25, "3"); u8g.drawStr(94, 44, "6"); u8g.drawStr(74, 25, "9"); for(int traco_minuto =0; traco_minuto<12; traco_minuto++) { //Desenha linhas relogio analogico angulo =traco_minuto / 12.0 * 2 * 3.1415; X2 =ÉcranAvecC + 25 * cos(angulo); Y2 =ScreenHeightC + 25 * sin(angulo); X3 =ÉcranAvecC + 25 * cos(angulo); Y3 =ScreenHeightC + 25 * sin(angulo); u8g.drawLine(X2, Y2, X3, Y3) ; }}void mostra_relogio_digital(){ //Mostra a data u8g.setFont(u8g_font_5x8) ; u8g.setPrintPos(8, 55); u8g.print(jour()); u8g.drawStr( 19, 55, "/"); u8g.setPrintPos(24, 55); u8g.print(mois()); u8g.drawStr( 35, 55, "/"); u8g.setPrintPos(41, 55); u8g.print(année()); //Mostra hora e minutos u8g.drawRBox(3, 4, 62, 21,2); u8g.setColorIndex(0) ; u8g.setFont(u8g_font_fub17); u8g.drawStr(29,21,":"); //Acerta a posicao do digito caso a hora //seja menor do que 10 if (hour() <10) { u8g.drawStr(3,23,"0"); posicaoh =16; } sinon posicaoh =3; u8g.setPrintPos(posicaoh, 23); u8g.print(heure()); //Acerta a posicao do digito caso o minuto //seja menor do que 10 if (minute() <10) { u8g.drawStr(38,23,"0"); posicao =51 ; } sinon posicao =38; u8g.setPrintPos(posicao ,23); u8g.print(minute()); u8g.setColorIndex(1);}configuration void() { pinMode(3, INPUT_PULLUP); Serial.begin(9600); if ( u8g.getMode() ==U8G_MODE_R3G3B2 ) u8g.setColorIndex(255); // blanc else if ( u8g.getMode() ==U8G_MODE_GRAY2BIT ) u8g.setColorIndex(3); // intensité max else if ( u8g.getMode() ==U8G_MODE_BW ) u8g.setColorIndex(1); // pixel sur setSyncProvider(RTC.get); Série <=max_temp) { max_temp =temperature; } if (temperatura <=min_temp) { min_temp =temperature; } temps_t statique tLast ; temps_t t; tmElements_t tm; //Verifica se foi setado um novo horario //Formato:ano, mes, dia, hora, minuto, segundo if (Serial.available()>=12) { int y =Serial.parseInt(); if (y>=100 &&y <1000) Serial<=1000) tm.Year =CalendarYrToTm(y); else //(y <100) tm.Year =y2kYearToTm(y); tm.Mois =Serial.parseInt(); tm.Day =Serial.parseInt(); tm.Hour =Serial.parseInt(); tm.Minute =Serial.parseInt(); tm.Second =Serial.parseInt(); t =makeTime(tm); RTC.set(t); setTime(t); Serial < 0) Serial.read(); } } t =maintenant(); if (t !=tDernier) { tDernier =t; printDateTime(t); Série < 0) Serial < 
bibliothèquesArduino
Aucun aperçu (téléchargement uniquement).

Schémas


Processus de fabrication

  1. Signaux analogiques et numériques
  2. Types de capteurs analogiques et numériques avec applications
  3. horloge de vision Arduino pov
  4. horloge maîtresse
  5. Animation LCD et jeux
  6. Arduino Temp. Moniteur et horloge en temps réel avec affichage 3.2
  7. Horloge numérique TM1637 avec configuration de l'heure et fonctionnalité d'alarme
  8. Voltmètre DIY avec Arduino et un écran Nokia 5110
  9. Réveil simple avec DS1302 RTC