Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Arduino Analog Panel Meter Clock

Komponenten und Verbrauchsmaterialien

Arduino Nano R3
× 1
Maxim Integrated DS3231M - ±5 ppm, I2C-Echtzeituhr
× 1
1 mA Amperemeter
× 3
5kOhm Widerstand
× 3
Widerstand 10k Ohm
× 2
SparkFun Drucktastenschalter 12 mm
× 2

Apps und Onlinedienste

Arduino-IDE

Über dieses Projekt

Ich habe diese schön aussehende analoge Holzuhr mit einem Arduino Nano und 1 mA Amperemeter gebaut. Ich habe eine Idee von hier. Zur Anzeige der Sekunden wurde ein Teil des Codes hinzugefügt. Hinzu kommt ein Teil, der beim Laufen die gesamte Skala von Null bis max durchläuft. Wert für Kalibrierzwecke. Je nachdem, welche Amperemeter wir verwenden, kann der Wert der 5k-Widerstände unterschiedlich sein. Da alle Messgeräte leicht unterschiedlich sind, müssen die PWM-Werte basierend auf Ihrem Design angepasst werden. Sie müssen einige Werte ändern, da es speziell mit meinen Messgeräten funktioniert.

Code

  • Code
codeArduino
/* Analog Panel Meter - Clock ONLY Mode Instructables Link:http://www.instructables.com/id/Analog-VU-meter-and-Clock-Arduino-Powered/ Credits:bildr - DS1307 RTC-Code http://bildr.org/2011/03/ds1307-arduino/ _____________________ Die Verkabelung geht wie folgt:- USB rotes Kabel (5V) an VCC - USB schwarzes Kabel an GND - Tasten - Links/Unten auf Digital 2 (folgen Sie dem Arduino-Tutorial:http ://arduino.cc/en/uploads/Tutorial/button.png ) - Rechts/Bis zu Digital 3 - DS1307 RTC - SDA zu Analog 4 - SCL zu Analog 5 - Linkes Analogmeter zu Digital 5 (PWM) - Rechts Analog Messgerät zu Digital 6 (PWM)_-Sekunden Analoges Messgerät zu Digital 9_(PWM)_____________________ Hinweis:Da alle Messgeräte leicht unterschiedlich sind, müssen die PWM-Werte an Ihr Design angepasst werden. Fühlen Sie sich frei, meinen Code zu verwenden, aber Sie müssen einige Werte ändern, da er speziell mit meinen Messgeräten funktioniert. */#include "Wire.h"#define DS1307_ADDRESS 0x68byte null =0x00; // Problemumgehung für Problem #527int downButton =2; // Taste nach unten drücken, um die Zeit einzustellen (Pin 2) Int upButton =3; // Drucktaste nach oben zum Einstellen der Zeit (Pin 3)int Stunden =0;int Minuten =0;int Sekunden =0;int lastMinute =0;int lastSecond =0;int leftMeter =5; // linker Meter (Stunden) ist an Pin 5int rightMeter =6 angeschlossen; // rechter Meter (min) ist an Pin 6int secMeter=9 angeschlossen; // Sekundenzähler (Sek.) ist an Pin 9void setup () angeschlossen {Wire.begin (); Serial.begin (9600); // Zeit im seriellen Monitor anzeigen PinMode (leftMeter, OUTPUT); // Ausgänge und Eingänge initialisieren pinMode (rightMeter, OUTPUT); pinMode (secMeter, AUSGANG); digitalWrite (leftMeter, HIGH); // Zähler beim Start testen digitalWrite (rightMeter, HIGH); digitalWrite (secMeter, HIGH); digitalWrite(13, HOCH); Verzögerung (1000); digitalWrite (leftMeter, LOW); digitalWrite (rightMeter, LOW); digitalWrite (secMeter, LOW); digitalWrite(13, LOW); Verzögerung (1000);} ungültige Schleife () { printDate (); Verzögerung (75); // Ändern der Zeit mit Tasten if (digitalRead (downButton) ==HIGH) { Byte Sekunde =Sekunden; // Nicht verwirren:Sekunde ist nicht gleich Sekunde Byte Minute =Minuten; // Nicht verwirren:Minute ist nicht gleich Minuten byte hour =hours; // Nicht verwirren:Stunde ist nicht gleich Stundenif (Minuten> 0){ --minute; }sonst{ Minute =59; if (Stunden> 0){ -- Stunde; }sonst{ Stunde =23;}} Wire.beginTransmission(DS1307_ADDRESS); Wire.write (null); // Oszillator stoppen Wire.write (decToBcd (second)); Wire.write (decToBcd (Minute)); Wire.write (decToBcd (Stunde)); Wire.write (null); // starte Wire.endTransmission ();} if (digitalRead (upButton) ==HIGH) { Byte Sekunde =0; Byte Minute =Minuten; // Nicht verwirren:Minute ist nicht gleich Minuten byte hour =hours; // Nicht verwirren:Stunde ist nicht gleich Stundenif (Minuten <59){ ++Minute; }sonst{ Minute =0; wenn (Stunden <23){ ++ Stunde; }sonst{ Stunde =0;}} Wire.beginTransmission(DS1307_ADDRESS); Wire.write (null); // Oszillator stoppen Wire.write (decToBcd (second)); Wire.write (decToBcd (Minute)); Wire.write (decToBcd (Stunde)); Wire.write (null); //starte Wire.endTransmission();}}byte decToBcd(byte val){// Konvertieren Sie normale Dezimalzahlen in binär codierte Dezimalzahlen ((val/10*16) + (val%10));}byte bcdToDec(byte val) {// Binärcodierte Dezimalzahlen in normale Dezimalzahlen umwandeln return ( (val/16*10) + (val%16) );}void printDate(){ // Zurücksetzen des Registerzeigers Wire.beginTransmission(DS1307_ADDRESS); Wire.write (null); Wire.endTransmission(); Wire.requestFrom(DS1307_ADDRESS, 7); Sekunden =bcdToDec(Wire.read()); Minuten =bcdToDec(Wire.read()); Stunden =bcdToDec(Wire.read() &0b111111); // 24 Stunden Zeit // Drucken Sie das Datum Serial.print (Stunden); // Kommentar aufheben, um die Zeit im seriellen Monitor anzuzeigen Serial.print (":"); // Serial.println (Minuten); // Vergessen Sie nicht, 'Serial.begin' in 'void setup' oben zu entkommentieren // Spezifische Zählerstände für jede Stunde // Sie müssen diese Werte wahrscheinlich anpassen.// Spielen Sie mit den Werten herum, bis Sie was du willst. if (lastMinute !=Minuten){ if (Stunden ==1 || Stunden ==13){ analogWrite (leftMeter, 0); // den linken (Stunden-) Meterpegel einstellen} if (Stunden ==2 || Stunden ==14) {AnalogWrite (leftMeter, 29); // den linken (Stunden-) Meterpegel einstellen} if (Stunden ==3 || Stunden ==15) {AnalogWrite (leftMeter, 52); // den linken (Stunden-) Meterpegel einstellen} if (Stunden ==4 || Stunden ==16) {AnalogWrite (leftMeter, 75); // den linken (Stunden-) Meterpegel einstellen} if (Stunden ==5 || Stunden ==17) {AnalogWrite (leftMeter, 98); // den linken (Stunden-) Meterpegel einstellen} if (Stunden ==6 || Stunden ==18) {AnalogWrite (leftMeter, 130); // den linken (Stunden-) Meterpegel einstellen} if (Stunden ==7 || Stunden ==19) {AnalogWrite (leftMeter, 152); // den linken (Stunden-) Meterpegel einstellen} if (Stunden ==8 || Stunden ==20) {AnalogWrite (leftMeter, 172); // den linken (Stunden-) Meterpegel einstellen} if (Stunden ==9 || Stunden ==21) {AnalogWrite (leftMeter, 192); // den linken (Stunden-) Meterpegel einstellen} if (Stunden ==10 || Stunden ==22) {AnalogWrite (leftMeter, 213); // den linken (Stunden-) Meterpegel einstellen} if (Stunden ==11 || Stunden ==23) {AnalogWrite (leftMeter, 234); // den linken (Stunden-) Meterpegel einstellen} if (Stunden ==0 || Stunden ==12) {AnalogWrite (leftMeter, 255); // Pegel des linken (Stunden-) Meters einstellen} if (Minuten * 4,75 <255) {// PWM-Wert jede Minute um 4,75 erhöhen analogWrite (rightMeter, Minuten * 4,75); // Ich musste 4,75 auf meinem Meter verwenden, um 30 Minuten zu bekommen, um genau gerade nach oben zu zeigen }sonst{ // perfekt wäre 4,25, weil 4,25 * 60 =255 analogWrite(rightMeter, 255); } lastMinute =Minuten; if (Sekunden * 4,25 <255) { AnalogWrite (secMeter, Sekunden * 4,25); }sonst{ analogWrite (secMeter, 255); } lastSecond =Sekunden; }}

Schaltpläne


Herstellungsprozess

  1. Arduino-Pov-Vision-Uhr
  2. Einfache Wordclock (Arduino)
  3. Arduino-Uhr mit islamischen Gebetszeiten
  4. Hauptuhr
  5. Blumen - Arduino Nano, CrazyCircuits, DFRobot
  6. Analoge LED-POV-Uhr
  7. FlightGear analoges Trimm-Tabrad
  8. Einbaumessgeräte vereinfachen das Design
  9. Digitale vs. analoge Bedienfeldoptionen
  10. Was ist ein Panel-Messgerät?