




아타리 포트폴리오(Atari Portfolio)는 영화 《터미네이터 2》에서 존 코너가 사용하는 소형 컴퓨터입니다. 제가 가지고 있는 것은 1989년산인데, 여기에 한 가지 더 의문스러운 업그레이드를 해줘야겠다고 생각했습니다. 바로 스카이넷(SKYNET)에서 영감을 받은 AI 비서와 연결하는 것이죠.
저는 이것을 ‘포트폴리오 AI 인터페이스’라고 부릅니다. 사용자는 기존 키보드로 입력하고, 기존 LCD 화면에서 답장을 확인하며, 스피커를 통해 비서의 답변을 들을 수 있습니다. 또한 마이크를 통해 소리를 듣고, 카메라에 잡힌 이미지를 설명하며, 신스웨이브 라디오를 재생할 수도 있습니다. 보아하니 로봇 반란에도 사운드트랙이 필요한 모양이군요.
Portfolio는 여전히 작은 DOS 프로그램을 실행합니다. 별도의 ESP32 모듈이 Wi-Fi, 오디오, 카메라를 처리하며 OpenAI API에 연결합니다. AI는 온라인에서 실행되고 있습니다. 제가 1989년산 핸드헬드 기기에 최신 언어 모델을 어떻게든 집어넣은 것은 아닙니다.
목표는 ‘포트폴리오’를 ‘포트폴리오’답게 만드는 요소들은 그대로 유지하면서, 이 제품에 새로운 생명을 불어넣는 것이었습니다.
붉은 조명이 비추는 데모 환경에서 AI 인터페이스가 완성된 오리지널 아타리 포트폴리오.
무엇을 할 수 있나요?
기본 키보드와 LCD에서 채팅하기
질문을 입력하면 글로 된 답변과 음성 녹음 파일이 제공됩니다. SKYNET에서 영감을 받은 이 캐릭터는 사용자를 ‘오퍼레이터’라고 부릅니다. 갤러리에는 재현된 인터페이스가 아닌, 데모에서 실제로 나온 응답이 표시되어 있습니다.
마이크를 통해 대화하기
내장 마이크를 통해 자동으로 음성을 수신하고 음성 대화를 나누려면 /talk 명령어를 사용하세요. 대화 내용은 포트폴리오에도 표시됩니다. 음성은 온라인에서 생성되어 모듈의 스피커를 통해 재생되며, 포트폴리오는 여전히 터미널 역할을 합니다.
사진을 촬영하고, 사진에 대해 질문하며, 포트폴리오에서 확인하세요
/look 명령어를 사용하여 이미지를 캡처하고 설명을 요청할 수 있습니다. 아래의 카메라 섹션에는 두개골에 대한 서술적 설명과 원래의 흑백 LCD에 표시된 이미지가 모두 포함되어 있습니다. /cam 및 /live 명령어는 각각 상세 및 대략적인 미리보기 모드를 제공하며, 시리얼 링크의 제한으로 인해 화면 갱신 속도가 제한됩니다.
인터넷 라디오 듣기
방송 메뉴에는 신스웨이브, 다크신스, 칠신스, 베이퍼웨이브가 포함되어 있습니다. 좌/우 방향 키로 방송을 변경하고, 상/하 방향 키로 볼륨을 조절하며, Esc 키를 누르면 음악이 계속 재생되는 상태에서 채팅 화면으로 돌아갑니다. 음성 응답 시 라디오가 일시 정지되었다가 응답이 끝나면 다시 재생됩니다. /talk 명령어가 실행 중인 동안에는 라디오가 계속 일시 정지된 상태로 유지됩니다. 라디오 스크린샷은 9단계에 있으며, 포함된 프로젝트 동영상에서는 오디오 동작을 확인할 수 있습니다.
현지 정보를 문의하세요
이 클라이언트는 또한 설정된 위치와 시간대를 기반으로 시간 및 위치 정보, /weather 및 /news 기능을 지원합니다. 보고서 출처 정보는 클라이언트의 명령어를 통해 확인할 수 있습니다. 이러한 기능은 인터넷 연결이 필요하며, 로컬에 저장된 보고서가 아닙니다.
음성을 제어하고 설정을 유지하세요
음성 및 로봇 효과는 기본적으로 활성화되어 있으며, 볼륨은 40/100으로 설정되어 있습니다. /vol 명령어에는 0~100 사이의 값을 입력할 수 있으며, Shift + 위/아래 화살표 키를 누르면 공유 음성/무선 볼륨을 5단위씩 조절할 수 있습니다. /mute 및 /unmute 명령어로 음성 응답을 제어할 수 있습니다. 설정을 변경하려면 /config를, 카드 설정을 불러오려면 /reload를, 전체 명령어 목록을 보려면 /help를 사용하세요. 의도적으로 음소거를 설정하거나 볼륨을 변경한 내용은 저장됩니다.
준비물:
• 아타리 포트폴리오와 이에 포함된 오리지널 아타리 직렬 인터페이스.
• AI.COM용 apfRAM 또는 호환 가능한 Portfolio 메모리 카드 및 해당 구성.
• 카메라와 내장 마이크가 탑재된 Waveshare ESP32-S3-CAM-OV5640 V1.1 보드.
• 보드의 스피커 출력 단자에 연결된 적절한 스피커.
• ESP32의 논리 전압과 호환되는 MAX3232 또는 SP3232 RS-232 레벨 변환기.
• 연결선, 적절한 커넥터 및 인클로저용 고정 장치.
• 설정 시 USB 전원을 사용하며, 선택적으로 Waveshare 보드에 호환되는 배터리를 사용할 수 있습니다.
• 3D 프린터 또는 프린팅 서비스 이용 권한.
• 라벨용 인화지와 접착제.
• 펌웨어 업로드 및 카드 데이터 전송용 컴퓨터, USB 케이블, 그리고 기본적인 전자 공구.
• Wi-Fi 및 본인 소유의 OpenAI API 키. API 사용 요금은 OpenAI에서 별도로 청구합니다.
처음에는 라즈베리 파이를 고려했지만, Waveshare 보드가 훨씬 더 콤팩트한 시작점이었습니다. 카메라, 마이크 두 개, 오디오 하드웨어가 하나의 보드에 통합되어 있고, 스피커는 별도로 구성되어 있었죠. 이 모듈을 약 24파운드에 구입했던 것으로 기억합니다. 이는 대략적인 구매 가격일 뿐, 현재 시세나 전체 제작 비용을 의미하는 것은 아닙니다. 포트폴리오와 오리지널 시리얼 인터페이스는 별도의 비용이 듭니다.
이 시스템은 다음과 같은 경로를 따릅니다:
아타리 포트폴리오 → 기존 직렬 인터페이스 → RS-232 변환기 → ESP32 → Wi-Fi → OpenAI API.
Portfolio는 메모리 카드에서 AI.COM을 실행합니다. 명령을 전송하고 응답을 표시합니다. ESP32는 온라인 서비스에 연결되며, 카메라, 마이크, 스피커를 로컬에서 제어합니다.
MAX3232/SP3232는 필수입니다. 포트폴리오의 RS-232 신호는 ESP32 GPIO 핀에 직접 연결해서는 안 됩니다.
이는 또한 기존 화면과 키보드를 계속 사용할 수 있음을 의미합니다. 교체용 디스플레이도 없고, 케이스 안에 노트북이 숨겨져 있지도 않습니다.

