

시각장애인과 중증 시각장애인을 위한 오픈 소스·오픈 하드웨어 책 스캐너를 만들었습니다. 이 장치는 인쇄된 두 페이지를 촬영하고, 텍스트를 인식한 뒤, text-to-speech를 사용해 소리 내어 읽어 줍니다. 몇 가지 촉각식 조작부만으로 화면 없이도 사용할 수 있습니다.
중증 시각장애가 있는 사람에게 인쇄된 책과 화면 기반 독서 시스템은 사용하기 어렵거나 아예 사용할 수 없기 때문에 이 장치를 만들었습니다. 일반적인 인쇄 책을 접근 가능하게 만드는 간단하고 안정적인 방법을 제공하는 것이 목표였습니다.
STEP 1. 준비물
다음 목록에는 Accessible Book Reader의 주요 부품이 나와 있습니다. 전체 부품 목록, PCB 설계 파일, 기계 부품, 소프트웨어 및 조립 문서는 GitHub 저장소에서 확인할 수 있습니다:
https://github.com/lhm0/accessible_book_reader
주요 부품:
- Raspberry Pi 5 1개
- 140° 대각선 광각 M12 렌즈가 장착된 Arducam 16 MP IMX519 카메라 모듈 2개
- PN5180 NFC 브레이크아웃 보드 2개
- Raspberry Pi Pico 1개
- MAX98357A I²S 오디오 앰프 브레이크아웃 보드 1개
- 각종 맞춤형 PCB
- 3D 프린팅 인클로저 및 기계 부품
- 유리 패널 2개
LED 스트립, 스위치, 커넥터, 배선, 체결 부품, 스피커, 엔코더, NFC 안테나 및 전원 공급 부품 등의 추가 부품도 필요합니다. 부품을 구매하기 전에 저장소에서 최신 사양을 확인하세요.
STEP 2. Accessible Book Reader의 작동 방식



Accessible Book Reader는 인쇄된 책 페이지를 음성 오디오로 변환합니다. 주요 기능은 Raspberry Pi 5가 제어하며, 사용자는 몇 가지 촉각식 조작부만으로 장치를 조작합니다.
시스템 개요
첫 번째 다이어그램은 주요 하드웨어 구성 요소를 보여 줍니다. 두 카메라는 펼쳐진 책의 왼쪽 페이지와 오른쪽 페이지를 촬영합니다. 각각 20개의 LED가 장착된 두 개의 맞춤형 LED 보드가 낮은 각도로 페이지를 비춥니다. 이를 통해 균일한 조명을 제공하면서 유리 패널의 반사를 줄일 수 있습니다.
Raspberry Pi 5는 카메라와 조명을 제어하고 이미지 처리 및 텍스트 인식을 수행합니다. 제어 패널에는 시작 버튼, 요약 버튼 2개, 회전식 볼륨 조절기 및 스피커가 있습니다. 개별 책을 식별하는 데 사용되는 추가 하드웨어는 오른쪽에 표시되어 있으며, 별도의 단계에서 설명합니다.
버튼을 누른 순간부터 오디오 출력까지
두 번째 다이어그램은 전체 읽기 과정을 보여 줍니다.
시작 버튼을 누르면 새 스캔이 시작됩니다. 두 카메라는 왼쪽 페이지와 오른쪽 페이지를 동시에 촬영합니다. 그런 다음 RapidOCR이 이미지에서 인쇄된 텍스트를 추출합니다.
페이지 수집기는 인식된 텍스트를 정리하고 구조화합니다. 여기에는 단어 분할을 제거하고, 적절한 멈춤을 삽입하며, 다음 페이지로 이어지는 문장을 처리하는 작업 등이 포함됩니다.
준비된 텍스트는 Google Cloud text-to-speech 백엔드로 전송되어 오디오로 변환됩니다. 생성된 오디오는 내장 스피커를 통해 재생됩니다.
요약 만들기
개별 페이지를 읽는 것 외에도 이 장치는 스캔한 책의 음성 요약을 만들 수 있습니다.
저장된 페이지는 약 10~20페이지 단위의 섹션으로 나뉩니다. 가능한 경우 섹션은 감지된 장 경계에서 끝납니다. Gemini는 완료된 각 섹션의 요약을 생성하고 저장합니다.
그 최근 페이지 버튼은 가장 최근에 읽은 내용의 요약을 제공합니다. 현재 섹션이 아직 완료되지 않았다면 장치는 마지막으로 완료된 섹션의 요약과 아직 요약되지 않은 나머지 텍스트를 결합합니다. Gemini가 이 정보를 압축하고, 결과가 음성으로 변환됩니다.
이 지금까지의 이야기 버튼은 현재 위치까지 책 전체의 개요를 만듭니다. 이를 위해 완료된 모든 섹션 요약을 시간순으로 결합하고, Gemini가 압축한 다음 text-to-speech를 사용해 소리 내어 읽습니다.
STEP 3. 책 호환성, 언어 및 식별

