Съдържание:

Pocket ZX (Handheld ZX Spectrum): 10 стъпки
Pocket ZX (Handheld ZX Spectrum): 10 стъпки

Видео: Pocket ZX (Handheld ZX Spectrum): 10 стъпки

Видео: Pocket ZX (Handheld ZX Spectrum): 10 стъпки
Видео: Pocket PICOZX (Zx Spectrum 128k) Handheld - Tape loading emulation 2024, Ноември
Anonim
Pocket ZX (Handheld ZX Spectrum)
Pocket ZX (Handheld ZX Spectrum)
Pocket ZX (Handheld ZX Spectrum)
Pocket ZX (Handheld ZX Spectrum)
Pocket ZX (Handheld ZX Spectrum)
Pocket ZX (Handheld ZX Spectrum)

Аз съм дете от 80-те години и имам хубави спомени за 8-битовите компютри от онази епоха. Първият ми компютър - който заема специално място в сърцето ми - беше Sinclair ZX Spectrum 48K. След като наскоро открих някои общности, фокусирани върху по -стари компютри в мрежата, реших, че искам да преживея част от тази носталгия за себе си и инсталирах емулатора Fuse на моя MacBook. Това беше забавно за известно време, но наистина исках специално устройство - за предпочитане нещо малко, преносимо и самостоятелно, което да отговаря на моя начин на живот. Изборът на този етап беше или да следваме пътя на страхотния Бен Хек и да свием оригиналния хардуер на ZX в нещо преносимо, или да мамим и използваме емулация на малък едноплатен компютър. Ще изневеря:)

И така, какво искам от моя преносим ZX Spectrum?

  • Евтино: Имам твърде много проекти, за да изразходвам големи суми пари за малко забавна носталгия.
  • Преносим: Трябва да е нещо, с което да си играя на дивана или в мързелив следобед в градината.
  • Клавиатура: Не просто искам да играя игри, но и да я програмирам. За да получите пълноценно изживяване, трябва да имате тези прекрасни ключове за ключови думи.
  • Джойстик: Никога не съм обичал да играя платформени игри с клавиатура. Приключенски игри, разбира се, но аз не искам просто да играя приключенски игри, така че ще се нуждае от джойстик.
  • Незабавно: Мразех зареждането на касети през 80 -те години и не мога да си представя, че съм отглеждал някакъв фонд през последните години.

Имайки предвид всичко това, съставих блокова диаграма, която да ми помогне да разбера различните компоненти. Така че нека да строим.

Стъпка 1: USB клавиатура и джойстик

USB клавиатура и джойстик
USB клавиатура и джойстик
USB клавиатура и джойстик
USB клавиатура и джойстик
USB клавиатура и джойстик
USB клавиатура и джойстик

Правилната клавиатура е ключът към улавянето на външния вид и усещането на оригиналния ZX Spectrum. Възможно е да изграждаме ръчно емулирано устройство, което няма нищо общо с оригиналните вътрешни елементи на Spectrum, но с внимателен дизайн би трябвало да е възможно да се създаде нещо, което да напомня за компютърния опит от 80 -те години.

Започвайки с някои протобордове и голяма купчина тактилни превключватели, експериментирах с няколко идеи и се спрях на подреденото оформление, показано на снимките. Протобордовете, които използваме, са стандартни 7x9cm (26x31 дупки), достъпни онлайн от много търговци на дребно. Превключвателите са версии за повърхностно монтиране, които имат по-меко усещане и са по-малко шумни от по-често срещаните им аналози с отвори, но и двата трябва да работят, тъй като размерите на тялото им са почти идентични.

След това контролите на джойстика отидоха в оставащото пространство непосредствено над клавиатурата. Реших да използвам 5-посочен тактилен навигационен превключвател отляво и голям бутон за пожар отдясно. Джойстикът ще се удвои като контролер за системата от менюта на емулатора и мишка за взаимодействие с основната Linux система, затова добавих и малък вторичен бутон.

Микроконтролерът за клавиатурата е Arduino Pro Micro. Това е малка платка, която може да бъде програмирана като USB устройство за човешки интерфейс (HID) като клавиатура, мишка или джойстик.