테스트된 펌웨어는 9600 baud(보드)의 시리얼 링크를 사용하며, 데이터 비트 8개, 패리티 없음, 스톱 비트 1개로 설정됩니다.
ESP32 측에서는 GPIO43이 송신이고 GPIO44가 수신입니다. 이들을 RS-232 변환기의 TTL 측을 통해 연결하십시오. RS-232 측에서는 송신이 Portfolio의 수신 라인에 연결되고 수신이 Portfolio의 송신 라인에 연결되어야 하며, 두 장치에는 공통 신호 접지가 필요합니다.
무엇이든 연결하기 전에 실제 변환기의 라벨과 커넥터 방향을 확인하십시오. 보드 라벨은 인터페이스의 서로 다른 측면을 나타낼 수 있으며, DB9 커넥터는 배선 측에서 보면 거울상처럼 보입니다.
ESP32의 microSD 카드를 제거하십시오. 이 빌드에서는 시리얼 링크에 GPIO43/44를 사용합니다.
인클로저를 닫기 전에 첫 번째 배선 테스트에 접근할 수 있도록 하십시오. Wi-Fi나 AI 요청을 사용하기 전에 클라이언트의 /test 명령으로 통신을 확인합니다.
오목하게 들어간 시리얼 커넥터의 외부 모습.