Accessible Book Reader를 만들기 전에 어떤 책을 처리할 수 있는지와 개별 책을 어떻게 식별하는지 이해하는 것이 중요합니다.
지원 언어
현재 소프트웨어는 독일어와 영어 책을 지원합니다. OCR 및 text-to-speech 서비스가 지원하는 언어라면 일반적으로 다른 언어도 추가할 수 있습니다. 그러나 다른 언어를 추가하려면 소프트웨어를 그에 맞게 변경해야 합니다.
책 크기 및 페이지 레이아웃
스캐너는 최대 160 × 240 mm크기의 책 페이지를 처리할 수 있습니다.
인쇄된 텍스트는 책의 중앙에서 최소 9 mm 떨어져 있어야 하며이를 거터라고도 합니다. 중앙에 더 가까운 텍스트는 페이지의 곡률에 가려지거나 안정적으로 촬영되는 영역 밖에 놓일 수 있습니다. 이는 안쪽 여백이 매우 좁은 일부 제본이 단단한 페이퍼백에서 한계가 될 수 있습니다.
NFC 태그 및 책 식별
각 책에는 NFC 태그가 부착되어 있어야 합니다. 태그에 저장된 고유 ID는 Accessible Book Reader 내부에서 해당 책의 참조값으로 사용됩니다.
페이지를 스캔할 때마다 인식된 텍스트가 이 참조에 할당됩니다. 이를 통해 장치가 서로 다른 책의 콘텐츠를 구분하여 보관할 수 있습니다. 따라서 책 사이를 전환한 뒤 나중에 스캔을 계속해도 페이지나 요약 내용이 서로 섞이지 않습니다.
이 시스템은 다음 두 종류를 모두 지원합니다: ISO 14443A 및 ISO 15693 태그. 약간 더 비싸더라도 ISO 15693 태그를 사용하는 것을 권장합니다. 읽기 범위가 훨씬 넓어 책을 스캐너 위에 놓았을 때 감지가 더 안정적이기 때문입니다.
사진에 나온 것처럼 NFC 태그를 책 뒷표지 안쪽에 부착합니다. 한 번 설치하면 태그를 책에 영구적으로 부착해 두어도 됩니다.
STEP 4. 인클로저 부품 출력












두 개의 유리 패널을 제외한 모든 기계식 인클로저 부품은 3D 프린터로 출력합니다. 저는 Bambu Lab X1C를 사용했으며 모든 부품을 PLA로 출력했습니다.
일부 부품은 상당히 크며 프린터의 빌드 볼륨을 거의 전부 사용합니다. 따라서 베이스 플레이트는 두 부분으로 나누었습니다. 한 부품으로 출력하기에는 너무 크기 때문입니다.
부품, 특히 크고 얇은 부품은 빌드 플레이트에서 제거하기 전에 충분히 식히십시오. 아직 따뜻한 상태에서 제거하면 계속 식는 과정에서 휘거나 뒤틀릴 수 있습니다.
GitHub 저장소에는 출력에 필요한 모든 파일이 포함되어 있습니다:
- 원본 Autodesk Fusion 설계 파일
- 내보낸 STL 파일
- 바로 사용할 수 있는 Bambu Lab 3MF 파일
유리 패널에 맞는 부품 선택
저는 크기에 맞게 절단해 주는 eBay 판매자에게 두 개의 유리 패널을 주문했습니다. 그러나 각 패널의 짧은 변이 지정된 치수보다 약 1 mm 더 길었습니다.
이 때문에 다음 이름의 부품은 front, front2, back 및 back2 가 두 가지 버전으로 제공됩니다. 접미사 _dev 가 붙은 파일은 제가 받은 약간 더 큰 유리 패널용으로 설계되었습니다.
이 네 부품을 출력하기 전에 유리 패널의 치수를 주의 깊게 측정하고 실제 치수에 맞는 버전을 선택하십시오.
너트 삽입 및 나사 연결
출력된 부품은 M2 및 M3 나사를 사용해 서로 연결하고 전자 부품에도 고정합니다. Raspberry Pi 5는 M2.5 나사를 사용해 장착되므로 이 추가 나사 규격도 필요하다는 점에 유의하십시오. 모델에는 해당 M2, M2.5 또는 M3 너트를 출력 중 삽입할 수 있는 홈이 있습니다. 출력이 계속되기 전에 너트를 이 홈에 넣을 수 있도록 프린터가 올바른 레이어에서 일시 정지해야 합니다.
필요한 일시 정지는 제공된 3MF 파일에 이미 포함되어 있습니다. 다른 프린터를 사용하거나 다른 슬라이서로 파일을 준비하는 경우에는 이러한 일시 정지를 직접 추가해야 합니다.
이 조립 방식은 저렴하면서도 견고하고 매우 안정적이라는 것을 확인했습니다.
STEP 5. 인클로저 조립 및 유리 패널 설치