След като ключовете са запоени на място, трябва да се изгради матрицата, която свързва редовете и колоните на превключвателите с микроконтролера. Тази матрица ще ни позволи да свържем всичките 40 клавиша плюс 7 -те бутона на джойстика към 18 I/O пина на Pro Micro. Клавиатурата Spectrum не се нуждае от многократно натискане на клавиши, с изключение на клавишите Caps Shift и Symbol Shift, така че ще ги поставим на специални щифтове, тогава няма да се притесняваме за използването на диоди за предотвратяване на фантомни клавиши- преси. Включих схема, която показва как клавиатурата, включително матрицата, е свързана. Първо, всяка колона е свързана с дължина на едножилен проводник и след това редовете са свързани с едножилен проводник, който е внимателно оформен, за да пресича колоните без късо съединение. Това може да бъде малко сложно, защото трябва да подредите проводниците на реда достатъчно високо, за да избегнете контакт с колоните, но достатъчно ниско, за да оставите място за всички кабели, които трябва да натъпчем по време на окончателното сглобяване. И накрая, редовете и колоните са свързани към щифтовете на Arduino с проводници от стари IDE кабели.

Както бе споменато по -горе, контролерът на джойстика също ще функционира като контролер на курсора и мишка, така че ще трябва да можем да превключваме между режимите. Режимът по подразбиране ще бъде режим на курсора, комбинация от Caps Shift + бутона Fire ще премине в режим на джойстика, а комбинацията от бутон Symbol Shift + Fire ще премине в режим на мишка. За да покажете в какъв режим е, има няколко 3 мм светодиода в средата на панела на джойстика. LED за захранване също ще бъде полезен и добър начин да осигурите това с Pi е да свържете светодиод към UART TX пина на Pi, тъй като той непрекъснато ще изпраща данни, докато устройството е включено.

За да се предотврати износването на разхлабените проводници или матричните проводници от късо, всичко е обилно покрито с горещо лепило - грозно, но ефективно!

Последната стъпка, за да накарате клавиатурата да работи, е да програмирате Arduino с кода ZX_Spectrum_Keyboard от моето хранилище. С това можете действително да поставите поялника, да включите клавиатурата в обикновен компютър и да го използвате със емулатор на Spectrum като предпазител или зрелище. Но ние не спираме дотук, така че нека да продължим …

Стъпка 2: LCD екран

LCD екран
LCD екран

Оригиналният Spectrum има разделителна способност на екрана 256x192 пиксела. За да запазя (приблизително) това съотношение и да избегна появата на черни ленти от двете страни, избрах Waveshare 3.2 320x240 TFT LCD сензорен екран, предназначен за Raspberry Pi. Той няма да бъде свързан директно към GPIO заглавката на Pi, за да можем да премахнем пластмасовият обхват на конектора и подстригване на щифтовете. Подстригах прототипна платка 7х9 см до 2,1 х 9 см (точният размер няма значение, стига двата останали ъглови отвора да се подравнят с горните отвори на клавиатурата и има достатъчно място за запояване на щифтовете на заглавката на GPIO) и запояваме щифтовете на място, което ще ни даде лесен начин да монтираме екрана над клавиатурата.

Трябва само да свържем SPI, захранването и I/O щифтовете със сензорен екран - може да бъде доста трудно да проследим кои пинове всъщност са необходими, но информацията е там, ако се вгледате достатъчно усилено. Екранът Waveshare използва 10 пина: 4, 6, 9, 13, 15, 19, 21, 23, 24 и 26. Очевидно, ако правите това с различен екран, ще трябва да проверите правилните щифтове преди хващайки поялника си.

Не е необходима специална софтуерна конфигурация - просто инсталирайте софтуера на драйвера на производителя и той е готов за употреба.

Стъпка 3: Безжично (Bluetooth)

Платката Raspberry Pi Zero няма безжични възможности, има само един полезен USB порт и няма да има достатъчно място в кутията за USB хъб, така че трябваше да бъда малко изобретателен, за да добавя някаква безжична възможност за моята конструкция. Ако изграждате това с Zero W, можете да пропуснете тази стъпка.

