فهرست مطالب:

ساعت نقشه زیرزمینی لندن: 9 مرحله (همراه با تصاویر)
ساعت نقشه زیرزمینی لندن: 9 مرحله (همراه با تصاویر)

تصویری: ساعت نقشه زیرزمینی لندن: 9 مرحله (همراه با تصاویر)

تصویری: ساعت نقشه زیرزمینی لندن: 9 مرحله (همراه با تصاویر)
تصویری: پیشگوی معروف انگلیسی، که به پادشاه بریتانیا مشاوره می دهد، آینده عجیبی را برای خامنه ای پیشگویی کرد 2024, نوامبر
Anonim
ساعت نقشه زیرزمینی لندن
ساعت نقشه زیرزمینی لندن
ساعت نقشه زیرزمینی لندن
ساعت نقشه زیرزمینی لندن

در سال 2014 ، پس از کارآموزی در مشاوره چاپ سه بعدی در لندن و آزمایش با لیتوفان های رنگی با استفاده از دستگاه Stratasys ، من اکنون هدیه خود را طراحی می کنم ، چاپ سه بعدی رنگی خطوط لوله محلی در دفاتر آنها. من مصمم بودم که از آن چیزی بسازم. 2 سال بعد در سال 2016 ، من چاپگر سه بعدی خود را داشتم و شروع به کار کردم و آن را به صورت یک ساعت تبدیل کردم.

در کودکی ، من ساعتهای دیجیتالی توکیو فلش را بزرگترین چیزها می دانستم و می توانم الهام بخش طراحی آن باشم.

و در حال حاضر فقط 4 سال استراحت جزئی وجود دارد تا بتوانم آن را بنویسم!

در حالی که تکرار دستورالعمل های دقیق دشوار خواهد بود ، و کاهش هزینه در تولید PCB علاقه مندان در چند سال گذشته ممکن است روش دقیق من برای نصب LED را منسوخ کند. امیدوارم ایده های به اشتراک گذاشته شده منجر به ساخت ساعت های عجیب و غریب از اجسام باریک توسط دیگران شود!

مرحله 1: لایه جلو

لایه جلویی
لایه جلویی
لایه جلویی
لایه جلویی
لایه جلویی
لایه جلویی

همانطور که در مقدمه ذکر شد ، این یک چاپ سه بعدی رنگی بود ، من معتقدم که دستگاه Stratasys از یک تخت پودر و یک کارتریج جوهر اصلاح شده برای چسب و رنگدانه استفاده می کرد.

پرونده در تاریخ از بین رفته است ، اما این لایه می تواند هر چیزی باشد ، یک عکس یا یک لیتوفان تک رنگ معجزه می کند.

این بخش در 3DS max در سال 2014 ساخته شده است ، اما امروزه ابزارهای آنلاین برای تبدیل تصویر به SLT بر اساس روشنایی وجود دارد

مرحله 2: طراحی لایه راهنما

طراحی لایه راهنما
طراحی لایه راهنما
طراحی لایه راهنما
طراحی لایه راهنما
طراحی لایه راهنما
طراحی لایه راهنما
طراحی لایه راهنما
طراحی لایه راهنما

اینجاست که ما پیچیدگی پروژه و روش خواندن زمان را تعیین می کنیم. تصاویر 2 ایده ای را نشان می دهد که من با آنها بازی می کردم.

اینها با اسکن در طراحی و ترسیم خطوط در سراسر آن در inkscape انجام شده است.

این ساعت چندان قابل خواندن نیست ، اما من ایده پر کردن خطوط در طول روز را ترجیح دادم تا به هدف طراحی تبدیل شود.

شمارش دودویی یک روش مناسب برای کاهش تعداد LED ها است و اگر باینری مربع شما باشد ، خوانایی را افزایش می دهد ، اما این ایده "خطوط پر کردن" من را تضعیف کرد ، بنابراین گزینه ای برای این پروژه نبود.

در ساعتهای توکیو معمول است که شمارش LED را به حداقل برسانید ، اما با داشتن یک بخش در 3 یا 5 و سپس یک پر کردن دیگر برای هر بار که آن قسمت پر می شود ، از این تکنیک برای دقیقه استفاده می کنم ، تا آنها را از 60 به 20 به علاوه 2 کاهش دهم. چند ثانیه نگران دقت این کار نبود