M2 및 M3 나사를 사용해 출력된 인클로저 부품을 서로 연결합니다. 부품의 위치나 방향이 확실하지 않다면 완성된 Fusion 어셈블리를 참조하십시오. 파일 abr.f3z 는 GitHub 저장소에 포함되어 있으며 Autodesk Fusion으로 열 수 있습니다.
인클로저의 박공 모양 양쪽 끝은 각각 두 부품으로 구성됩니다:
- front 및 front2
- back 및 back2
내부 부품인 front 및 back은 검은색으로 출력합니다. 먼저 이 부품들을 나머지 인클로저 구조물에 부착합니다.
그런 다음 두 개의 유리 패널을 위에서 아래로 내려 해당 홈에 끼웁니다. 외부 부품인 front2 및 back2는 목재 색상의 필라멘트로 출력합니다. 가장자리가 유리 패널과 겹치면서 패널을 단단히 고정합니다.
조립 중에는 유리 패널을 분리할 수 있도록 유지
전자 부품을 설치하는 동안에는 front2 및 back2 를 장착하지 않은 상태로 두는 것을 권장합니다. 이 외부 부품을 장착하지 않으면 인클로저 내부에 접근해야 할 때마다 유리 패널을 쉽게 분리할 수 있습니다. 테스트나 카메라 조정을 위해 필요할 때에도 빠르게 다시 끼울 수 있습니다.
나머지 조립 및 테스트 작업이 완료된 후에만 front2 및 back2 를 설치하십시오. 이 부품들이 장착될 때까지 유리 패널은 고정되지 않아 미끄러져 빠질 수 있습니다. 이에 맞게 인클로저를 취급하고 이동하십시오.
STEP 6. 컨트롤 패널 조립




컨트롤 패널은 맞춤형 PCB 두 개를 사용합니다. 먼저 두 보드를 조립하고 납땜하십시오.
더 큰 PCB에는 푸시 버튼 세 개와 컨트롤 패널을 Raspberry Pi에 연결하는 데 사용하는 10핀 커넥터가 장착됩니다. 더 작은 PCB에는 볼륨 조절에 사용하는 EC11 로터리 엔코더가 장착됩니다.
다섯 개의 전선을 사용하여 EC11 보드를 메인 컨트롤 패널 PCB에 연결하십시오. 스피커도 더 큰 PCB에 직접 연결합니다.
전자 부품을 설치하기 전에 모든 납땜 접합부를 검사하고 커넥터와 부품의 방향을 확인하십시오. 납땜과 배선이 완료되면 인쇄된 컨트롤 패널 인클로저 내부에 두 PCB와 스피커를 장착하십시오. 조립체를 고정하기 전에 버튼과 로터리 엔코더가 해당 개구부를 통해 자유롭게 움직이는지 확인하십시오.
STEP 7. Raspberry Pi 5 설치

먼저 공식 Raspberry Pi Active Cooler for Raspberry Pi 5를 설치하십시오. Raspberry Pi 5 문서에 제공된 설치 지침을 따르십시오.
캡처한 페이지 이미지를 OCR 처리하는 동안 Raspberry Pi가 높은 처리 부하로 작동하므로 액티브 쿨링이 필요합니다. 인클로저의 환기구를 통해 쿨러가 외부와 공기를 교환할 수 있습니다.
쿨러를 장착한 후 네 개의 M2.5 × 20 mm 스탠드오프를 사용하여 베이스 플레이트에 Raspberry Pi 5를 장착하십시오. 패스너를 조이기 전에 보드의 방향이 올바르고 커넥터와 환기구에 계속 접근할 수 있는지 확인하십시오.
카메라 케이블 설치
다음 단계에서 익스텐션 보드를 설치하기 전에 두 개의 22핀, 200 mm FFC 케이블 을 Raspberry Pi의 카메라 커넥터에 삽입하십시오. 익스텐션 보드를 장착하면 이 커넥터에 더 이상 접근할 수 없습니다.
커넥터의 잠금 부품은 깨지기 쉬우므로 플라스틱 부품이 손상되지 않도록 조심스럽게 열고 케이블을 삽입하십시오.
다음 Type B FFC 케이블을 사용하십시오. 이 케이블 유형은 한쪽 끝에서 노출된 접점이 위쪽에 있고 다른 쪽 끝에서는 아래쪽에 있습니다.
STEP 8. 익스팬션 보드 조립


익스팬션 보드는 Raspberry Pi 5를 다음 주요 주변 장치 조립체에 연결합니다:
- 컨트롤 패널
- PN5180 NFC 리더 두 개
- LED PCB 두 개
이 연결은 10핀 IDC 헤더 세 개와 피치 2.5 mm의 2핀 JST-XH 커넥터 두 개를 통해 제공됩니다.
또한 보드에는 오디오 출력을 위한 MAX98357A 브레이크아웃 보드 와 Raspberry Pi Pico가 장착되며, Raspberry Pi Pico는 두 PN5180 NFC 리더와의 통신을 처리합니다. 각 LED 보드는 고전력 N채널 MOSFET으로 스위칭됩니다.
사진에 표시된 대로 부품을 익스팬션 보드에 납땜하십시오. 커넥터, Raspberry Pi Pico, MAX98357A 모듈, MOSFET 및 모든 극성 부품의 방향에 특히 주의하십시오. 전체 회로도와 PCB 레이아웃은 GitHub 저장소의 KiCad 설계 파일에서 확인할 수 있습니다.
납땜 접합부를 확인한 후 익스팬션 보드를 Raspberry Pi 5 GPIO/HAT 헤더에 조심스럽게 맞추고 눌러 장착하십시오. 모든 헤더 핀이 올바르게 정렬되었고 앞서 설치한 카메라 케이블이 끼이거나 손상되지 않았는지 확인하십시오.
마지막으로 M2.5 나사를 사용하여 익스팬션 보드를 M2.5 스탠드오프에 고정하십시오.
STEP 9. NFC 안테나 설치




이 장치는 책의 양쪽에서 태그를 감지할 수 있도록 NFC 안테나 두 개를 사용합니다. 각 안테나는 직경 0.5 mm 에나멜 구리선 으로 만든 단일 턴 코일이며, 두 유리 패널 중 하나의 가장자리를 따라 배치됩니다.
안테나 와이어를 배선할 수 있도록 front 및 back 인클로저 부품에 작은 개구부가 마련되어 있습니다. 각 유리 패널의 짧은 변을 따라 사진에 표시된 대로 이 두 부품의 표면을 가로질러 와이어를 배선하십시오.
위쪽 긴 가장자리를 따라 와이어는 인클로저의 앞쪽에서 뒤쪽까지 자유롭게 이어집니다. 조립된 장치에서는 이 구간이 두 유리 패널 사이의 각도 부분에서 보입니다.
아래쪽 긴 가장자리를 따라 LED PCB용 삼각형 장착 레일 뒤쪽으로 와이어를 배선하십시오. 와이어를 지정된 경로에 가깝게 유지하십시오.
두 번째 유리 패널에도 이 과정을 반복하여 서로 분리된 단일 턴 안테나 두 개를 만드십시오. 나중에 해당 PN5180 리더에 연결할 수 있도록 양쪽 끝에 충분한 와이어를 남겨 두십시오.
STEP 10. LED 보드 설치

먼저 각 LED PCB에 짧은 2심 케이블을 연결하십시오. 각 케이블의 반대쪽 끝에는 압착된 2핀 JST-XH 커넥터를 연결하십시오. LED 보드와 확장 보드에 표시된 극성을 확인하십시오.
다음으로 M2 나사를 사용하여 왼쪽 및 오른쪽 삼각형 장착 레일을 해당 인클로저 부품에 부착하십시오.
이 레일은 NFC 안테나 와이어가 지나가는 홈 바로 앞에 배치됩니다. 나사를 조이기 전에 각 와이어가 홈 안에 완전히 안착되어 있고 장착 레일 아래에 갇히거나 눌리지 않았는지 확인하십시오.
두 LED PCB를 삼각형 레일에 장착하고 M2 나사로 고정하십시오. 마지막으로 JST-XH 플러그를 해당 왼쪽 LED 및 오른쪽 LED 소켓에 연결하십시오(Raspberry Pi 확장 보드에 있음).
STEP 11. PN5180 브레이크아웃 보드 수정



NFC 시스템은 두 개의 PN5180 브레이크아웃 보드를 기반으로 합니다. 각 모듈에는 기판에 인쇄된 안테나가 포함되어 있지만, 그 판독 거리는 Accessible Book Reader에 충분하지 않습니다. 따라서 유리 패널 주변에 설치된 대형 외부 안테나 루프를 연결할 수 있도록 보드를 수정해야 합니다.
이 수정은 되돌릴 수 없으므로, 트레이스를 절단하기 전에 사진을 주의 깊게 확인하십시오.
먼저 양쪽 끝에서 인쇄 안테나의 PCB 트레이스를 끊습니다. 두 절단 위치의 정확한 지점은 사진에 나와 있습니다. 각 트레이스가 완전히 절단되었는지 확인하고, 기판 안테나가 전기적으로 분리되었는지 검증하십시오.
그다음 각 안테나 연결 지점에서 솔더 마스크의 작은 영역을 조심스럽게 제거하여 아래의 구리를 노출합니다. 노출된 구리에 납을 입힌 다음, 사진에 나온 것처럼 준비된 두 접점에 안테나 커넥터를 납땜합니다. 열을 너무 오래 가하지 마십시오. PCB에서 구리 트레이스가 들릴 수 있습니다.
두 안테나 간 전환
두 PN5180 리더는 안테나끼리 서로 간섭하므로 동시에 작동할 수 없습니다. 비활성 상태인 두 번째 안테나도 전기적으로 연결된 상태로 남아 있으면 현재 사용 중인 리더에 영향을 줄 수 있습니다.
이러한 이유로 소형 릴레이 인터페이스 보드를 제작하여 PN5180 리더와 외부 안테나 사이에 삽입했습니다. 한 리더가 활성화되면 릴레이 회로가 다른 리더에 연결된 안테나를 전기적으로 분리합니다. 그러면 책의 반대쪽을 확인해야 할 때 시스템이 전환됩니다.
이 구성은 두 대형 안테나 루프가 서로 간섭하는 것을 방지하며, 실제 사용에서 매우 안정적인 것으로 입증되었습니다.
릴레이 보드 조립
릴레이, CD4093 로직 IC 및 나머지 부품을 릴레이 보드에 납땜합니다. 그런 다음 네 개의 전선을 사용하여 릴레이 보드를 PN5180 브레이크아웃 보드에 연결합니다. 부품 배치, 배선 세부 사항 및 연결 지점은 사진과 GitHub 저장소의 KiCad 설계 파일을 참조하십시오.
안테나 튜닝 커패시터 선택
커패시터 C1과 C2는 안테나의 공진 주파수를 NFC 리더의 동작 주파수에 맞추는 데 사용됩니다. 두 커패시터는 병렬로 연결되므로 정전 용량이 합산됩니다.
ISO 15693 태그만 사용할 예정이라면 22 pF 커패시터 를 한 위치에 장착하고 다른 위치는 비워 둡니다. ISO 14443A 태그도 사용하려면 더 정밀한 안테나 튜닝 절차를 권장하며, 이는 뒤의 단계에서 설명합니다.
이 조정을 준비하려면 먼저 18 pF 커패시터를 설치합니다. 튜닝 과정에서 2 pF, 3 pF, 4 pF 또는 5 pF 의 작은 추가 정전 용량을 더하여 최상의 결과를 얻을 수 있습니다.
인터페이스 어댑터 설치
Raspberry Pi Pico와의 연결은 10핀 IDC 커넥터가 장착된 소형 인터페이스 보드를 통해 이루어집니다. 먼저 IDC 커넥터를 인터페이스 보드에 납땜합니다. 그런 다음 핀 헤더를 사용하여 완성된 인터페이스 보드를 PN5180 브레이크아웃 보드에 납땜합니다. 납땜하기 전에 IDC 커넥터와 핀 헤더의 방향을 모두 확인하십시오.
STEP 12. 카메라 설치