Има една удобна функция на Raspberry Pi, която ще ни позволи да добавим полезна безжична функция. Като прикачите евтин сериен модул HC-05 Bluetooth към UART щифтовете на Pi и промените конфигурацията на системата, е възможно да получите безжичен достъп до терминала на командния ред, използвайки сериен по Bluetooth. След това можем да използваме общи инструменти за изпращане на файлове до устройството и управление на файловата система.

Стъпка 4: Захранване

Мощност
Мощност
Мощност
Мощност

Избрах батерията си в края на разработката, така необходима, за да избера клетка, която да се побере в наличното пространство. Този, който избрах, беше 2000mAH 25C 1S Lipo (размери: 81x34x9mm), продаван като заместител на дрона Walkera Syma X5. Би било добре да можете да зареждате батерията на място с обикновена USB връзка и да можете да използвате устройството, докато се зарежда. Всъщност не искаме да се занимаваме със сложни схеми за управление на мощността, затова ще използваме готов модул, който осигурява USB зареждане и също така засилен 5V изход за директно захранване на Pi. За да се гарантира, че устройството може да бъде напълно изключено, има плъзгащ превключвател между изхода на този модул и Pi, който гарантира, че батерията все още може да се зарежда дори когато устройството е изключено. Pi трябва да бъде изключен правилно, за да се избегнат проблеми с корупцията на данни. Вместо да се налага да влизаме през сериен Bluetooth, можем да свържем тактилен превключвател към пина 5 на Pi (GPIO3) и да напишем малък скрипт, който наблюдава това и инициира изключване при натискане. Захранващите и безжичните компоненти бяха споени към друга 7x9 см протоборд, който ще седи точно под клавиатурата.

Стъпка 5: Свържете всичко заедно

Свързвайки всичко заедно
Свързвайки всичко заедно
Свързвайки всичко заедно
Свързвайки всичко заедно
Свързвайки всичко заедно
Свързвайки всичко заедно

С всички разнообразни части, можем да сглобим вътрешностите. Най -големият проблем, с който се сблъсках по време на сглобяването, беше, че USB портът прекъсна Arduino Pro Micro, което изискваше да запоя проводници директно към спойките, вместо да използвам USB кабел. Това е прословутата слаба точка на платките Pro Micro, така че вероятно си струва да нанесете върху нея добре топлото лепило преди сглобяването, за да избегнете това. Ако приемем, че това конкретно нещастие не ви сполетява, имате избор: можете или да направите супер тънък микро USB към микро USB кабел, за да свържете клавиатурата си към Pi, или можете да запоите единия или двата края директно към дъските. Тъй като имах нужда да запоя Arduino страната, аз също споявах Pi страната директно към тестовите точки в задната част на платката. Всяка опция има плюсове и минуси, така че зависи от вас кое предпочитате.

Ще държим дъските заедно с найлонови стойки M3. Имаме нужда от 2x 9 мм стойки, за да свържем долните отвори между клавиатурата и платката за захранване. Горните отвори също задържат екрана, така че искаме 2,5 мм разстояния между клавиатурата и екрана и 4,5 мм разстояния между екрана и захранващата платка. Страничната снимка показва как изглежда това. Противопоставянията ще се нуждаят от малко внимателно подрязване, за да се получи всичко успоредно - може да е малко плътно прилепнало с всички кабели на клавиатурата, но трябва да върви заедно. Както може да се види от снимките, устройството може да бъде включено и използвано след сглобяване, без да се нуждае от действително заграждение. Скоро ще отпечатаме заграждение, но преди да стигнем до това, ще трябва да инсталираме операционната система и да я конфигурираме.

Стъпка 6: Софтуер

Със сглобените вътрешни елементи можем да продължим с инсталирането и конфигурирането на софтуера. Raspberry Pi ще работи на стандартна Raspbian инсталация. Единственият допълнителен софтуер, който трябва да бъде инсталиран, освен драйверите за TFT екран, е приложението Fuse. Използваме версията SDL, за да получим подходяща функционалност на цял екран, която може да бъде инсталирана с:

sudo apt-get install fuse-emulator-sdl

За да управлявате натискането на бутона за изключване, копирайте скрипта „shutdown“от моето хранилище на кодове в/home/pi/

За да получите серийна конзола през Bluetooth, добавете следния ред към /boot /config:

enable_uart = 1