이 펌웨어는 Waveshare ESP32-S3-CAM-OV5640 V1.1을 대상으로 합니다. 다른 버전의 보드를 사용하는 경우 별도의 핀 및 전원 점검이 필요합니다.
카메라 리본 케이블을 올바른 카메라 소켓에 연결하고, 완전히 끼운 다음 래치를 닫으십시오. 스피커를 보드의 스피커 커넥터에 연결하십시오. 온보드 마이크는 ES7210 마이크 ADC를 사용하며, 오디오 출력은 ES8311 코덱을 사용합니다.
펌웨어를 설정할 때는 USB 전원으로 시작하십시오. 배터리를 추가할 경우, 실제 BAT 소켓과 비교하여 배터리의 호환성 및 극성을 확인하십시오. 전선 색상이나 커넥터의 외관만 보고 판단하지 마십시오.
테스트를 거친 이 펌웨어는 PWR 버튼을 약 2초간 누른 후 손을 떼면 전원을 끄도록 요청하는 기능을 지원합니다. USB를 통해 전원이 계속 공급되는 상태에서 보드는 딥 슬립 모드로 진입하며, PWR 버튼을 누르면 다시 깨어납니다. 휴대용 모드로 사용하기 전에 조립한 장치의 배터리 작동 상태를 확인하시기 바랍니다.
조립된 전자 부품과 케이블 배선 상태를 위에서 본 모습.
코드와 빌드 방법은 GitHub에 있습니다:
https://github.com/daxx2k/atari-portfolio-ai
이 빌드의 공식 프리릴리스 버전은 v0.4.15이며, ESP32 펌웨어 0.4.15와 Portfolio 클라이언트 0.4.14가 결합되어 있습니다. 두 버전의 버전 번호는 서로 독립적입니다.
소스 빌드의 경우, 저장소의 docs/BUILD.md 파일을 따르십시오. 테스트된 설정은 Arduino-ESP32 3.2.0, ESP32-S3 타겟, 16MB 플래시, OPI PSRAM 및 Huge APP 파티션 구성을 사용하며, 부팅 시 USB CDC가 활성화되고 하드웨어 USB 모드가 켜져 있습니다.
보드를 USB로 연결하고, 해당 보드의 실제 시리얼 포트를 선택한 다음 펌웨어를 업로드하십시오. 먼저 해당 포트를 사용 중인 다른 프로그램들을 모두 닫으십시오.
이 프리릴리스 버전에는 지원되는 보드용 바이너리도 포함되어 있습니다. 병합된 이미지가 저장된 설정을 덮어쓸 수 있으므로, 카드 구성을 따로 보관해 두시기 바랍니다. 해당 바이너리가 모든 ESP32-S3 보드에 적합한 것은 아니라는 점을 유의하시기 바랍니다.
조립 방법: https://github.com/daxx2k/atari-portfolio-ai/blob/main/docs/BUILD.md
메모리 카드는 이 시스템 구성에서 중요한 부분입니다. 이 카드에는 DOS 클라이언트와 시스템 연결에 필요한 설정이 저장되어 있습니다.
리포지토리에서 portfolio/AI.COM을 카드로 복사하세요. 그런 다음 config/AISETUP.EXAMPLE.TXT 파일을 AISETUP.TXT로 복사하고, Wi-Fi 정보, OpenAI API 키, 위치 및 시간대를 입력하세요.
apfRAM USB 전송을 하려면 카드가 Portfolio 외부에 있어야 합니다. 전송을 완료하고 USB를 안전하게 분리한 후, 그제야 카드를 Portfolio에 삽입하십시오. 카드가 Portfolio에 삽입된 상태에서는 절대로 카드의 USB를 연결하지 마십시오.
AI.COM을 업데이트하기 위해 정상적으로 작동하는 카드를 다시 포맷할 필요는 없습니다.
구성 파일, 백업 파일 및 ESP32에 저장된 설정에는 평문 형태의 인증 정보가 포함되어 있습니다. 이러한 정보는 비공개로 유지해야 하며, 사진이나 스크린샷에는 가짜 값을 사용하십시오.

