Proses manufaktur
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 4 | |||
![]() |
| × | 3 | |||
![]() |
| × | 1 | |||
![]() |
| × | 3 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Kecintaan saya pada jam tangan Arduino, membuat saya membuat "Word Clock", karena saya tinggal di Italia, saya berbicara dalam bahasa Italia. Untuk realisasi proyek, saya terinspirasi oleh tutorial "Word Clock Javelin", saya membuat beberapa perubahan kecil ... dan di sini untuk Anda "Word Clock of Italy"!
Selain "beri tahu jamnya" dalam bahasa Italia, saya ingin menambahkan hari ulang tahun keluarga saya (termasuk kucing). Untuk konstruksi "kerangka" saya menggunakan yang sudah dibuat oleh IKEA, dan perubahan internal saya menggunakan bahan yang saya miliki di rumah:
Untuk realisasinya di layar akan ditampilkan pola yang digambar dengan Inkscape.
Panel saya berukuran 12 x 12 huruf dengan tapak 200 mm. Karena saya tidak memiliki printer 3D, saya membuat kisi-kisi dengan strip aluminium, dan telah mengisolasi kontak LED dengan spons perekat, ini juga berfungsi untuk mengisolasi cahaya.
Sirkuit elektronik
Untuk menghemat waktu, saya menggunakan RTC .
Untuk dapat menyesuaikan waktu, saya menambahkan tombol (P1, P2, P3) dan layar 16 x 2. (Lihat juga proyek "Jam Mengatur Tanggal Waktu "). Seperti yang terlihat dari diagram pengkabelan, tombol terhubung ke Arduino melalui pull-down sirkuit.
Karena tampilan hanya berfungsi untuk mengatur waktu, saya mengganti jumper dengan tombol , dengan demikian, itu hanya menerangi penggunaannya. Dioda D1 berfungsi sebagai perlindungan polaritas terbalik.
Dioda D2 berfungsi untuk tidak memberi makan strip neopiksel, ketika, karena alasan apa pun, kita harus mengubah sketsa Arduino (terlalu banyak arus dapat merusaknya). Dioda D3 berfungsi untuk membawa tegangan sebesar 5 volt, tegangan sebesar Neopiksel.
Saya melampirkan diagram sirkuit, skema Fritzing, tata letak PCB.
Matriks
Untuk mewujudkan matriks saya menghubungkan berbagai strip seperti gambar. Zig-zag dari kiri atas ke bawah.
Perpustakaan Arduino
Penjelasan kode
Kode ini dibagi menjadi 5 bagian utama:
Untuk mendapatkan jam yang lebih akurat, saya menambahkan angka 1, 2, 3, 4 sesuai dengan menit progresif.
Contoh :“SONO LE ORE DIECI E VENTI 4” berarti 10:24 (10:20 + 00:04), “SONO LE DIECI MENO QUINDICI 2” berarti 09:47 (09:45 + 00:02)
Perakitan
Perhatikan baik-baik perataan kedua cetakan
Lokasi
Taruh di ruang tamu lalu dia terlihat bagus.
/*:Proyek:WordClock:Penulis:Tiziano Bianchettin:Tanggal:25/09/2016:Revisi:1:Lisensi:Domain PublikTerima kasih kepada: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.danielealberti.it/ http://www.maffucci.it/ Profesor laboratorium elektronik saya "Perito Carli" *///************libraries**************//# include#include #include #include //***********neopixel********* *******//#define PIN 9 // pin neopixel#define NUM_LEDS 144 // 12 x 12#define GIORNO 255 // full on#define SERA 25 // sepersepuluh onAdafruit_NeoPixel strip =Adafruit_NeoPixel(NUM_LEDS, PIN , NEO_GRB + NEO_KHZ800); // 144 led, pin 9int intBrightness;//****************WARNA**********//uint32_t Merah =strip.Warna(255, 0, 0); uint32_t Hijau =strip.Warna( 0, 255, 0);uint32_t Biru =strip.Warna( 0, 0, 255);uint32_t Putih =strip.Warna( 255, 255, 255);uint32_t Kuning =strip.Warna( 255 , 255, 0);uint32_t Ungu =strip.Warna( 60, 0, 255);uint32_t Mati =strip.Warna( 0, 0, 0);LiquidCrystal_I2C lcd(0x27,16,2); // Menampilkan I2C 16 x 2RTC_DS1307 RTC;int P1=6; // Tombol SET MENU'int P2=7; // Tombol +int P3=8; // Tombol -int oraagg;int minagg;int annoagg;int meseagg;int dayagg;int menu =0;int ora;//*********Presentasi*********//int txtSONO[] ={1,2,3,4,6,7,9,10,11,-1};//*********Jam*********//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};//*********Selamat ulang tahun*********//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};//*********Menit*********//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,141,142,143, {126.127.128.129.130.131,-1};pengaturan batal(){ strip.begin(); strip.tampilkan(); lcd.mulai(); lcd.lampu latar(); lcd.clear(); pinMode(P1,INPUT); pinMode(P2,INPUT); pinMode(P3,INPUT); Serial.begin(9600); Kawat.mulai(); RTC.mulai(); if (!RTC.isrunning()) { Serial.println("RTC TIDAK berjalan!"); // Atur tanggal dan waktu pada waktu kompilasi RTC.adjust(DateTime(__DATE__, __TIME__)); } // RTC.adjust(DateTime(__DATE__, __TIME__)); //menghapus "//" untuk menyesuaikan waktu // Tampilan default menunjukkan tanggal dan waktu int menu=0;} void loop(){ // periksa apakah Anda menekan tombol SET dan meningkatkan indeks menu if(digitalRead( P1)) { menu=menu+1; }// di subrutin mana kita harus pergi? if (menu==0) { DisplayDateTime(); // void DisplayDateTime DateTime now =RTC.now(); if((now.hour()>=19) || (now.hour() <7 )){ // sesuaikan kecerahan siang - malam intBrightness =SERA; } else{ intBrightness =GIORNO; } strip.setBrightness(intBrightness); strip.tampilkan(); int waktuMin =sekarang.menit(); int modMin =waktuMin % 5; // https://www.arduino.cc/en/Reference/Modulo if ( modMin ==0){ // setiap menit LED berubah warna dan menyala angka yang sesuai paintWord(txtSONO, White); paintWord(txtMQUATTRO, OFF); } else if ( modMin ==1){ paintWord(txtSONO, Yellow); paintWord(txtMUNO, Merah); } else if ( modMin ==2){ paintWord(txtSONO, Green); paintWord(txtMUNO, Mati); paintWord(txtMDUE, Biru); } else if ( modMin ==3){ paintWord(txtSONO, Biru); paintWord(txtMDUE, Mati); paintWord(txtMTRE, Hijau); } else if ( modMin ==4){ paintWord(txtSONO, Red); paintWord(txtMTRE, Mati); paintWord(txtMQUATTRO, Kuning); } Jam Jam(); //kosongkan HourClock MinuteClock(); // void Jam Menit Auguri(); // batal Auguri strip.show(); } if (menu==1) { DisplaySetHour(); } if (menu==2) { DisplaySetMinute(); } if (menu==3) { DisplaySetYear(); } if (menu==4) { DisplaySetMonth(); } if (menu==5) { DisplaySetDay(); } if (menu==6) { StoreAgg(); penundaan (500); menu=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(merah, hijau, biru)); #endif #ifndef ADAFRUIT_NEOPIXEL_H // LED FastLED[Pixel].r =merah; leds[Pixel].g =hijau; leds[Pixel].b =biru; #endif}void setAll(byte merah, byte hijau, byte biru) { for(int i =0; i =40){ // dari 40 menit, tambahkan 1 ke "jam" ora =ora+1; } switch (ora ) { case 0:case 12:case 24:paintWord(txtUNDICI, Off); strip.tampilkan(); if ( modMin ==0){ paintWord(txtDODOCI, Putih); strip.tampilkan(); } else if ( modMin ==1){ paintWord(txtDODOCI, Yellow); strip.tampilkan(); } else if ( modMin ==2){ paintWord(txtDODOCI, Green); strip.tampilkan(); } else if ( modMin ==3){ paintWord(txtDODOCI, Biru); strip.tampilkan(); } else if ( modMin ==4){ paintWord(txtDODOCI, Red); strip.tampilkan(); } merusak; kasus 1:kasus 13:paintWord(txtDODOCI, Mati); strip.tampilkan(); if ( modMin ==0){ paintWord(txtUNA, Putih); strip.tampilkan(); } else if ( modMin ==1){ paintWord(txtUNA, Yellow); strip.tampilkan(); } else if ( modMin ==2){ paintWord(txtUNA, Green); strip.tampilkan(); } else if ( modMin ==3){ paintWord(txtUNA, Biru); strip.tampilkan(); } else if ( modMin ==4){ paintWord(txtUNA, Red); strip.tampilkan(); } merusak; kasus 2:kasus 14:paintWord(txtUNA, Mati); strip.tampilkan(); if ( modMin ==0){ paintWord(txtDUE, Putih); strip.tampilkan(); } else if ( modMin ==1){ paintWord(txtDUE, Yellow); strip.tampilkan(); } else if ( modMin ==2){ paintWord(txtDUE, Green); strip.tampilkan(); } else if ( modMin ==3){ paintWord(txtDUE, Blue); strip.tampilkan(); } else if ( modMin ==4){ paintWord(txtDUE, Red); strip.tampilkan(); }merusak; kasus 3:kasus 15:paintWord(txtDUE, Off); strip.tampilkan(); if ( modMin ==0){ paintWord(txtTRE, Putih); strip.tampilkan(); } else if ( modMin ==1){ paintWord(txtTRE, Yellow); strip.tampilkan(); } else if ( modMin ==2){ paintWord(txtTRE, Green); strip.tampilkan(); } else if ( modMin ==3){ paintWord(txtTRE, Biru); strip.tampilkan(); } else if ( modMin ==4){ paintWord(txtTRE, Red); strip.tampilkan(); } merusak; kasus 4:kasus 16:paintWord(txtTRE, Mati); strip.tampilkan(); if ( modMin ==0){ paintWord(txtQUATTRO, Putih); strip.tampilkan(); } else if ( modMin ==1){ paintWord(txtQUATTRO, Yellow); strip.tampilkan(); } else if ( modMin ==2){ paintWord(txtQUATTRO, Green); strip.tampilkan(); } else if ( modMin ==3){ paintWord(txtQUATTRO, Biru); strip.tampilkan(); } else if ( modMin ==4){ paintWord(txtQUATTRO, Red); strip.tampilkan(); } merusak; kasus 5:kasus 17:paintWord(txtQUATTRO, Mati); strip.tampilkan(); if ( modMin ==0){ paintWord(txtCINQUE, White); strip.tampilkan(); } else if ( modMin ==1){ paintWord(txtCINQUE, Yellow); strip.tampilkan(); } else if ( modMin ==2){ paintWord(txtCINQUE, Green); strip.tampilkan(); } else if ( modMin ==3){ paintWord(txtCINQUE, Blue); strip.tampilkan(); } else if ( modMin ==4){ paintWord(txtCINQUE, Red); strip.tampilkan(); } merusak; kasus 6:kasus 18:paintWord(txtCINQUE, Off); strip.tampilkan(); if ( modMin ==0){ paintWord(txtSEI, Putih); strip.tampilkan(); } else if ( modMin ==1){ paintWord(txtSEI, Yellow); strip.tampilkan(); } else if ( modMin ==2){ paintWord(txtSEI, Green); strip.tampilkan(); } else if ( modMin ==3){ paintWord(txtSEI, Biru); strip.tampilkan(); } else if ( modMin ==4){ paintWord(txtSEI, Red); strip.tampilkan(); } merusak; kasus 7:kasus 19:paintWord(txtSEI, Mati); strip.tampilkan(); if ( modMin ==0){ paintWord(txtSETTE, White); strip.tampilkan(); } else if ( modMin ==1){ paintWord(txtSETTE, Yellow); strip.tampilkan(); } else if ( modMin ==2){ paintWord(txtSETTE, Green); strip.tampilkan(); } else if ( modMin ==3){ paintWord(txtSETTE, Blue); strip.tampilkan(); } else if ( modMin ==4){ paintWord(txtSETTE, Red); strip.tampilkan(); } merusak; kasus 8:kasus 20:paintWord(txtSETTE, Off); strip.tampilkan(); if ( modMin ==0){ paintWord(txtOTTO, Putih); strip.tampilkan(); } else if ( modMin ==1){ paintWord(txtOTTO, Yellow); strip.tampilkan(); } else if ( modMin ==2){ paintWord(txtOTTO, Green); strip.tampilkan(); } else if ( modMin ==3){ paintWord(txtOTTO, Biru); strip.tampilkan(); } else if ( modMin ==4){ paintWord(txtOTTO, Red); strip.tampilkan(); } merusak; kasus 9:kasus 21:paintWord(txtOTTO, Mati); strip.tampilkan(); if ( modMin ==0){ paintWord(txtNOVE, White); strip.tampilkan(); } else if ( modMin ==1){ paintWord(txtNOVE, Yellow); strip.tampilkan(); } else if ( modMin ==2){ paintWord(txtNOVE, Green); strip.tampilkan(); } else if ( modMin ==3){ paintWord(txtNOVE, Biru); strip.tampilkan(); } else if ( modMin ==4){ paintWord(txtNOVE, Red); strip.tampilkan(); } merusak; kasus 10:kasus 22:paintWord(txtNOVE, Off); strip.tampilkan(); if ( modMin ==0){ paintWord(txtDIECI, Putih); strip.tampilkan(); } else if ( modMin ==1){ paintWord(txtDIECI, Yellow); strip.tampilkan(); } else if ( modMin ==2){ paintWord(txtDIECI, Green); strip.tampilkan(); } else if ( modMin ==3){ paintWord(txtDIECI, Biru); strip.tampilkan(); } else if ( modMin ==4){ paintWord(txtDIECI, Red); strip.tampilkan(); } merusak; kasus 11:kasus 23:paintWord(txtDIECI, Mati); strip.tampilkan(); if ( modMin ==0){ paintWord(txtUNDICI, Putih); strip.tampilkan(); } else if ( modMin ==1){ paintWord(txtUNDICI, Yellow); strip.tampilkan(); } else if ( modMin ==2){ paintWord(txtUNDICI, Green); strip.tampilkan(); } else if ( modMin ==3){ paintWord(txtUNDICI, Biru); strip.tampilkan(); } else if ( modMin ==4){ paintWord(txtUNDICI, Red); strip.tampilkan(); }merusak; }}void MinuteClock(){ DateTime now =RTC.now(); int waktuMin =sekarang.menit(); int modMin =waktuMin % 5; // https://www.arduino.cc/en/Reference/Modulo switch (now.minute()) { case 5:case 6:case 7:case 8:case 9:if ( modMin ==0){ paintWord (txtE, Putih); paintWord(txtMCINQUE, Putih); strip.tampilkan(); } else if ( modMin ==1){ paintWord(txtE, Yellow); paintWord(txtMCINQUE, Kuning); strip.tampilkan(); } else if ( modMin ==2){ paintWord(txtE, Green); paintWord(txtMCINQUE, Hijau); strip.tampilkan(); } else if ( modMin ==3){ paintWord(txtE, Biru); paintWord(txtMCINQUE, Biru); strip.tampilkan(); } else if ( modMin ==4){ paintWord(txtE, Red); paintWord(txtMCINQUE, Merah); strip.tampilkan(); }merusak; kasus 10:kasus 11:kasus 12:kasus 13:kasus 14:paintWord(txtMCINQUE, Off); strip.tampilkan(); if ( modMin ==0){ paintWord(txtE, Putih); paintWord(txtMDIECI, Putih); strip.tampilkan(); } else if ( modMin ==1){ paintWord(txtE, Yellow); paintWord(txtMDIECI, Kuning); strip.tampilkan(); } else if ( modMin ==2){ paintWord(txtE, Green); paintWord(txtMDIECI, Hijau); strip.tampilkan(); } else if ( modMin ==3){ paintWord(txtE, Biru); paintWord(txtMDIECI, Biru); strip.tampilkan(); } else if ( modMin ==4){ paintWord(txtE, Red); paintWord(txtMDIECI, Merah); strip.tampilkan(); } merusak; kasus 15:kasus 16:kasus 17:kasus 18:kasus 19:paintWord(txtMDIECI, Mati); strip.tampilkan(); if ( modMin ==0){ paintWord(txtE, Putih); paintWord(txtQUINDICI, Putih); strip.tampilkan(); } else if ( modMin ==1){ paintWord(txtE, Yellow); paintWord(txtQUINDICI, Kuning); strip.tampilkan(); } else if ( modMin ==2){ paintWord(txtE, Green); paintWord(txtQUINDICI, Hijau); strip.tampilkan(); } else if ( modMin ==3){ paintWord(txtE, Biru); paintWord(txtQUINDICI, Biru); strip.tampilkan(); } else if ( modMin ==4){ paintWord(txtE, Red); paintWord(txtQUINDICI, Merah); strip.tampilkan(); }merusak; kasus 20:kasus 21:kasus 22:kasus 23:kasus 24:paintWord(txtQUINDICI, Mati); strip.tampilkan(); if ( modMin ==0){ paintWord(txtE, Putih); paintWord(txtVENTI, Putih); strip.tampilkan(); } else if ( modMin ==1){ paintWord(txtE, Yellow); paintWord(txtVENTI, Kuning); strip.tampilkan(); } else if ( modMin ==2){ paintWord(txtE, Green); paintWord(txtVENTI, Hijau); strip.tampilkan(); } else if ( modMin ==3){ paintWord(txtE, Biru); paintWord(txtVENTI, Biru); strip.tampilkan(); } else if ( modMin ==4){ paintWord(txtE, Red); paintWord(txtVENTI, Merah); strip.tampilkan(); }merusak; kasus 25:kasus 26:kasus 27:kasus 28:kasus 29:if ( modMin ==0){ paintWord(txtE, White); paintWord(txtVENTI, Putih); paintWord(txtMCINQUE, Putih); strip.tampilkan(); } else if ( modMin ==1){ paintWord(txtE, Yellow); paintWord(txtVENTI, Kuning); paintWord(txtMCINQUE, Kuning); strip.tampilkan(); } else if ( modMin ==2){ paintWord(txtE, Green); paintWord(txtVENTI, Hijau); paintWord(txtMCINQUE, Green);...File ini telah terpotong, silakan unduh untuk melihat konten lengkapnya.
Proses manufaktur
Komponen dan persediaan Arduino Due × 1 Regulator Linier dengan Output yang Dapat Disesuaikan × 1 Texas Instruments Tujuan Umum Dual Op-Amp × 1 Resistor 20k ohm × 3 Resistor 220 ohm × 1 Resistor 1k ohm × 2 NPN Transistor Serbaguna
Komponen dan persediaan Arduino Nano R3 × 1 Resistor 10k ohm × 1 Resistor 1k ohm × 1 Resistor 100 ohm × 1 Resistor 100k ohm × 1 Resistor 1M ohm × 1 ElectroPeak 0.96 Modul Tampilan OLED 64x128 × 1 Kabel jumper (generik)
Komponen dan persediaan Arduino Nano R3 × 1 Penguat operasional IC TL061 × 1 Resistor 10k ohm × 2 Resistor 1M ohm × 1 Kapasitor Cakram Keramik, 39 pF × 1 kumparan sekunder dari trafo 1-2W kecil × 1 Alat dan mesin yang diperlukan
Komponen dan persediaan Arduino UNO × 1 Adafruit LCD Standar - 16x2 Putih di Atas Biru × 1 Sakelar Tombol Tekan SparkFun 12mm × 4 Resistor 10k ohm × 4 Resistor 221 ohm Yah, 220 ohm... × 2 Potensiometer Putaran Tunggal- 100k ohm × 1