Ще искаме скриптът ни за изключване и емулаторът на Fuse да стартират при стартиране, така че добавете тези редове към/etc/xdg/lxsession/LXDE-pi/autostart:

@fuse-sdl --no-sound --kempston --no-auto-load

Рестартирайте Pi след като направите тези промени и трябва да сте готови.

Стъпка 7: Ограждане и окончателно сглобяване

Приложение и окончателно сглобяване
Приложение и окончателно сглобяване
Приложение и окончателно сглобяване
Приложение и окончателно сглобяване
Приложение и окончателно сглобяване
Приложение и окончателно сглобяване

Корпусът е моделиран във Fusion 360 (как да направите това е извън обхвата на тази инструкция). Има 5 части: гръб на кутията, екран отпред, клавиатура отпред, бутон за захранване и капак на контролния панел. Капакът на контролния панел трябва да бъде отпечатан с гъвкава нишка (използвах гъвкав PLA, но по -мек материал като NinjaFlex може да е по -добър); всичко останало трябва да се отпечата в твърда пластмаса (използвах FLAmentum black PLA).

За да дадете на бутона за захранване някакво съпротивление и да го предпазите от дрънкане, залепете 3 мм лепилна пяна към гърба му и след това пробийте 4 мм отвор, за да може той да седи плътно над вертикалния tac превключвател на захранващата платка. Може да се наложи леко да подрежете единия ръб, както може да се види на снимките, за да избегнете захващане на платката за захранване. Също така намерих за полезно да използвам малко парче лепило, за да задържате бутона до превключвателя на захранването.

Трябва да залепим няколко найлонови стойки в горните стойки на предния панел на екрана, за да позволим горните части на корпуса да бъдат здраво закрепени. След като изсъхне, отрежете изравняванията.

За да монтираме дъските, първо трябва да създадем монтажните стойки. Отстранете главите от някои найлонови винтове М3 и залепете резбованите части в долните отвори на всеки от предните панели. Когато те изсъхнат, двата предни панела могат да бъдат залепени заедно и клавиатурата може да бъде фиксирана на място с помощта на 9 мм и 2,5 мм стойки. След това, когато това е на място, екранът може да се постави върху горните стойки и да се добавят отстоянията от 4,5 мм. И накрая, платката за захранване може да бъде поставена на място и проводниците да бъдат подредени така, че да позволяват поставянето на гърба.

Батерията трябва да се залепи на място с някаква двустранна лента или пяна и да се включи в захранващия конектор. Сега двете половини могат да бъдат събрани заедно и няколко къси потънали винтове за машина M3, използвани за закрепване на всичко на място.

Накрая го обърнете и залепете капака на контролния панел към панела на клавиатурата. Направих това с епоксидно лепило от две части за здрава връзка.

Стъпка 8: Клавиатура с наслагване

Наслагване на клавиатурата
Наслагване на клавиатурата
Наслагване на клавиатурата
Наслагване на клавиатурата
Наслагване на клавиатурата
Наслагване на клавиатурата

Почти свършихме. Липсват само някои ключови маркировки и наслагване, за да знаем как да стигнем до всички тези прекрасни ключови думи.

Основните букви и цифри са на действителните превключватели. Открих някои наистина малки 2,5 мм прехвърляния на букви, които пасват идеално на върховете с диаметър 4 мм. Те са малко трудни за прилагане, защото върховете се движат, докато ги търкате, но получавате доста букви в пакет, така че е добре да направите някои грешки. В крайна сметка докоснах няколко с фин перманентен маркер, макар че в крайна сметка трябваше да опитам да ги накисна в топла вода и да ги плъзна на място (ако някога сте създавали модел комплект, ще сте запознати с този процес). За да предпазя буквите по време на употреба, натрих малко прозрачен лак за нокти върху всеки връх на ключа.

За да предотвратя показването на сребърните тела на превключвателите през пролуките в наслагването, използвах постоянен маркер, за да ги оцветя - това може да се види в долния ред на една от снимките.

