Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Arduino analoge paneelmeterklok

Componenten en benodigdheden

Arduino Nano R3
× 1
Maxim Integrated DS3231M - ±5ppm, I2C real-time klok
× 1
1mA ampèremeter
× 3
5kOhm weerstand
× 3
Weerstand 10k ohm
× 2
SparkFun Drukknopschakelaar 12 mm
× 2

Apps en online services

Arduino IDE

Over dit project

Ik heb deze mooie houten klok in analoge stijl gebouwd met een Arduino Nano en 1mA ampèremeters. Ik heb hier een idee vandaan. Voor het weergeven van de seconden is een deel van de code toegevoegd. Ook is er een onderdeel toegevoegd dat tijdens het hardlopen de hele schaal van nul tot max doorloopt. waarde voor kalibratiedoeleinden. Afhankelijk van welke ampèremeters we gebruiken, kan de waarde van de 5k-weerstanden verschillen. Omdat alle meters net iets anders zijn, moeten de PWM-waarden worden aangepast op basis van uw ontwerp. U zult enkele waarden moeten wijzigen omdat deze specifiek is ingesteld om met mijn meters te werken.

Code

  • code
codeArduino
/* Analoge paneelmeter - ALLEEN klokmodus 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/ _____________________ De bedrading gaat als volgt:- Rode USB-draad (5v) naar VCC - Zwarte USB-draad naar GND - Knoppen - Links/Omlaag naar Digital 2 (volg arduino-tutorial:http ://arduino.cc/en/uploads/Tutorial/button.png ) - Rechts/Omhoog naar Digitaal 3 - DS1307 RTC - SDA naar Analoog 4 - SCL naar Analoog 5 - Links Analoog Meter naar Digitaal 5 (PWM) - Rechts Analoog Meter naar digitaal 6 (PWM)_seconden Analoge meter naar digitaal 9_(PWM)_____________________ Opmerking:Omdat alle meters iets anders zijn, moeten de PWM-waarden worden aangepast op basis van uw ontwerp. Voel je vrij om mijn code te gebruiken, maar je zult enkele waarden moeten wijzigen omdat deze specifiek is ingesteld om met mijn meters te werken. */#include "Wire.h"#define DS1307_ADDRESS 0x68byte nul =0x00; // tijdelijke oplossing voor probleem #527int downButton =2; // drukknop omlaag om de tijd aan te passen (pin 2) in de knop omhoog =3; // omhoog drukknop om de tijd aan te passen (pin 3) in uren =0; int minuten =0; int seconden =0; int lastMinute =0; int lastSecond =0; int leftMeter =5; // linker meter (uren) is bevestigd aan pin 5int rightMeter =6; // rechter meter (min) is bevestigd aan pin 6int secMeter=9; //secondenmeter (sec) is gekoppeld aan pin 9void setup(){ Wire.begin(); Serieel.begin(9600); // bekijk tijd in seriële monitor pinMode (leftMeter, OUTPUT); // Initialiseer uitgangen en ingangen pinMode (rightMeter, OUTPUT); pinMode (secMeter, UITGANG); digitalWrite (linksmeter, HOOG); // Test meters bij opstarten digitalWrite (rightMeter, HIGH); digitalWrite(secMeter, HOOG); digitalWrite(13, HOOG); vertraging (1000); digitalWrite (linksmeter, LAAG); digitalWrite(rightMeter, LOW); digitalWrite(secMeter, LAAG); digitalWrite(13, LAAG); delay(1000);}void loop(){ printDate(); vertraging (75); // De tijd wijzigen met knoppen if (digitalRead(downButton) ==HIGH){ byte seconde =seconden; // Raak niet in de war:seconde is niet hetzelfde als seconden byte minuut =minuten; // Raak niet in de war:minuut is niet hetzelfde als minuten byte uur =uur; // Raak niet in de war:uur is niet hetzelfde als hoursif (minuten> 0){ --minute; }anders{ minuut =59; if (uren> 0){ -- uur; }else{ uur =23;}} Wire.beginTransmission (DS1307_ADDRESS); Wire.write (nul); // stop Oscillator Wire.write (decToBcd (tweede)); Wire.write(decToBcd(minuut)); Wire.write(decToBcd(uur)); Wire.write (nul); //start Wire.endTransmission ();} if (digitalRead (upButton) ==HOOG) {byte seconde =0; byte minuut =minuten; // Raak niet in de war:minuut is niet hetzelfde als minuten byte uur =uur; // Raak niet in de war:uur is niet hetzelfde als hoursif (minuten <59){ ++minute; }anders{ minuut =0; if (uren <23){ ++ uur; }else{ uur =0;}} Wire.beginTransmission (DS1307_ADDRESS); Wire.write (nul); // stop Oscillator Wire.write (decToBcd (tweede)); Wire.write(decToBcd(minuut)); Wire.write(decToBcd(uur)); Wire.write (nul); //start Wire.endTransmission();} }byte decToBcd(byte val){// Converteer normale decimale getallen naar binair gecodeerde decimale return ((val/10*16) + (val%10));}byte bcdToDec(byte val) {// Converteer binair gecodeerde decimalen naar normale decimale getallen return ((val/16*10) + (val%16));}void printDate(){ // Reset de registeraanwijzer Wire.beginTransmission (DS1307_ADDRESS); Wire.write (nul); Wire.endTransmission(); Wire.requestFrom (DS1307_ADDRESS, 7); seconden =bcdToDec(Wire.read()); minuten =bcdToDec(Wire.read()); uur =bcdToDec(Wire.read() &0b111111); //24 uur tijd // druk de datum af Serial.print (uren); // Verwijder commentaar om de tijd in seriële monitor te bekijken Serial.print(":"); // Serial.println (minuten); // Vergeet niet om 'Serial.begin' in 'void setup' hierboven te verwijderen // Specifieke meterniveaus voor elk uur // U zult deze waarden waarschijnlijk moeten aanpassen.// Speel met de waarden totdat u wat je wilt. if (lastMinute!=minuten){ if (hours ==1 || hours ==13){ analogWrite(leftMeter, 0); // pas het linker (uur) meterniveau aan} if (hours ==2 || hours ==14) {analogeWrite(leftMeter, 29); // pas het linker (uur) meterniveau aan} if (hours ==3 || hours ==15) {analogeWrite(leftMeter, 52); // pas het linker (uur) meterniveau aan} if (hours ==4 || hours ==16) {analogalWrite(leftMeter, 75); // pas het linker (uur) meterniveau aan} if (hours ==5 || hours ==17) {analogeWrite(leftMeter, 98); // pas het linker (uur) meterniveau aan} if (hours ==6 || hours ==18) {analogeWrite(leftMeter, 130); // pas het linker (uur) meterniveau aan} if (hours ==7 || hours ==19) {analogeWrite(leftMeter, 152); // pas het linker (uur) meterniveau aan} if (hours ==8 || hours ==20) {analogeWrite(leftMeter, 172); // pas het linker (uur) meterniveau aan} if (hours ==9 || hours ==21) {analogeWrite(leftMeter, 192); // pas het linker (uur) meterniveau aan} if (hours ==10 || hours ==22) {analogeWrite(leftMeter, 213); // pas het linker (uur) meterniveau aan} if (hours ==11 || hours ==23){ analogWrite (leftMeter, 234); // pas het linker (uur) meterniveau aan} if (hours ==0 || hours ==12) {analogeWrite(leftMeter, 255); // pas het linker (uur) meterniveau aan} if (minuten * 4,75 <255) { // verhoog de PWM-waarde met 4,75 per minuut analogWrite (rightMeter, minuten * 4,75); // Ik moest 4,75 op mijn meter gebruiken om 30 minuten precies recht omhoog te laten wijzen }anders{ // perfect zou 4,25 zijn omdat 4,25 * 60 =255 analogWrite(rightMeter, 255); } lastMinute =minuten; if (seconden * 4,25 <255){ analogWrite (secMeter, seconden * 4,25); }anders{ analogWrite(secMeter, 255); } lastSecond =seconden; }}

Schema's


Productieproces

  1. Arduino pov vision-klok
  2. Eenvoudige Word Clock (Arduino)
  3. Arduino klok met islamitische gebedstijden
  4. Hoofdklok
  5. Bloemen - Arduino Nano, CrazyCircuits, DFRobot
  6. Analoge stijl LED POV-klok
  7. FlightGear Analog Trim Tab Wheel
  8. Arduino Nano:bedien 2 stappenmotoren met joystick
  9. Paneelmeters vereenvoudigen het ontwerp
  10. Digitale versus analoge paneelkeuzes
  11. Wat is een paneelmeter?