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

이탈리아어 단어 시계

구성품 및 소모품

Arduino Nano R3
× 1
NeoPixel 스트립
144
× 1
Adafruit Standard LCD - 파란색 바탕에 16x2 흰색
I2C 모듈 사용
× 1
실시간 시계(RTC)
× 1
SparkFun 푸시버튼 스위치 12mm
× 4
저항 10k 옴
× 3
저항 475옴
× 1
1N4007 – 고전압, 고전류 정격 다이오드
× 3
DC DC 컨버터 조정 가능한 스텝 다운
× 1
벽 프레임 RIBBA(Ikea)
× 1
Gewiss 상자 덮개 150 x 110
× 1
알루미늄 스트립 230mm x 10mm x 1mm
× 1

이 프로젝트 정보

아두이노 시계에 대한 열정으로 인해 "Word Clock"을 만들게 되었습니다. 저는 이탈리아에 살고 있기 때문에 이탈리아어로 말을 했습니다. 프로젝트의 실현을 위해 튜토리얼 "Word Clock Javelin"에서 영감을 받아 약간의 변경을 가했습니다... 그리고 여기 "Word Clock of Italy"가 있습니다!

이탈리아어로 "시간 말하기" 외에도 가족(고양이 포함)의 생일을 추가하고 싶었습니다. "프레임워크" 구성을 위해 이미 IKEA에서 만든 것을 사용하고 내부 변경 사항은 집에 있는 재료를 사용했습니다.

화면의 구현을 위해 잉크스케이프로 그린 패턴이 보여집니다.

내 패널은 200mm의 공간에 12 x 12 글자를 측정합니다. 3D 프린터가 없어서 알루미늄 스트립으로 격자를 만들고 접착 스폰지로 LED의 접점을 분리하여 빛을 차단하는 역할도 했습니다.

전자 회로

시간을 유지하기 위해 RTC를 사용했습니다. .

시간을 조정할 수 있도록 버튼(P1, P2, P3)과 16 x 2 디스플레이를 추가했습니다("Clock Set Date Time" 프로젝트 참조). 배선도에서 볼 수 있듯이 버튼은 풀다운을 통해 Arduino에 연결됩니다. 회로.

디스플레이는 시간 조정 기능만 하므로 점퍼를 버튼으로 교체했습니다. , 그렇게 함으로써, 그것은 그것의 용도에 대해서만 조명을 밝힙니다. 다이오드 D1은 역극성 보호 역할을 합니다.

다이오드 D2는 어떤 이유로든 Arduino 스케치를 변경해야 할 때 네오픽셀 스트립에 전원을 공급하지 않는 역할을 합니다(너무 많은 전류로 인해 손상될 수 있음). 다이오드 D3는 네오픽셀의 전압인 5볼트를 가져오는 역할을 합니다.

회로도, Fritzing 방식, PCB 레이아웃을 첨부합니다.

매트릭스

매트릭스를 구현하기 위해 다양한 스트립을 그림과 같이 연결했습니다. 왼쪽 위에서 아래로 지그재그로 이동합니다.

Arduino 라이브러리