ESP32에 전원을 공급하고, 시리얼 인터페이스를 연결한 다음, 포트폴리오에서 AI를 실행합니다.
먼저 /test를 입력하여 시리얼 링크를 확인하세요. 그런 다음 /status를 사용하여 장치를 점검하고 “누구세요?”와 같은 간단한 질문을 보내보세요. 글로 된 답변과 음성 답변을 모두 받을 수 있을 것입니다.
음성 및 로봇 목소리 효과는 기본적으로 활성화되어 있으며, 볼륨은 100점 만점에 40으로 설정되어 있습니다. /vol 40을 사용하여 볼륨을 직접 설정하거나, Shift + 위/아래 화살표 키를 눌러 5단위씩 조절할 수 있습니다. /mute 및 /unmute 명령어로 음성 응답을 제어할 수 있으며, 의도적으로 변경한 오디오 설정은 저장됩니다.
문자는 수신되지만 음성이 나오지 않는 경우, 음소거 상태, 볼륨 및 스피커 연결 상태를 확인하십시오. 직렬 통신에 오류가 발생하면, 온라인 서비스 문제 해결을 진행하기 전에 변환기, 송신/수신 경로의 교차 여부 및 공통 접지 상태를 확인하십시오.
명령을 확인하려면 /help를, 설정을 편집하려면 /config를, 카드 구성을 적용하려면 /reload를 사용하세요.
원본 LCD에서 실행 중인 SKYNET 터미널 (프로젝트 영상 중 03:55 장면).
제가 재현하려고 했던 SKYNET의 공식적인 목소리는 딱 하나만 있는 게 아닙니다. 저는 제가 그 캐릭터를 해석한 방식에 어울리는 목소리와 효과를 선택했습니다.




인클로저 파일과 라벨 PDF는 MakerWorld에 있습니다:
https://makerworld.com/en/models/3441988-atari-portfolio-ai-interface-esp32-enclosure
Bambu Studio 프로젝트에는 두 개의 빌드 플레이트가 있습니다. 첫 번째에는 케이스, 커버, ESP32 지지대 및 일반 라벨 뒷판이 들어 있습니다. 두 번째에는 흰색 BOOT 및 PWR 버튼이 들어 있습니다.
여러 번 수정한 끝에 조립에 적합한 레이아웃을 완성했습니다. 가장 까다로웠던 점은 회로 기판의 윤곽만이 아니라 실제 커넥터를 위한 충분한 공간을 확보하는 것이었습니다. 소켓, 케이블이 휘는 부분, USB 플러그 모두 공간이 필요합니다.
모든 것을 조이기 전에 전자 부품을 제자리에 넣고 잘 맞는지 확인하십시오. 카메라 위치, USB 접근성, 직렬 커넥터와 버튼의 움직임을 확인하고, 지지대나 뚜껑 아래에 전선이 끼이지 않도록 하십시오.
제가 특히 마음에 드는 세부 요소는 스피커 그릴입니다. 그릴의 형태가 Portfolio 자체의 스피커 디자인에서 영감을 얻었기 때문에 새 모듈이 원래 하드웨어와 연관된 느낌을 줍니다.
Portfolio에서 영감을 얻은 스피커 그릴 클로즈업(프로젝트 영상 05:45의 한 장면).
여러 색상으로 3D 프린팅한 라벨도 시도해 보았습니다. 작은 글자가 제가 원한 만큼 깔끔하게 보이지 않아서, 최종 버전에서는 더 얇은 뒷판에 인화지로 인쇄한 라벨을 스티커처럼 붙였습니다. 제공된 영어 PDF는 페이지에 맞추지 말고 실제 크기로 인쇄하십시오.
최종 인화지 라벨용 디지털 아트워크입니다. 인쇄할 때는 이 문서에 있는 크기가 조정된 이미지가 아니라 MakerWorld의 실제 크기 PDF를 사용하십시오.
커버를 제거한 상태로 조립한 내부 모습: 스피커, ESP32 보드 및 카메라 리본 케이블.
인화지 라벨과 흰색 버튼이 장착된 완성된 인클로저.



