이것은 DIY ESP32 기반 분할 플랩 디스플레이로, 집에서 소량으로 쉽게 조립할 수 있도록 최적화되어 있지만 저렴한 대형 디스플레이로 확장할 수 있습니다.
최신 자동 생성(테스트되지 않은!) 아티팩트
지침: v2 조립 가이드
모듈 크기:
최신 자동 생성(테스트되지 않은!) 아티팩트
메모
소형 디스플레이(최대 3개 모듈)의 경우 맞춤형 컨트롤러 보드를 건너뛰고 Arduino Uno에 연결된 기성품 ULN2003A 드라이버 모듈을 사용할 수 있습니다. 이는 위키에 부분적으로 문서화되어 있지만 제대로 작동하려면 약간의 추가 수정이 필요할 수 있습니다. 도움 구함: 이 지침을 개선하는 데 도움을 주고 싶으시면 Discord 서버에 문의해 주세요. 감사합니다!
"체인링크" 전자 시스템은 중형/대형 디스플레이(최대 100개 이상의 분할 플랩 모듈)를 제어하기 위해 드라이버 보드의 긴 체인을 지원하도록 설계되었습니다. 또한 간단한 BOM 및 표면 실장 구성 요소 덕분에 사전 조립된 제품을 주문하거나 특히 대량 생산 시 쉽고 저렴하게 직접 제작할 수 있도록 설계되었습니다.
디스플레이를 제작하려면 3가지 전자 장치가 필요합니다.
각 모듈에는 시동 교정 및 오류 모니터링을 위한 홀 효과 센서가 필요합니다.
v0.7 및 이전 레이저 절단 하드웨어용 이전 센서는 태그가 지정된 센서 릴리스에서 찾을 수 있습니다.
이러한 구형 센서는 v2 레이저 절단 하드웨어와 호환되지 않습니다.
v2 레이저 절단 하드웨어용 새 센서 - 표면 실장 구성 요소를 사용하며 JLCPCB의 PCB 조립에 최적화되어 있습니다. 이 새로운 센서는 v0.7 및 이전 레이저 절단 하드웨어와 호환되지 않습니다.
6개 센서 팩은 Bezek Labs 매장에서 대부분 조립된 상태로 제공되며 필요한 직각 핀 헤더 및 자석과 함께 제공됩니다. 구매는 이 프로젝트의 지속적인 개발을 지원합니다.
최신 자동 생성(테스트되지 않은!) 아티팩트
주요 기능:
Chainlink 드라이버 보드는 Bezek Labs 매장에서 대부분 조립된 상태로 제공되며 필요한 추가 커넥터 및 리본 케이블과 함께 제공됩니다. 구매는 이 프로젝트의 지속적인 개발을 지원합니다.
Chainlink 드라이버 구축 및 사용에 대한 자세한 내용은 Chainlink 드라이버 사용자 가이드에서 확인할 수 있습니다.
또는 공장에서 직접 주문하려는 경우 이 설계는 JLCPCB에서의 조립에 최적화되어 있으며 JLCPCB에서 조립된 PCB를 주문하기 위한 파일이 자동으로 생성됩니다. 또는 조립 비용을 지불하는 대신 이 보드를 직접 조립하려는 경우 대화형 BOM/배치 도구를 볼 수 있습니다.
JLCPCB에서 사용 가능한 재고에 따라 BOM 파일을 수동으로 수정하여 대체 구성 요소를 사용하거나, 미리 선택된 대체 부품 번호를 사용하려면 export_jlcpcb.py
사용하고 하나 이상의 LCSC_ALT_*
필드 이름을 지정하여 파일을 직접 재생성해야 할 수도 있습니다. 사용 가능한 미리 선택된 대안은 회로도를 참조하십시오(기호의 속성/필드 확인).
최신 자동 생성(테스트되지 않은!) 아티팩트
Chainlink Buddy [T-Display]는 T-Display ESP32 보드(권장 마이크로컨트롤러)를 Chainlink 드라이버 체인에 연결하는 편리한 방법입니다.
주요 기능:
Chainlink Buddy [T-Display] 보드는 Bezek Labs 매장에서 구입할 수 있으며 필요한 추가 커넥터와 함께 제공됩니다. 구매는 이 프로젝트의 지속적인 개발을 지원합니다.
최신 자동 생성(테스트되지 않은!) 아티팩트
Chainlink Buddy [Breadboard]를 사용하면 프로토타입 제작을 위해 Chainlink 드라이버를 브레드보드에 쉽게 연결할 수 있습니다. 5개의 듀퐁 와이어를 사용하여 지저분한 쥐 둥지를 만들 수도 있고, 단일 리본 케이블과 이 매끄러운 브레이크아웃 보드를 사용할 수도 있습니다.
Chainlink Buddy [Breadboard] 보드는 Bezek Labs 매장에서 구입할 수 있으며 필요한 추가 커넥터와 함께 제공됩니다. 구매는 이 프로젝트의 지속적인 개발을 지원합니다.
최신 자동 생성(테스트되지 않은!) 아티팩트
더 큰 디스플레이의 경우 잠재적인 오류에 대해 하드웨어를 더욱 견고하게 만들기 위해 추가적인 주의를 기울여야 합니다. Chainlink Base는 몇 가지 추가 기능을 추가하는 실험적이지만 지원되지 않는 컨트롤러 설계입니다. 이는 테스트를 거쳐 작동하는 것으로 보이지만 일반적인 사용에는 권장되지 않습니다.
Chainlink Base PCB는 특히 대형 디스플레이용으로 설계된 Chainlink Buddy의 선택적 대안입니다. ESP32를 호스팅하고 추가 연결 옵션(UART 및 RS485 직렬용 터미널) 및 전원 분배(드라이버 보드의 여러 "영역"에 대해 독립적으로 모니터링되는 전원 채널)를 추가합니다.
주요 기능:
최신 자동 생성(테스트되지 않은!) 아티팩트
클래식 드라이버 보드는 더 이상 사용되지 않으며 지원되지 않습니다.
클래식 컨트롤러 보드는 Arduino에 쉴드처럼 연결되도록 설계되었으며 4개의 스테퍼 모터를 제어할 수 있습니다. 단일 Arduino로 제어되는 최대 12개의 모듈에 대해 최대 3개의 드라이버 보드를 함께 연결할 수 있습니다.
드라이버는 과도 억제 다이오드가 내장된 2개의 MIC5842 로우 측 시프트 레지스터 드라이버를 사용하여 모터를 제어하고 74HC165 시프트 레지스터를 사용하여 4개의 홀 효과 자기 홈 위치 센서에서 읽습니다. 4개 채널 각각의 상태를 나타내는 데 사용할 수 있는 옵션 WS2812B RGB LED가 있습니다.
자신만의 플랩을 인쇄하거나 맞춤형 비닐 편지 스티커를 자르고 싶다면 프로젝트에 매우 구성 가능한 벡터 디자인 파일을 생성하는 스크립트가 포함되어 있습니다.
TODO: 문서화를 마치고 몇 가지 예시 이미지를 렌더링합니다...
여러 모듈에서 단일 전면을 공유하려는 경우(각 모듈이 자체 전면을 갖는 대신) 저장소에는 레이저 절단 또는 CNC 밀링/라우팅을 위한 결합 전면 패널을 생성하는 스크립트가 포함되어 있습니다.
다음을 수정할 수 있습니다.
CNC 절단의 경우 스크립트는 볼트 구멍만 관통 절단되는 두꺼운 재료(예: 6mm MDF)에 최적화된 벡터 파일 렌더링을 지원합니다. 이 모드에서는 상단/하단 인클로저 부품용 슬롯을 최대 4mm 포켓으로 절단하여 전면에서 보이지 않도록 할 수 있습니다. 스크립트는 이러한 포켓 컷에 대한 개뼈 모양을 자동으로 생성합니다.
TODO: 문서화를 마치고 몇 가지 예시 이미지를 렌더링합니다...
이 프로젝트에는 조립을 더 쉽게 하기 위한 다양한 옵션 3D 인쇄 디자인도 포함되어 있습니다. 여기에는 다음이 포함됩니다.
이러한 모든 디자인은 OpenSCAD 내에서 파라메트릭하고 사용자 정의가 가능합니다. 인쇄하려면 OpenSCAD에서 관련 파일을 열고 File -> Export -> Export as STL
사용하여 디자인을 슬라이서용 STL 파일로 렌더링합니다.
수십에서 수백 개의 Chainlink 드라이버 보드를 제조할 계획이 아니라면 이는 유용하지 않을 것 같지만, Chainlink 드라이버 테스터는 PCBA 제작업체에서 조립한 Chainlink 드라이버 보드를 위한 완벽한 테스트베드입니다.
이는 현재 매우 활발하게 개발 중입니다.
주요 기능:
최신 자동 생성(테스트되지 않은!) 아티팩트
드라이버 펌웨어는 Arduino 프레임워크와 함께 PlatformIO를 사용하여 작성되었으며 firmware/
에서 사용할 수 있습니다.
펌웨어는 USB 직렬을 통해 문자를 입력으로 받아들이고 원활한 제어를 위해 미리 계산된 가속 램프를 사용하여 스테퍼 모터를 구동하는 폐쇄 루프 컨트롤러를 구현합니다. 펌웨어는 홀 효과 자기 센서를 사용하여 시작 시 스풀 위치를 자동으로 보정하고, 스풀 위치가 동기화되지 않은 것을 감지하면 자동으로 다시 보정합니다. 명령된 회전으로 스풀이 "홈" 위치를 지나갈 것으로 예상되는 경우 센서가 너무 이르지도 너무 늦지도 않게 트리거되는지 확인합니다. 그렇지 않으면 원하는 문자를 계속하기 전에 동기화할 "홈" 위치를 검색합니다.
컴퓨터가 스플릿플랩과 통신하기 위해서는 USB 직렬 장치로 나타납니다.
그러나 Arduino의 Serial
사용은 엄격히 금지되어 있으며 대신 기본 텍스트 디버그 로그를 전송하기 위한 logger
추상화가 제공됩니다. 다른 데이터는 아래에 설명된 대로 구조화된 방식으로 전송됩니다.
이는 직렬을 통해 전송되는 데이터 형식의 유연성을 허용하며 실제로 스플릿플랩은 서로 다른 용도로 사용되는 2가지 직렬 모드를 제공합니다.
기본적으로 개발자 친화적인 "일반 텍스트" 모드에서 시작하며 분할 플랩이 연결된 직렬 모니터를 열었다면 익숙할 것입니다.
{"type":"init", "num_modules":6}
그러나 이는 분할 플랩에서 업데이트를 프로그래밍 방식으로 구성하거나 수신하는 데 적합하지 않으므로 대신 펌웨어는 Google의 Protobuf 표준을 기반으로 하는 바이너리 프로토콜을 사용하여 프로그래밍 방식의 인터페이스를 제공합니다.
protobuf 기반 바이너리 직렬 모드는 구조화된 데이터를 호스트 컴퓨터에서 스플릿플랩으로 또는 그 반대로 전송하는 작고 유연한 방법입니다.
protobuf는 JSON과 같은 다른 인코딩 메커니즘에 비해 여러 가지 이점을 제공합니다.
이것이 기본 검증/디버깅을 더 쉽게 만들기 위해 Splitflap이 기본적으로 일반 텍스트 모드로 설정되는 이유입니다.
Protobuf 메시지는 바이너리 와이어 형식으로 인코딩되고 CRC32 체크섬이 추가됩니다. 그런 다음 전체 이진 문자열은 패킷으로 COBS 인코딩되고 직렬을 통해 전송될 때 0(NULL) 바이트로 구분/프레임됩니다. 이는 무결성 검사가 포함된 기본 패킷 기반 인터페이스를 제공합니다(직렬 연결의 원시 스트림 기반 인터페이스가 아님).
Splitflap은 0바이트를 수신하면 자동으로 Binary Protobuf 모드로 전환됩니다.
디스플레이는 USB 직렬을 통해 ESP32에 연결된 컴퓨터로 제어할 수 있습니다. 디스플레이를 구축하고 테스트하고 싶다면 여기에서 USB를 사용하여 디스플레이에 연결하는 웹 기반 데모를 확인하세요. 응용 프로그램/설치가 필요하지 않습니다!
펌웨어는 테스트 용이성을 위해 일반 텍스트 직렬 모드(기본적으로 활성화됨)와 향상된 프로그래밍 방식 제어 및 피드백을 위해 소프트웨어 라이브러리에서 사용되는 protobuf 기반 바이너리 모드를 지원합니다.
software/chainlink
폴더에서 Typescript 및 Python 라이브러리 예제를 찾을 수 있습니다.
로컬 컴퓨터에서 디자인을 일부 수정하거나 가지고 놀고 싶으십니까? 바로 뛰어들어보세요! 모든 스크립트와 자동화는 Ubuntu용으로 개발되었습니다. Mac OS 지원이 계획되어 있지만 현재 구현되지는 않았습니다(하지만 도움을 주고 싶으면 언제든지 PR을 열어주세요!).
주요 디자인 파일은 3d/splitflap.scad
입니다.
PPA를 통해 설치해야 할 수 있는 최신 버전의 OpenSCAD(예: 2015-03)가 필요합니다. sudo add-apt-repository ppa:openscad/releases
일반적으로 엔클로저 측면이나 스풀 구성 요소와 같은 솔리드 개체는 3D 기본 요소를 사용하는 대신 2D 기본 요소로 제작된 다음 3D 렌더링에 적합한 두께로 돌출됩니다. 이는 표현력을 잃지 않으면서 디자인을 단순화합니다. 수직 레이저 절단 빔은 Z 차원에서 다양한 절단을 허용하지 않습니다.
설계가 매개변수화되고 많은 값이 조정될 수 있지만 현재 잘못된 매개변수나 매개변수 조합에 대한 오류 검사는 없습니다. 매개변수를 변경하는 경우 설계를 검증하도록 주의하십시오. 예를 들어 대부분의 디자인은 변경된 num_modules
값에 맞게 조정되지만 특정 값으로 인해 일부 요소가 다른 요소와 교차하거나 예상 치수 이상으로 돌출될 수 있습니다.
3d/scripts/generate_2d.py [--panelize <number>]
실행하여 레이저 절단을 위해 디자인을 2D로 렌더링할 수 있으며, 이는 3d/build/laser_parts/combined.svg
로 출력됩니다. 선택적 --panelize
인수를 사용하면 대량 레이저 절단을 위해 단일 SVG에서 모듈 패널을 렌더링할 수 있습니다.
내부적으로 디자인에서는 렌더링할 하위 요소 목록을 가져오는 projection_renderer
모듈( 3d/projection_renderer.scad
)을 사용하고, render_index
에 따라 한 번에 하나의 하위 요소를 렌더링합니다. 또한 레이저로 절단되는 절단 부분을 고려하여 각 모양에 재료를 추가합니다 .
generate_2d.py
스크립트는 먼저 렌더링할 하위 구성 요소 수를 결정하는 데 이를 사용하여 projection_renderer
모듈과 상호 작용한 다음 OpenSCAD를 실행하여 각 구성 요소를 SVG 파일로 내보냅니다. SVG 출력에 대해 일부 후처리를 수행한 다음(특히 문서 크기에 "mm" 추가) 모든 구성 요소를 단일 combined.svg
출력으로 결합합니다.
combined.svg
파일이 생성되면 절단 시 시간/비용을 절약하기 위해 인접한 여러 조각에서 공유되는 중복 절단선이 없는지 다시 확인하는 것이 좋습니다. 자동으로 감지되어야 하지만(위 렌더링에서 빨간색으로 강조 표시됨) 다시 확인해도 문제가 되지 않습니다. Inkscape에서 "노드별 경로 편집" 도구를 선택하고 삭제할 가장자리를 선택하세요. 끝점이 파란색으로 변해야 합니다. 그런 다음 "끝점이 아닌 두 노드 사이의 세그먼트 삭제"를 클릭하고 다른 모든 중복 절단선에 대해 이 작업을 반복합니다.
3d/scripts/generate_gif.py
실행하여 디자인을 회전하는 3D 애니메이션 gif(위 참조)로 렌더링할 수 있으며, 이는 3d/build/animation/animation.gif
로 출력됩니다.
generate_gif.py
스크립트는 여러 OpenSCAD 인스턴스를 병렬로 실행하여 디자인을 360도에서 개별 png 프레임으로 렌더링한 다음 최종 gif 애니메이션으로 결합합니다. 애니메이션 빌드의 일부로 generate_gif.py
render_enclosure
및 render_flaps
변수를 설정하여 여러 구성(불투명 인클로저, 투명 인클로저, 인클로저 없음 및 플랩 없음)으로 디자인을 렌더링합니다.
디자인은 대화형 웹 기반 3D 뷰어에 표시하기 위해 일련의 STL 파일(모델에 사용된 색상당 하나)로 렌더링될 수 있습니다. 레이저 절단을 위해 개별 구성 요소를 렌더링하는 데 사용되는 projection_renderer
와 유사하게 ColoredStlExporter는 모델에 사용된 모든 색상을 감지하고 각 STL 파일을 RGB 색상에 매핑하는 매니페스트와 함께 이를 개별 STL 파일로 렌더링합니다. . STL 파일과 매니페스트는 three.js를 사용하여 로드되어 WebGL을 사용하는 웹 사이트에 대화형 모델을 표시합니다. 내보내기 및 three.js 렌더러 작동 방식에 대한 자세한 내용은 OpenSCAD 렌더링 요령, 3부: 웹 뷰어 블로그 게시물을 참조하세요.
모든 전자 장치는 KiCad 5를 사용하여 개발되었습니다. 패널화는 KiKit에서 제공하고 거버/BOM 생성은 KiBot에서 제공합니다.
위의 기계 및 전기 설계 렌더링과 링크는 커밋할 때마다 최신 렌더링으로 자동 업데이트됩니다. 작동 방식에 대한 자세한 내용은 Travis CI를 사용한 자동화된 KiCad, OpenSCAD 렌더링 블로그 게시물을 참조하세요.
electronics/scripts/generate_svg.py file.kicad_pcb
실행하여 PCB 레이아웃을 svg 또는 png(위 참조)로 렌더링할 수 있습니다. 이는 KiCad의 Python 스크립팅 API를 사용하여 여러 레이어를 개별 svg 파일로 렌더링하고 이를 조작하여 색상 및 불투명도 설정을 적용한 다음 단일 svg로 병합합니다. 자세한 내용은 KiCad Pcbnew 내보내기 스크립팅 블로그 게시물을 참조하세요.
설계 검토를 위해, electronics/scripts/generate_pdf.py file.kicad_pcb
실행하여 구리, 실크스크린 및 드릴 정보가 포함된 PDF 패킷을 생성할 수 있습니다.
제작용 Gerber 파일은 electronics/scripts/generate_gerber.py file.kicad_pcb
실행하여 내보낼 수 있습니다. 그러면 Seeed Studio의 명명 규칙을 사용하여 거버 파일과 Excellon 드릴 파일이 생성되고 제작을 위해 보낼 수 있는 .zip
이 생성됩니다.
EESchema는 쉽게 스크립팅할 수 없으므로 회로도 electronics/scripts/export_schematic.py
내보내려면 X 가상 프레임 버퍼(Xvfb)를 시작하고 해당 가상 디스플레이 내에서 eeschema
GUI를 연 다음 xdotool
통해 일련의 하드코딩된 키 누름을 GUI와 상호 작용하고 대화 상자를 클릭합니다. 이것은 매우 취약하지만 지금은 제대로 작동하는 것 같습니다. 자세한 내용은 UI 자동화를 사용하여 KiCad 회로도 내보내기 블로그 게시물을 참조하세요.
이 프로젝트에 대한 귀하의 생각과 질문을 듣고 싶습니다. 귀하가 갖고 있는 피드백을 이러한 디자인에 반영하게 되어 기쁘게 생각합니다! 자유롭게 GitHub 문제를 열고, 나에게 직접 이메일을 보내고, Twitter로 연락하고, 오픈 소스 개발에 참여하고, 계속해서 함께 채팅하고 구축해 가도록 격려해 주세요!
이 프로젝트는 Apache v2에 따라 라이센스가 부여되었습니다(LICENSE.txt 참조).
Copyright 2015-2024 Scott Bezek and the splitflap contributors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.