Принципът на работа на предлагания дисплей, който е направен и изграден от Instructables под псевдонима alstroemeria, е следният: сегментите, разширени от сервоприводи, хвърлят сянка, което ги прави видими. Останалите сегменти, разположени в една и съща равнина с фона, се сливат с него.
Ясно е, че
домашно приготвени продукти Оказва се, че е скъпо, защото за нея майсторът се сдобива с 28 такива сервоуправления:
И модул за управление, който се свързва
Arduino така:
Модулът на часовника в реално време (RTC) на този фон изглежда много малък разход.
След като се сдоби с всички необходими компоненти, майсторът засега ги оставя настрана да работят върху шаблони за изработка на механичната част на дисплея. Той получава четири файла:
1,
2,
3,
4, Помощникът показва файлове 1 и 3 два пъти на режещ плотер и 2 и 4, едно по едно, всичко в скала 1: 1, и получава шест части, някои от които наподобяват по някакъв начин старите перфокарти. Можете също да печатате, също в мащаб 1: 1 и в същите количества, и да изрежете ръчно.
Dremel изрязва кухи метални щифтове с дължина 20 mm и тръби с външен диаметър, малко по-голям от външния диаметър на щифта с дължина 10 mm:
Лепи слоеве с дебела двустранна лента, добавя тръби:
Той добавя подвижни сегменти, залепени за щифтовете, преминали през тръбите, от обратната страна залепва стоманените бутални жици към същите щифтове, и това е мястото, където щифтовете са кухи:
Той огъва тласкачите, лепи серво и свързва към тях:
Затваря сервовете с останалия перфориран лист:
Сервоуправляващият модул се свързва според схемата, дадена в началото на статията. Самите задвижвания са свързани към модула в реда, съответстващ на стандартните обозначения на сегмента:
RTC модулът се свързва както следва: SDA - щифт 4 Arduino, SCL - щифт 5, плюс мощност и общ проводник - успореден на съответните линии на Arduino. Ето резултата:
Помощникът задава времето в RTC модула с тази скица (имате нужда от библиотеката RTClib):
#include
#include "RTClib.h"
RTC_DS1307 RTC;
настройка за невалидност () {
Serial.begin (57600);
Wire.begin ();
RTC.begin ();
ако (! RTC.isrunning ()) {
Serial.println ("RTC НЕ работи!");
RTC.adjust (DateTime (__ DATE__, __TIME__));
}
}
Тогава тя попълва основната скица, изискваща същата библиотека:
#include
#include "RTClib.h"
RTC_DS1307 RTC;
кратък segA = 0; // Екран за показване 14
кратък segB = 1; // Екран за показване 16
кратък segC = 2; // Екран за показване 13
кратък segD = 3; // Екранен щифт 3
къс segE = 4; // Поставете щифт 5
къс segF = 5; // Екран за показване 11
кратък segG = 6; // Екран за показване 15
кратък segA_OUT = 110;
кратък segB_OUT = 110;
кратък segC_OUT = 110;
кратък segD_OUT = 110;
кратък segE_OUT = 110;
кратък segF_OUT = 110;
кратък segG_OUT = 110;
кратък segA_IN = 90;
кратък segB_IN = 90;
кратък segC_IN = 90;
кратък segD_IN = 90;
кратък segE_IN = 90;
кратък segF_IN = 90;
кратък segG_IN = 90;
int TIME = 2000;
DateTime datePast;
DateTime dateNow;
// поддържане на къща
настройка за невалидност () {
Serial.begin (9600);
Wire.begin ();
RTC.begin ();
RTC.adjust (DateTime (__ DATE__, __TIME__));
datePast = RTC.now ();
}
// основен цикъл
void loop () {
dateNow = RTC.now ();
if (! (datePast.hour () == dateNow.hour () && datePast.minute () == dateNow.hour ()))
{
displayNumber (dateNow.hour () * 100 + dateNow.minute ());
datePast = dateNow;
}
}
// Давайки число, показваме 10:22
// След преминаване през четирите номера, дисплеят се оставя изключен
void displayNumber (int toDisplay) {
за (int цифра = 4; цифра> 0; цифра--) {
lightNumber (toDisplay% 10, цифра);
toDisplay / = 10;
}
// стартира движение
Serial.print ("T"); Serial.println (TIME);
}
невалиден ход (int servo, int позиция) {
Serial.print ("#");
Serial.print (серво);
Serial.print ("P");
Сериен.принт (позиция);
}
// Дадено число, обръща тези сегменти
// Ако число == 10, след това изключете число
void lightNumber (int numberToDisplay, int segment) {
int offset = (сегмент - 1) * 7;
превключвател (numberToDisplay) {
случай 0:
ход (segA + офсет, segA_OUT);
ход (segB + компенсиране, segB_OUT);
ход (segC + компенсиране, segC_OUT);
ход (segD + офсет, segD_OUT);
ход (segE + компенсиране, segE_OUT);
ход (segF + офсет, segF_OUT);
ход (segG + офсет, segG_IN);
прекъсване;
случай 1:
ход (segA + офсет, segA_IN);
ход (segB + компенсиране, segB_OUT);
ход (segC + компенсиране, segC_OUT);
ход (segD + офсет, segD_IN);
ход (segE + офсет, segE_IN);
ход (segF + офсет, segF_IN);
ход (segG + офсет, segG_IN);
прекъсване;
случай 2:
ход (segA + офсет, segA_OUT);
ход (segB + компенсиране, segB_OUT);
ход (segC + офсет, segC_IN);
ход (segD + офсет, segD_OUT);
ход (segE + компенсиране, segE_OUT);
ход (segF + офсет, segF_IN);
ход (segG + компенсиране, segG_OUT);
прекъсване;
случай 3:
ход (segA + офсет, segA_OUT);
ход (segB + компенсиране, segB_OUT);
ход (segC + компенсиране, segC_OUT);
ход (segD + офсет, segD_OUT);
ход (segE + офсет, segE_IN);
ход (segF + офсет, segF_IN);
ход (segG + компенсиране, segG_OUT);
прекъсване;
случай 4:
ход (segA + офсет, segA_IN);
ход (segB + компенсиране, segB_OUT);
ход (segC + компенсиране, segC_OUT);
ход (segD + офсет, segD_IN);
ход (segE + офсет, segE_IN);
ход (segF + офсет, segF_OUT);
ход (segG + компенсиране, segG_OUT);
прекъсване;
случай 5:
ход (segA + офсет, segA_OUT);
ход (segB + офсет, segB_IN);
ход (segC + компенсиране, segC_OUT);
ход (segD + офсет, segD_OUT);
ход (segE + офсет, segE_IN);
ход (segF + офсет, segF_OUT);
ход (segG + компенсиране, segG_OUT);
прекъсване;
случай 6:
ход (segA + офсет, segA_OUT);
ход (segB + офсет, segB_IN);
ход (segC + компенсиране, segC_OUT);
ход (segD + офсет, segD_OUT);
ход (segE + компенсиране, segE_OUT);
ход (segF + офсет, segF_OUT);
ход (segG + компенсиране, segG_OUT);
прекъсване;
случай 7:
ход (segA + офсет, segA_OUT);
ход (segB + компенсиране, segB_OUT);
ход (segC + компенсиране, segC_OUT);
ход (segD + офсет, segD_IN);
ход (segE + офсет, segE_IN);
ход (segF + офсет, segF_IN);
ход (segG + офсет, segG_IN);
прекъсване;
случай 8:
ход (segA + офсет, segA_OUT);
ход (segB + компенсиране, segB_OUT);
ход (segC + компенсиране, segC_OUT);
ход (segD + офсет, segD_OUT);
ход (segE + компенсиране, segE_OUT);
ход (segF + офсет, segF_OUT);
ход (segG + компенсиране, segG_OUT);
прекъсване;
случай 9:
ход (segA + офсет, segA_OUT);
ход (segB + компенсиране, segB_OUT);
ход (segC + компенсиране, segC_OUT);
ход (segD + офсет, segD_OUT);
ход (segE + офсет, segE_IN);
ход (segF + офсет, segF_OUT);
ход (segG + компенсиране, segG_OUT);
прекъсване;
случай 10:
ход (segA + офсет, segA_IN);
ход (segB + офсет, segB_IN);
ход (segC + офсет, segC_IN);
ход (segD + офсет, segD_IN);
ход (segE + офсет, segE_IN);
ход (segF + офсет, segF_IN);
ход (segG + офсет, segG_IN);
прекъсване;
}
}
Всичко работи:
Така че механичният дисплей на нетривиален дизайн е готов.