<울>
  • RTC
  • <울>
  • LiquidCrystal_I2C
  • <울>
  • Adafruit_NeoPixel
  • 코드 설명

    코드는 5개의 주요 부분으로 나뉩니다:

    <울>
  • "DisplayDateTime":LCD 디스플레이에 날짜와 시간을 표시합니다.
  • <울>
  • "HourClock":패널에 시간 표시
  • <울>
  • "MinuteClock":패널에 분 표시
  • <울>
  • "Auguri":생일 축하합니다
  • <울>
  • "Void paintWord (arrWord int [], uint32_t intColor)"는 네오픽셀을 켜는 코드의 핵심이고, "arrWord int []"는 LED가 켜지고, "uint32_t intColor"는 색상입니다.
  • 더 정확한 시계를 얻기 위해 누진분에 해당하는 숫자 1, 2, 3, 4를 추가했습니다.

    :"SONO LE ORE DIECI E VENTI 4"는 10:24(10:20 + 00:04)를 의미하고, "SONO LE DIECI MENO QUINDICI 2"는 09:47(09:45 + 00:02)를 의미합니다.

    어셈블리

    <울>
  • 프레임을 열고 유리를 잘 닦습니다.
  • <울>
  • 아세테이트 인서트 프린팅
  • <울>
  • 인쇄 용지 삽입
  • <울>
  • 그리드 삽입
  • <울>
  • LED 패널 삽입
  • <울>
  • 컨트롤 박스보다 약간 큰 합판을 붙입니다.
  • <울>
  • 셀프 태핑 나사로 컨트롤 박스 고정
  • 두 지문의 정렬에 세심한 주의

    위치

    거실에 두기 전에 그녀가 좋아 보입니다.

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

    코드

    <울>
  • 이탈리아어 단어시계
  • 이탈리아어 WordClockArduino
    /*:프로젝트:WordClock:저자:Tiziano Bianchettin:Date:25/09/2016:Revision:1:License:Public Domainthanks to:http://www.instructables.com/id/Javelins-Word-Clock / http://arduinoenonsolo.blogspot.it/2012/12/orologio-con-arduino-e-il-ds1307.html http://www.mauroalfieri.it/ http://www.danielalberti.it/ http://www.maffucci.it/ 내 전자 연구실 교수 "Perito Carli" *///************libraries****************//# include #include #include #include //*************neopixel************ *******//#define PIN 9 // 핀 neopixel#define NUM_LEDS 144 // 12 x 12#define GIORNO 255 ​​// 전체 on#define SERA 25 // 10번째 onAdafruit_NeoPixel 스트립 =Adafruit_NeoPixel(NUM_LEDS, PIN , NEO_GRB + NEO_KHZ800); // 144 led, 핀 9int intBrightness;//****************COLORS**************//uint32_t Red =strip.Color(255, 0, 0); uint32_t 녹색 =스트립.색상(0, 255, 0);uint32_t 파란색 =스트립.색상(0, 0, 255);uint32_t 흰색 =스트립.색상(255, 255, 255);uint32_t 노란색 =스트립.색상( 255 , 255, 0);uint32_t 보라색 =스트립.색상(60, 0, 255);uint32_t 꺼짐 =스트립.색상(0, 0, 0);LiquidCrystal_I2C lcd(0x27,16,2); // 디스플레이 I2C 16 x 2RTC_DS1307 RTC;int P1=6; // 버튼 SET MENU'int P2=7; // 버튼 +int P3=8; // 버튼 -int oraagg;int minagg;int annoagg;int meseagg;int dayagg;int 메뉴 =0;int ora;//********프레젠테이션*********//int txtSONO[] ={1,2,3,4,6,7,9,10,11,-1};//********시간*********//int txtUNA[] ={20,21,22,-1};int txtDUE[] ={17,18,19,-1};int txtTRE[] ={57,58,59,-1};int txtQUATTRO[ ] ={96,97,98,99,100,101,102,-1};int txtCINQUE[] ={30,31,32,33,34,35,-1};int txtSEI[] ={103,104,105,-1};int txtSETTE[] ={48,49,50,51,52,-1};int txtOTTO[] ={72,73,74,75,-1};int txtNOVE[] ={60,61,62,63 ,-1};int txtDIECI[] ={12,13,14,15,16,-1};int txtUNDICI[] ={84,85,86,87,88,89,-1};int txtDODOCI[ ] ={90,91,92,93,94,95,-1};//********생일 축하합니다*********//int txtAUGURI[] ={24, 25,26,27,28,29,-1};int txtSIMONE[] ={36,37,38,39,40,41,-1};int txtJACOPO[] ={42,43,44,45, 46,47,-1};int txtMINU[] ={53,54,55,56,-1};int txtTIZIANO[] ={65,66,67,68,69,70,71,-1}; int txtMARILENA[] ={76,77,78,79,80,81,82,83,-1};//********분*********//int txtE [] ={107,-1};int txtMENO[] ={116,117,118,119,-1};int txtMUN O[] ={5,-1};int txtMDUE[] ={64,-1};int txtMTRE[] ={106,-1};int txtMQUATTRO[] ={125,-1};int txtMCINQUE[ ={132,133,134,135,136,137, -1} INT txtMDIECI [] ={120,121,122,123,124, -1} INT txtQUINDICI [] ={108,109,110,111,112,113,114,115, -1} INT txtVENTI [] ={139,140,141,142,143, -1} INT txtTRENTA [] ={126,127,128,129,130,131,-1}; 무효 설정(){ strip.begin(); 스트립쇼(); lcd.begin(); lcd.backlight(); lcd.clear(); 핀모드(P1,입력); 핀모드(P2,입력); 핀모드(P3,입력); Serial.begin(9600); Wire.begin(); RTC.begin(); if (!RTC.isrunning()) { Serial.println("RTC가 실행되고 있지 않습니다!"); // 컴파일 타임에 날짜와 시간 설정 RTC.adjust(DateTime(__DATE__, __TIME__)); } // RTC.adjust(DateTime(__DATE__, __TIME__)); //시간을 조정하기 위해 "//"를 제거 // 기본 디스플레이는 날짜와 시간을 보여줍니다 int menu=0;} void loop(){ // SET 버튼을 누르고 메뉴 인덱스를 늘리는지 확인 if(digitalRead( P1)) { 메뉴=메뉴+1; }// 어떤 서브루틴으로 가야 할까요? if (메뉴==0) { DisplayDateTime(); // void DisplayDateTime DateTime now =RTC.now(); if((now.hour()>=19) || (now.hour() <7 )){ // 주야간 밝기 조정 intBrightness =SERA; } else{ intBrightness =GIORNO; } 스트립.setBrightness(intBrightness); 스트립쇼(); int timeMin =now.min(); int modMin =timeMin % 5; // https://www.arduino.cc/en/Reference/Modulo if ( modMin ==0){ // LED의 색상이 1분마다 바뀌고 해당 숫자가 켜집니다. paintWord(txtSONO, White); 페인트워드(txtMQUATTRO, OFF); } else if ( modMin ==1){ paintWord(txtSONO, 노란색); 페인트워드(txtMUNO, 레드); } else if ( modMin ==2){ paintWord(txtSONO, Green); paintWord(txtMUNO, 끄기); paintWord(txtMDUE, 파란색); } else if ( modMin ==3){ paintWord(txtSONO, 파란색); paintWord(txtMDUE, 끄기); paintWord(txtMTRE, 녹색); } else if ( modMin ==4){ paintWord(txtSONO, Red); paintWord(txtMTRE, 끄기); paintWord(txtMQUATTRO, 노란색); } 시간시계(); // 무효 HourClock MinuteClock(); // MinuteClock 무효화 Auguri(); // Auguri를 무효화합니다. strip.show(); } if (메뉴==1) { DisplaySetHour(); } if (메뉴==2) { DisplaySetMinute(); } if (메뉴==3) { DisplaySetYear(); } if (메뉴==4) { DisplaySetMonth(); } if (메뉴==5) { DisplaySetDay(); } if (메뉴==6) { StoreAgg(); 지연(500); 메뉴=0; } delay(100);}void showStrip() { #ifdef ADAFRUIT_NEOPIXEL_H // NeoPixel strip.show(); #endif #ifndef ADAFRUIT_NEOPIXEL_H // FastLED FastLED.show(); #endif}void setPixel(int Pixel, byte red, byte green, byte blue) { #ifdef ADAFRUIT_NEOPIXEL_H // NeoPixel strip.setPixelColor(Pixel, strip.Color(red, green, blue)); #endif #ifndef ADAFRUIT_NEOPIXEL_H // FastLED leds[픽셀].r =빨간색; leds[픽셀].g =녹색; leds[픽셀].b =파란색; #endif}void setAll(바이트 레드, 바이트 그린, 바이트 블루) { for(int i =0; i =40){ // 40분부터 "시간"에 1 추가 ora =ora+1; } 스위치 (ora ) { 사례 0:사례 12:사례 24:paintWord(txtUNDICI, Off); 스트립쇼(); if ( modMin ==0){ paintWord(txtDODOCI, 흰색); 스트립쇼(); } else if ( modMin ==1){ paintWord(txtDODOCI, 노란색); 스트립쇼(); } else if ( modMin ==2){ paintWord(txtDODOCI, 녹색); 스트립쇼(); } else if ( modMin ==3){ paintWord(txtDODOCI, 파란색); 스트립쇼(); } else if ( modMin ==4){ paintWord(txtDODOCI, 빨강); 스트립쇼(); } 부서지다; 사례 1:사례 13:paintWord(txtDODOCI, 끄기); 스트립쇼(); if ( modMin ==0){ paintWord(txtUNA, 흰색); 스트립쇼(); } else if ( modMin ==1){ paintWord(txtUNA, 노란색); 스트립쇼(); } else if ( modMin ==2){ paintWord(txtUNA, Green); 스트립쇼(); } else if ( modMin ==3){ paintWord(txtUNA, 파랑); 스트립쇼(); } else if ( modMin ==4){ paintWord(txtUNA, Red); 스트립쇼(); } 부서지다; 사례 2:사례 14:paintWord(txtUNA, Off); 스트립쇼(); if ( modMin ==0){ paintWord(txtDUE, 흰색); 스트립쇼(); } else if ( modMin ==1){ paintWord(txtDUE, 노란색); 스트립쇼(); } else if ( modMin ==2){ paintWord(txtDUE, 녹색); 스트립쇼(); } else if ( modMin ==3){ paintWord(txtDUE, 파란색); 스트립쇼(); } else if ( modMin ==4){ paintWord(txtDUE, Red); 스트립쇼(); }부서지다; 사례 3:사례 15:paintWord(txtDUE, 꺼짐); 스트립쇼(); if ( modMin ==0){ paintWord(txtTRE, 흰색); 스트립쇼(); } else if ( modMin ==1){ paintWord(txtTRE, 노란색); 스트립쇼(); } else if ( modMin ==2){ paintWord(txtTRE, 녹색); 스트립쇼(); } else if ( modMin ==3){ paintWord(txtTRE, 파랑); 스트립쇼(); } else if ( modMin ==4){ paintWord(txtTRE, Red); 스트립쇼(); } 부서지다; 사례 4:사례 16:paintWord(txtTRE, 끄기); 스트립쇼(); if ( modMin ==0){ paintWord(txtQUATTRO, 흰색); 스트립쇼(); } else if ( modMin ==1){ paintWord(txtQUATTRO, 노란색); 스트립쇼(); } else if ( modMin ==2){ paintWord(txtQUATTRO, 녹색); 스트립쇼(); } else if ( modMin ==3){ paintWord(txtQUATTRO, 파란색); 스트립쇼(); } else if ( modMin ==4){ paintWord(txtQUATTRO, Red); 스트립쇼(); } 부서지다; 사례 5:사례 17:paintWord(txtQUATTRO, 끄기); 스트립쇼(); if ( modMin ==0){ paintWord(txtCINQUE, 흰색); 스트립쇼(); } else if ( modMin ==1){ paintWord(txtCINQUE, 노란색); 스트립쇼(); } else if ( modMin ==2){ paintWord(txtCINQUE, 녹색); 스트립쇼(); } else if ( modMin ==3){ paintWord(txtCINQUE, 파란색); 스트립쇼(); } else if ( modMin ==4){ paintWord(txtCINQUE, 빨강); 스트립쇼(); } 부서지다; 사례 6:사례 18:paintWord(txtCINQUE, 끄기); 스트립쇼(); if ( modMin ==0){ paintWord(txtSEI, 흰색); 스트립쇼(); } else if ( modMin ==1){ paintWord(txtSEI, 노란색); 스트립쇼(); } else if ( modMin ==2){ paintWord(txtSEI, 녹색); 스트립쇼(); } else if ( modMin ==3){ paintWord(txtSEI, 파란색); 스트립쇼(); } else if ( modMin ==4){ paintWord(txtSEI, Red); 스트립쇼(); } 부서지다; 사례 7:사례 19:paintWord(txtSEI, 꺼짐); 스트립쇼(); if ( modMin ==0){ paintWord(txtSETTE, 흰색); 스트립쇼(); } else if ( modMin ==1){ paintWord(txtSETTE, 노란색); 스트립쇼(); } else if ( modMin ==2){ paintWord(txtSETTE, 녹색); 스트립쇼(); } else if ( modMin ==3){ paintWord(txtSETTE, 파란색); 스트립쇼(); } else if ( modMin ==4){ paintWord(txtSETTE, 빨강); 스트립쇼(); } 부서지다; 사례 8:사례 20:paintWord(txtSETTE, 끄기); 스트립쇼(); if ( modMin ==0){ paintWord(txtOTTO, 흰색); 스트립쇼(); } else if ( modMin ==1){ paintWord(txtOTTO, 노란색); 스트립쇼(); } else if ( modMin ==2){ paintWord(txtOTTO, 녹색); 스트립쇼(); } else if ( modMin ==3){ paintWord(txtOTTO, 파란색); 스트립쇼(); } else if ( modMin ==4){ paintWord(txtOTTO, Red); 스트립쇼(); } 부서지다; 사례 9:사례 21:paintWord(txtOTTO, 끄기); 스트립쇼(); if ( modMin ==0){ paintWord(txtNOVE, 흰색); 스트립쇼(); } else if ( modMin ==1){ paintWord(txtNOVE, 노란색); 스트립쇼(); } else if ( modMin ==2){ paintWord(txtNOVE, 녹색); 스트립쇼(); } else if ( modMin ==3){ paintWord(txtNOVE, 파란색); 스트립쇼(); } else if ( modMin ==4){ paintWord(txtNOVE, Red); 스트립쇼(); } 부서지다; 사례 10:사례 22:paintWord(txtNOVE, 끄기); 스트립쇼(); if ( modMin ==0){ paintWord(txtDIECI, 흰색); 스트립쇼(); } else if ( modMin ==1){ paintWord(txtDIECI, 노란색); 스트립쇼(); } else if ( modMin ==2){ paintWord(txtDIECI, 녹색); 스트립쇼(); } else if ( modMin ==3){ paintWord(txtDIECI, 파란색); 스트립쇼(); } else if ( modMin ==4){ paintWord(txtDIECI, Red); 스트립쇼(); } 부서지다; 사례 11:사례 23:paintWord(txtDIECI, 끄기); 스트립쇼(); if ( modMin ==0){ paintWord(txtUNDICI, 흰색); 스트립쇼(); } else if ( modMin ==1){ paintWord(txtUNDICI, 노란색); 스트립쇼(); } else if ( modMin ==2){ paintWord(txtUNDICI, 녹색); 스트립쇼(); } else if ( modMin ==3){ paintWord(txtUNDICI, 파란색); 스트립쇼(); } else if ( modMin ==4){ paintWord(txtUNDICI, Red); 스트립쇼(); }부서지다; }} 무효 MinuteClock(){ DateTime now =RTC.now(); int timeMin =now.min(); int modMin =timeMin % 5; // https://www.arduino.cc/en/Reference/Modulo switch (now.minute()) { 사례 5:사례 6:사례 7:사례 8:사례 9:if ( modMin ==0){ paintWord (txtE, 흰색); paintWord(txtMCINQUE, 흰색); 스트립쇼(); } else if ( modMin ==1){ paintWord(txtE, 노란색); paintWord(txtMCINQUE, 노란색); 스트립쇼(); } else if ( modMin ==2){ paintWord(txtE, 녹색); paintWord(txtMCINQUE, 녹색); 스트립쇼(); } else if ( modMin ==3){ paintWord(txtE, 파랑); paintWord(txtMCINQUE, 파란색); 스트립쇼(); } else if ( modMin ==4){ paintWord(txtE, Red); paintWord(txtMCINQUE, 빨강); 스트립쇼(); }부서지다; 사례 10:사례 11:사례 12:사례 13:사례 14:paintWord(txtMCINQUE, Off); 스트립쇼(); if ( modMin ==0){ paintWord(txtE, 흰색); paintWord(txtMDIECI, 흰색); 스트립쇼(); } else if ( modMin ==1){ paintWord(txtE, 노란색); paintWord(txtMDIECI, 노란색); 스트립쇼(); } else if ( modMin ==2){ paintWord(txtE, 녹색); paintWord(txtMDIECI, 녹색); 스트립쇼(); } else if ( modMin ==3){ paintWord(txtE, 파랑); paintWord(txtMDIECI, 파란색); 스트립쇼(); } else if ( modMin ==4){ paintWord(txtE, Red); 페인트워드(txtMDIECI, 레드); 스트립쇼(); } 부서지다; 사례 15:사례 16:사례 17:사례 18:사례 19:paintWord(txtMDIECI, Off); 스트립쇼(); if ( modMin ==0){ paintWord(txtE, 흰색); paintWord(txtQUINDICI, 흰색); 스트립쇼(); } else if ( modMin ==1){ paintWord(txtE, 노란색); paintWord(txtQUINDICI, 노란색); 스트립쇼(); } else if ( modMin ==2){ paintWord(txtE, 녹색); paintWord(txtQUINDICI, 녹색); 스트립쇼(); } else if ( modMin ==3){ paintWord(txtE, 파랑); paintWord(txtQUINDICI, 파란색); 스트립쇼(); } else if ( modMin ==4){ paintWord(txtE, Red); paintWord(txtQUINDICI, 빨강); 스트립쇼(); }부서지다; 케이스 20:케이스 21:케이스 22:케이스 23:케이스 24:paintWord(txtQUINDICI, Off); 스트립쇼(); if ( modMin ==0){ paintWord(txtE, 흰색); paintWord(txtVENTI, 흰색); 스트립쇼(); } else if ( modMin ==1){ paintWord(txtE, 노란색); paintWord(txtVENTI, 노란색); 스트립쇼(); } else if ( modMin ==2){ paintWord(txtE, 녹색); paintWord(txtVENTI, 녹색); 스트립쇼(); } else if ( modMin ==3){ paintWord(txtE, 파랑); paintWord(txtVENTI, 파란색); 스트립쇼(); } else if ( modMin ==4){ paintWord(txtE, Red); paintWord(txtVENTI, 빨강); 스트립쇼(); }부서지다; 사례 25:사례 26:사례 27:사례 28:사례 29:if ( modMin ==0){ paintWord(txtE, White); paintWord(txtVENTI, 흰색); paintWord(txtMCINQUE, 흰색); 스트립쇼(); } else if ( modMin ==1){ paintWord(txtE, 노란색); paintWord(txtVENTI, 노란색); paintWord(txtMCINQUE, 노란색); 스트립쇼(); } else if ( modMin ==2){ paintWord(txtE, 녹색); paintWord(txtVENTI, 녹색); paintWord(txtMCINQUE, Green);...이 파일은 잘렸습니다. 전체 내용을 보려면 다운로드하십시오.
    이탈리아어 단어시계

    맞춤형 부품 및 인클로저

    wordklock_aWvuaZRw4N.svg

    회로도

    wordklock_JBoZPYrsYr.fzz

    제조공정

    1. 갈증 경보 식물 알람
    2. 단순 워드 클럭(Arduino)
    3. 단어 단위의 시간 분해능이 있는 워드 시계
    4. Sigfox kWh 미터
    5. 블루투스 온도 모니터
    6. 제스처 제어 잠금
    7. 컴패니언 IC
    8. USB MIDI 어댑터
    9. Arduino용 절연 아날로그 입력
    10. 반응 시간 측정