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

Arduino로 DIY 가장 간단한 IV9 Numitron 시계

구성품 및 소모품

Arduino Nano R3
× 1
Maxim 통합 DS3231M - ±5ppm, I2C 실시간 클록
× 1
TPIC6C595 시프트 레지스터
× 4
IV9 Numitron 튜브
× 4
LED(일반)
× 2
커패시터 100nF
× 4
1N4007 – 고전압, 고전류 정격 다이오드
× 2
슬라이드 스위치
× 1
저항 1k 옴
× 1

필요한 도구 및 기계

납땜 인두(일반)
납땜 와이어, 무연

앱 및 온라인 서비스

Arduino IDE

이 프로젝트 정보

이번에는 멋진 레트로 스타일의 Numitron 튜브 시계를 만드는 방법을 보여 드리겠습니다. 정확한 시간 외에도 장치는 30초마다 날짜, 연도 및 현재 온도를 간략하게 표시합니다.

주어진 Github 페이지(https://github.com/remotheman/simple_numitron_clock_with_4_shift_registers_and_rtc3231)에서 이 시계를 만들 생각을 했습니다.

먼저 사이트의 지침에 따라 프로젝트를 만들었고 많은 결함이 있음을 발견했습니다.

74HC595를 사용한 첫 번째 프로토타입은 다음과 같습니다.

74HC595 IC의 경우 데이터시트에 따른 총 최대 전류는 70밀리암페어이며, 이 경우 몇 배 초과(숫자 8의 경우 약 160밀리암페어)되어 잠시 후 IC가 과열되어 제대로 작동하지 않습니다. 또 다른 결점은 코드 루프에 너무 많은 지연이 있어서 60초에 한 번만 시간을 읽는다는 것입니다. 그림에서 주로 위 페이지의 지침에 따라 만들어진 완성된 시계를 볼 수 있습니다. 처음에는 완전히 정상적으로 작동하지만 잠시 후 임의의 세그먼트가 활성화되고 IC, numitron 또는 마이크로 컨트롤러가 매우 쉽게 연소될 수 있습니다. 첫 번째 경우에는 더 큰 전류를 위해 제공되는 74HC595 대신 TPIC6C595 IC를 사용하여 문제를 해결했습니다. 또한 이 두 집적 회로는 핀 호환이 되지 않는다는 점에 주의해야 합니다.

-------------------------------------------------- --------------------------------

https://www.pcbgogo.com/promo/from_MirkoPavleskiMK

-------------------------------------------------- ----------------------------------

그리고 새로운 코드는 delay() 함수 대신 millis()를 사용하여 생성되었으므로 이제 실시간 시계를 지속적으로 읽습니다. 또한 뉴미트론의 광도를 변경하여 수명을 변경하는 스위치를 추가했습니다. 보시다시피, 장치는 상대적으로 빌드가 간단하고 이것이 튜브 시계를 만드는 가장 간단한 방법이라고 생각합니다. Numitrons는 저렴하고 쉽게 구할 수 있으며 추가 고전압 전원 공급 장치를 사용하지 않습니다.

이 시계를 만드는 데 몇 가지 구성 요소만 필요합니다.

- 4개의 Numitron 튜브 IV9

- 4개의 집적 회로 TPIC6C595

- 아두이노 마이크로컨트롤러

- DS3231 실시간 클록 모듈

- 초 동안 2개의 LED

- 스위치

- 및 4개의 디커플링 커패시터

실시간 모듈에는 온도계도 포함되어 있어 보다 정확한 온도 표시를 위해 상자 외부에 메쉬로 보호되어 있습니다. 먼저 실시간 클록을 PC 클록과 동기화하는 것이 바람직하며 DS1307RTC 라이브러리를 사용하여 이를 수행합니다. 그런 다음 코드를 업로드하면 장치가 준비됩니다. 버튼의 도움으로 시간을 설정할 수 있도록 코드를 수정하는 것이 남아 있으며 다음 기간에 프로젝트 업데이트로 됩니다.

마지막으로 시계는 적절한 상자에 장착되어 모든 쇼케이스의 아름다운 장식입니다.

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

코드

<울>
  • Arduino 코드
  • Arduino 코드C/C++
    #include  // ds3231RTC_DS3231에 대한 온도가 있는 rtc rtc; //사용할 rtc 모듈 설정#include  //wiring#include  //time lib#include  //time function#include  //rtc #include #define led 7const int latchPin =13; //latchconst int clockPin =10; // clockconst int dataPin =11; //dataunsigned long previousMillis =0; // 마지막으로 저장한 시간 Led 깜박임 간격 =30000; // 깜박일 간격(밀리초) unsigned long previousMillisDiode =0; // 마지막 시간을 저장합니다. Led 깜박임 long intervalDiode =500; // 깜박일 간격(밀리초) const int nums[12] ={ //디스플레이 배열 설정 - 문서에 따르면 핀1은 공통이고 핀2는 도트(스케치에서는 사용되지 않음), 나머지는 시프트 레지스터에 하나씩 연결해야 합니다. 하나 0b10111110, //0 0b00000110, //1 0b01111010, //2 0b01101110, //3 0b11000110, //1 ,1010, //4 0b11101100, //5 0b111110b0, //3 9 0b11001010, //st. 0b10111000 //celz.};int hour1; //시 첫 번째 숫자int hour2; //시초 숫자int min1; //분 첫 번째 숫자int min2; //분초 숫자int day1; // 첫째 날 숫자int day2; //일초숫자intmonth1; //월 첫 번째 숫자intmonth2; //월 초 숫자int year1; //연도 첫 번째 숫자 - 상수 2int year2; //연도 초 숫자 - 상수 0 (당신은 그것을 바꾸기 위해 오래 살고 싶습니까?)int year3; //세 번째 연도 숫자int year4; //연도 4번째 숫자int hourDecimal; // hourint의 10진수 구문 분석 minDecimal; //minint dayDecimal의 10진수 파싱; // dayint monthDecimal의 10진수 구문 분석; //monthint year70의 10진수 구문 분석; // 유닉스 epochint 이후 연도 temp1; //첫 번째 온도 숫자int temp2; //두 번째 온도 숫자int tempDecimal; //온도의 10진수 파싱(처음 두 숫자)void setup() { pinMode(led,OUTPUT); 핀모드(래치핀, 출력); // 시프트 레지스터를 제어할 수 있도록 핀을 출력으로 설정합니다. pinMode(clockPin, OUTPUT); // 시프트 레지스터를 제어할 수 있도록 핀을 출력으로 설정합니다. pinMode(dataPin, OUTPUT); //시프트 레지스터를 제어할 수 있도록 핀을 출력으로 설정합니다. Serial.begin(9600); // SPI 초기화:SPI.begin(); // SS 핀을 로우로 설정하여 칩을 선택합니다. digitalWrite(clockPin,LOW); } 무효 루프() { tmElements_t tm; //DS1307RTC 라이브러리에서 이름 지정 RTC.read(tm); // rtc 시간/날짜/년 읽기 minDecimal =tm.Minute / 10; //10으로 나누어 읽을 수 있도록(짧게) 출력을 구문 분석 hourDecimal =tm.Hour / 10; //10으로 나누어 읽을 수 있도록(짧게) 출력을 구문 분석 dayDecimal =tm.Day / 10; //10으로 나누어 읽을 수 있도록(짧게) 출력을 구문 분석합니다.monthDecimal =tm.Month / 10; //10으로 나누어 읽을 수 있도록(짧게) 출력을 구문 분석 year70 =tm.Year - 30; //유닉스 epoch(1970)에서 빼서 실제 연도를 표시합니다. hour1 =hourDecimal; // 간단합니다. hour2 =tm.Hour - 10 * hourDecimal; // 두 자리 숫자에서 두 번째 숫자만 표시하도록 계산합니다. string minute1 =minuteDecimal; //단순한 분2 =tm.Minute - 10 * minDecimal; // 두 자리 숫자에서 두 번째 숫자만 표시하도록 계산합니다. string day1 =dayDecimal; // 단순 day2 =tm.Day - 10 * dayDecimal; // 두 자리 문자열에서 두 번째 숫자만 표시하도록 계산합니다. month1 =monthDecimal; //단순 월2 =tm.Month - 10 * monthDecimal; // 두 자리 문자열에서 두 번째 숫자만 표시하도록 계산합니다. year1 =2; //첫 해 번호, 정말로 변경해야 합니까? 당신은 비행 자동차 등을 가지고 있습니까? 연도2 =0; // 2년차 숫자, 변경해야 하는 경우 손자와 함께 놀아야 합니다. year3 =year70 / 10; //10으로 나누어 읽을 수 있도록(짧게) 출력을 구문 분석 year4 =year70 - 10 * year3; // 두 자리 문자열에서 두 번째 숫자만 표시하도록 계산 tempDecimal =rtc.getTemperature()/10; //10으로 나누어 읽을 수 있도록(짧게) 출력을 구문 분석 temp1 =tempDecimal; // 단순 temp2 =rtc.getTemperature() - 10 * tempDecimal; //두 자리 문자열에서 두 번째 숫자만 표시하도록 계산 if (millis() - previousMillisDiode>=intervalDiode) { previousMillisDiode =millis(); digitalWrite(led, !digitalRead(led)); //LED 상태 변경}if (millis() - previousMillis>=간격) { previousMillis =millis(); 디지털 쓰기(clockPin, LOW); SPI.전송(0b00000000); SPI.전송(0b00000000); SPI.전송(0b00000000); SPI.전송(0b00000000); 디지털 쓰기(clockPin, HIGH); 지연(500); // '호흡' 효과를 만들기 위해 0.5초 동안 numitron을 끈다. digitalWrite (clockPin, LOW); SPI.transfer(숫자[month2]); SPI.transfer(숫자[month1]); SPI.transfer(숫자[day2]); SPI.transfer(숫자[day1]); 디지털 쓰기(clockPin, HIGH); 지연(1500); 디지털 쓰기(clockPin, LOW); SPI.전송(0b00000000); SPI.전송(0b00000000); SPI.전송(0b00000000); SPI.전송(0b00000000); 디지털 쓰기(clockPin, HIGH); 지연(500); // '호흡' 효과를 만들기 위해 0.5초 동안 numitron을 끈다. digitalWrite (clockPin, LOW); SPI.transfer(숫자[연도4]); SPI.transfer(숫자[년3]); SPI.transfer(숫자[연도2]); SPI.전송(숫자[연도1]); 디지털 쓰기(clockPin, HIGH); 지연(1500); 디지털 쓰기(clockPin, LOW); SPI.전송(0b00000000); SPI.전송(0b00000000); SPI.전송(0b00000000); SPI.전송(0b00000000); 디지털 쓰기(clockPin, HIGH); 지연(500); // '호흡' 효과를 만들기 위해 0.5초 동안 numitron을 끈다. digitalWrite (clockPin, LOW); SPI.전송(0b10111000); SPI.전송(0b11001010); SPI.transfer (nums[temp2]); SPI.transfer(숫자[temp1]); 디지털 쓰기(clockPin, HIGH); 지연(1500); 디지털 쓰기(clockPin, LOW); SPI.전송(0b00000000); SPI.전송(0b00000000); SPI.전송(0b00000000); SPI.전송(0b00000000); 디지털 쓰기(clockPin, HIGH); 지연(500); // '호흡' 효과를 만들기 위해 0.5초 동안 numitron이 꺼짐 } else { digitalWrite (clockPin, LOW); SPI.transfer(숫자[분2]); SPI.전송(숫자[분1]); SPI.전송(숫자[시간2]); SPI.전송(숫자[시간1]); 디지털 쓰기(clockPin, HIGH); }}

    회로도


    제조공정

    1. MPU-6050을 사용한 Arduino 자이로스코프 게임
    2. 이슬람 기도 시간이 있는 Arduino 시계
    3. 마스터 시계
    4. Arduino Temp. 3.2 디스플레이가 있는 모니터 및 실시간 시계
    5. Arduino 및 Nokia 5110 디스플레이가 있는 DIY 전압계
    6. MobBob:Android 스마트폰으로 제어되는 DIY Arduino 로봇
    7. 로터리 인코더가 있는 DIY 간단한 측정 휠
    8. Arduino, Yaler 및 IFTTT가 포함된 IoT 게이지
    9. 단일 LED 매트릭스 Arduino 플립 시계
    10. DS1302 RTC가 있는 간단한 알람 시계