مرحله 3: ایجاد لایه راهنما

ساختن لایه راهنما
ساختن لایه راهنما
ساختن لایه راهنما
ساختن لایه راهنما
ساختن لایه راهنما
ساختن لایه راهنما

این لایه راهنما برای LED ها دارای 2 هدف است ، LED ها را در جای خود نگه می دارد و از ریختن بین آنها جلوگیری می کند

این به عنوان یک لایه در Inkscape مستقیماً در بالای اسکن که من برای طرح طراحی استفاده می کردم کشیده شد. ضخامت 1 میلی متر قبل از ارسال به چاپگر در مخلوط کن اضافه شد.

این یکی از سخت ترین چاپهایی بود که باید روی Makibox A6 ناچیز خود انجام می دادم ، این قسمت با شکم چاپ شد ، بنابراین یک تن دوغاب استون برای اتصال آن به پلت فرم ساخت با حداقل پیچ خوردگی استفاده شد. خوشبختانه این قسمت در محصول نهایی دیده نمی شود

تصویر نهایی نشان می دهد که آن را برای بررسی فاصله بین چراغ نگه داشته است.

در نگاه آینده ، نشت بین چراغ ها در امتداد یک خط ممکن است برای تصاویر ترجیح داده شود ، خواندن آن سخت نیست ، این را می توان با افزودن یک چمبر به راهنما در طرفهای کوتاه هر چراغ به دست آورد.

مرحله 4: سیم کشی LED ها

سیم کشی LED ها
سیم کشی LED ها
سیم کشی LED ها
سیم کشی LED ها
سیم کشی LED ها
سیم کشی LED ها

تصویر مشت نشان می دهد چاپ آزمایشی که برای بررسی اندازه سوراخ انجام دادم ، من قصد داشتم که LED با اندکی نیروی محکم در توری قرار بگیرد ، سپس هنگام قرار دادن لایه راهنما ، شکل صحیح با دست قرار گرفت.

با توجه به تحمل کم چاپگر سه بعدی من ، برخی از آنها شل شده بودند و نیاز به یک تکه چسب فوق العاده داشتند تا در جای خود بمانند در حالی که دیگران خیلی محکم بودند ، اما با فشار دادن LED هنگام لحیم کاری تشویق شدند ، این در واقع مناسب تر از سوراخ هایی با اندازه مناسب ، که اجاره ای برای بیرون کشیدن آنها داشت.

برای کاهش تعداد سیم ها ، LED ها در ماتریس 7 در 8 لحیم شدند ، بدین معنی که همه 55 LED را می توان تنها با 13 پین کنترل کرد ، من نقشه ای از هر یک از این اتصالات را با دست کشیده بودم که متأسفانه از بین رفته است.

سیم مینای دندان استفاده می شد تا بتوان مقاطع را قبل از ایجاد اتصال با گرم کردن یک قسمت با اتو و قلع اندود در محل قرار داد.

این فرایند بسیار وقت گیر بود ، من به شدت طراحی PCB را توصیه می کنم

مرحله 5: طراحی وسایل الکترونیکی

طراحی الکترونیک
طراحی الکترونیک
طراحی الکترونیک
طراحی الکترونیک
طراحی الکترونیک
طراحی الکترونیک
طراحی الکترونیک
طراحی الکترونیک

برنامه اولیه من استفاده از میکروکنترلر آردوینو با RTC بود ، اما ESP8266 را در برد Node MCU D1 انتخاب کردم زیرا امکان صرفه جویی در نور روز خودکار و پتانسیل کنترل WIFI را فراهم می کرد.

برای کاهش بیشتر تعداد پین ها ، من تعداد کاملی از LED ها را داشتم تا بتوانم از MAX7219 (که می تواند تا 64 LED را اداره کند) استفاده کنم.

این IC معمولاً برای هدایت نمایشگرهای LED 7 Segment استفاده می شود ، اما مورد استفاده بسیار مشابهی با من داشت ، چراغهای LED دلخواه را با حداقل چشمک زدن روشن می کرد ، حتی روشنایی قابل کنترل نیز داشت.

تصمیم گرفتم از سیم اصلی برای سیم کشی استفاده کنم ، اما عقاب برای قرار دادن قطعات و درک سیم کشی مفید بود

من فایلهای هیئت مدیره خود را ضمیمه کرده ام ، اما این اولین بار بود که از عقاب استفاده می کردم (و در حال حاضر نسخه قدیمی آن) ، بنابراین فقط برای مرجع است