두 카메라 모듈을 장착하기 전에 각 렌즈의 초점 조절을 해제합니다. 렌즈 링은 소량의 접착제로 고정되어 있으므로 날카로운 칼로 조심스럽게 잘라내야 합니다.
작업 중 돋보기로 접착 이음부를 검사하십시오. 접착제만 절단하고, 미세한 렌즈 나사산이나 주변 카메라 부품이 손상되지 않도록 특히 주의하십시오. 접착제가 제거되면 렌즈를 회전할 수 있으며, 시운전 중 카메라의 초점을 수동으로 조정할 수 있습니다.
그다음 M2 나사를 사용하여 두 카메라 마운트를 베이스 플레이트에 부착하십시오. 각 카메라 모듈을 나사 4개로 홀더에 설치하십시오. 홀더는 카메라를 필요한 45도 각도로 배치합니다.
마지막으로 앞서 설치한 FFC 케이블을 카메라 모듈에 연결하십시오. FFC 커넥터와 잠금 탭은 손상되기 쉬우므로 케이블을 곧게 삽입하고 잠금 장치를 조심스럽게 닫으십시오. 카메라를 고정하고 케이블을 배선하기 전에 각 케이블이 끝까지 제대로 삽입되었고 방향이 올바른지 확인하십시오.
STEP 13. 전자 장치 연결



Raspberry Pi 확장 보드를 컨트롤 패널 및 두 개의 PN5180 어셈블리에 연결하는 데 10도체 리본 케이블 3개가 사용됩니다.
각 리본 케이블의 양쪽 끝에 10핀 IDC 커넥터를 하나씩 부착하십시오. 사진에 나온 것처럼 벤치 바이스를 사용하면 커넥터를 케이블에 눌러 끼우기 쉽습니다. 커넥터를 주의 깊게 정렬한 다음 바이스를 천천히 닫아 전체 폭에 압력이 고르게 가해지도록 하십시오.
커넥터를 장착할 때 1번 핀의 방향에 주의하십시오. 리본 케이블의 표시된 도체(일반적으로 색상 줄로 표시됨)는 양쪽 끝에서 모두 1번 핀에 대응해야 합니다. 또한 눌러 결합하기 전에 커넥터의 키와 스트레인 릴리프 부분의 방향도 확인하십시오.
커넥터 6개를 모두 설치했으면 케이블을 검사하고 가능하다면 도통을 확인하십시오. 그런 다음 케이블 하나를 컨트롤 패널에 연결하고, 나머지 케이블을 각각 PN5180 어셈블리에 연결하십시오. 반대쪽 끝은 Raspberry Pi 확장 보드의 해당 커넥터에 꽂으십시오.
STEP 14. Raspberry Pi Pico에 펌웨어 설치
USB 부트로더 드라이브에 UF2 파일을 복사하여 Raspberry Pi Pico에 펌웨어를 설치할 수 있습니다. 추가 프로그래밍 하드웨어는 필요하지 않습니다.
준비된 펌웨어 이미지는 다음 저장소 경로에 있습니다:
hardware/pn5180_gateway/firmware/pn5180_gateway_pico.uf2
다음과 같이 설치하십시오:
- Raspberry Pi Pico를 USB에서 분리하십시오.
- 다음 버튼을 길게 누르십시오: BOOTSEL 버튼.
- 버튼을 계속 누른 상태에서 USB 케이블을 사용하여 Pico를 컴퓨터에 연결하십시오.
- 다음 버튼을 놓으십시오: BOOTSEL 버튼.
- 컴퓨터에 다음 이름의 이동식 드라이브가 나타나야 합니다: RPI-RP2 .
- pn5180_gateway_pico.uf2 파일을 다음 드라이브로 끌어다 놓으십시오: RPI-RP2 .
파일이 복사되면 드라이브가 자동으로 사라지고 Pico가 새 펌웨어로 다시 시작됩니다. 이는 정상적인 동작이며 펌웨어가 설치되었음을 나타냅니다.
STEP 15. 전자 장치 커버 설치

