산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

Arduino 아날로그 패널 미터 시계

구성품 및 소모품

Arduino Nano R3
× 1
Maxim 통합 DS3231M - ±5ppm, I2C 실시간 클록
× 1
1mA 전류계
× 3
5kOhm 저항기
× 3
저항 10k 옴
× 2
SparkFun 푸시버튼 스위치 12mm
× 2

앱 및 온라인 서비스

Arduino IDE

이 프로젝트 정보

나는 Arduino Nano와 1mA 전류계로 이 멋진 나무 아날로그 스타일 시계를 만들었습니다. 여기에서 아이디어를 얻었습니다. 초를 표시하기 위해 코드의 일부가 추가되었습니다. 또한 실행 시 0에서 최대까지 전체 스케일을 통과하는 부분이 추가되었습니다. 교정 목적을 위한 값. 우리가 사용하는 전류계에 따라 5k 저항의 값이 다를 수 있습니다. 모든 미터가 약간 다르기 때문에 PWM 값은 설계에 따라 조정해야 합니다. 특히 내 미터와 함께 작동하도록 설정되어 있으므로 일부 값을 변경해야 합니다.

<섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

코드

<울>
  • 코드
  • 코드Arduino
    /* 아날로그 패널 미터 - 시계 전용 모드 Instructables 링크:http://www.instructables.com/id/Analog-VU-meter-and-Clock-Arduino-Powered/ 크레딧:bildr - DS1307 RTC 코드 http://bildr.org/2011/03/ds1307-arduino/ _____________________ 배선은 다음과 같습니다. - USB 빨간색 선(5v)에서 VCC로 - USB 검정색 선에서 GND로 - 버튼 - 왼쪽/아래로 디지털 2로 연결(arduino 자습서:http //arduino.cc/en/uploads/Tutorial/button.png ) - 오른쪽/최대 디지털 3 - DS1307 RTC - SDA에서 아날로그 4 - SCL에서 아날로그 5 - 왼쪽 아날로그 미터에서 디지털 5(PWM) - 오른쪽 아날로그 미터 대 디지털 6(PWM)_-초 아날로그 미터 대 디지털 9_(PWM)__________ 참고:모든 미터가 약간 다르기 때문에 PWM 값은 설계에 따라 조정해야 합니다. 내 코드를 자유롭게 사용할 수 있지만 내 미터와 특별히 작동하도록 설정되어 있기 때문에 일부 값을 변경해야 합니다. */#include "Wire.h#define DS1307_ADDRESS 0x68byte 0 =0x00; //문제 #527에 대한 해결 방법int downButton =2; // 아래로 푸시 버튼으로 시간 조정(핀 2)int upButton =3; // 시간을 조정하는 위쪽 푸시 버튼(핀 3)int hour =0;int minutes =0;int seconds =0;int lastMinute =0;int lastSecond =0;int leftMeter =5; // 왼쪽 미터(시간)는 핀 5에 연결됩니다. rightMeter =6; // 오른쪽 미터(min)는 핀 6에 연결됩니다. int secMeter=9; //초 미터(초)는 핀 9에 연결됩니다. void setup(){ Wire.begin(); Serial.begin(9600); //시리얼 모니터에서 시간 보기 pinMode(leftMeter, OUTPUT); // 출력 및 입력 초기화 pinMode(rightMeter, OUTPUT); 핀모드(초미터, 출력); digitalWrite(왼쪽 미터, 높음); // 시작 시 미터 테스트 digitalWrite(rightMeter, HIGH); 디지털 쓰기(초미터, 높음); 디지털 쓰기(13, 높음); 지연(1000); digitalWrite(leftMeter, LOW); digitalWrite(rightMeter, LOW); digitalWrite(secMeter, LOW); 디지털 쓰기(13, 낮음); 지연(1000);}무효 루프(){ printDate(); 지연(75); // 버튼으로 시간 변경 if (digitalRead(downButton) ==HIGH){ byte second =seconds; // 혼동하지 마십시오. 초는 초와 동일하지 않습니다. 바이트 분 =분; // 혼동하지 마십시오. 분은 분과 동일하지 않습니다. byte hour =hours; // 혼동하지 마십시오. 시간은 hoursif (분> 0){ --minute; }else{ 분 =59; if (시간> 0){ -- 시간; }else{ 시간 =23;}} Wire.beginTransmission(DS1307_ADDRESS); Wire.write(제로); //오실레이터 중지 Wire.write(decToBcd(second)); Wire.write(decToBcd(분)); Wire.write(decToBcd(시간)); Wire.write(제로); //Wire.endTransmission() 시작;} if (digitalRead(upButton) ==HIGH){ 바이트 초 =0; 바이트 분 =분; // 혼동하지 마십시오. 분은 분과 동일하지 않습니다. byte hour =hours; // 혼동하지 마십시오:hour는 hoursif (minutes <59){ ++minute; }else{ 분 =0; if (시간 <23){ ++ 시간; }else{ 시간 =0;}} Wire.beginTransmission(DS1307_ADDRESS); Wire.write(제로); //오실레이터 중지 Wire.write(decToBcd(second)); Wire.write(decToBcd(분)); Wire.write(decToBcd(시간)); Wire.write(제로); //start Wire.endTransmission();} }byte decToBcd(byte val){// 일반 십진수를 이진 코드 십진수로 변환 return ( (val/10*16) + (val%10) );}byte bcdToDec(byte val) {// 이진 코드 십진수를 일반 십진수로 변환 return ( (val/16*10) + (val%16) );}void printDate(){ // 레지스터 포인터 재설정 Wire.beginTransmission(DS1307_ADDRESS); Wire.write(제로); Wire.endTransmission(); Wire.requestFrom(DS1307_ADDRESS, 7); 초 =bcdToDec(Wire.read()); 분 =bcdToDec(Wire.read()); 시간 =bcdToDec(Wire.read() &0b111111); //24시간제 //날짜 출력 Serial.print(hours); // 직렬 모니터에서 시간을 보려면 주석 해제 Serial.print(":"); // Serial.println(분); // 위의 'void setup'에서 'Serial.begin' 주석을 제거하는 것을 잊지 마십시오. // 각 시간에 대한 특정 미터 수준 // 이 값을 조정해야 할 것입니다.// 다음 값을 얻을 때까지 값을 사용합니다. 당신이 원하는 것. if (lastMinute !=분){ if (시간 ==1 || 시간 ==13){ analogWrite(leftMeter, 0); // 왼쪽(시간) 미터 레벨 조정 } if (시간 ==2 || 시간 ==14){ analogWrite(leftMeter, 29); // 왼쪽(시간) 미터 레벨 조정 } if (시간 ==3 || 시간 ==15){ analogWrite(leftMeter, 52); // 왼쪽(시간) 미터 레벨 조정 } if (시간 ==4 || 시간 ==16){ analogWrite(leftMeter, 75); // 왼쪽(시간) 미터 레벨 조정 } if (시간 ==5 || 시간 ==17){ analogWrite(leftMeter, 98); // 왼쪽(시간) 미터 레벨 조정 } if (시간 ==6 || 시간 ==18){ analogWrite(leftMeter, 130); // 왼쪽(시간) 미터 레벨 조정 } if (시간 ==7 || 시간 ==19){ analogWrite(leftMeter, 152); // 왼쪽(시간) 미터 레벨 조정 } if (시간 ==8 || 시간 ==20){ analogWrite(leftMeter, 172); // 왼쪽(시간) 미터 레벨 조정 } if (시간 ==9 || 시간 ==21){ analogWrite(leftMeter, 192); // 왼쪽(시간) 미터 레벨 조정 } if (시간 ==10 || 시간 ==22){ analogWrite(leftMeter, 213); // 왼쪽(시간) 미터 레벨 조정 } if (시간 ==11 || 시간 ==23){ analogWrite(leftMeter, 234); // 왼쪽(시간) 미터 레벨 조정 } if (시간 ==0 || 시간 ==12){ analogWrite(leftMeter, 255); // 왼쪽(시간) 미터 레벨 조정 } if (분 * 4.75 <255){ // PWM 값을 매분 4.75씩 증가 analogWrite(rightMeter, minutes * 4.75); // 30분 동안 정확히 똑바로 가리키기 위해 미터에서 4.75를 사용해야 했습니다. }else{ // 4.25 * 60 =255이기 때문에 완벽은 4.25가 됩니다. analogWrite(rightMeter, 255); } lastMinute =분; if (초 * 4.25 <255){ analogWrite(secMeter, 초 *4.25); }else{ analogWrite(secMeter, 255); } lastSecond =초; }}

    회로도


    제조공정

    1. Arduino 관점 시계
    2. 단순 워드 클럭(Arduino)
    3. 이슬람 기도 시간이 있는 Arduino 시계
    4. 마스터 시계
    5. 꽃 - Arduino Nano, CrazyCircuits, DFRobot
    6. 아날로그 스타일 LED POV 시계
    7. FlightGear 아날로그 트림 탭 휠
    8. 패널 미터로 설계 간소화
    9. 디지털 대 아날로그 패널 선택
    10. 패널 미터 란 무엇입니까?