مرحله 6: سیم کشی الکترونیک

سیم کشی دستگاه های الکترونیکی
سیم کشی دستگاه های الکترونیکی
سیم کشی دستگاه های الکترونیکی
سیم کشی دستگاه های الکترونیکی
سیم کشی دستگاه های الکترونیکی
سیم کشی دستگاه های الکترونیکی
سیم کشی دستگاه های الکترونیکی
سیم کشی دستگاه های الکترونیکی

این یک گام ساده تکراری بود ، پس از شماتیک Eagle ، استفاده از سرصفحه برای ESP و ماتریس LED در مونتاژ بسیار کمک کرد.

پین 1 در سرصفحه های LED Anode & Cathode با نوار نقره ای مشخص شده بود ، می توان آنها را بین 7 و 8 دیگر متمایز کرد.

مرحله 7: برنامه نویسی

برنامه نويسي
برنامه نويسي

از آنجا که صفحه نمایش ما یک ماتریس سنتی نیست ، باید روشی برای تجسم اینکه کدام بیت ها را به IC MAX در HEX ارسال می کند ، پیدا کنم. خوشبختانه من فقط به اندازه کافی اکسل می دانم تا به مشکل برسم و یک "جادوگر شش ضلعی" برای راهنمایی من ایجاد کردم ، هرچند الگویی که می خواستم نمایش داده شود ، جعبه های چک دستی را به طور کامل نشان می داد.

این امر با تجدید ارزیابی این که شش ضلعی برای ساعت ، دقیقه و ثانیه من می تواند با استفاده از یک بیت بیتی یا OR ترکیب شود ، ایجاد می کند که آخرین فرمان برای ارسال به max7219 است ، از جمله یک انیمیشن کوچک که به ثانیه ها اضافه کردم تا بتوانم از صفحه اطمینان حاصل کنم. منجمد نشده بود ؛

بنابراین ، تقریباً در پایان. و زمان تصمیم دیگری که خیلی خوب پیر نشده است.

کد ESP در LUA است ، امروز توصیه می کنم از arduino IDE برای اسناد بهتر و کتابخانه بسته قوی استفاده کنید ، در زمانی که جامعه ESP هنوز در حال بلوغ بود و من LUA را به عنوان زبان این پروژه انتخاب کردم.

من تصمیم مشکوکی گرفتم که مرتباً سرورهای Google را برای خواندن زمان پینگ کنم. این به نیاز به RTC برای به حداقل رساندن رانش ، این کار می کند ، اما شما بهتر است از API زمان واقعی استفاده کنید.

halfSec = 0 ساعت = 0 دقیقه = 0 ثانیه = 0

شدت کم = 0

شدت بالا = 9

SSID محلی = "Wifi"

SSID_PASSWORD محلی = "رمز عبور"

time function () -برای دریافت زمان و تاریخ فعلی به اینترنت متصل شوید

if wifi.sta.getip () سپس conn محلی = net.createConnection (net. TCP، 0) conn: اتصال (80 ، "google.com")

conn: on ("اتصال" ،

function (conn، payload) conn: send ("HEAD/HTTP/1.1 / r / n".. "میزبان: time.is / r / n".. "قبول: */ *\ r / n".. " نماینده کاربر: Mozilla/4.0 (سازگار ؛ esp8266 Lua؛) ".." / r / n / r / n ") انتها)

conn: on ("دریافت" ،

تابع (conn ، payload) -چاپ (payload) conn: close () local p = string.find (payload، "GMT") -رشته زمان و تاریخ را در محموله از اینترنت بیابید ، برای منطقه زمانی تغییر دهید اگر p ~ = صفر-استخراج اعداد مربوط به ساعت ، دقیقه ، ثانیه ، روز ، ماه 6 ، p-5)) second = tonumber (string.sub (payload، p-3، p-2)) addHour ()-سخت کدگذاری BST (زمان تابستان انگلیس) صرفه جویی در نور روز (ساعت ، دقیقه ، ثانیه) نیم ثانیه = (دوم٪ 6)*2 -چاپ (halfSec) دیگری چاپ ("به روزرسانی وب ناموفق بود!") پایان پایان -عملکرد) -پایان رویداد "دریافت"