모든 전자 부품을 설치하고 배선을 완료한 후, 내부 전자 장치 커버 두 개를 장착합니다.
고정하기 전에 모든 커넥터가 완전히 삽입되었고 커버와 인클로저 사이에 케이블이 끼어 있지 않은지 확인합니다. 케이블은 지정된 개구부를 통해 배선합니다.
Raspberry Pi 위의 커버는 밀폐된 환기 공간도 형성합니다. 환기 슬롯은 이 공간을 인클로저 외부와 연결하여 Raspberry Pi Active Cooler가 밀폐된 공간과 주변 환경 사이에서 공기를 순환시킬 수 있도록 합니다.
전자 장치와 모든 케이블 연결이 올바르게 작동하는지 확인한 후에만 두 커버를 설치하고 고정합니다.
STEP 16. Raspberry Pi 5 설정
Raspberry Pi 소프트웨어를 설치하고 구성하려면 여러 시스템 및 클라우드 서비스 설정이 필요합니다. 프로젝트가 진행됨에 따라 이러한 지침은 변경될 수 있으므로, 이 단계에서는 개요만 제공합니다. 전체 명령과 확인 절차는 항상 GitHub 저장소의 최신 문서를 따르세요.
주요 참고 문서는 다음과 같습니다:
- 프로젝트 README 및 설치 개요
- 상세 Raspberry Pi 설정 가이드
- 제어판 시스템 서비스
- 언어 구성
- PN5180 Pico 게이트웨이
운영 체제 설치
Raspberry Pi Imager를 사용하여 Raspberry Pi OS Lite (64-bit) 를 설치합니다. 이 과정에서 사용자 계정을 만들고 SSH를 활성화하며 초기 네트워크 연결을 구성합니다.
처음 부팅한 후 Raspberry Pi에 연결하고 운영 체제를 업데이트합니다:
sudo apt update
sudo apt full-upgrade -y
sudo reboot
Raspberry Pi 설정 가이드에 제공된 패키지 목록을 사용하여 필요한 시스템 패키지를 설치합니다.
ABR 소프트웨어 다운로드
권장 디렉터리에 저장소를 클론합니다:
mkdir -p ~/src
git clone https://github.com/lhm0/accessible_book_reader.git ~/src/abr
cd ~/src/abr
새 Python 가상 환경을 만들고 ABR 소프트웨어 및 주요 종속성을 설치합니다:
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e ".[ocr-rapidocr,dev,tts-google]"
다른 컴퓨터의 가상 환경을 복사하지 마세요. 가상 환경은 Raspberry Pi에서 직접 만들어야 합니다.
하드웨어 인터페이스 구성
Raspberry Pi 부팅 구성을 다음 항목에 맞게 조정해야 합니다:
- 두 대의 IMX519 카메라
- Raspberry Pi Pico와의 UART 연결
- MAX98357A 오디오 증폭기와의 I²S 연결
필요한 설정은 docs/RASPBERRY_PI_SETUP.md에 자세히 설명되어 있습니다. 저장소의 config.txt는 참고용으로만 사용하고, 내용을 검토하지 않은 상태에서 기존 /boot/firmware/config.txt 파일을 교체하지 마세요.
또한 /etc/asound.conf에서 MAX98357A를 기본 ALSA 오디오 장치로 구성해야 합니다.
부팅 구성을 변경한 후 Raspberry Pi를 다시 시작하고 두 카메라, UART 인터페이스 및 오디오 출력이 모두 올바르게 감지되는지 확인합니다.
Google Cloud 구성
프로덕션 소프트웨어는 오디오 생성을 위해 Google Cloud Text-to-Speech를, 요약을 위해 Vertex AI/Gemini를 사용합니다. Google Cloud 프로젝트를 만들고 결제를 활성화한 다음 필요한 API를 사용 설정합니다.
필수 명령은 다음과 같습니다:
gcloud services enable \
texttospeech.googleapis.com \
aiplatform.googleapis.com \
--project YOUR_PROJECT_ID
gcloud auth application-default login
gcloud auth application-default set-quota-project YOUR_PROJECT_ID
gcloud config set project YOUR_PROJECT_ID
자격 증명은 저장소 외부에 저장합니다. 자격 증명이나 액세스 키를 프로젝트 디렉터리에 복사하거나 GitHub에 커밋하지 마세요.
언어 구성 및 서비스 설치
언어 선택 명령과 프로덕션 제어판 서비스를 설치합니다:
cd ~/src/abr
sudo deploy/install_language_switch.sh
sudo deploy/install_control_panel_service.sh
필요한 책 언어를 선택합니다:
또는:
프로덕션 소프트웨어는 시스템 서비스로 실행되며 Raspberry Pi가 부팅될 때 자동으로 시작됩니다. 또한 SSH 연결이 종료되어도 계속 실행됩니다.
다음 명령으로 상태와 최근 로그 메시지를 확인합니다:
systemctl status abr-control-panel.service --no-pager -l
journalctl -u abr-control-panel.service -n 100 --no-pager
초기 확인 수행
카메라 정렬 및 보정을 진행하기 전에 기본 설치 상태를 확인합니다:
rpicam-hello --list-cameras
python hardware/pn5180_gateway_client.py \
--device /dev/ttyAMA0 STATUS
aplay -D default /usr/share/sounds/alsa/Front_Center.wav
abr-language status
systemctl is-active abr-control-panel.service
두 카메라가 모두 목록에 표시되고, Pico 게이트웨이가 응답하며, 테스트 사운드가 내장 스피커를 통해 재생되고, ABR 서비스가 활성 상태라고 보고해야 합니다.
문제 해결 및 전체 확인 체크리스트는 이 단계의 시작 부분에 링크된 상세 Raspberry Pi 설정 가이드를 참조하세요.
STEP 17. 카메라 정렬 및 초점 조정


카메라 렌즈는 설치 후 수동으로 초점을 맞춰야 합니다. 저장소에는 웹 브라우저에 라이브 이미지를 표시하는 간단한 카메라 테스트 서버가 포함되어 있습니다. 이를 통해 다른 컴퓨터에서 결과를 확인하면서 렌즈를 조정할 수 있습니다.
자세한 내용은 다음 문서에서 확인할 수 있습니다: 카메라 테스트 서버 문서.
스캐너 준비
사진에 표시된 것처럼 유리 패널 두 개 중 하나만 삽입하고 그 위에 인쇄된 테스트 페이지를 놓습니다. 작고 대비가 높은 텍스트가 포함된 페이지가 선명도를 판단하는 데 특히 유용합니다.
다른 유리 패널은 제거한 상태로 둡니다. 열린 쪽을 통해 해당 카메라에 접근할 수 있으며, 테스트 페이지를 올바른 스캔 위치에 둔 채 렌즈를 돌릴 수 있습니다.
일반 ABR 서비스가 이미 실행 중인 경우 카메라에 접근하지 않도록 일시적으로 중지합니다:
sudo systemctl stop abr-control-panel.service
첫 번째 카메라 초점 조정
Raspberry Pi에서 왼쪽 LED 행을 켭니다:
sudo /usr/bin/python3 hardware/led_light_test.py on --channel left
그런 다음 카메라 0의 라이브 뷰 서버를 시작합니다:
cd ~/src/abr
/usr/bin/python3 hardware/camera_test_server.py \
--camera 0 \
--port 8000
같은 네트워크에 연결된 다른 컴퓨터에서 웹 브라우저로 다음 주소를 엽니다:
호스트 이름을 사용할 수 없으면 abr.local을 Raspberry Pi의 IP 주소로 바꿉니다.
브라우저의 라이브 이미지를 확인하면서 카메라 렌즈를 조금씩 조심스럽게 돌리십시오. 조정할 때마다 이미지가 안정될 때까지 기다리십시오. 관련 페이지 영역 전체에서 텍스트가 최대한 선명해질 때까지 계속하십시오.
초점을 조정하는 동안 유리나 테스트 페이지를 만지거나 움직이지 마십시오. 또한 렌즈가 홀더에서 너무 많이 풀려 나오지 않았는지 확인하십시오.
초점이 올바르게 조정되면 소량의 접착제를 떨어뜨려 렌즈를 고정하십시오. 이 용도로 UHU Hart를 사용했습니다.
완료되면 터미널에서 Ctrl+C를 눌러 테스트 서버를 중지하십시오.
두 번째 카메라 초점 맞추기
유리 패널과 테스트 페이지를 스캐너의 반대쪽으로 옮기십시오. 두 번째 카메라에 접근할 수 있도록 첫 번째 패널을 제거하십시오.
Raspberry Pi에서 왼쪽 LED 행은 끄고 오른쪽 LED 행은 켜십시오:
sudo /usr/bin/python3 hardware/led_light_test.py off --channel left
sudo /usr/bin/python3 hardware/led_light_test.py on --channel right
다른 포트에서 카메라 1용 테스트 서버를 시작하십시오:
cd ~/src/abr
/usr/bin/python3 hardware/camera_test_server.py \
--camera 1 \
--port 8001
브라우저에서 해당 페이지를 여십시오:
다른 렌즈와 같은 방법으로 인쇄된 텍스트가 선명하게 보일 때까지 두 번째 렌즈를 조정하십시오. 다른 렌즈와 마찬가지로 소량의 접착제를 떨어뜨려 렌즈를 고정하십시오.
두 카메라의 초점을 모두 맞춘 후 테스트 서버를 중지하고 LED를 끈 다음 유리 패널 두 개를 모두 다시 설치하십시오. 다음 단계에서 수행하는 왜곡 보정 후에는 초점, 카메라 각도 또는 카메라 높이를 변경하지 마십시오. 기계적인 변경이 있으면 보정 데이터가 무효화됩니다.
초점 조정 작업이 완료되면 일반 ABR 서비스를 다시 시작하십시오:
sudo systemctl start abr-control-panel.service
본문이 길어 아래 덧글 1개로 계속됩니다.
원문: https://www.instructables.com/Build-an-Accessible-Book-Reader-a-Raspberry-Pi-Sca/