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 de compteur à panneau analogique Arduino

Composants et fournitures

Arduino Nano R3
× 1
Maxim Integrated DS3231M - ±5 ppm, horloge temps réel I2C
× 1
Ampèremètre 1mA
× 3
Résistance 5kOhm
× 3
Résistance 10k ohm
× 2
Interrupteur à bouton-poussoir SparkFun 12mm
× 2

Applications et services en ligne

Arduino IDE

À propos de ce projet

J'ai construit cette belle horloge de style analogique en bois avec un Arduino Nano et des ampèremètres 1 mA. J'ai eu une idée d'ici. Pour l'affichage des secondes, une partie du code a été ajoutée. Une partie qui, lors de l'exécution, traverse toute l'échelle de zéro à max. valeur à des fins d'étalonnage. Selon les ampèremètres que nous utilisons, la valeur des résistances de 5k peut être différente. Étant donné que tous les compteurs sont légèrement différents, les valeurs PWM doivent être ajustées en fonction de votre conception. Vous devrez modifier certaines valeurs car il est configuré pour fonctionner spécifiquement avec mes compteurs.

Code

  • code
codeArduino
/* Indicateur de panneau analogique - Mode Horloge UNIQUEMENT Lien Instructables :http://www.instructables.com/id/Analog-VU-meter-and-Clock-Arduino-Powered/ Crédits :bildr - DS1307 Code RTC http ://bildr.org/2011/03/ds1307-arduino/ _____________________ Le câblage se déroule comme suit :- Fil rouge USB (5v) vers VCC - Fil noir USB vers GND - Boutons - Gauche/Bas vers Digital 2 (suivez le didacticiel arduino :http ://arduino.cc/en/uploads/Tutorial/button.png ) - Droite/jusqu'au numérique 3 - DS1307 RTC - SDA vers analogique 4 - SCL vers analogique 5 - Compteur analogique gauche vers numérique 5 (PWM) - Analogique droit Compteur vers numérique 6 (PWM)_-secondes Compteur analogique vers numérique 9_(PWM)___________________ Remarque :Étant donné que tous les compteurs sont légèrement différents, les valeurs PWM doivent être ajustées en fonction de votre conception. N'hésitez pas à utiliser mon code, mais vous devrez modifier certaines valeurs car il est configuré pour fonctionner spécifiquement avec mes compteurs. */#include "Wire.h"#define DS1307_ADDRESS 0x68byte zéro =0x00 ; //solution de contournement pour le problème #527int downButton =2; // bouton poussoir bas pour régler l'heure (broche 2)int upButton =3; // bouton poussoir haut pour régler l'heure (broche 3)int heures =0;int minutes =0;int secondes =0;int lastMinute =0;int lastSecond =0;int leftMeter =5; // mètre gauche (heures) est attaché à la broche 5int rightMeter =6; // le compteur droit (min) est attaché à la broche 6int secMeter=9 ; //le compteur de secondes (sec) est attaché à la broche 9void setup(){ Wire.begin(); Serial.begin(9600); // afficher l'heure dans le moniteur série pinMode (leftMeter, OUTPUT); // Initialiser les sorties et les entrées pinMode(rightMeter, OUTPUT); pinMode(secMeter, OUTPUT); digitalWrite(leftMeter, HIGH); // Test des compteurs au démarrage digitalWrite(rightMeter, HIGH); digitalWrite(secMeter, HIGH); digitalWrite(13, ÉLEVÉ); retard (1000); digitalWrite(leftMeter, LOW); digitalWrite(rightMeter, LOW); digitalWrite(secMeter, LOW); digitalWrite(13, LOW); delay(1000);}boucle vide(){ printDate(); retard (75); // Modification de l'heure avec des boutons if (digitalRead(downButton) ==HIGH){ byte second =seconds; // Ne soyez pas confus :la seconde n'est pas la même chose que les secondes octet minute =minutes; // Ne vous trompez pas :minute n'est pas la même chose que minutes octet heure =heures; // Ne vous trompez pas :l'heure n'est pas la même que les heuresif (minutes> 0){ --minute; }autre{ minute =59; if (heures> 0){ -- heure; }else{ hour =23;}} Wire.beginTransmission(DS1307_ADDRESS); Wire.write(zéro); //arrêt de l'oscillateur Wire.write(decToBcd(second)); Wire.write(decToBcd(minute)); Wire.write(decToBcd(hour)); Wire.write(zéro); //start Wire.endTransmission();} if (digitalRead(upButton) ==HIGH){ byte second =0; octet minute =minutes ; // Ne vous trompez pas :minute n'est pas la même chose que minutes octet heure =heures; // Ne vous trompez pas :l'heure n'est pas la même chose que hoursif (minutes <59){ ++minute; }autre{ minute =0; if (heures <23){ ++ heure; }else{ hour =0;}} Wire.beginTransmission(DS1307_ADDRESS); Wire.write(zéro); //arrêt de l'oscillateur Wire.write(decToBcd(second)); Wire.write(decToBcd(minute)); Wire.write(decToBcd(hour)); Wire.write(zéro); //start Wire.endTransmission();} }byte decToBcd(byte val){// Convertir les nombres décimaux normaux en retour décimal codé binaire ( (val/10*16) + (val%10) );}byte bcdToDec(byte val) {// Convertir les nombres décimaux codés binaires en nombres décimaux normaux return ( (val/16*10) + (val%16) );}void printDate(){ // Réinitialiser le pointeur de registre Wire.beginTransmission(DS1307_ADDRESS); Wire.write(zéro); Wire.endTransmission(); Wire.requestFrom(DS1307_ADDRESS, 7); secondes =bcdToDec(Wire.read()); minutes =bcdToDec(Wire.read()); heures =bcdToDec(Wire.read() &0b111111); ///24 heures // affiche la date Serial.print(hours); // Décommentez pour afficher l'heure dans le moniteur série Serial.print(":"); // Serial.println(minutes); // N'oubliez pas de décommenter "Serial.begin" dans "void setup" ci-dessus // Niveaux de compteur spécifiques pour chaque heure // Vous devrez probablement ajuster ces valeurs. // Jouez avec les valeurs jusqu'à ce que vous obteniez ce que tu veux. if (lastMinute !=minutes){ if (hours ==1 || hours ==13){ analogWrite(leftMeter, 0); // ajuste le niveau du compteur gauche (heure) } if (hours ==2 || hours ==14){ analogWrite(leftMeter, 29); // ajuste le niveau du compteur gauche (heure) } if (hours ==3 || hours ==15){ analogWrite(leftMeter, 52); // ajuste le niveau du compteur gauche (heure) } if (hours ==4 || hours ==16){ analogWrite(leftMeter, 75); // ajuste le niveau du compteur gauche (heure) } if (hours ==5 || hours ==17){ analogWrite(leftMeter, 98); // ajuste le niveau du compteur gauche (heure) } if (hours ==6 || hours ==18){ analogWrite(leftMeter, 130); // ajuste le niveau du compteur gauche (heure) } if (hours ==7 || hours ==19){ analogWrite(leftMeter, 152) ; // ajuste le niveau du compteur gauche (heure) } if (hours ==8 || hours ==20){ analogWrite(leftMeter, 172); // ajuste le niveau du compteur gauche (heure) } if (hours ==9 || hours ==21){ analogWrite(leftMeter, 192); // ajuste le niveau du compteur gauche (heure) } if (hours ==10 || hours ==22){ analogWrite(leftMeter, 213); // ajuste le niveau du compteur gauche (heure) } if (hours ==11 || hours ==23){ analogWrite(leftMeter, 234); // ajuste le niveau du compteur gauche (heure) } if (hours ==0 || hours ==12){ analogWrite(leftMeter, 255); // ajuste le niveau du compteur gauche (heure) } if (minutes * 4,75 <255) { // augmente la valeur PWM de 4,75 chaque minute analogWrite (rightMeter, minutes * 4,75); // J'ai dû utiliser 4,75 sur mon compteur pour obtenir 30 minutes pour pointer exactement vers le haut }sinon{ // parfait serait 4,25 car 4,25 * 60 =255 analogWrite(rightMeter, 255); } dernièreMinute =minutes; if (secondes * 4.25 <255){ analogWrite(secMeter, seconds *4.25) ; }else{ analogWrite(secMeter, 255); } lastSecond =secondes; }}

Schémas


Processus de fabrication

  1. horloge de vision Arduino pov
  2. Horloge de mots simple (Arduino)
  3. Horloge Arduino avec heures de prière islamique
  4. horloge maîtresse
  5. Fleurs - Arduino Nano, CrazyCircuits, DFRobot
  6. Horloge POV LED de style analogique
  7. Les indicateurs de panneau simplifient la conception
  8. Choix entre panneaux numériques et analogiques
  9. Qu'est-ce qu'un indicateur de panneau ?