Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Relógio do medidor do painel analógico Arduino

Componentes e suprimentos

Arduino Nano R3
× 1
Maxim Integrated DS3231M - ± 5ppm, I2C Real-Time Clock
× 1
ampmeter 1mA
× 3
resistor 5kOhm
× 3
Resistor 10k ohm
× 2
SparkFun Botão de pressão 12 mm
× 2

Aplicativos e serviços online

Arduino IDE

Sobre este projeto




Eu construí este belo relógio de estilo analógico de madeira com um Arduino Nano e amperímetros de 1mA. Tive uma ideia a partir daqui. Para exibir os segundos, uma parte do código foi adicionada. Também é adicionada uma parte que, durante a execução, passa por toda a escala de zero a máx. valor para fins de calibração. Dependendo de quais ampermetros usamos, o valor dos resistores de 5k pode ser diferente. Como todos os medidores são ligeiramente diferentes, os valores de PWM precisam ser ajustados com base em seu projeto. Você terá que alterar alguns valores porque ele está configurado para funcionar especificamente com meus medidores.

Código

  • código
código Arduino
 / * Analog Panel Meter - Clock ONLY Mode Instructables Link:http://www.instructables.com/id/Analog-VU-meter-and-Clock-Arduino-Powered/ Créditos:bildr - DS1307 código RTC http://bildr.org/2011/03/ds1307-arduino/ _____________________ A fiação vai da seguinte maneira:- Fio vermelho USB (5v) para VCC - Fio preto USB para GND - Botões - Esquerda / Baixo para Digital 2 (siga o tutorial do arduino:http ://arduino.cc/en/uploads/Tutorial/button.png) - Direita / Até Digital 3 - DS1307 RTC - SDA para Analógico 4 - SCL para Analógico 5 - Medidor Analógico Esquerdo para Digital 5 (PWM) - Analógico Direito Medidor para Digital 6 (PWM) _- Medidor analógico de segundos para Digital 9_ (PWM) _____________________ Observação:Como todos os medidores são ligeiramente diferentes, os valores PWM precisam ser ajustados com base em seu projeto. Sinta-se à vontade para usar meu código, mas você terá que alterar alguns valores porque ele está configurado para funcionar especificamente com meus medidores. * / # inclui "Wire.h" #define DS1307_ADDRESS 0x68byte zero =0x00; // solução alternativa para o problema # 527int downButton =2; // botão de pressão para baixo para ajustar o tempo (pino 2) int upButton =3; // pressione o botão para cima para ajustar o tempo (pino 3) int horas =0; int minutos =0; int segundos =0; int lastMinute =0; int lastSecond =0; int leftMeter =5; // medidor esquerdo (horas) é anexado ao pino 5int rightMeter =6; // medidor direito (min) é anexado ao pino 6int secMeter =9; // segundos metros (segundos) são anexados ao pino 9void setup () {Wire.begin (); Serial.begin (9600); // ver o tempo no monitor serial pinMode (leftMeter, OUTPUT); // Inicializa saídas e entradas pinMode (rightMeter, OUTPUT); pinMode (secMeter, OUTPUT); digitalWrite (leftMeter, HIGH); // Teste os medidores na inicialização digitalWrite (rightMeter, HIGH); digitalWrite (secMeter, HIGH); digitalWrite (13, ALTO); atraso (1000); digitalWrite (leftMeter, LOW); digitalWrite (rightMeter, LOW); digitalWrite (secMeter, LOW); digitalWrite (13, BAIXO); atraso (1000);} void loop () {printDate (); atraso (75); // Alterando o tempo com botões if (digitalRead (downButton) ==HIGH) {byte segundo =segundos; // Não se confunda:segundo não é o mesmo que segundos byte minuto =minutos; // Não se confunda:minuto não é igual a minutos byte hora =horas; // Não se confunda:hora não é igual a horasif (minutos> 0) {--minuto; } mais {minuto =59; if (horas> 0) {- hora; } else {hora =23;}} Wire.beginTransmission (DS1307_ADDRESS); Wire.write (zero); // parar Oscillator Wire.write (decToBcd (second)); Wire.write (decToBcd (minuto)); Wire.write (decToBcd (hora)); Wire.write (zero); // inicia Wire.endTransmission ();} if (digitalRead (upButton) ==HIGH) {byte segundo =0; byte minuto =minutos; // Não se confunda:minuto não é igual a minutos byte hora =horas; // Não se confunda:hora não é igual a horasif (minutos <59) {++ minuto; } mais {minuto =0; if (horas <23) {++ hora; } else {hora =0;}} Wire.beginTransmission (DS1307_ADDRESS); Wire.write (zero); // parar Oscillator Wire.write (decToBcd (second)); Wire.write (decToBcd (minuto)); Wire.write (decToBcd (hora)); Wire.write (zero); // iniciar Wire.endTransmission ();}} byte decToBcd (byte val) {// Converter números decimais normais em retorno decimal codificado binário ((val / 10 * 16) + (val% 10));} byte bcdToDec (byte val) {// Converte decimal codificado em binário em números decimais normais return ((val / 16 * 10) + (val% 16));} void printDate () {// Reinicia o ponteiro de registro Wire.beginTransmission (DS1307_ADDRESS); Wire.write (zero); Wire.endTransmission (); Wire.requestFrom (DS1307_ADDRESS, 7); segundos =bcdToDec (Wire.read ()); minutos =bcdToDec (Wire.read ()); horas =bcdToDec (Wire.read () &0b111111); // tempo de 24 horas // imprime a data Serial.print (horas); // Remova o comentário para visualizar o tempo no monitor serial Serial.print (":"); // Serial.println (minutos); // Não se esqueça de descomentar 'Serial.begin' em 'configuração vazia' acima // Níveis de medidores específicos para cada hora // Você provavelmente terá que ajustar esses valores.// Brinque com os valores até obter o que você quer. if (lastMinute! =minutos) {if (horas ==1 || horas ==13) {analogWrite (leftMeter, 0); // ajusta o nível do medidor à esquerda (hora)} if (horas ==2 || horas ==14) {analogWrite (leftMeter, 29); // ajusta o nível do medidor à esquerda (hora)} if (horas ==3 || horas ==15) {analogWrite (leftMeter, 52); // ajusta o nível do medidor à esquerda (hora)} if (horas ==4 || horas ==16) {analogWrite (leftMeter, 75); // ajusta o nível do medidor à esquerda (hora)} if (horas ==5 || horas ==17) {analogWrite (leftMeter, 98); // ajusta o nível do medidor à esquerda (horas)} if (horas ==6 || horas ==18) {analogWrite (leftMeter, 130); // ajusta o nível do medidor à esquerda (hora)} if (horas ==7 || horas ==19) {analogWrite (leftMeter, 152); // ajusta o nível do medidor à esquerda (hora)} if (horas ==8 || horas ==20) {analogWrite (leftMeter, 172); // ajusta o nível do medidor à esquerda (hora)} if (horas ==9 || horas ==21) {analogWrite (leftMeter, 192); // ajusta o nível do medidor à esquerda (horas)} if (horas ==10 || horas ==22) {analogWrite (leftMeter, 213); // ajusta o nível do medidor à esquerda (hora)} if (horas ==11 || horas ==23) {analogWrite (leftMeter, 234); // ajusta o nível do medidor à esquerda (hora)} if (horas ==0 || horas ==12) {analogWrite (leftMeter, 255); // ajusta o nível do medidor à esquerda (horas)} if (minutos * 4,75 <255) {// aumenta o valor PWM em 4,75 a cada minuto analogWrite (rightMeter, minutos * 4,75); // Tive que usar 4,75 no meu medidor para obter 30 minutos para apontar exatamente para cima} else {// perfeito seria 4,25 porque 4,25 * 60 =255 analogWrite (rightMeter, 255); } lastMinute =minutos; if (segundos * 4,25 <255) {analogWrite (secMeter, segundos * 4,25); } else {analogWrite (secMeter, 255); } lastSecond =segundos; }} 

Esquemas


Processo de manufatura

  1. Relógio de visão pov do Arduino
  2. Simple Word Clock (Arduino)
  3. Relógio Arduino com horas de oração islâmica
  4. Relógio mestre
  5. Flores - Arduino Nano, CrazyCircuits, DFRobot
  6. Relógio POV de LED estilo analógico
  7. FlightGear Analog Trim Tab Wheel
  8. Medidores de painel simplificam o design
  9. Opções de painel digital x analógico
  10. O que é um medidor de painel?