Taula de continguts:
- Pas 1: capa frontal
- Pas 2: dissenyar la capa de guia
- Pas 3: crear la capa de guia
- Pas 4: Cablatge dels LED
- Pas 5: Disseny de l'electrònica
- Pas 6: Cablatge de l'electrònica
- Pas 7: Programació
- Pas 8: L'habitatge
- Pas 9: Observacions de cloenda
Vídeo: Rellotge del mapa del metro de Londres: 9 passos (amb imatges)
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:10
El 2014, després de fer pràctiques en una consultoria d’impressió 3D a Londres i un experiment amb els litòfans en color amb la seva màquina Stratasys, vaig dissenyar el meu propi regal de desaparició, una impressió 3D en color de línies de tubs locals a les seves oficines. Estava decidit a fer-ne alguna cosa. Al cap de 2 anys més tard, el 2016, tenia la meva pròpia impressora 3D i em vaig posar a treballar per convertir-la en un rellotge.
De petit, tot i que els rellotges digitals de Tokyo Flash eren les millors coses de la història, i vaig pensar que aquest seria el punt d'inspiració per al disseny.
I ara ha estat un petit descans de quatre anys fins que he arribat a redactar-lo.
Tot i que les instruccions exactes seran difícils de replicar, i la reducció de costos en la fabricació de PCB aficionats en els darrers dos anys pot fer que el meu mètode exacte per a la col·locació de LED sigui obsolet. Espero que les idees compartides puguin fer que altres facin rellotges estranys amb objectes prims.
Pas 1: capa frontal
Com es va esmentar a la introducció, es tractava d’una impressió 3D en color, crec que una màquina Stratasys que utilitzava un llit de pols i un cartutx de tinta modificat per a aglutinants i pigments.
El fitxer s’ha perdut a la història, però aquesta capa podria ser qualsevol cosa, una foto o un litofà d’un sol color seria meravellós.
Aquesta part es va fer en 3DS max el 2014, però avui hi ha eines en línia per convertir una imatge en un SLT basat en la brillantor
Pas 2: dissenyar la capa de guia
Aquí és on decidim la complexitat del projecte i el mètode per llegir l’hora. Les imatges mostren les 2 idees amb què jugava.
Aquests es van fer escanejant el disseny i dibuixant línies a través d’ell en un paisatge inks.
Aquest no és un rellotge molt llegible, però vaig preferir la idea que s’omplissin línies durant tot el dia de manera que es convertís en l’objectiu del disseny.
El recompte binari és un mètode viable per reduir el recompte de LEDs i milloraria la llegibilitat si binari és el vostre embús, però això va minar la meva idea de "línies d'ompliment", de manera que no era una opció per a aquest projecte
És freqüent que als rellotges Flash de Tokyo es minimitzi el recompte de LED, però tenint una secció comptant en 3 o 5 i després un altre farciment per cada vegada que s’omple aquesta secció, he utilitzat aquesta tècnica durant els minuts, per reduir-los de 60 a 20 més 2. I no va estar tan preocupat per la precisió això durant els segons.
Pas 3: crear la capa de guia
Aquesta capa de guia per als LED té 2 propòsits, manté els LEDs al seu lloc i evita que es vessin entre ells
Es va dibuixar com una capa a Inkscape directament a sobre de l'escaneig que utilitzava per al disseny del disseny. Es va afegir 1 mm de gruix a la batedora abans d’enviar-lo a la impressora.
Aquesta va ser una de les impressions més difícils que he de fer al meu magre Makibox A6, la peça es va imprimir en abs, de manera que es va utilitzar una tona de purí d'acetona per mantenir-la fixada a la plataforma de construcció amb un mínim deformació. Afortunadament, aquesta part no es veu al producte final
La imatge final la mostra sostinguda fins a una làmpada per comprovar si hi ha espaiats.
En retrospectiva, el vessament entre llums al llarg d’una línia pot ser realment preferible per a la imatge, no és més difícil de llegir, això es podria aconseguir afegint un xamfrà a la guia dels costats curts de cada llum.
Pas 4: Cablatge dels LED
La primera imatge mostra la impressió de prova que vaig fer per comprovar la mida dels forats, volia que el LED s’ajustés perfectament a l’encaix amb una mica de força, la forma correcta es va col·locar a mà quan es va col·locar la capa de guia.
A causa de la baixa tolerància de la meva impressora 3D, algunes estaven soltes i necessitaven una mica de superglue per mantenir-se al seu lloc mentre que altres estaven massa ajustades, però es van animar al seu lloc prement el LED mentre es soldava, en realitat s’ajustava millor que el forat de mida correcta, que tenia un arrendament per treure-lo un cop connectat.
Per reduir el recompte de cables, els LED es van soldar en una matriu de 7 per 8, és a dir, que tots els 55 LED es podien controlar només amb 13 pins, tenia un mapa dibuixat a mà de cadascuna d’aquestes connexions que malauradament s’ha perdut.
S'utilitzava filferro d'esmalt perquè les seccions es poguessin exposar al lloc escalfant una secció amb la planxa i l'estany abans de fer la connexió.
Aquest procés va costar molt de temps, recomanaria molt dissenyar un PCB
Pas 5: Disseny de l'electrònica
El meu pla inicial era utilitzar un microcontrolador Arduino amb un RTC, però vaig optar per un ESP8266 a la placa Node MCU D1, ja que permetia l’estalvi automàtic de la llum del dia i el potencial de control sobre WIFI.
Per reduir encara més el nombre de pins, tenia el nombre perfecte de LEDs per poder utilitzar un MAX7219 (que pot gestionar fins a 64 LED).
Aquest CI s'utilitza habitualment per conduir pantalles de segment de LED 7, però tenia un cas d'ús molt similar al meu, il·luminant un nombre arbitrari de LEDs amb un parpelleig mínim, fins i tot té una brillantor controlable.
Vaig decidir utilitzar protoboard per al cablejat, però l'àguila va ser útil per a la col·locació de peces i per entendre el cablejat
He adjuntat els meus fitxers de tauler, però aquesta era la meva primera vegada que utilitzava Eagle (i una versió obsoleta fins ara), de manera que només són de referència.
Pas 6: Cablatge de l'electrònica
Aquest va ser un pas senzill i repetitiu, seguint l'esquema Eagle, utilitzant capçaleres per a l'ESP i la matriu LED va ajudar enormement al muntatge.
El pin 1 de les capçaleres LED de l'ànode i el càtode es va marcar amb una puntera platejada, es podrien diferenciar entre les 7 i les altres 8.
Pas 7: Programació
Com que la nostra pantalla no és una matriu tradicional, he hagut de trobar un mètode per visualitzar quins bits s'haurien d'activar i que ha enviat al MAX IC a HEX. Afortunadament, sé prou excel·lents per entrar en problemes i he creat un "assistent hexadecimal" per guiar-me tot i que es mostri el patró que volia, les caselles de selecció col·locades a mà.
Això va venir amb la revalorització que l'hex de la meva hora, minut i segon es podia combinar amb un OR a bit per produir l'ordre hexadecimal final per enviar al max7219, inclosa una mica d'animació que vaig afegir als segons per poder assegurar-me que el tauler no s'havia congelat.
Per tant, gairebé al final. i temps per a una altra decisió que no ha envellit massa bé.
El codi de l’ESP es troba en LUA, avui recomanaria utilitzar l’IDE arduino per obtenir una millor documentació i una biblioteca de paquets sòlida, en el moment en què la comunitat ESP encara estava madurant i vaig escollir LUA com a idioma per a aquest projecte.
Vaig prendre la qüestionable decisió de fer ping regularment als servidors de Google per llegir l'hora. Això necessitava un RTC per minimitzar la deriva, això funciona, però és millor que feu servir una API de temps real.
halfSec = 0 hora = 0 minut = 0 segon = 0
Intensitat baixa = 0
alta intensitat = 9
SSID local = "Wifi"
local SSID_PASSWORD = "Contrasenya"
function time (): connecteu-vos a Internet per obtenir l’hora i la data actuals
si wifi.sta.getip (), llavors local conn = net.createConnection (net. TCP, 0) conn: connect (80, "google.com")
conn: on ("connexió", funció (conn, càrrega útil) conn: send ("HEAD / HTTP / 1.1 / r / n".. "Amfitrió: time.is / r / n".. "Accepta: * / * / r / n".. " Agent d'usuari: Mozilla / 4.0 (compatible; esp8266 Lua;) ".." / r / n / r / n ") final)
conn: on ("rebre", function (conn, càrrega útil) --print (càrrega útil) conn: close () local p = string.find (càrrega útil, "GMT"): cerqueu la cadena de data i hora a la càrrega útil des d'Internet, canvieu per zona horària si p ~ = nul llavors: extreu nombres corresponents a l'hora, minut, segon, dia, mes hora = quantitat (cadena.sub (càrrega útil, p-9, p-8)) minut = quantitat (cadena.sub (càrrega útil, p- 6, p-5)) second = tonumber (string.sub (payload, p-3, p-2)) addHour () - Codi dur BST (hora estiu britànica) impressió d'estiu (hora, minut, segon) mitja seg = (segon% 6) * 2 --print (halfSec) else print ("fallada en l'actualització web!") end end --function) --end del gestor d'esdeveniments "rebre"
conn: on ("desconnexió", funció (conn, càrrega útil) conn = zero càrrega útil = zero final) final imprimir ("encara no hi ha wifi") final
funció borTable (a, b, …) - taules OR de forma conjunta
si arg [1] llavors b = borTable (b, desempaqueta (arg)) finalitza z local {=} per a i, v a ipairs (a) fes table.insert (z, bit.bor (v, b )) final tornar z acabar
funció bxorTable (a, b, …) - taules OR en sentit binari juntes
si arg [1] llavors b = bxorTable (b, desempaqueta (arg)) finalitza z = {} per a i, v en ipairs (a) fes table.insert (z, bit.bxor (v, b )) final tornar z acabar
funció addSecond ()
segon = segon + 1 si segon> = 60 llavors segon = 0 minut = minut + 1 si minut> = 60 llavors minut = 0 addHour () final extrem final
funció addHour ()
hora = hora + 1 si hora> = 24 llavors hora = 0 finalitza si hora == 2 o hora == 16 llavors max7219.setIntensity (baixa intensitat) finalitza si hora == 8 o hora == 18 llavors max7219.setIntensity (alta intensitat) update end function function () local secGap = 6 local minGap = 3 local horGap = 1 local sec = {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x03}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x03}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x03}, {0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x01, 0x0, 0x00, 0x00, 0x01, 0x01, 0x03, 0x01, 0x03}, {0x00, 0x00, 0x01, 0x01, 0x01, 0x03, 0x01, 0x03}, {0x00, 0x01, 0x01, 0x0x01, 0x0x01 }, {0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x01, 0x03}}; local min = {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0x00}, {0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x02, 0x00}, {0x00, 0x00, 0x02, 0x02, 0x02, 0x00, 0x02, 0x00}, {0x00, 0x0, 0x02, 0x02, 0x00, 0x02, 0x00}, {0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x00}, {0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x0, 0x02, 0x02, 0x02, 0x02, 0x00, 0x12, 0x10}, {0x02, 0x02, 0x02, 0x02, 0x02, 0x10, 0x12, 0x10}, {0x02, 0x02, 0x02, 0x02, 0x, 10x, 10x }, {0x02, 0x02, 0x02, 0x12, 0x12, 0x10, 0x12, 0x10}, {0x02, 0x02, 0x12, 0x12, 0x12, 0x10, 0x12, 0x10}, {0x02, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10}, {0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x12, 0x10}, {0x12, 0x12, 0x12, 0x12, 0x12, 0x30, 0x12, 0x10}, {0x12, 0x12, 0x12, 0x12, 0x32, 0x30, 0x12, 0x10}, {0x12, 0x12, 0x12, 0x32, 0x32, 0x30, 0x12, 0x10}, {0x12, 0x12, 0x32, 0x32, 0x32, 0x30, 0x12, 0x10}, {0x12, 0x32, 0x32, 0x32, 0x32, 0x30, 0x12, 0x10}, {0x32, 0x32, 0x32, 0x32, 0x32, 0x30, 0x12, 0x10}}; hor local = {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x00}, {0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, 0x00}, {0x00, 0x00, 0x04, 0x04, 0x04, 0x04, 0x00}, {0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00}, {0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08}, {0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x0C, 0x08}, {0x04, 0x04, 0x0x, 0, 0, 0, 0, 0, 0, 0 }, {0x04, 0x04, 0x04, 0x04, 0x0C, 0x0C, 0x0C, 0x08}, {0x04, 0x04, 0x04, 0x0C, 0x0C, 0x0C, 0x0C, 0x08}, {0x04, 0x0x 0x0x, 0x0C, 0x08}, {0x04, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x08}, {0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0x,, 0x0C, 0x0C, 0x0C, 0x48}, {0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x4C, 0x48}, {0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x4C, 0x0x,, 0x0C, 0x0C, 0x4C, 0x4C, 0x4C, 0x48}, {0x0C, 0x0C, 0x0C, 0x4C, 0x4C, 0x4C, 0x4C, 0x48}, {0x0C, 0x0C, 0x4C, 0x4C, 0x4C, 0x4x, 0x4x, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x48}, {0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x48}}; --print (hora, minut, segon)
--la taula comença a 0, de manera que a 1 segons el moment actual [0] = nul)
max7219.write ({animate (borTable (sec [1+ (second / secGap)], min [1+ (minute / minGap)], hor [1+ (hour / horGap)]))))
funció final
wifi.setmode (wifi. STATION)
wifi.sta.config (SSID, SSID_PASSWORD) wifi.sta.autoconnect (1)
--configure max7219
max7219 = require ("max7219") max7219.setup ({numberOfModules = 1, slaveSelectPin = 8, intensity = highIntensity})
--Programa principal
checkOnline = tmr.create ()
tmr.alarm (0, 180000, 1, hora)
tmr.alarm (1, 1000, 1, addSecond)
tmr.alarm (2, 500, 1, actualització)
funció animar (encara)
marcs locals = {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00}, {0x, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; halfSec = halfSec + 1 si halfSec> = 12 llavors halfSec = 0 end --print (halfSec) return bxorTable (frames [halfSec + 1], still) end
Pas 8: L'habitatge
Ara és el vostre moment per mostrar la vostra increïble artesania i acollir el projecte.
O bé, o bé treieu un paquet d’amazones del reciclatge i feu un habitatge temporal que encara s’utilitza avui en dia.
L’avantatge d’utilitzar aquest enfocament era que cada capa del projecte coincidia gairebé perfectament amb el gruix del cartró, de manera que un sandvitx es podia apilar i enganxar. Una versió premium similar podria utilitzar acrílic
Pas 9: Observacions de cloenda
Gràcies per llegir. Com molts de vostès saben documentar un projecte pot ser tan difícil com fer-lo. hi ha retalls de vídeo amb mi parlant que poden acabar veient la llum del dia.
En els anys transcorreguts entre la realització i redacció d’aquest projecte, esperava veure més exemples de pantalles LED arbitràries que utilitzen la impressió 3D, però la reducció de les tires RGB ha eliminat sobretot la necessitat d’una alternativa.
Espero que això hagi estat informatiu i, si us plau, feu preguntes, ja que intentaré donar més detalls sobre les seccions que no satisfan del tot.
Ànims
Recomanat:
Rellotge de jubilació / Compte enrere / Rellotge Dn: 4 passos (amb imatges)
Rellotge de jubilació / rellotge de compte enrere / dn: tenia algunes d'aquestes pantalles de matriu de punts LED de 8x8 al calaix i pensava què fer-ne. Inspirat en altres instruccions, vaig tenir la idea de crear un compte enrere / amunt per mostrar el compte enrere fins a una data / hora futura i si el temps objectiu p
Rellotge Vortex: un rellotge de polsera de mirall infinit: 10 passos (amb imatges)
Rellotge Vortex: un rellotge de polsera de mirall infinit: l’objectiu d’aquest projecte era crear una versió portable d’un rellotge de mirall infinit. Utilitza els seus LED RGB per indicar el temps assignant hores, minuts i segons a llums vermelles, verdes i blaves respectivament i superposant aquests tons t
Hacking d'un botó de porta de la línia del jubileu del metro de Londres: 12 passos (amb imatges)
Hacking a London Underground Jubilee Line Button Button: The London Transport Museum vende botons de portes desactivades de la línia Jubilee (tant a l’esquerra com a la dreta estan disponibles). Si esteu pensant en dur a terme un projecte que necessiti un botó i una llum indicadora d'algun tipus, seria "
C51 Rellotge electrònic de 4 bits - Rellotge de fusta: 15 passos (amb imatges)
Rellotge electrònic de 4 bits C51: rellotge de fusta: aquest cap de setmana tenia temps lliure, així que vaig avançar i vaig muntar aquest rellotge electrònic electrònic de 4 bits de 2,18 € que vaig comprar a AliExpress fa poc
Creació d'un rellotge a partir d'un rellotge: 11 passos (amb imatges)
Creació d’un rellotge a partir d’un rellotge: en aquest manual d’instruccions, agafo un rellotge existent i creo el que sento que és un rellotge millor. Anirem de la imatge de l’esquerra a la de la dreta. Abans de començar pel vostre propi rellotge, tingueu en compte que tornar a muntar pot ser un repte, ja que el piv