conn: on ("قطع ارتباط" ،

تابع (conn ، payload) conn = sil payload = sil end) پایان چاپ ("هنوز فای وجود ندارد") پایان

تابع borTable (a ، b ،…) -جداول یا جداول با هم

اگر arg [1] سپس b = borTable (b ، باز کردن (arg)) پایان z = {} برای i ، v در ipairs (a) انجام table.insert (z ، bit.bor (v ، b )) end بازگشت z end

تابع bxorTable (a ، b ،…) -جداول دو طرفه یا جداگانه

اگر arg [1] سپس b = bxorTable (b ، باز کردن (arg)) پایان z = {} برای i ، v در ipairs (a) انجام table.insert (z ، bit.bxor (v ، b )) end بازگشت z end

تابع addSecond ()

دوم = دوم+1 اگر دوم> = 60 سپس دوم = 0 دقیقه = دقیقه+1 اگر دقیقه> = 60 سپس دقیقه = 0 addHour () پایان پایان پایان

تابع addHour ()

ساعت = ساعت+1 اگر ساعت> = 24 سپس ساعت = 0 پایان اگر ساعت == 2 یا ساعت == 16 سپس max7219.setIntensity (کم شدت) پایان اگر ساعت == 8 یا ساعت == 18 سپس max7219.setIntensity (شدت زیاد) end end function update () local secGap = 6 minGap محلی = 3 horGap محلی = 1 ثانیه محلی = {{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، 0x02، 0x01 موجود، 0x03}، {مقدار 0x00، مقدار 0x00، مقدار 0x00، مقدار 0x00، مقدار 0x00، 0x03، 0x01 موجود، 0x03}، {مقدار 0x00، مقدار 0x00، مقدار 0x00، مقدار 0x00، 0x01 موجود، 0x03، 0x01 موجود، 0x03}، {مقدار 0x00 ، مقدار 0x00، مقدار 0x00، 0x01 موجود، 0x01 موجود، 0x03، 0x01 موجود، 0x03}، {مقدار 0x00، مقدار 0x00، 0x01 موجود، 0x01 موجود، 0x01 موجود، 0x03، 0x01 موجود، 0x03}، {مقدار 0x00، 0x01 موجود، 0x01 موجود، 0x01 موجود، 0x01 موجود، 0x03، 0x01 موجود، 0x03 } ، {0x01 ، 0x01 ، 0x01 ، 0x01 ، 0x01 ، 0x03 ، 0x01 ، 0x03}} ؛ دقیقه محلی = {{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، 0x02، 0x02 ، 0x02، 0x02، مقدار 0x00، 0x02، مقدار 0x00}، {0x02، 0x02، 0x02، 0x02، 0x02، مقدار 0x00، 0x02، مقدار 0x00}، {0x02، 0x02، 0x02، 0x02، 0x02، مقدار 0x00، 0x02، 0x10}، {0x02 ، 0x02، 0x02، 0x02، 0x02، مقدار 0x00، 0x12، 0x10}، {0x02، 0x02، 0x02، 0x02، 0x02، 0x10، 0x12، 0x10}، {0x02، 0x02، 0x02، 0x02، 0x12، 0x10، 0x12، 0x10 }، {0x02، 0x02، 0x02، 0x12، 0x12، 0x10، 0x12، 0x10}، {0x02، 0x02، 0x12، 0x12، 0x12، 0x10، 0x12، 0x10}، {0x02، 0x12، 0x12، 0x12، 0x12، 0x10 ، 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 محلی = {{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، 0x00، 0x00، 0x00، 0x00، 0x00، 0x00، 0x00، 0x00، 0x00، 0x00، 0x00 ، 0x04، 0x04، 0x04، 0x04، مقدار 0x00}، {مقدار 0x00، 0x04، 0x04، 0x04، 0x04، 0x04، 0x04، مقدار 0x00}، {0x04، 0x04، 0x04، 0x04، 0x04، 0x04، 0x04، مقدار 0x00}، {0x04 ، 0x04، 0x04، 0x04، 0x04، 0x04، 0x04، 0x08}، {0x04، 0x04، 0x04، 0x04، 0x04، 0x04، 0x0C، 0x08}، {0x04، 0x04، 0x04، 0x04، 0x04، 0x0C، 0x0C، 0x08 } ، {0x04، 0x04، 0x04، 0x04، 0x0C، 0x0C، 0x0C، 0x08}، {0x04، 0x04، 0x04، 0x0C، 0x0C، 0x0C، 0x0C، 0x08}، ، 0x0C، 0x08}، {0x04، 0x0C، 0x0C، 0x0C، 0x0C، 0x0C، 0x0C، 0x08}، {0x0C، 0x0C، 0x0C، 0x0C، 0x0C، 0x0C، 0x0C، 0x08}، {0x0C، 0x0C، 0x0C، 0x0C ، 0x0C، 0x0C، 0x0C، 0x48}، {0x0C، 0x0C، 0x0C، 0x0C، 0x0C، 0x0C، 0x4C، 0x48}، {0x0C، 0x0C، 0x0C، 0x0C، 0x0C، 0x4C، 0x4C، 0x48}، {0x0C، 0x0C ، 0x0C ، 0x0C، 0x4C، 0x4C، 0x4C، 0x48}، {0x0C، 0x0C، 0x0C، 0x4C، 0x4C، 0x4C، 0x4C، 0x48}، {0x0C، 0x0C، 0x4C، 0x4C، 0x4C، 0x4C، 0x4C، 0x48}، {0x0C، 0x4C ، 0x4C ، 0x4C ، 0x4C ، 0x4C ، 0x4C ، 0x48} ، {0x4C ، 0x4C ، 0x4C ، 0x4C ، 0x4C ، 0x4C ، 0x4C ، 0x48}} ؛ -چاپ (ساعت ، دقیقه ، ثانیه)

-جدول از 0 شروع می شود ، بنابراین در 1 به عنوان ثانیه فعلی [0] = صفر)