Проектирах отпечатаните наслагвания в графичната програма с отворен код GIMP и след това ги отпечатах върху матова хартия с качество на снимките. В идеалния случай наслагванията ще бъдат възможно най -тънки - успях да отлепя подложката от хартията с марка Epson, която използвах много лесно, въпреки че това няма да е случаят с всички марки. За да защитя отпечатъка, покрих хартията с прозрачен залепващ винилов лист и залепих двустранна лента отзад, за да я залепя към кутията. Преди да залепим наслагванията, обаче, трябва да пробием дупките. Използвах евтин 4 мм перфоратор за кожа и постигнах най -добри резултати, като заточих ударите и нарязах директно срещу някакъв скрап 3 мм алуминиев лист. След това наслагванията просто трябва да бъдат подредени и залепени.

Стъпка 9: Заключение

И сме готови! Това беше доста голям проект, изискващ набор от умения, включително основна електроника, запояване, 3D моделиране, програмиране и дори малко графично оформление. В крайна сметка беше много възнаграждаващо и готовото устройство е много забавно да се играе, но как се справя с първоначалните ми критерии?

Евтино: Общата цена на всичко, включително текущите цени на дребно на артикули, които вече притежавам, и артикулите за канцеларски материали като двустранна лента, която ще издържи далеч от този проект, е около £ 80, което го прави достъпен проект.

Преносим: Определено е преносим. Това устройство се побира удобно в джоб и е напълно самостоятелно, така че може да се използва навсякъде. Ако трябваше да го изградя отново, щях да направя плосък 4-пътен контролер в стил джойпад, вместо да използвам навигационния стик, тъй като той излиза над линията на устройството, оставяйки го уязвим за повреди. Бих искал също така да видя дали се предлага сензорен екран с подобен размер и съотношение с по-устойчив на надраскване капак, тъй като нямам нужда от интерфейса на сензорния екран и резистивната повърхност е особено податлива на повреди.

Клавиатура и джойстик: Наистина съм доволен от това как се получи. Въпреки че няма усещането за мъртва плът от оригинала, използването на клавиатурата изненадващо напомня на стария ZX Spectrum - оформлението, наслагването и изпълнението на ключови думи работят добре заедно, за да постигнат това. USB клавиатурата може също да се използва самостоятелно с компютър, работещ с емулатора на предпазителя, за да осигури същото изживяване.

Незабавно: Използването на серийния модул Bluetooth улеснява сравнително лесното прехвърляне на лентови архиви на устройството от друг компютър, без да се налага да излизате от интерфейса на Fuse, и би трябвало да е възможно да се оптимизира допълнително процеса, като се напише клиентски скрипт за изпращане на файл към устройството. Бих предпочел да мога да използвам стандартната функция за прехвърляне на файлове с Bluetooth „изпращане до устройство“, вградена в повечето операционни системи, или подходяща система за споделяне на файлове като Samba. Те обаче ще бъдат достъпни само с платката Pi Zero W и аз не я използвах за тази компилация.

В допълнение към елементите, отбелязани по-горе, ако започна този проект отново от нулата, бих избрал по-тънка батерия с по-голям капацитет в началото на проекта и бих проектирал около нея, вместо да се налага да избирам батерия с подходящ размер в края на Проектът. Бих използвал също Pi Zero W, а не Bluetooth сериен модул, за да разширя опциите за изпращане на файлове до устройството. Друго очевидно подобрение би било някаква индикация за състоянието на хардуерната батерия, тъй като в момента няма начин да се види колко заряд е останал. Бих обмислил и използването на операционна система, базирана на Ramdisk, като Alpine Linux, която би била по -толерантна към твърди изключвания и би трябвало да позволява еднократно включване/изключване без нужда от отделен бутон за изключване - много повече като оригиналния ZX Spectrum, просто изключете го, когато приключите.

Може да е интересно да се проектира персонализирана печатна платка за това устройство, която потенциално би ни позволила да поставим компонентите за захранване на гърба на клавиатурата, вместо да имаме отделна платка. Това би могло значително да намали дълбочината на готовото устройство. Това също би улеснило сглобяването на устройството и би предложило потенциала на някакъв комплект за самостоятелно сглобяване. Ако има достатъчно интерес към този проект, бих могъл да направя версия 2, която разглежда тези проблеми.

Стъпка 10: Ресурси

За изграждането на този проект са необходими следните ресурси:

3D файлове за дело за отпечатване (Thingiverse):

Код (Github):

Препоръчано: