Turinys:
- 1 žingsnis: grandinė
- 2 žingsnis: pritemdymo algoritmas - „Charliplexed Pulse Width Modulation“
- 3 žingsnis: pritemdymo algoritmas - kryžminis išblukimo efektas ir dvigubas buferis
- 4 žingsnis: Statyba - PCB
- 5 žingsnis: holografinė plėvelė ir korpusas
- 6 veiksmas: programinė įranga ir vartotojo sąsaja
Video: „Minidot 2“- „Holoclock“: 6 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:49
Na, galbūt holoclock yra šiek tiek netikslus…. Ji naudoja holografinę dispersinę plėvelę priekyje, kad suteiktų šiek tiek gylio. Iš esmės ši instrukcija yra mano ankstesnio „Minidot“atnaujinimas, esantis čia: https://www.instructables.com/id /EEGLXQCSKIEP2876EE/ir pakartotinai naudokite daug kodo ir grandinių iš mano „Microdot“, esančio čia: Ankstesnis „Minidot“buvo pernelyg sudėtingas, iš „Microdot“išmokau atlikti RTC naudojant PIC naudojant tik 32.768 kristalą ir man nereikėjo naudoti specialaus RTC lusto. Taip pat norėjau atsikratyti ankstesnio „Minidot“ekrano lustų. Taigi dabar yra tik galios reguliatoriaus mikroschema ir PIC16F88…. Tik du lustai. Kitos atnaujinimo priežastys buvo tai, kad „Minidot“tapo šiek tiek nepatikimas dėl atskiros jungiklių plokštės, ir aš norėjau švelnaus išblukimo tarp taškų taip pat tam tikras aplinkos šviesos jutiklis, kuris naktį pritemdys ekraną. Kitas „Minidot“buvo fiksuotas ryškumas ir apšvietė kambarį naktį. Įrenginys buvo sukurtas naudojant „EagleCad“programinės įrangos paketą ir „Sourceboost“kompiliatorių. Norėdami pradėti šį projektą, turėsite turėti patirties dirbant su elektronika ir programuojant PIC valdiklius. Atminkite, kad tai nėra instrukcija nei elektronikos, nei PIC programavimo srityje, todėl saugokite klausimus, susijusius su „Miniclock“dizainu. Norėdami gauti patarimų, kaip naudoti „EagleCad“ar programuoti PIC, žr. Aukščiau pateiktas instrukcijas arba daugelį kitų instrukcijų šioje svetainėje. Taigi štai….. Minidot 2, The Holoclock …… arba Minidot The Next Generation ………….
1 žingsnis: grandinė
Ši grandinė yra labai panaši į „Microdot“. Atminkite, kad „Charlieplex“masyvas yra beveik identiškas … buvo perkelti tik keli smeigtukai.
Prie „Microdot“grandinės buvo pridėtas 20Mhz kristalas, kuris žymiai greičiau stebės PIC, tai leidžia greičiau nuskaityti masyvą ir įdiegti pritemdymo algoritmą. Prietemos algoritmas buvo labai svarbus norint, kad kryžminis išblukimas ir aplinkos šviesos funkcija veiktų. Tai būtų buvę neįmanoma naudojant „Microdot“dėl lėtesnio laikrodžio greičio, nes kai kuriuos nuskaitymo ciklus reikėjo išblyškinti. Tamsinimo funkcijos aprašymą rasite kitame skyriuje. Kiti dalykai, į kuriuos reikia atkreipti dėmesį, yra MCP1252 įkrovimo siurblio reguliatoriaus naudojimas tiekiant 5 V, mano mėgstamiausią lustą. Jei pakeistumėte grandinę, galėtumėte naudoti paprastą seną 7805 …… Aš tiesiog turiu daugybę šių patogių lustų. Dabar perjungiau jungiklius į priekį, sutaupiau sukiojimąsi laikrodžio gale, kai nutrūksta maitinimas, kad būtų atkurtas laikas, o dabar viskas yra tik viena PCB …. jokių kabelių problemų. Taip pat atkreiptinas dėmesys į LDR įtraukimą. Tai naudojama įtampos daliklyje, kurį nustato PIC A/D kaištis. Kai PIC nustato, kad aplinkos šviesos lygis yra žemas (ty nakties metu), pritemdymo algoritmas išlaiko „Charlieplex“matricą tamsią daugiau ciklų nei tada, kai šviesos lygis yra didelis. „Eaglecad“bibliotekoje neradau LDR simbolio, todėl tiesiog panaudojau LED simbolį….. neapsigaukite, tai LDR. Žiūrėkite žemiau pateiktą faktinę PCB nuotrauką. Vienas dalykas, į kurį reikia atkreipti dėmesį, kai naudojate daugiaspalvius šviesos diodus „charliplex“masyve. Turite įsitikinti, kad šviesos diodų priekinė įtampa yra daugmaž vienoda. Jei ne, gali atsirasti klaidingų srovių keliai ir užsidegs keli šviesos diodai. Taigi šiai konfigūracijai naudoti 5 mm ar didesnės galios šviesos diodus neveiks, nes paprastai yra didelis skirtumas tarp žalios/mėlynos šviesos diodų ir raudonos/geltonos šviesos diodų. Šiuo atveju aš naudojau 1206 SMD šviesos diodus ir ypač didelio efektyvumo žalios/mėlynos spalvos šviesos diodus. Tačiau priekinė įtampa čia nebuvo problema. Jei „charlieplex“masyve norite naudoti žalios/mėlynos ir raudonos/geltonos spalvos šviesos diodų derinį, skirtingas spalvas reikia atskirti į dvi „charliplex“masyvus. Yra daug charlieplexing paaiškinimų, kuriuos galima rasti „Google“…… čia nesileisiu į detales. Paliksiu jums atlikti kai kuriuos tyrimus. (Norėdami pamatyti didesnę versiją, paspauskite mažą „i“piktogramą žemiau esančio paveikslėlio kampe)
2 žingsnis: pritemdymo algoritmas - „Charliplexed Pulse Width Modulation“
Kaip minėta anksčiau, norėjau, kad skirtingi taškų modeliai tam kartui išnyktų sklandžiai, o ne trūkčioję iš vieno modelio į kitą. Demonstracijai žiūrėkite vaizdo įrašą. Viduryje yra naujas „Minidot“laikrodis, dešinėje - senesnis „Minidot“. Atkreipkite dėmesį, koks naujas yra gražesnis. (Žinia, kiti fone esantys ekranai yra mano „Minicray“superkompiuterio būsenos ekranas ir užfiksuota „Nebulon“dalelė, kuri maitina „Minicray“antimedžiagos magnetiniame uždarymo lauke. Žr. Čia: https://www.youtube.com/watch? V = bRupDulR4ME nebulono uždarymo kameros) Jei pažvelgsite į kodą, atidarykite failą display.c. Atkreipkite dėmesį, kad yra trys matricos, skirtos atvaizduoti tris/prievado reikšmes, kad apšviestų bet kurį konkretų masyvą, ir dvi masyvai (viena daugiau nei „Microdot“kodas), siekiant nustatyti, kurie šviesos diodai turėtų būti apšviesti bet kokiam konkrečiam šviesos diodų modeliui. Pvz.
// LED1 LED2 LED3… unsigned char LEDS_PORTA [31] = {0x10, 0x00, 0x00,… unsigned char LEDS_TRISA [31] = {0xef, 0xff, 0xff,… unsigned char LEDS_PORTB [31] = {0x00, 0x02, 0x04, … Nepasirašytas simbolis LEDS_TRISB [31] = {0xfd, 0xf9, 0xf9,… unsigned char nLedsA [30]; unsigned char nLedsB [30];Pavyzdžiui, norėdami užsidegti LED1, turite nustatyti TRIS registrus TRISA: B = 0xef: 0xfd ir PORT registrus PORTA: B = 0x10: 0x00 ir pan. Jei išrašysite tris reikšmes dvejetainiu būdu, pastebėsite, kad vienu metu yra įjungti tik du išėjimai. Kiti yra nustatyti į trijų būsenų (taigi TRIS registrą). Tai yra pagrindinis dalykas charlieplexing. Taip pat pastebėsite, kad vienas išėjimas visada yra loginis „1“, o kitas visada yra loginis „0“…. Kurio kryptis įsijungia priklausomai nuo to, kuris šviesos diodas yra tarp šių dviejų išvesties eilučių. Paskutinė uosto/tris vertė masyvai yra nulinė reikšmė, kad neįjungtumėte jokio šviesos diodo. „Microdot“funkcija „update_display“nuolat cikliuoja per kitą masyvą („nLeds ), kad pamatytų, ar tas šviesos diodas turi būti apšviestas. Jei taip buvo, tada buvo nustatytos atitinkamos tris/prievado vertės ir tam tikrą laiką šviečia šviesos diodas. Priešingu atveju nulinė vertė buvo išsiųsta į PIC TRIS/PORT registrus ir tam tikrą laiką nedega nė vienas šviesos diodas. Kai padaryta pakankamai greitai, tai davė modelį. Likusi programa periodiškai skaitytų RTC reikšmes ir sudarytų gražų atsitiktinį modelį tame masyve … ne) tada papildomi laikotarpiai būtų skirti null reikšmių siuntimui, jei ekranas būtų pritemdytas ….. kad būtų visas ryškumas, papildomi laikotarpiai nebūtų praleisti. Pakartotinai, jei šviečiantys šviesos diodai turi daug nulio laikotarpių, ekranas bus pritemdytas. Tiesą sakant, tai yra multipleksuotas impulsų pločio moduliavimas….. arba dėl to, kad aparatūra yra sukonfigūruota „charlieplex“sistemoje, tada „charlieplexed“impulsų pločio moduliacija. Antroje diagramoje parodyta pagrindinė sąranka. Aš tai vadinu nuskaitymo rėmeliu. Pirmieji 30 kadro laikotarpių yra naudojami šviesos diodams pereiti …..ir įvairus papildomų laikotarpių skaičius nustato, kaip ekranas bus pritemęs. Šis ciklas kartojasi. Daugiau nulio laikotarpių reiškia, kad šviesos diodas turi užsidegti mažiau kadrų (nes padidėjo periodų skaičius). Atkreipkite dėmesį, kad vertikali ašis nereiškia įtampos lygio. Tikroji kaiščių, einančių į šviesos diodus, būsena skiriasi priklausomai nuo jo padėties charlieplex masyve ….. diagramoje tai tiesiog reiškia įjungimą arba išjungimą. Tai taip pat reiškė, kad bendras kadro ilgis laiku taip pat padidėjo, taigi sumažėjo atnaujinimas norma. Šviesos diodams pritemus, jie pradėtų mirgėti, kitaip tariant. Taigi šis metodas yra naudingas tik tam tikru mastu. Laikrodžio atveju viskas buvo gerai. Funkcija periodiškai vadinama, kuri nuskaito A/D keitiklį PIC ir nustato šį ryškumo lygį. Jei skaitote kodą, jis taip pat patikrina, ar įjungtas arčiausiai LDR esantis šviesos diodas, ir neatlieka jokių lygio nustatymų, jei taip, tai netikėtai apšviečia ekraną, kai pasikeičia raštas. Toliau pateikiama kryžminio išblukimo funkcija.
3 žingsnis: pritemdymo algoritmas - kryžminis išblukimo efektas ir dvigubas buferis
Perėjimas tarp vieno modelio ir kito anksčiau buvo neatidėliotinas. Šiam laikrodžiui norėjau parodyti vieną raštą, kurio ryškumas palaipsniui mažėjo, o kitas - palaipsniui didėjant, ty kryžminti.
Man nereikėjo turėti atskirų šviesos diodų, kad būtų galima valdyti atskirus ryškumo lygius, kad išblukčiau. Tiesiog reikėjo pirmo modelio esant vienam ryškumui, o antrojo - esant mažam ryškumui. Tada per trumpą laiką aš šiek tiek sumažinau pirmojo ryškumą ir padidinau antrąjį ….. tai tęsis iki antrojo modelio. Tada laikrodis turėtų palaukti, kol bus parodytas kitas modelis, ir bus kitas perėjimas. Taigi man reikėjo išsaugoti du modelius. Tas, kuris šiuo metu rodomas, ir antrasis modelis, kurį ketinama rodyti. Tai yra masyvuose nLedsA ir nLedsB. (šiuo atveju nepamirškite nieko bendro su uostais). Tai yra dvigubas buferis. Funkcija update_display () buvo pakeista taip, kad būtų galima pereiti aštuonis kadrus ir parodyti daugybę kadrų iš pirmojo masyvo, paskui kito. Pakeitus kiekvienam buferiui skirtų kadrų skaičių per aštuonis ciklus, buvo apibrėžtas kiekvieno modelio ryškumas. Baigę važiuoti tarp buferių, mes pakeitėme „ekrano“ir „kito ekrano“buferius, todėl modelio generavimo funkcija rašys tik į „kito ekrano“buferį. Žemiau pateikta schema tai rodo viltingai. Turėtumėte matyti, kad perėjimas užtruks 64 nuskaitymo kadrus. Paveikslėlyje mažas įdėklas rodo ankstesnio puslapio nuskaitymo kadro schemą, sumaniai sumažintą. Žodis apie atnaujinimo kursą. Visa tai reikia padaryti labai greitai. Dabar mes turime du papildomo skaičiavimo lygius, vieną aplinkos ekrano blyškumui ir kitą aštuoniems kadrų ciklams, praleistiems pereinant nuo dviejų buferių. Taigi šis kodas turėtų būti parašytas surinkus, bet yra pakankamai geras „C“.
4 žingsnis: Statyba - PCB
Tai gana paprasta. Tiesiog dvipusė PCB su kai kuriais SMD komponentais viršuje. Atsiprašome, jei esate skylių žmogus, bet daug lengviau sukurti SMD projektus…. Be skylių gręžti. Kad būtų lengviau, turėtumėte turėti tvirtą ranką, lydmetalį su reguliuojama temperatūra ir daug šviesos bei padidinimo.
Vienintelis dalykas, į kurį reikia atkreipti dėmesį kuriant PCB, yra jungtis, skirta programuoti PIC. Tai jungiasi prie ICSP kaiščių PIC ir jums reikės ICSP programuotojo. Vėl panaudojau patogią savo šiukšliadėžės jungtį. Jei norite, galite to praleisti ir tiesiog lituoti laidus prie trinkelių. Arba, jei turite tik programuotoją su lizdu, galite sukurti antraštę, kuri prijungiama prie jūsų lizdo, ir tada lituoti prie ICSP pagalvėlių. Jei tai padarysite, atjunkite „Rx“ir prijunkite „Ry“, kurios yra tik nulinės omos nuorodos (aš tiesiog naudoju litavimo lizdą). Tai atjungs likusią grandinės galią nuo PIC, todėl netrukdys programuoti. Kištukinis programuotojas tiesiog naudoja ICSP kaiščius kaip ICSP programuotojas, iš tikrųjų nėra jokios magijos. Taip pat turite tai padaryti, jei per klaidą pamiršote atidėti kodą prieš paleidžiant RTC. „16F88“ICSP programavimo kaiščiai yra tokie patys kaip kaiščiai, reikalingi RTK naudojamam 32 768 kHz kristalui…… jei T1 išorinis osciliatorius (ty RTC) veikia prieš pradedant ICSP veikti, tada programavimas nepavyks. Paprastai, jei MCLR kaištis yra iš naujo nustatytas ir vėluojama, tada į šiuos kaiščius galima siųsti ICSP duomenis ir pradėti tinkamai programuoti. Tačiau atjungus PIC maitinimą, ICSP programuotojas (arba lizdinis programuotojas su antrašte) gali valdyti įrenginio maitinimą ir priversti programą. Kitas dalykas, į kurį reikia atkreipti dėmesį, yra tai, kad PCB kristalų pagalvėlės iš pradžių buvo skirtos SMD kristalams. Negalėjau laukti, kol jie bus pristatyti, todėl 32,768 kHz laikrodžio kristalas buvo prilituotas prie viršaus, kaip parodyta, o 20MHz kristalas buvo pritvirtintas išgręžus porą skylių trinkelėse, įkišant kristalą per apačią ir lituojant ant viršuje. Smeigtukus galite pamatyti tik dešinėje nuo PIC16F88.
5 žingsnis: holografinė plėvelė ir korpusas
Galutinė konstrukcija yra tiesiog įdėti PCB į dėklą ir po programavimo pritvirtinti jį karšto klijais. Trys skylės leidžia prieiti prie mikro jungiklių iš priekio.
Svarbi šio laikrodžio dalis yra holografinės difuzinės plėvelės naudojimas. Tai speciali plėvelė, kurią aš gulėjau, ir suteikia malonų prietaiso gylį. Galite naudoti paprastą atsekamąjį popierių (kuriame PCB perkelčiau arčiau priekio) arba bet kokį kitą difuzorių, pvz., Naudojamą liuminescenciniuose šviestuvuose. Vienintelis dalykas, kurį reikia padaryti, yra leisti atskirti apšviestų šviesos diodų skaičių, nes kitaip bus sunku suskaičiuoti taškus, kad būtų rodomas laikas. Naudojau „Physical Optics Coorporation“(www.poc.com) holografinę dispersinę medžiagą su 30 laipsnių apskritimo dispersija, kitur instrukcijoje rodomame superkompiuterio būsenos ekrane buvo naudojama plėvelė su 15x60 laipsnių elipsine dispersija. Galite naudoti tamsią užtemdančią juostą, kad dienos metu paslėptumėte blizgančius vidus, kad gautumėte paslaptingesnę išvaizdą. Jūs netgi galite palikti ekraną švarų ir leisti žmonėms matyti vidų, kaip aš. Stovas buvo dviejų dalių aliuminio „L“strypas, kurio apačioje buvo šiek tiek supjaustyta, kad būtų galima sulenkti. Atkreipkite dėmesį, kad šiose nuotraukose buvo pridėtas papildomas apšvietimas, kad galėtumėte matyti ekrano dangčius ir pan. Įprasto svetainės apšvietimo atveju šviesos diodai yra ryškesni net dienos šviesoje.
6 veiksmas: programinė įranga ir vartotojo sąsaja
Įrenginio valdymas yra labai paprastas, nėra specialių modelių režimų ar prašmatnių dalykų. Vienintelis dalykas, kurį jis daro, yra rodyti laiką.
Norėdami nustatyti laiką, pirmiausia paspauskite SW1. Prietaisas kelis kartus sumirksės visus šviesos diodus, o po to 10 sekundžių šviesos diodų grupė SW3 padidins pasirinktą SW2 grupę ir pereis į kitą šviesos diodų grupę, kiekvieną kartą trumpai mirksėdama su visais šviesos diodais. Kodas parašytas „Sourceboost“„C“kompiliatoriaus 6.70 versijai. RTC kodas yra t1rtc.c/h rinkmenose ir turi PIC laikmačio T1 nutraukimo funkciją. Laikmatis T1 nustatytas pertraukti kas 1 sekundę. Kiekvieną sekundę laiko kintamasis didinamas. Taip pat erkių laikmatis skaičiuojamas kas sekundę kartu su laiku. Tai naudojama nustatant, kada perjungti ekraną. Pertraukimo funkcija taip pat naudoja T0 laikmačio pertrauką, kad atnaujintų ekraną ir iškviestų funkciją ekrane. C Failuose display.h/display.c yra funkcijos, skirtos atnaujinti ekraną ir rodyti laiką Failų valdiklyje.c/h yra funkcijos nustatyti laiką ir perskaityti jungiklius Failai holoclock.c/h yra pagrindinės kilpos ir inicijavimas.
Rekomenduojamas:
„Arduino“automobilių atbulinės eigos įspėjimo sistema - Žingsniai po žingsnio: 4 žingsniai
„Arduino“automobilių atbulinės eigos įspėjimo sistema | Žingsniai po žingsnio: Šiame projekte aš suprojektuosiu paprastą „Arduino“automobilio atbulinės eigos stovėjimo jutiklio grandinę, naudodamas „Arduino UNO“ir ultragarsinį jutiklį „HC-SR04“. Ši „Arduino“pagrįsta automobilio atbulinės eigos įspėjimo sistema gali būti naudojama autonominei navigacijai, robotų diapazonui ir kitiems diapazonams
„Arduino Halloween Edition“- „Zombies“iššokantis ekranas (žingsniai su nuotraukomis): 6 žingsniai
„Arduino Halloween Edition“- „Zombies“iššokantis ekranas (žingsniai su paveikslėliais): norite Helovino metu išgąsdinti savo draugus ir sukelti riksmą? O gal tiesiog norite padaryti gerą išdaigą? Šis iššokantis „Zombies“ekranas gali tai padaryti! Šioje instrukcijoje aš išmokysiu jus, kaip lengvai padaryti iššokančius zombius naudojant „Arduino“. HC-SR0
Akustinė levitacija naudojant „Arduino Uno“žingsnis po žingsnio (8 žingsniai): 8 žingsniai
Akustinė levitacija naudojant „Arduino Uno“žingsnis po žingsnio (8 žingsniai): ultragarsiniai garso keitikliai L298N nuolatinės srovės adapterio maitinimo šaltinis su vyrišku nuolatinės srovės kaiščiu „Arduino UNOBreadboard“Kaip tai veikia: pirmiausia įkelkite kodą į „Arduino Uno“(tai yra mikrovaldiklis su skaitmeniniu ir analoginiai prievadai kodui konvertuoti (C ++)
„Pixel Kit“, kuriame veikia „MicroPython“: pirmieji žingsniai: 7 žingsniai
„Pixel Kit“, kuriame veikia „MicroPython“: pirmieji žingsniai: Kelionė, skirta visam „Kano Pixel“potencialui išnaudoti, prasideda gamyklos programinės įrangos pakeitimu „MicroPython“, tačiau tai tik pradžia. Norėdami koduoti „Pixel Kit“, turime prie jo prijungti savo kompiuterius. Ši pamoka paaiškins, kas
Tiesioginė 4G/5G HD vaizdo transliacija iš DJI drono esant mažai delsai [3 žingsniai]: 3 žingsniai
Tiesioginis 4G/5G HD vaizdo įrašų srautinis perdavimas iš DJI drono esant mažai delsai [3 žingsniai]: Šis vadovas padės jums gauti tiesioginius HD kokybės vaizdo srautus iš beveik visų DJI dronų. Naudodami „FlytOS Mobile App“ir „FlytNow Web Application“galite pradėti transliuoti vaizdo įrašus iš drono