/look 명령어를 사용하여 사진을 찍고, 어시스턴트에게 그 사진을 설명해 달라고 요청하세요. ESP32가 이미지를 캡처하여 온라인 서비스로 전송하면, 포트폴리오에 답변이 표시되고 스피커가 이를 읽어줍니다.
데모를 위해 작은 해골을 사용했습니다. SKYNET에서 영감을 받은 어시스턴트를 보여주기에는 첫 번째 대상으로 딱 맞는 것 같았습니다.
/cam 명령어를 사용하여 흑백 미리보기를 열 수도 있고, /live 명령어를 사용하면 디테일을 희생하고 속도를 높인 저해상도 미리보기를 볼 수 있습니다. 시리얼 연결로 인해 프레임 속도가 제한되므로, 이는 실시간 영상이 아닙니다.
이 차이는 중요합니다. 미리보기는 포트폴리오 화면에 표시되는 작은 이미지인 반면, 이미지 설명에는 온라인에서 처리된 카메라 촬영 이미지가 사용됩니다.
포트폴리오의 기본 흑백 LCD 화면에 표시된 촬영된 카메라 이미지 (동영상 06:30).
이미지 설명 답변에 따르면, 이 두개골은 사이보그나 터미네이터의 내골격으로 확인됩니다(영상 05:55).
카메라 시연에 사용된 두개골 (프로젝트 영상 중 05:40 장면).

마이크로 대화하려면 /talk를 사용하세요. 대화 내용은 Portfolio에도 표시되므로, 원래 화면에서 대화 내용을 따라갈 수 있습니다.
음악을 들으려면 /radio를 여세요. 왼쪽/오른쪽 키로 방송국을 변경하고, 위쪽/아래쪽 키로 볼륨을 조절합니다. 음악이 계속 재생되는 동안 Esc 키를 누르면 프롬프트로 돌아갑니다.
음성 응답이 재생되면 라디오가 일시 정지되었다가 다시 재생됩니다. 마이크로 대화하는 동안에는 라디오가 일시 정지된 상태로 유지됩니다.
이러한 조합 덕분에 이 프로젝트는 단순한 텍스트 터미널 이상의 느낌을 줍니다. Portfolio처럼 작동하면서도 음성으로 대답하고, 사물을 살펴보고, 음악을 재생할 수 있는 오래된 컴퓨터인 셈입니다.
원래 Portfolio LCD에 표시된 라디오 조작 화면(프로젝트 영상 06:50의 한 장면).
가장 큰 교훈은 개별 기능을 작동시키는 것이 작업의 일부에 불과하다는 점이었다. 음성 재생이 신속하게 시작되도록 하고, 라디오 제어가 반응성을 유지하도록 하며, 전자 부품을 사용 가능한 케이스에 넣는 데는 많은 반복 작업이 필요했다.
이 버전은 작동하는 시제품이자 공개 사전 출시 버전으로, 제 개발용 조립체에서 테스트했습니다. 모든 Portfolio 또는 ESP32 보드에서 검증된 것은 아닙니다. 카메라 미리보기 속도는 시리얼 링크에 의해 제한되며, 온라인 응답, 음성 재생 시작 및 라디오 재연결은 네트워크와 서비스 응답 시간에 따라 달라집니다.
하지만 원래의 목표는 달성되었다. 키보드, LCD 및 DOS 프로그램은 여전히 사용자 경험의 중심에 있다. 새로운 하드웨어는 이들이 새로운 역할을 수행하게 한다.
직접 만들어 보신다면 꼭 보고 싶습니다. 다만 SKYNET에 무엇을 요청할지는 신중히 생각하세요.
프로젝트 파일 및 참조 자료
동영상: https://youtu.be/itMtJ-JYX_g
소스 코드, 클라이언트 및 문서: https://github.com/daxx2k/atari-portfolio-ai
하드웨어 참고 사항: https://github.com/daxx2k/atari-portfolio-ai/blob/main/docs/HARDWARE.md
인클로저 및 출력 가능한 라벨: https://makerworld.com/en/models/3441988-atari-portfolio-ai-interface-esp32-enclosure
Hackaday 프로젝트: https://hackaday.io/project/207089-portfolio-ai-interface-chatgpt-on-atari-portfolio
이 인클로저는 MakerWorld에서 CC BY-NC 4.0 라이선스로 등록되어 있습니다. 현재 소프트웨어 저장소에는 프로젝트 전체에 적용되는 라이선스가 선택되어 있지 않습니다. 공개되어 있다는 사실만으로 오픈 소스 라이선스가 부여되는 것은 아닙니다. 타사 코드는 각자의 고지 사항을 그대로 유지합니다.
원문: https://www.instructables.com/Turn-an-Atari-Portfolio-Into-a-SKYNET-Inspired-AI-/