Alstroemeria takma adı altında Instructables tarafından yapılan ve oluşturulan önerilen ekranın çalışma prensibi şöyledir: servolar tarafından geliştirilen segmentler onları gölgeleyen bir gölge oluşturur. Arka planla aynı düzlemde bulunan kalan segmentler onunla birleşir.
Açıktır ki
ev yapımı ürün Pahalı olduğu ortaya çıkıyor, çünkü onun için usta 28 kadar servo ediniyor:
Ve bağlanan bir yönetim modülü
Arduino bunun gibi:
Bu arka plana karşı gerçek zamanlı saat (RTC) modülü çok küçük bir masraf gibi görünüyor.
Gerekli tüm bileşenleri edinen usta, şimdiye kadar onları ekranın mekanik kısmını yapmak için şablonlar üzerinde çalışmaya ayırıyor. Dört dosya alır:
1,
2,
3,
4. Sihirbaz, 1 ve 3 dosyalarını iki kez bir kesim plotterında ve 2 ve 4'ü teker teker 1: 1 ölçeğinde görüntüler ve bazıları eski zımba kartlarına bir şekilde benzeyen altı parça alır. Ayrıca 1: 1'lik bir ölçekte ve aynı miktarlarda yazdırabilir ve manuel olarak kesebilirsiniz.
Dremel, 20 mm uzunluğunda içi boş metal pimleri ve 10 mm uzunluğunda pimin dış çapından biraz daha büyük dış çapı olan tüpleri keser:
Kalın çift taraflı bant ile katmanları yapıştırır, tüpler ekler:
Tüplerden geçirilen pimlere yapıştırılmış hareketli segmentleri ekler, arka tarafta çelik tel iticileri aynı pimlere yapıştırır ve pimlerin içi boş olduğu yer:
İticileri büker, servoları yapıştırır ve bunlara bağlanır:
Servoları kalan delikli sacla kapatır:
Servo kontrol modülü, makalenin başında verilen şemaya göre bağlanır. Sürücülerin kendisi modüle standart segment tanımlarına karşılık gelen sırada bağlanır:
RTC modülü aşağıdaki gibi bağlanır: Arduino'nun SDA - pin 4, SCL - pin 5, artı güç ve ortak kablo - karşılık gelen Arduino hatlarına paralel. İşte sonuç:
Sihirbaz, bu çizim ile RTC modülündeki zamanı ayarlar (RTClib kütüphanesine ihtiyacınız vardır):
#include
#include "RTClib.h"
RTC_DS1307 RTC;
void setup () {
Serial.begin (57600);
Wire.begin ();
RTC.begin ();
eğer (! RTC.isrunning ()) {
Serial.println ("RTC çalışmıyor!");
RTC.adjust (DateTime (__ DATE__, __TIME__));
}
}
Daha sonra aynı kütüphaneyi gerektiren ana çizimi doldurur:
#include
#include "RTClib.h"
RTC_DS1307 RTC;
kısa segA = 0; // Ekran pimi 14
kısa segB = 1; // Ekran iğnesi 16
kısa segC = 2; // Ekran iğnesi 13
kısa segD = 3; // Ekran pimi 3
kısa segE = 4; // Ekran pimi 5
kısa segF = 5; // Ekran pimi 11
kısa segG = 6; // Ekran pimi 15
kısa segA_OUT = 110;
kısa segB_OUT = 110;
kısa segC_OUT = 110;
kısa segD_OUT = 110;
kısa segE_OUT = 110;
kısa segF_OUT = 110;
kısa segG_OUT = 110;
kısa segA_IN = 90;
kısa segB_IN = 90;
kısa segC_IN = 90;
kısa segD_IN = 90;
kısa segE_IN = 90;
kısa segF_IN = 90;
kısa segG_IN = 90;
int TIME = 2000;
DateTime datePast;
TarihZaman tarihiŞimdi;
// ev bakımı
void setup () {
Serial.begin (9600);
Wire.begin ();
RTC.begin ();
RTC.adjust (DateTime (__ DATE__, __TIME__));
datePast = RTC.now ();
}
// ana döngü
void loop () {
dateNow = RTC.now ();
if (! (datePast.hour () == dateNow.hour () && datePast.minute () == dateNow.hour ()))
{
displayNumber (dateNow.hour () * 100 + dateNow.minute ());
datePast = dateNow;
}
}
// Bir sayı verildiğinde, 10:22
// 4 numaradan geçtikten sonra ekran kapalı bırakılır
void displayNumber (int toDisplay) {
for (int basamak = 4; basamak> 0; basamak--) {
lightNumber (toDisplay% 10, basamak);
toDisplay / = 10;
}
// hareketi başlat
Serial.print ("T"); Serial.println (TIME);
}
void move (int servo, int konumu) {
Serial.print ("#");
Serial.print (servo);
Serial.print ("P");
Seri.print (konum);
}
// Bir sayı verildiğinde, bu segmentleri açar
// Sayı == 10 ise, sayıyı kapatın
void lightNumber (int numberToDisplay, int segment) {
int ofset = (segment - 1) * 7;
switch (numberToDisplay) {
vaka 0:
taşı (segA + ofseti, segA_OUT);
taşı (segB + ofseti, segB_OUT);
taşı (segC + ofseti, segC_OUT);
taşı (segD + ofseti, segD_OUT);
taşı (segE + ofseti, segE_OUT);
taşı (segF + ofseti, segF_OUT);
taşı (segG + ofseti, segG_IN);
break;
durum 1:
taşı (segA + ofseti, segA_IN);
taşı (segB + ofseti, segB_OUT);
taşı (segC + ofseti, segC_OUT);
taşı (segD + ofseti, segD_IN);
taşı (segE + ofseti, segE_IN);
taşı (segF + ofseti, segF_IN);
taşı (segG + ofseti, segG_IN);
break;
durum 2:
taşı (segA + ofseti, segA_OUT);
taşı (segB + ofseti, segB_OUT);
taşı (segC + ofseti, segC_IN);
taşı (segD + ofseti, segD_OUT);
taşı (segE + ofseti, segE_OUT);
taşı (segF + ofseti, segF_IN);
taşı (segG + ofseti, segG_OUT);
break;
durum 3:
taşı (segA + ofseti, segA_OUT);
taşı (segB + ofseti, segB_OUT);
taşı (segC + ofseti, segC_OUT);
taşı (segD + ofseti, segD_OUT);
taşı (segE + ofseti, segE_IN);
taşı (segF + ofseti, segF_IN);
taşı (segG + ofseti, segG_OUT);
break;
durum 4:
taşı (segA + ofseti, segA_IN);
taşı (segB + ofseti, segB_OUT);
taşı (segC + ofseti, segC_OUT);
taşı (segD + ofseti, segD_IN);
taşı (segE + ofseti, segE_IN);
taşı (segF + ofseti, segF_OUT);
taşı (segG + ofseti, segG_OUT);
break;
durum 5:
taşı (segA + ofseti, segA_OUT);
taşı (segB + ofseti, segB_IN);
taşı (segC + ofseti, segC_OUT);
taşı (segD + ofseti, segD_OUT);
taşı (segE + ofseti, segE_IN);
taşı (segF + ofseti, segF_OUT);
taşı (segG + ofseti, segG_OUT);
break;
durum 6:
taşı (segA + ofseti, segA_OUT);
taşı (segB + ofseti, segB_IN);
taşı (segC + ofseti, segC_OUT);
taşı (segD + ofseti, segD_OUT);
taşı (segE + ofseti, segE_OUT);
taşı (segF + ofseti, segF_OUT);
taşı (segG + ofseti, segG_OUT);
break;
durum 7:
taşı (segA + ofseti, segA_OUT);
taşı (segB + ofseti, segB_OUT);
taşı (segC + ofseti, segC_OUT);
taşı (segD + ofseti, segD_IN);
taşı (segE + ofseti, segE_IN);
taşı (segF + ofseti, segF_IN);
taşı (segG + ofseti, segG_IN);
break;
durum 8:
taşı (segA + ofseti, segA_OUT);
taşı (segB + ofseti, segB_OUT);
taşı (segC + ofseti, segC_OUT);
taşı (segD + ofseti, segD_OUT);
taşı (segE + ofseti, segE_OUT);
taşı (segF + ofseti, segF_OUT);
taşı (segG + ofseti, segG_OUT);
break;
durum 9:
taşı (segA + ofseti, segA_OUT);
taşı (segB + ofseti, segB_OUT);
taşı (segC + ofseti, segC_OUT);
taşı (segD + ofseti, segD_OUT);
taşı (segE + ofseti, segE_IN);
taşı (segF + ofseti, segF_OUT);
taşı (segG + ofseti, segG_OUT);
break;
durum 10:
taşı (segA + ofseti, segA_IN);
taşı (segB + ofseti, segB_IN);
taşı (segC + ofseti, segC_IN);
taşı (segD + ofseti, segD_IN);
taşı (segE + ofseti, segE_IN);
taşı (segF + ofseti, segF_IN);
taşı (segG + ofseti, segG_IN);
break;
}
}
Her şey işe yarıyor:
Böylece önemsiz olmayan bir tasarımın mekanik gösterimi hazırdır.