max7219.write ({animate (borTable (sec [1+ (second/secGap)] ، min [1+ (minute/minGap)] ، hor [1+ (hour/horGap)]))))

پایان -عملکرد

wifi.setmode (wifi. STATION)

wifi.sta.config (SSID ، SSID_PASSWORD) wifi.sta.autoconnect (1)

-max7219 را پیکربندی کنید

max7219 = نیاز ("max7219") max7219.setup ({numberOfModules = 1 ، slaveSelectPin = 8 ، شدت = شدت زیاد})

-برنامه اصلی

checkOnline = tmr.create ()

tmr.alarm (0 ، 180000 ، 1 ، زمان)

tmr.alarm (1 ، 1000 ، 1 ، addSecond)

tmr.alarm (2 ، 500 ، 1 ، به روز رسانی)

تابع متحرک (هنوز)

فریم های محلی = {{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}، {0x00 ، 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 ، 0x00}} ؛ halfSec = halfSec+1 اگر halfSec> = 12 سپس halfSec = 0 پایان -چاپ (halfSec) بازگشت bxorTable (فریم ها [halfSec+1] ، هنوز) پایان

مرحله هشتم: مسکن

مسکن
مسکن
مسکن
مسکن
مسکن
مسکن

اکنون وقت آن است که مهارت های باور نکردنی خود را به نمایش بگذارید و پروژه را اداره کنید.

یا آن را بردارید یا یک بسته آمازون را از بازیافت خارج کرده و یک خانه موقت بسازید که امروزه هنوز مورد استفاده است.

مزیت استفاده از این رویکرد این بود که هر لایه از پروژه تقریباً با ضخامت مقوا مطابقت داشت ، بنابراین یک ساندویچ را می توان روی هم چیده و به هم چسباند. نسخه ممتاز مشابه می تواند از اکریلیک استفاده کند

مرحله نهم: اظهارات پایانی

از خواندن شما متشکریم ، همانطور که بسیاری از شما می دانید مستندسازی یک پروژه به اندازه ساختن آن دشوار است. قطعات ویدئویی با من صحبت می کند که در نهایت ممکن است نور روز را ببیند.

در سالهای بین ساخت این پروژه و نگارش آن انتظار داشتم نمونه های بیشتری از نمایشگرهای LED دلخواه با استفاده از چاپ سه بعدی را ببینم ، اما کاهش نوارهای RGB بیشتر نیاز به جایگزینی را برطرف کرده است.

امیدوارم این مطالب آموزنده بوده باشد ، و لطفاً س questionsالات خود را مطرح کنید زیرا سعی می کنم جزئیات بیشتری را در مورد بخشهایی که به طور کامل رضایت ندارند ، ارائه دهم.

به سلامتی

توصیه شده: