', { cookie_domain: 'auto', cookie_flags: 'max-age=0;domain=.tistory.com', cookie_expires: 7 * 24 * 60 * 60 // 7 days, in seconds }); '분류 전체보기' 카테고리의 글 목록 (12 Page) :: MakerLee's Workspace
728x90

90년대 모토로라 TAC5000의 도트 매트릭스 LED 화면이 예뻐서 한참 쳐다보던 기억이 납니다. 

 

지금도 약간 클래식한 디스플레이들을 좋아하긴 하는데

보통은 너무 비싸고 커서 쓸일이 없지요. 

 

 

 

 

오늘 https://www.hackster.io/ 을 읽다가 보니 딱 이런 제 취향의 디스플레이가 나오길래 관심있게 읽어봤습니다. 

매트릭스 자체는 기성품이고 i2c 로 컨트롤되는 오픈소스 제어보드에 대한 소개더군요. 

 

해당 제품에는 LTP-305G 도트 매트릭스를 사용하고 있는데

ebay에서 개당 9$에 달하는 다소 비싼 가격을 형성하고 있습니다. 

 

하지만 본문에도 소개되어 있듯이 이런 프로젝트(링크) 를 응용해서 직접 매트릭스를 만들어 사용하면 저렴하게 구성할 수 있을 것 같네요. 

 

언젠가 도전해 보고 싶은 프로젝트라 기록차원에서 적어둡니다. 

 

728x90
728x90

올해도 나갑니다. 올해는 과천과학관이라네요. 

코로나 때문에 일정은 좀 가변적입니다.  

728x90
728x90

기본적인 모양은 위와 같습니다. 

연마봉과 연마봉 브라켓은 예전에 제작햇던 CoreXY 자작프린터(링크) 의 잔해입니다. 

CR-10S 프린터를 약간만 개조하면 제작할 수 있을 것 같더군요. 

비슷한 구조의 프린터들은 모두 가능할 것 같습니다. 

 

 

 

 

 

 

여기서 시간을 3주 가량 잡아먹었는데 길이 때문에 Prusa에서는 출력할 수 없고 CR-10에서만 출력할 수 있습니다. 

그런데 출력시 자꾸 저렇게 중간에 압출불량이 생기더군요. 

결국 쓰로트 교체로 수리는 했는데 드라이버 점검, 익스트루더 점검, 기타 하드웨어 정비및 교체로 시간을 많이 낭비했습니다. 

 

 

 

 

 

 타이밍 기어 부분은 한덩어리로 만들었다가 출력실패가 거듭되면서 별도 부품으로 분리. 

여기서 또 시간을 많이 잡아먹었는데 중간에 Fusion360으로 설계해봤다가 다시 솔리드웍스로 돌아왔습니다. 

베드와 롤러간 위치가 가변적이라 자주 바꿔야 하는데

중간중간에 메이트(조인트) 잡는게 아무래도 퓨전은 좀 불편하더라고요. 

 

 

 

 

 

출력후 사포질을 약간 하고 베어링을 삽입해 봤습니다. 

 

 

 

 

 

 

 

 

80mm 지름으로 제작했는데 쓸데없이 너무 큰 것 같아 60mm 지름으로 재출력해보고 있습니다. 

 

 

728x90
728x90

마이크가 생겨서 녹음해봤습니다. 

 

 

 

 

Yousician 1년 구독으로 11개월쯤 독학. 

혼자서 짬짬이 하기엔 참 괜찮은 앱인듯 합니다. 꾸준히 하는게 어렵긴 하지만요. 

가격은 정기구독 앱치곤 비싸긴 하지만(120$) 1년치니까 혼자서 꾸준하게 할 생각이 있으면 싼편이라 할수 있겠습니다. 

아쉬운건 월구독은 없어서 무조건 1년치 요금을 내야 하네요.. 

 

 

 

 

연습을 1년내내 쉬지 않은건 당연히 아니고... 나름 꾸준히 했다고 생각하지만 전체 시간은 80시간 정도 밖에 안됩니다. 

기본학습이 30분 정도라 80시간/30분 = 6개월 가량 매일 30분씩 한 정도입니다. 

조카가 음악학원 다니면서 20시간 정도만 배워도 저만큼 쳤던거 같아서 자괴감이 살짝 듭니다만

나름 혼자서 뚱땅거리는게 재밌습니다.

타브악보밖에 못보지만 그래도 몇번 연습하고나면 이제는 어설프게 칠수도 있으니 그것도 재밌고요. 
이제는 점점 손가락을 비비 꼬아야 되는 곡들이 연습곡으로 나와서 진도가 잘 안나가네요

728x90
728x90

매번 시간을 엄청 잡아먹는 케이블 작업.

 

 

 

 

 

반년에 1개쯤 주문이 들어온다고 웃던게 얼마전인데 지금 주문이 3개..

한달만에 간신히 1개 처리해서 배송직전입니다. 

왜 매번 조립하고 테스트해보면 다른 문제들이 생기는건지 모르겠습니다. 

SD카드에 문제가 생겼다가 해결하고나면 LCD에 문제가 생기고 해결하고나면 DC모터가 안돌고 그러네요

 

이것때문에 여가시간이 확 줄었습니다. 다른 작업하던 것들도 거의 정지상태고요. 

빨리 마무리하고 끝내고 싶습니다. 괜히 주문받았다는 생각을 자주 하네요. 

728x90

'주인장 잡담' 카테고리의 다른 글

2020 서울 메이커 페어 신청.  (0) 2020.07.02
우쿨렐레 연습.  (0) 2020.06.25
뮤직박스 펀처 주문의뢰 근황과 고민  (0) 2020.05.25
근황  (2) 2020.04.22
근황.  (0) 2020.03.27
728x90

조립하고 U8GLIB 라이브러리 테스트해봅니다. 

 

 

 

 

 

 

 

일단 스위치 누르면 동작하는건 간단하고요.

무게로 축이 쳐지면서 센서핀이 바닥에 닿는 소음이 납니다. 조립하면 안 날듯. 

 

 

 

 

128*32 화면에 이쁘게 담는건 좀 어렵군요. 

폰트 바꾸고 1픽셀씩 이동하며 테스트중입니다. 

 

 

 

센서가 회전을 감지할때마다 interrupt 를 발생시켜 높이를 계산하도록 했습니다.

그런데 스위치를 아주 짧게 누르면 인터럽트는 발생하지만 높이계산은 안되는듯하여 원인을 파악중입니다. 

 

4개 정도의 높이를 자체적으로 저장해서 정해진 위치로 쉽게 이동하도록 할 생각입니다. 

여태 아두이노 프로젝트는 많이 해봤지만 EEPROM은 처음 써보게 되겠네요.

 

추가로 OLED를 계속 켜게 되므로 번인 현상이 우려가 됩니다. 

일정시간 입력이 없으면 ON/OFF가 되게 만들어야 할 것 같네요. 

 

728x90
728x90

커버까지 달아서 노출되지 않게 하려고 하니 손볼게 많네요

이번엔 Fusion360으로 작업해 봤는데 아직 좀 어색합니다. 

솔리드웍스는 개인작업할땐 버전관리와 클라우드 업로드가 힘들어 퓨전이 그런 면에선 좀 더 편하지요. 

단축키와 몇가지 인터페이스도 퓨전이 더 낫습니다. 

하지만 여전히 솔리드웍스의 메이트가 더 편한 것 같고

어셈블리 내에서 파트 편집이나 스케치의 스냅 기능은 솔웍이 더 좋은 것 같습니다. 

 

 

 

 

 

 

구조는 매우 단순합니다.

DC모터로 오르락 내리락 하는데 센서를 하나 달아서 회전수를 감지하는거죠. 

 

 

 

 

구조가 간단한 만큼 이번에는 PCB를 만들지 않고 그냥 기판에 직접 납땜하려고 합니다. 

 

 

 

 

 

이번에도 아두이노입니다. 

 

 

 

 

 

컨트롤러는 단순하게 0.91"OLED와 스위치 3개. 

 

 

 

 

오랫만에 만능기판에 직접 납땜해보는군요. 

 

 

728x90
728x90

이탈리아로 오늘 발송을 보내고 칠레에서 온 주문 때문에 3D 프린터를 돌리는 와중에 

이번에는 한국분이 연락을 해왔네요. 

 

가격을 말씀드렸더니 망설이시는 듯 하다가 주문을 하셨는데.. 

 

단 한두개만 만들고 말기엔 좀 아까운 물건이다 싶어서 의뢰를 받기 시작한 건데요. 

솔직히 이젠 좀 귀찮군요..

비는 시간을 이용해 만드는 거라 못해도 최소한 2~3주 이상 개인시간에 작업을 해야하고요. 

원가계산을 할 때 구매부품으로만 계산하고 3D 출력물 견적은 굉장히 짜게 잡았더니

여기서도 마이너스가 발생하는듯 싶고요. 

 

만들때마다 소소한 업그레이드를 조금씩 하고 있는데 버전관리는 개나줘라~ 한 상황이고  ㅜㅜ

 

한편으론 그래도 반년에 한두번씩은 주문이 들어오니

이참에 아예 새로 설계해서 버전 업그레이드를 할까 하는 생각도 들고요. 

 

스폿용접기에 배터리저항측정기에 무한베드 프린터에 할거 많은데

자꾸 여기에 묶이는게 싫기도 하고 

참 머리가 복잡하네요 

 

728x90

'주인장 잡담' 카테고리의 다른 글

우쿨렐레 연습.  (0) 2020.06.25
애증의 뮤직박스 펀처.  (0) 2020.06.17
근황  (2) 2020.04.22
근황.  (0) 2020.03.27
이사하면서 스탠드업 책상 마련했습니다.  (0) 2020.03.20
728x90

저번주에 조립이 거의 끝나고 의뢰인 Valerio Rossit 에게 메일을 보냈습니다. 

며칠후면 조정이 끝나고 보낼 수 있을 것 같다고요. 

혹시 사용이 어렵진 않냐 물어보길래 로터리 스위치 하나밖에 안 달려있으니 걱정말라고 했습니다. 

그리고 지난번 프랑스 의뢰인에게 보냈던 메뉴얼을 보냈죠. 

 

그랬더니 답장이,

[혹시 이거 30노트밖에 안되는건가요? 전 15노트가 필요한데요]

 

 

 

???????

 

 

 

당황속에 30노트로만 만들었다고 했습니다.

그제서야 자기가 제대로 안봤다고 자기는 꼭 15노트가 필요한데 어떻게 안되겠냐고 하더군요. 

뮤직박스를 제작하는 사업을 하는데 손펀칭하다 죽어나는 중이라더군요. 

 

그래서 좀 고민을 해봐야 겠다 했습니다. 

 

 

의의로 간단히 해결이 되더군요. 

종이 감지 센서 위치를 반대로 옮기고 15노트 길이에 맞게 분리 가능한 가로대를 하나 추가했습니다. 

소프트웨어는 손댈 필요 없이 그대로 작동했습니다. 

 

 

 

 

 

 

요렇게 막대기 하나만 꽂으면 간단하게 15노트 사용이 가능합니다. 

 

 

 

그런데 다시 30노트 종이를 끼워보니 위치가 영 다르네요.

확인해 보니 15노트 종이는 국내제작인데 30노트랑 종이의 여백 폭이 미묘하게 다르더군요. 

이걸 수정할 순 있지만 시간이 또 걸릴테고요.

발레리오씨는 15노트만 필요하다고 했으니 일단 이번 작업은 여기까지 하려고 합니다. 

 

 

 

 

 

 

728x90
728x90

이탈리아 아저씨가 주문한 펀처를 거의 다 만들어 가는 와중에 이거 15노트 안되냐고 물어왔습니다. 

안된다고 했더니 자기는 15노트만 필요하다는군요. 

어떻게 좀 안되겠냐고 되기만 하면 2대 사겠다고 부탁을 합니다. 

정말 손으로 구멍뚫기 싫어하시는 듯 합니다.... 

 

일단 연구해보마 했습니다.

musicboxmanics에서 15노트 dxf 포맷을 다운받아 보니 기계에선 이상없이 읽어들입니다. 

어찌보면 당연한 것이 XY좌표계만 있으면 되니 15노트건 30노트건 되는거겠죠. 

 

 

그러니 15노트 종이가 들어가기만 하면 되는데 센서 위치의 문제가 있습니다. 

 

 

 

 

 

위에서 본 모습입니다. 종이 좌표상 왼쪽 아래가 0,0 위치가 됩니다. 
센서는 Y축 방향으로 좌표상 위쪽에 있습니다. 

센서가 반대로 아래쪽에 있다면 종이의 Y축 원점은 15노트나 30노트나 같습니다.

하지만 센서가 올라가 있는만큼 15노트 종이는 위로 올라가야 합니다. 

그래서 종이의 Y좌표 원점이 각각 따로 존재하게 되는 것이죠. 

 

 

 

 

 

 

생각같아서는 전체 재설계하고 싶긴 한데 그럴 시간은 없죠. 

일단 종이 감지 센서를 반대쪽으로 옮기고 가운데에 가로막대를 하나 끼울 수 있게 했습니다. 

이렇게 하면 30노트는 그대로 사용하고 15노트 사용시 막대를 끼워 칸막이를 만들고 종이를 끼우면 됩니다. 

 

 

 

 

728x90
728x90

전에도 언급했지만 이사하면서 수동 높이조절 책상을 구매했습니다. 

수동을 사서 저렴하게 전동화 할 계획을 세웠습니다.

구매했던 부품들도 도착하고 다른 일도 대충 정리가 되기 시작해서 작업에 들어갔습니다.

 

 

 

모터는 555모터를 사용하는 12V 136RPM 기어드 모터입니다. 

집에 있던 다른 기어드 모터를 사용하려고 했으나 35RPM짜리라 너무 느리더군요.

136RPM짜리는 토크가 부족할 수 있으나 반대편에서 양쪽으로 장착하여 쓰면 괜찮을 것 같아 2개 주문했습니다. 

 

 

 

 

 

6mm 육각렌치를 절단하여 6*7mm 커플링에 끼웠습니다.

 

 

 

 

 

책상의 수동핸들을 끼우는 구멍입니다. 

 

 

 

 

 

 

이렇게 6mm 육각렌치가 딱 맞습니다.

 

 

 

 

 

 

모터 위치가 애매하면 축 하나를 더 연장하고 커플링 2개로 연결할 생각이었습니다. 

다행히 그냥 저 위치에 잘 고정하면 될 것 같습니다. 

 

 

 

 

 

 

 

전동 드라이버 배터리를 연결해 봤습니다. 

모터 1개로도 업&다운이 되는군요. 괜히 2개 구매했습니다. 

 

 

 

 

컨트롤러를 어떻게 할지 생각중입니다. 

728x90
728x90

실력이 늘진 않지만 취미로 우쿨렐레를 조금씩 치고 있습니다. 

기타도 그렇겠지만 우쿨렐레의 경우 조율을 해 놓아도 며칠만 지나면 조금씩 조율이 틀어지는 정도가 심하더군요

 

 

 

보통은 이런 간단한 튜너를 사용해 튜닝을 하는 편입니다. 

우쿨렐레 줄을 교체하고 그때마다 손으로 줄감개를 열심히 감아주다 보니 힘들더군요. 

그래서 겸사겸사 줄감개로도 쓸 수 있고 튜닝도 할 수 있는 스마트 튜너를 구입했습니다. 

 

 

 

 

 

이렇게 생긴 물건입니다. 

 

 

 

 

 

 

아마존에서 처음 발견을 했는데 67$+송료라서 알리에서 찾아보니 있더군요. 

42$라는 비교적 저렴한 가격에 구입을 했습니다. 

 

 

 

 

 

화면은 흑백 네가티브 LCD지만 칼라가 들어있고 광도가 좋아서 시인성이 굉장히 좋습니다. 

 

 

 

 

 

 

 

 

수동으로 돌릴 수 있습니다. UP 시엔 빨간 LED가 들어옵니다. 

 

 

 

 

 

 

그리고 당연히 DOWN시에는 반대로 초록 LED가 들어옵니다. 

 

 

 

 

 

 

 

튜너라는게 워낙 간단한 물건이라 메뉴얼도 별다를건 없습니다. 

어쿠스틱, 클래식, 일렉 기타와 우쿨렐레, 로우G우쿨렐레를 튜닝할 수 있네요

오토 모드와 세미 AUTO 모드, 커스텀 모드가 있습니다. 

오토 모드는 아예 현을 자동으로 감지해서 스위치 하나만 누르면 자동으로 줄을 감았다 돌렸다 해줍니다. 

하지만 가끔 다른 현과 헷갈려서 엉뚱하게 돌리는 경우가 있습니다. 

세미 AUTO 모드는 악기와 현 번호를 지정하면 자동으로 줄을 튜닝합니다. 

세미 AUTO는 현이 지정되니 다른 현으로 착각하거나 하지 않고 매우 정확하게 튜닝되더군요

 

 

 

 

 

 

진짜 몇번 누르면 툭툭 돌아가며 튜닝이 끝나서 굉장히 편리하네요

 

 

 

사실 스마트폰 앱으로도 튜너들이 나와 있어서 이런 측정기를 꼭 구매할 필요는 없습니다. 

하지만 두어번 줄 교체를 해보니 당장 줄감는 도구는 하나 있어야 할 것 같더군요

반쯤은 욕심에 다소 비싼 물건을 구매했는데 구매하고 보니 완성도와 기능, 효용성이 모두 완벽하게 마음에 듭니다. 

728x90
728x90

뮤직박스 펀처를 사용하면서 아두이노 하드웨어에 약간 아쉬움이 있더군요.

좀 덩치가 작고, 싸고, 그러면서도 메모리나 클럭 스피드가 좋은 MPU를 찾아봤습니다. 

 

STM32duino 라는 것이 있더군요.

 

Scott 씨의 구수한 슬라브 영어로 설명을 들어봅니다.

 

 

 

 

작동 전압은 2~3.6V입니다.

 

 

 

프로그래밍할 때에는

FTDI 보드의 TX 핀은 A10 핀에, RX핀은 A9핀에 연결합니다.

 

 

 

프로그래밍할 때에는 boot1 점퍼를 오른쪽(on)으로 옮깁니다.

 

 

 

 

보드 매니저를 통해 stm32 보드를 추가합니다.

(이 부분은 인터넷 자료들마다 약간씩 다르네요)

 

 

프로그램 업로드 후에는 다시 점퍼를 옮겨줍니다.

 

 

 

STM32의 핀 맵은 다음과 같습니다. 

디지탈 핀들은 대부분 5V tolrerant 로군요.

전압 걱정없이 5V 출력 나오는 센서들을 바로 연결해도 될 것 같습니다.

아날로그 핀들은 Not 5V tolerant라고 하니 연결시 주의해야 겠습니다. 

 

 

 

핀 셋업에서 INPUT_PULLUP 뿐 아니라 INPUT_PULLDOWN을 지원하는군요

 

 

 

 

아두이노는 8bit 출력이라 analogwrite(PWM) 출력이 0~255까지이지만

 

 

STM32는 16bit 라서 0~65535까지 세분화시킬 수 있습니다. 

 

 

 

 

 

PWM 주파수는 550Hz 정도밖에 안되는데 

 

 

 

 

이는 기본 타이머 주파수와 연관이 있습니다. 

 

 

 

 

http://docs.leaflabs.com/docs.leaflabs.com/index.html

레퍼런스 페이지의 documents를 읽어보면 그에 대한 설명이 나와있다는군요. 

 

 

 

 

이렇게 주파수를 바꿀 수 있습니다. 

 

 

 

 

 

anaolginput의 경우

 

 

아두이노의 10bit-1023해상도와 비교하면 12bit-4096해상도를 갖고 있습니다. 

 

 

 

 

비교하면 이렇게 장점이 많습니다. 

 

한번 공부를 해 봐야겠네요

728x90
728x90

위와 같은 복잡한 이미지는 어떻게 만드는건지 알수가 없어서 검색을 해봤습니다. 

 

 

 

 

 

 

 

동영상을 하나 찾아보니 개념은 알겠습니다. 

하지만 일러스트레이터는 써보질 않은터라 따라하기가 어렵네요. 

 

 

 

포토샵을 실행시켜 메뉴를 훑어보니 대충 비슷하게 할 수 있을 것 같았습니다. 

 

 

 

PCB의 색은 솔더마스크가 초록색이라 했을 때 위와 같이 나타납니다.

동박과 솔더마스크의 조합으로 4색을 만들수 있고, 실크 색으로 1색을 만들 수 있어 총 5색이 됩니다. 

 

과정은 다음과 같습니다.

1.원하는 이미지를 최대 5색 이하로 단순화 시킵니다

2.각각의 색을 개별 파일로 저장해서 bmp로 저장합니다.

3.이글캐드에서 각각의 레이어에 bmp 파일을 로드합니다. 

 

 

 

 

원하는 이미지를 불러옵니다.

저는 온라인상에서 쓰는 프로필 이미지로 정했습니다. 

 

 

 

 

 

 

[이미지]-[조정]-[포스터화]를 선택합니다. 

 

 

 

 

 

 

 

레벨을 낮춰 색이 단순화되도록 합니다. 

 

 

 

 

 

 

우측 아래의 새 레이어 아이콘을 눌러 빈 레이어를 하나 만듭니다. 

 

 

 

 

 

 

 

[선택]-[색상 범위]를 누릅니다. 

 

 

 

 

 

 

 

이와 같은 창이 나오며 마우스 커서가 스포이드 모양으로 바뀝니다. 

 

 

 

 

 

 

 

이제 분리할 색상을 선택하면 됩니다.

머리 가운데를 콕 찍어 클릭해보면 검은색 부분이 전부 선택됩니다. 

 

 

 

 

 

 

우측의 레이어 창에서 배경 옆의 눈알 모양을 클릭하여 이미지를 잠시 보이지 않게 합니다. 

현재 선택된 경계가 남게 됩니다. 

 

 

 

 

 

 

왼쪽 아래의 색상 팔레트를 눌러 검은색을 선택하고

위의 페인트 버켓을 누릅니다. 

 

 

 

이제 경계에 페인트 버켓을 클릭하면 이와 같이 검은색으로 칠해집니다. 

 

 

 

 

같은 식으로 다음 색을 골라서 1)새 레이어를 만들고, 2)색상 범위를 선택하고, 3)검은색으로 칠해줍니다. 

 

 

 

 

모든 색을 이와 같이 개별 레이어에 나누어 작업합니다. 

 

 

 

 

다 작업한 후에 모든 레이어를 표시(눈알 모양 클릭) 해서 위와 같이 거의 검정색으로 칠해지면 작업이 끝난겁니다. 

 

 

 

 

 

다른 레이어를 모두 끄고 첫번째 레이어만 켜 줍니다. 

 

 

 

 

 

 

 

 

그리고 BMP 포맷으로 저장합니다. 

 

 

 

 

 

 

마찬가지로 2,3,4 레이어를 모두 BMP로 저장합니다. 

 

 

 

 

 

 

 

이렇게 작업한 이미지는 아쉽게도 이글에서 바로 읽지를 못합니다. 

포토샵 옵션에서 단색 bmp로 만드는 방법이 있을것도 같은데 현재는 제가 알아내질 못했습니다. 

 

 

 

 

 

 

불편하지만 한단계를 더 거치게 됩니다. 

윈도우 기본 그림판을 실행합니다. 

 

 

 

 

 

작업한 이미지를 불러옵니다. 

 

 

 

 

 

 

다른 이름으로 저장하면서 [단색 비트맵]을 선택합니다. 

 

 

 

 

 

 

정리된 레이어는 색의 진하기에 따라 이와 같이 배치하기로 했습니다. 

가장 왼쪽 이미지를 작업하려면 [동박+솔더마스크]가 되겠죠?

하지만 기본적으로 솔더마스크는 있는 것이 기본이므로 [동박]만 작업하면 됩니다. 

 

왼쪽부터 1번 이미지: 1-Top Layer 배치

2번 이미지 : 없음

3번 이미지 : 29-tStop Layer 배치 

4번 이미지 : 25-tName Layer(또는 21-tPlace)

 

이와 같이 됩니다.

 

 

 

 

이제 이글캐드를 실행하고 [보드] 창에서 [File]-[Import]-[Bitmap]를 선택합니다. 

 

 

 

 

 

 

검은색에만 체크합니다. 

 

 

 

 

 

사이즈와 비율 등을 조절 할 수 있습니다. 일단은 기본으로 둡니다. 

첫번째 이미지는 Top Layer에 배치할 것이므로, 1번 레이어를 입력하고 [OK]-[Run Script] 버튼을 누릅니다. 

 

 

 

 

 

첫번째 이미지가 로드되었습니다. 

 

이제 3번째 이미지를 29번 레이어에, 

4번째 이미지를 21번 레이어에 읽어들입니다. 

 

 

 

 

 

작업이 끝나면 이렇게 됩니다

아래의 작은 글자는 지워도 됩니다. 

 

 

 

 

위 파일을 JLCPCB에 업로드해서 Gerber Viewer로 확인해 봤습니다.

멋지게 잘 나오는군요. 다음번 PCB 주문때는 꼭 넣어봐야겠습니다.

 

 

 

 

728x90
728x90

포토샵이 필요합니다. 

 

 

 

PCB에 넣고싶은 이미지를 고릅니다. 너무 고해상도 파일을 사용하면 작업이 힘들 수 있습니다. 

 

 

 

 

 

[이미지] - [모드] - [회색 음영] 선택해서 이미지를 흑백사진처럼 바꿉니다. 

그리고 다시 

[이미지] - [모드] - [비트맵] 을 선택합니다. 

 

 

 

옵션에서 [확산 디더] 외에 다른 걸 선택해도 됩니다. 

해상도는 일단 300픽셀로 작업했는데 PCB 실크 한계상 저 해상도로 깔끔하게 나오지 않을 수 있습니다. 

 

 

 

 

일단 작업한 이미지는 이와 같습니다. 

 

[파일] - [다른 이름으로 저장] 을 해서 BMP 파일로 저장합니다. 

 

 

 

 

 

이제 이글캐드를 실행하고 보드 파일을 엽니다.

[File] - [Import] - [Bitmap]을 선택합니다. 

 

 

 

 

 

 

 

여기서 검은 색 체크박스만 선택합니다.

 

 

 

 

 

사이즈, 단위 등을 선택할 수 있습니다. 

단색 이미지라 실크 레이어에 배치할 것이므로 21번이나 25번을 입력합니다. 

JLCPCB 기준이라 다른 회사는 다를 수 있습니다. 

 

 

 

 

위와 같이 실크로 작업이 됩니다. 

해상도 때문인지 한참 걸리는군요.

실제 제작시에는 해상도 조정이 필요할 것 같습니다.

그리고 이미지는 자동적으로 원점에 배치됩니다.

PCB를 옆으로 옮겨서 겹치지 않게 해야 이미지를 다시 드래그할 수 있을 것 같네요.

 

 

 

728x90
728x90

메이커페어에 출품했던 3대분은 국내에 2대, 프랑스에 1대 판매가 되었습니다. 

최초 3대분은 재고처리에 목표가 있어서 거의 원가에 가까운 금액에 판매가 되었습니다. 

장기적인 동작에 문제가 있을지는 모르겠으나..

여태 고장났다고 연락온적은 없으니 잘 되고있는거라 생각중입니다. 

 

 

 

 

프랑스 판매 이후 러시아와 브라질 분도 연락이 왔는데 판매는 안됐고요. 

이번엔 이탈리아에서 연락이 왔네요. 

 

뮤직박스 제조 판매를 하시는 분인데 악보 펀칭이 너무 힘들다고;; 구매를 원하시더군요. 

기존 완성품 판매 후 혹시나 하고 3D 출력물은 1대분 재고를 뽑아놓은지라 제작완료후 거래하기로 했습니다. 

 

 

 

1차 제작버전과 거의 달라진점은 없지만 펀칭된 종이 찌꺼기가 잘 배출되도록 배출구 형상을 바꾸고

별도 DC 강압회로를 달아 안정적으로 5V 전원을 공급할 수 있도록 했습니다. 

 

 

연휴동안 작업해서 이탈리아로 보내야 겠네요

728x90
728x90


배터리 내부저항 측정기의 구조는 배터리의 전압을 측정 후에

다시 배터리에 아주 낮은 값의 저항을 연결하고 전압을 측정해서 계산을 통해 내부 저항을 계산하게 됩니다. 

 

이를 자동으로 구현하려면 당연히 ON/OFF를 담당하는 FET 가 필요하게 되고요. 

여기서 FET를 계속 켜 놓으면 방전이 계속되므로  배터리 방전기가 되겠죠.

 

이렇게 배터리 테스터를 방전기로 사용할 수 있게 됩니다.

 

이때 FET를 그냥 작동시키는게 아니라 OPAMP를 통해서 비교전압을 걸어주면 정전류로 방전을 할 수 있습니다. 

https://www.youtube.com/watch?v=8uBcywBUTkw&t=6s
(참조)

그러면 이제 배터리 내부저항 체크와 정전류 방전을 통해 배터리의 용량체크까지 할 수 있게 됩니다. 

https://cafe.naver.com/hssoon/207863 

 

[ 왕초보의 ] 좌충우돌.... 자작...

[ 왕초보의 ] 좌충우돌.... 자작 방전기 제작기 ( 방전기시리즈 최종회 ) ...

cafe.naver.com

그런데 이렇게 아이디어를 짜 놓고 보니 위와 같이 어느분이 이미 만들어 놓으셨더군요.. 

 

 

 

 

핵심 회로는 간단합니다. 

아두이노 핀이 많이 남아서 채널수를 늘리고 싶기도 한데

MCP4725(I2C DAC)은 i2c 주소 2개가 한계라 더이상 달수가 없군요. 

 

728x90
728x90

이사후 정말 잡다한(주로 짐정리) 일들이 너무 많아서 정신이 없었네요. 

뭔가 만들고 싶긴 한데 생각에 여유가 없으니 그런지 아이디어도 딱히 떠오르는 것들이 없군요. 

사진첩을 뒤져서 찍어둔 것들 올려봅니다. 

 

 

프린터를 너무 많이 사용해서 리니어 베어링이 덜걱거리는 소리가 나더군요. 

분해해보니 연마봉이 점점이 벗겨진 자국이 있습니다.

Y축만 일단 급한대로 교체하고 나니 훨씬 낫네요. 

 

 

 

 

 

 

취미로 가끔 우쿨렐레를 치는데 하나 더 있으면 편하겠다 싶어 구매했습니다. 

최근 여윳돈이 좀 생긴터라 전부터 갖고 싶었던 물건을 구입해 봤습니다. 

케이스가 좀 튀는데 솔직히 보관용으로나 쓸까 무거워서 이동용으로는 별로네요

 

 

 

 

 

 

 

카본입니다.

음질보다 기능에 끌렸습니다.

 

 

 

 

 

 

 

 

 

 

 

빈티지 디스플레이에 흥미가 좀 있습니다만 대부분 가격이 비싸서 구경만 하고 있었습니다. 

그런데 간만에 VFD를 알아보니 가격이 좀 많이 떨어졌더군요. 

몇만원씩 하던 물건이 1만원대로 떨어졌습니다.

싸게 구할 수 있는 물건이 없는 건 아니지만 12V 이상 전압을 드라이빙 해야 하고

데이터쉬트를 알아보고 프로토콜을 해석해야 하는 등 불편한 점이 많습니다. 

이 제품음 삼성에서 만든 VFD로 5V 전압에 일반적인 1602 캐릭터 LCD와 완벽하게 호환됩니다. 

 

 

 

 

 

핀 배치도 똑같아서 쉽게 사용할 수 있습니다. 

 

 

 

자잘한 바쁜 일들도 거의 끝나고 이제 다음주 부터는 좀 여유가 있을 것 같네요

728x90
728x90

스팟 용접기를 준비하면서 케이스 설계와 함께 다른 것들도 준비하고 있습니다. 

일단 여분의 배터리를 준비하고 니켈 스트립이 있어야 용접을 할 수 있겠죠. 

 

 

 

 

 

요즘은 규제로 인해 신품 비보호 18650 배터리를 개인이 구매하는 것이 불가능합니다. 

보호회로가 붙어있는 18650을 사다가 PCM을 전부 떼어내고 열수축튜브를 다시 씌우는 방법도 있습니다

하지만 쓸일없는 PCM이 대량으로 생길 뿐더러 이중으로 돈낭비하는 짓이죠. 

검색하다가 18650이 들어간 전자담배 중고를 처분하는 곳을 발견했습니다. 

 

 

 

 

 

 

 

 

INR18650-30Q 배터리(3000mAh)가 들어 있으며 배터리는 전부 살아있더군요. 

이제 이 배터리를 조합해야 하는데 간단하게나마 비슷한 성능끼리 묶어야 합니다. 

내부저항이 다른 배터리끼리 연결하면 배터리팩 자체에 문제가 생길 수 있기 때문이죠. 

중고라서 배터리 성능이 차이가 날텐데 낡은 배터리와 새 배터리와 결합해서 사용하면 2배로 빨리 낡은 배터리가 됩니다. 

 

 

간단하게나마 배터리 성능을 추측할 수 있는 배터리 내부저항 측정기라는 물건이 있더군요.

배터리 관련 카페에서는 배터리 내부저항 측정기를 자작하시는 분들이 많아 참조했습니다. 

https://blog.naver.com/dgfiel/221211815034

 

배터리 내부저항 측정기(~50V) 자작하기

배터리 내부저항 측정기 자작이 완료되어 포스팅 합니다. ^^ 다른 자작품들 보다는 회로구성이 좀 간단해서...

blog.naver.com

이론도 매우 단순해서 제작도 별로 어렵지 않습니다.

 

 

한편으로 배터리 측정을 하는 김에 

 

https://www.instructables.com/id/DIY-Arduino-Battery-Capacity-Tester-V10-/

 

DIY Arduino Battery Capacity Tester - V1.0

DIY Arduino Battery Capacity Tester - V1.0 : [ Play Video ]I have salvaged so many old lap-top batteries ( 18650 ) to reuse them in my solar projects. It is very difficult to identify the good cells in the battery pack. Earlier in one of my Power Bank Inst

www.instructables.com

https://www.youtube.com/watch?v=8uBcywBUTkw

https://www.youtube.com/watch?v=oU-WQVaHm4g

이런 것들을 참조해서 제작해 보려고 합니다. 

728x90
728x90

교류를 사용하는 스폿 용접기는 트랜스포머를 사용합니다. 

고등학교 물리 정도 시간에 배우던가요?

 

유도 전류를 이용해 전압을 변화시키는 장치입니다. 

 

 

 

 

자기장이 흐르기 쉬운 철심을 중심으로 10번의 코일을 감고, 똑같이 5번 코일을 감으면

10V 입력 전압이 5/10 만큼 되어 5V로 변화됩니다. 

그리고 W=A*V 이므로 전압이 낮아진 만큼 전류를 강하게 만들 수 있습니다. 

 

 

 

 

 

 

이런 원리를 이용해서 220V 의 교류전기를 낮은 전압 / 높은 전류로 바꾸어 

금속성 물질에 흐르게 해서 순간적으로 고열을 얻어냅니다. 

그리고 압착해서 두 금속이 들러붙게 하는 거죠. 

 

 

 

 

 

다만 교류 전기는 (국내의 경우 60Hz 주파수) 전류의 방향이 바뀌는 순간은 전압이 0에 가깝게 됩니다. 

이때의 전력량은 다른 때의 전력량보다 적게 되기 때문에, 

전류의 방향이 바뀌는 순간(Zero Crossing)을 감지해서 그때부터 트랜스포머에 전류를 흐르게 하면 됩니다.

 

 

 

 

 

 

 

 

로직 레벨에서 AC를 제어하는 회로는 위의 빨간 박스 안처럼 만들면 됩니다)

 

 

 

 

 

 

제로 크로싱 감지는 위와 같이 AC 옵토 커플러를 통해 하게 됩니다. 

728x90
728x90

이사후 짐정리도 완벽히 끝내지 못했고

코로나로 등교를 못하는 조카들을 집안 어른들끼리 교대로 돌보는 혼란의 와중입니다. 

 

엊그제는 차량 에어컨 수리하러 갔다가 에어컨 뿐 아니라 순환 및 냉각기 문제까지 드러나면서 

수리비 견적이 2백 가까이 나와 피눈물을 흘리고 왔네요

 

이 와중에 이사날과 출장이 겹친 누님네 이사를 제가 담당하게 생겼네요. 허허

아마 짐정리와 뒷처리, 청소까지 전부 제 담당일듯. 

우리집 이사 끝내고 구내염 생긴게 이제 슬슬 나아가는데 벌써부터 두렵습니다. 

 

728x90
728x90

마무리만 하면 되는 상황에서 고민을 많이 했습니다만

중단하기로 했습니다. 

캐패시터 스폿 자체에는 전혀 문제가 없습니다. 

문제는 제가 계획중인 프로젝트 중에

스텐레스 박판이나 강철 와이어의 스폿용접이 필요할 수도 있다는거죠. 

캐패시터 스폿은 순간적으로 빠른 전압 강하가 일어나기 때문인지

다른 용도의 스폿에는 사용하기가 힘들더군요.

2번이나 제작한 캐패시터 PCB 뭉치를 포기하려니 아까운 마음에 고민을 했습니다만

과감하게 중단하고 다시 AC 스폿기로 돌아가야 할 것 같습니다. 

 


#include <EEPROM.h>
#include <Encoder.h> // https://github.com/PaulStoffregen/Encoder
#include <U8glib.h>


U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);


//이하 핀 선언
#define encoderA 2			//엔코더 A상 - interrupt of arduino nano
#define encoderB 3			//엔코더 B상 - interrupt of arduino nano
#define encoderSW 4			//엔코더스위치
#define spotSignal 5		//스폿 출력	
#define piezo 6 			//피에조 출력
#define spotSW 7			//스폿 트리거 스위치 
#define FanControl 13		//팬 출력. pwm체크할것. 
#define VoltagePin A0		//전압체크 입력
#define tempPin A1			//온도센서 입력
#define autoSpotCheckPin A2	//오토스폿 체크 입력

//이하 음계 주파수 선언
#define B7  3951
#define C8  4186 

//이하 변수 선언
float voltage;					//전압
boolean manualMode = true;		// 수동/자동 모드 선택
boolean dualMode = false;		//듀얼모드 선택
float spotTime= 0.1;			// 스폿 시간
boolean spotFlag = false;		//스폿이 실행됐는지 아닌지 저장하는 플래그. 
double intervalTime = 1.5;		//오토모드시 인터벌 타임 
float dualTime = 0.5;			//듀얼모드시 듀얼 타임
unsigned long currentTime;		//인터벌 시간을 측정하기 위해 millis()를 저장하는 변수 
unsigned long previousTime;		//인터벌 시간을 측정하기 위해 millis()를 저장하는 변수 
char voltageChar[4];				
char temperatureChar[4];
char spotTimeChar[4];
char intervalTimeChar[4];
char dualTimeChar[4];

//EEPROM 관련 변수 선언
int spotTimeAddress = 0;
int autoTimeAddress = 10;


int menuSelect = 0;				//화면에서 선택된 메뉴를 구분하는 변수. 0=수폿시간, 1=자동/수동 선택 2=인터벌, 3=듀얼모드, 4=듀얼시간, 


//온도관련 변수 선언
#define thermistorR 10000				//써미스터 저항값
#define Coefficient 3950		//써미스터 계수
#define tempNorm 25			//보통 실온의 온도 
#define resistorR 10000			//병렬저항의 저항값
#define numSamples 3			//평균을 몇 번 낼 것인가
uint16_t samples[numSamples];
float temperature, average;	//온도, 평균온도

//엔코더 관련 플래그 변수 선언
boolean encoderFlagUp;          //엔코더에서 들어온 UP 신호 플래그(UP 행동후 false 전환)
boolean encoderFlagDown;        //엔코더에서 들어온 DOWN 신호 플래그(DOWN 행동후 false전환)
boolean SWpressedFlag = false;        //스위치가 눌렸는지 저장하는 플래그 변수 
int oldPosition  = 0;

Encoder myEncoder(encoderA, encoderB);


const uint8_t PROGMEM boot[]  = {
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7e,0x00,0x78,0x03,0xfe,0x00,
	0x00,0x7f,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0x80,0x7c,0x03,0xff,0x00,
	0x00,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0x80,0xfc,0x03,0xff,0x80,
	0x00,0xf0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x81,0x80,0xfc,0x03,0xc3,0x80,
	0x00,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x00,0x00,0xfe,0x03,0xc3,0xc0,
	0x00,0xe0,0x03,0x83,0x87,0x7c,0x01,0xf0,0x3b,0x9e,0x00,0x01,0xee,0x03,0xc3,0xc0,
	0x00,0xf0,0x03,0x83,0x87,0xfe,0x07,0xf8,0x3f,0x9c,0x00,0x01,0xcf,0x03,0xc3,0xc0,
	0x00,0x7c,0x03,0x83,0x87,0xff,0x0f,0xfc,0x3f,0x9c,0x00,0x03,0xcf,0x03,0xc7,0x80,
	0x00,0x3e,0x03,0x83,0x87,0x8f,0x0f,0x1c,0x3c,0x3c,0x00,0x03,0xc7,0x03,0xff,0x80,
	0x00,0x1f,0x83,0x83,0x87,0x87,0x9e,0x1e,0x3c,0x3c,0x00,0x07,0x87,0x83,0xff,0x00,
	0x00,0x07,0xc3,0x83,0x87,0x07,0x9f,0xfe,0x38,0x1c,0x00,0x07,0x83,0x83,0xfc,0x00,
	0x00,0x03,0xc3,0x83,0x87,0x03,0x9f,0xfe,0x38,0x1c,0x00,0x07,0xff,0xc3,0xc0,0x00,
	0x00,0x01,0xe3,0x83,0x87,0x03,0x9f,0xfe,0x38,0x1e,0x00,0x0f,0xff,0xc3,0xc0,0x00,
	0x00,0x01,0xe3,0x83,0x87,0x07,0x9e,0x00,0x38,0x0f,0x00,0x0f,0xff,0xe3,0xc0,0x00,
	0x00,0x83,0xc3,0xc7,0x87,0x07,0x8f,0x0c,0x38,0x0f,0xc1,0x1e,0x01,0xe3,0xc0,0x00,
	0x00,0xff,0xc3,0xff,0x87,0x8f,0x0f,0xfc,0x38,0x07,0xff,0x9e,0x00,0xe3,0xc0,0x00,
	0x00,0xff,0x81,0xff,0x87,0xff,0x07,0xfc,0x38,0x03,0xff,0xbc,0x00,0xf3,0xc0,0x00,
	0x00,0x7e,0x00,0xfb,0x87,0xfe,0x01,0xf8,0x38,0x00,0x7e,0x3c,0x00,0x73,0xc0,0x00,
	0x00,0x00,0x00,0x00,0x07,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0xff,0xff,0x00,0x0f,0xf0,0x00,0x00,0x07,0x80,0x00,0x07,0x80,
	0x00,0x00,0x00,0x00,0xff,0xff,0x00,0x7f,0xfc,0x01,0xff,0x87,0x80,0x00,0x07,0x80,
	0x00,0x03,0x80,0x00,0xff,0xff,0x00,0xff,0xfe,0x01,0xff,0x87,0x83,0xff,0xc7,0x80,
	0x00,0x03,0x80,0x00,0x3c,0x38,0x00,0xf0,0x1f,0x01,0xff,0x87,0x83,0xff,0xc7,0x80,
	0x00,0x07,0x80,0x00,0x3c,0x38,0x00,0xe0,0x0f,0x00,0x07,0x87,0x81,0xff,0xc7,0x80,
	0x00,0x07,0xc0,0x00,0x3c,0x38,0x00,0xf0,0x1f,0x00,0x0f,0x7f,0x80,0x03,0xc7,0x80,
	0x00,0x0f,0xe0,0x01,0xff,0xff,0x00,0xff,0xfe,0x00,0x1f,0x7f,0x80,0x03,0xc7,0x80,
	0x00,0x0f,0xe0,0x01,0xff,0xff,0x00,0x7f,0xfc,0x00,0x1e,0x7f,0x80,0x03,0x87,0x80,
	0x00,0x1e,0xf0,0x01,0xff,0xff,0x00,0x3f,0xf8,0x00,0x7f,0x07,0x80,0x03,0x87,0x80,
	0x00,0x7e,0x7c,0x00,0x03,0x80,0x00,0x38,0x38,0x00,0xff,0xc7,0x80,0x07,0x87,0x80,
	0x01,0xfc,0x3f,0x00,0x03,0x80,0x00,0x38,0x38,0x01,0xfb,0xf7,0x80,0x0f,0x07,0x80,
	0x03,0xf0,0x1f,0x8f,0xff,0xff,0xef,0xff,0xff,0xe7,0xe1,0xe7,0x80,0x0f,0x07,0x80,
	0x03,0xe0,0x0f,0x8f,0xff,0xff,0xef,0xff,0xff,0xe3,0xc0,0x47,0x80,0x1e,0x07,0x80,
	0x01,0x80,0x03,0x0f,0xff,0xff,0xef,0xff,0xff,0xe3,0x00,0x00,0x00,0x3c,0x07,0x80,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x07,0x80,0xf8,0x07,0x80,
	0x00,0x00,0x00,0x00,0x03,0x80,0x00,0x0f,0xf0,0x00,0x38,0x07,0x81,0xf0,0x07,0x80,
	0x00,0x00,0x00,0x00,0x03,0x80,0x00,0x7f,0xfc,0x00,0x3f,0xff,0x87,0xe0,0x07,0x80,
	0x0f,0xff,0xff,0xe0,0x07,0xc0,0x00,0xff,0xfe,0x00,0x3f,0xff,0x83,0xc0,0x07,0x80,
	0x0f,0xff,0xff,0xe0,0x07,0xc0,0x00,0xf0,0x1f,0x00,0x3f,0xff,0x81,0x80,0x07,0x80,
	0x0f,0xff,0xff,0xe0,0x1f,0xf0,0x00,0xe0,0x0f,0x00,0x38,0x07,0x80,0x00,0x07,0x80,
	0x00,0x00,0x00,0x00,0x7e,0x7e,0x00,0xf0,0x1f,0x00,0x38,0x07,0x80,0x00,0x07,0x80,
	0x00,0x00,0x00,0x03,0xf8,0x3f,0x80,0xff,0xfe,0x00,0x3f,0xff,0x80,0x00,0x07,0x80,
	0x00,0x00,0x00,0x01,0xf0,0x1f,0x80,0x7f,0xfc,0x00,0x3f,0xff,0x80,0x00,0x07,0x80,
	0x00,0x00,0x00,0x01,0x80,0x03,0x00,0x0f,0xf0,0x00,0x3f,0xff,0x00,0x00,0x07,0x80,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};

//수동 
const unsigned char PROGMEM manual[] = {
	0x00,0x00,0x00,
	0x00,0x0e,0x00,
	0x00,0x0e,0x00,
	0x00,0x0e,0x00,
	0x00,0x1e,0x00,
	0x00,0x3f,0x80,
	0x00,0xf3,0xe0,
	0x07,0xe0,0xf0,
	0x07,0x80,0x30,
	0x00,0x00,0x00,
	0x00,0x00,0x00,
	0x1f,0xff,0xfc,
	0x1f,0xff,0xfc,
	0x00,0x0c,0x00,
	0x00,0x0c,0x00,
	0x00,0x0c,0x00,
	0x00,0x0c,0x00,
	0x00,0x0c,0x00,
	0x00,0x0c,0x00,
	0x00,0x0c,0x00,
	0x00,0x00,0x00,
	0x00,0x00,0x00,
	0x03,0xff,0xe0,
	0x03,0xff,0xe0,
	0x01,0x80,0x00,
	0x01,0x80,0x00,
	0x01,0xff,0xe0,
	0x01,0xff,0xe0,
	0x00,0x0c,0x00,
	0x00,0x0c,0x00,
	0x1f,0xff,0xfc,
	0x1f,0xff,0xfc,
	0x00,0x00,0x00,
	0x00,0x00,0x00,
	0x00,0x7f,0x80,
	0x00,0xff,0xc0,
	0x01,0xc0,0xe0,
	0x01,0x80,0x60,
	0x01,0xc0,0xe0,
	0x00,0xff,0xc0,
	0x00,0x7f,0x80
}; 

//자동
const unsigned char PROGMEM	automatic[] = {
	0x00,0x00,0xe0,
	0x00,0x00,0xe0,
	0x00,0x00,0x60,
	0x0f,0xfc,0x60,
	0x0f,0xfc,0x60,
	0x00,0x18,0x60,
	0x00,0x38,0x60,
	0x00,0x30,0x60,
	0x00,0x70,0x60,
	0x00,0xf0,0x7e,
	0x01,0xf8,0x7e,
	0x03,0x9c,0x60,
	0x07,0x0e,0x60,
	0x1e,0x07,0x60,
	0x1c,0x03,0x60,
	0x00,0x00,0x60,
	0x00,0x00,0x60,
	0x00,0x00,0x60,
	0x00,0x00,0x60,
	0x00,0x00,0x60,
	0x00,0x00,0x00,
	0x00,0x00,0x00,
	0x03,0xff,0xe0,
	0x03,0xff,0xe0,
	0x01,0x80,0x00,
	0x01,0x80,0x00,
	0x01,0xff,0xe0,
	0x01,0xff,0xe0,
	0x00,0x0c,0x00,
	0x00,0x0c,0x00,
	0x1f,0xff,0xfc,
	0x1f,0xff,0xfc,
	0x00,0x00,0x00,
	0x00,0x00,0x00,
	0x00,0x7f,0x80,
	0x00,0xff,0xc0,
	0x01,0xc0,0xe0,
	0x01,0x80,0x60,
	0x01,0xc0,0xe0,
	0x00,0xff,0xc0,
	0x00,0x7f,0x80
};



void u8g_prepare() {
  u8g.setFont(u8g_font_7x13B);		//
  u8g.setFontRefHeightExtendedText();
  u8g.setDefaultForegroundColor();
  u8g.setFontPosTop();
}


void setup() {
	pinMode(encoderSW, INPUT);
	pinMode(encoderA, INPUT);
	pinMode(encoderB, INPUT);
	pinMode(spotSignal, OUTPUT);
	pinMode(piezo, OUTPUT);
	pinMode(spotSW, INPUT_PULLUP);
	pinMode(autoSpotCheckPin, INPUT);
	pinMode(FanControl, OUTPUT);
	pinMode(VoltagePin, INPUT);
	pinMode(tempPin, INPUT);

	u8g_prepare();


    u8g.firstPage();  //두번째 로고를 그린다.
      do {
      	// drawBitmapP(X,Y,Count,H) 에서 count는 비트맵의 가로픽셀수/8, H는 세로픽셀수 이다. 
        u8g.drawBitmapP( 0, 0, 16, 64, boot);	
      }
      while(  u8g.nextPage() ) ;  
	delay(100);

	previousTime = millis();

	beepbeep();
	//Serial.begin(9600);


	//spotTime = EEPROM.read(spotTimeAddress);
	//autoTime = EEPROM.read(autoTimeAddress);
}

void loop() {

	//전압 체크
	voltage = analogRead(VoltagePin);
	voltage = voltage *(5.0/1024.0)*5.3;  //입력 아날로그값(1024)를 5V 수치로 변환시킨 후 전압분배 저항값만큼(5.3)곱한다

	//온도 체크
	for (int i = 0; i<numSamples; i++){
		samples[i] = analogRead(tempPin);
	}

	average = 0;

	for (int i = 0; i<numSamples; i++){
		average += samples[i];
	}

	average /= numSamples;
	average = 1023 / average - 1;
	average = resistorR / average;

	temperature = average / thermistorR;  // (R/Ro)
	temperature = log(temperature);					//ln(R/Ro)
	temperature /= Coefficient;				//1/B * ln(R/Ro)
	temperature += 1.0 / (tempNorm + 273.15);	// + (1/To)
	temperature = 1.0 / temperature;				// Invert
	temperature -= 273.15;					// convert to C

	//소수점 이하 자리를 2 단위로 끊기 위한 계산처리
	temperature *= 5;
	temperature = round(temperature);
	temperature /= 5; 		

	//이하 엔코더 입력 처리
	    if(digitalRead(encoderSW)==HIGH){       //스위치가 눌리면 일단 기억한다. 
	    	SWpressedFlag = true;
	    }

	    if(digitalRead(encoderSW)==LOW && SWpressedFlag==true){  //스위치가 안 눌리면, 눌렸는지 확인하고 그렇다면 아래 구문을 실행
			menuSelect++;								//스위치가 눌리면 스폿시간, 자동/수동 선택, 인터벌 시간 등을 돌아가며 선택한다
			if((menuSelect==4)&&(dualMode==false)){
				menuSelect = 0;
			}
			if(menuSelect>4){
				menuSelect = 0;
			}
			beep();
			SWpressedFlag = false;
	    }

    readEncoder();
    if(encoderFlagUp==true){ 		//상승 트리거 선택시
    	switch (menuSelect) {
    	    case 0:		//0=스폿시간, 3=듀얼모드, 4=듀얼시간, 
    	    	if(spotTime<10){
    	    		spotTime= spotTime+0.5;
    	    	}
    	    	else{
    	    		spotTime++;
    	    	}
    	    break;

    	    case 1:		//1=자동/수동 선택
    	    	manualMode =! manualMode;
    	    break;

    	    case 2:		//2=인터벌 시간 조정
    	    	intervalTime = intervalTime+0.1;
    	    	if(intervalTime>5){		//인터벌 시간이 5초를 넘지 않도록 설정. 
    	    		intervalTime = 5;
    	    	}
    	    break;

    	    case 3:		//3=듀얼/싱글모드 선택
    	    	dualMode =! dualMode;
    	    break;

    	    case 4:		//4=듀얼일 경우 시간 조정
    	    	if(dualMode==true){
		    		dualTime = dualTime + 0.5;
		    	}
    	}
    	beep();
    	encoderFlagUp = false;
    }

    if(encoderFlagDown==true){		//하강 트리거 선택시
    	switch (menuSelect) {
		    case 0:		//0=스폿시간
		    	if(spotTime<10){
		    		spotTime= spotTime - 0.5;
		    	}
		    	else{
		    		spotTime--;
		    	}
		    break;

		    case 1:		//1=자동/수동 선택
		    	manualMode =! manualMode;
		    break;

		    case 2:		//2=인터벌 시간 조정
		    	intervalTime = intervalTime - 0.1;
		    	if(intervalTime<0.5){		//인터벌 시간이 0.5초 이하가 되지 않도록 설정. 
		    		intervalTime = 0.5;
		    	}
		    break;

		    case 3:		//3=듀얼/싱글모드 선택
		    	dualMode =! dualMode;
		    break;

		    case 4:		//듀얼일 경우 듀얼 시간 조정
		    	if(dualMode==true){
		    		dualTime = dualTime - 0.5;
		    	}
			}
		encoderFlagDown = false;
    	beep();
    }

    if(spotTime<0.5){			//스폿 시간이 0이 되지 않도록 처리
    	beepbeep();
    	spotTime = 0.5;
    }
    if(manualMode == true){		//수동 모드일 때
	    if((digitalRead(spotSW)==LOW) && (spotFlag==false)){		//스폿 스위치가 눌리면 스폿한다.
	    	currentTime = millis();
	    	if(currentTime > (previousTime + (intervalTime*1000))){
	    		spot();
	    	}
	    }
	    if(digitalRead(spotSW)==HIGH){
	    	spotFlag = false;
	    }
	}
	else if((analogRead(autoSpotCheckPin)>400) && (spotFlag==false)){	//자동 모드일 때 A2핀에 2/5 이상의 전압이 걸리면
		delay(intervalTime*1000);   									//인터벌 시간 후 스폿 
		currentTime = millis();
	    	if(currentTime > (previousTime + (intervalTime*1000))){
	    		spot();
	    	}
	    }
	    if(digitalRead(spotSW)==HIGH){
	    	spotFlag = false;
	    }
	

    draw();  //OLED 그리는 함수 호출 

}






void readEncoder(){   //엔코더를 오른쪽으로 돌리는 것을 UP으로 설정한다. 
  int newPosition = myEncoder.read();

  if ((newPosition+1) < oldPosition) {      //값의 변화가 생기면 오른 값인지 내린 값인지 비교하여 Flag 설정. 
    encoderFlagUp = true;                   // +1 과 -1을 해주는 이유는 분해능 때문에 3번씩 반복되는것을 막기 위함  
  }
  if ((newPosition-1) > oldPosition) {
    encoderFlagDown = true;   
  }
	oldPosition = newPosition;
  	if(oldPosition > 32760 || oldPosition < -32760){
   	oldPosition = 0;        //int 변수의 범위를 벗어나지 않도록 고정. 
  }
}

void draw(){

	u8g.firstPage();  //화면에 기본 정보 표시 
	do {

		//수동/자동 글자 표시
		if(manualMode == true){		//수동일 경우-수동 선택 표시 
		u8g.drawBitmapP( 0, 20, 3, 41, manual);
		}
		else{							//자동일 경우	
		u8g.drawBitmapP( 0, 20, 3, 41, automatic);
		}

    	//구분선 표시
		u8g.drawLine(0, 0, 128, 0);
		u8g.drawLine(0, 14, 128, 14);
		
		//전압표시
		dtostrf(voltage,2,1,voltageChar);	
		u8g.drawStr(5,2,voltageChar);
		if(voltage<10){
			u8g.drawStr(30,2,"V");
		}
		else{
			u8g.drawStr(38,2,"V");
		}		

		//온도표시
		dtostrf(temperature,2,1,temperatureChar);	
		u8g.drawStr(73,2,temperatureChar);
		u8g.drawStr(103,2,"'C");

		//스폿시간 표시 
		u8g.setScale2x2();			
		if(spotTime<10){			//스폿시간이 10보다 작으면 위치를 조정
			dtostrf(spotTime,2,1,spotTimeChar);
			u8g.drawStr(23, 19, spotTimeChar);
			u8g.drawStr(45, 19, "ms");
		}
		else{						//10보다 크면 위치를 조정. 
			dtostrf(spotTime,2,0,spotTimeChar);
			u8g.drawStr(27, 19, spotTimeChar);
			u8g.drawStr(43, 19, "ms");
		}
		u8g.undoScale();

		//인터벌 시간 표시
		u8g.drawStr(32, 21, "I");
		dtostrf(intervalTime, 2, 1, intervalTimeChar);
		u8g.drawStr(43, 21, intervalTimeChar);
		u8g.drawStr(65, 21, "s");

		//듀얼시간 표시 
		if(dualMode == true){
			u8g.drawStr(80, 21, "D");
		}
		else{
			u8g.drawStr(80, 21, "S");
		}
		dtostrf(dualTime, 2, 1, dualTimeChar);
		u8g.drawStr(91,21, dualTimeChar);
		u8g.drawStr(113, 21, "ms");

		//선택된 부분에 사각형 표시
		switch (menuSelect) {		//0=스폿시간, //1=자동/수동 선택 2=인터벌, 3=듀얼모드, 4=듀얼시간, 
		    case 0:
		    	u8g.drawRFrame(35, 35, 92, 29, 4);		//스폿시간
		    break;

		    case 1:
		    	u8g.drawRFrame(0, 18, 25, 46, 3);		//수동/자동
		    break;
		    
		    case 2:
		    	u8g.drawRFrame(28, 18, 47, 17, 3);		//인터벌
		    break;
		    
		    case 3:
		    	u8g.drawRFrame(76, 18, 13, 17, 2);		//듀얼모드/싱글모드
		    break;
		    
		    case 4:
		    	u8g.drawRFrame(88, 18, 40, 17, 3);		//듀얼일 경우 듀얼 시간 
		    break;
		}

		//u8g.drawRFrame(20, 40, 20, 20, 3);  //시작점(왼쪽 위)의 X좌표, Y좌표, 박스의 폭, 박스의 높이, R값
	}
	while(  u8g.nextPage() ) ;   
}

void spot(){
	spotFlag = true;
	digitalWrite(spotSignal, HIGH);
	delayMicroseconds(spotTime*1000);
	digitalWrite(spotSignal, LOW);
	if(dualMode==true){
		delayMicroseconds(dualTime*1000);
		digitalWrite(spotSignal, HIGH);
		delayMicroseconds(spotTime*1000);
		digitalWrite(spotSignal, LOW);		
		beep();
	}
	beep();
	previousTime = currentTime;
}

void beepbeep(){
  tone(piezo, B7, 50);
  delay(100);
  tone(piezo, B7, 50);
  delay(100);
}

void beep(){
  tone(piezo, C8, 30);
  delay(40);
}

728x90
728x90

이케아의 skarsta 모델입니다. 물론 나중에 모터를 달아줄 생각이고요

 

 

 

 

 

 

 

 

여기에 추가로 피봇기능이 있는 모니터 암을 달았습니다. 

모니터 암을 구하는 과정이 꽤나 힘들었습니다. 

제가 쓰는 모니터는 38인치인데다 오픈프레임 모델이라 전부 철판으로 만들어져 있어 무게가 16킬로나 됩니다. 

 

 

 

 

 

 

 

이걸 버틸만한 모니터 암은 애초에 많지 않은데 여러 가지로 고민하다가(주로 금전적으로)

아마존에서 vivo 사의 heavy duty 모델을 골랐습니다. 

다행히 모니터를 충분히 버텨주더군요.

다만 vesa 마운트 크기가 맞지 않아서 국내에서 어댑터를 구해 끼웠습니다. 

여기에도 모터를 달고 싶

 

 

 

 

책상을 올리고 모니터를 돌리면 거의 천장까지 닿는군요. 

 

 

 

 

 

 

책상 하단에는 다이소 철망을 사서 구부리고 3D프린터로 출력한 브라켓으로 달아줬습니다. 

원래 전선 정리용 거치대를 사서 붙이려고 보니 하나같이 매우 비싸더군요

 

 

 

 

책상에서 모니터를 보거나 할땐 허리를 펴고 앞을 보고

납땜하거나 뭔가 제작할 때에는 책상 바닥을 봐야 하죠.

이 두 포지션의 높이가 참 서로 안 맞습니다. 

그래서 스탠딩 데스크를 한참 노리다가 이사하면서 중고나라에서 쿨매물을 발견해서 업어왔습니다. 

 

모니터는 커서 좋지만 반면에 책상 끄트머리에 놓아야 할 수밖에 없었습니다. 

그래서 뭘 자세히 보려면 책상으로 목을 거북이처럼 뻗어야 하는게 영 불편하더군요. 

 

이번에 이 두가지 결합으로 마음대로 위치를 바꿀 수 있어 참 편해졌습니다. 

728x90
728x90

가끔 소형화된 물건을 만들기 위해 Atmega328이나 Attiny85 칩을 PCB에 직접 올려 온보드된 아두이노 제작을 할 때가 있습니다. 

그런데 그때마다 별도의 브라켓을 사용하거나 선을 따거나 해야 해서 매우 불편하더군요. 

USBASP나 AVRISP 짭 등 여러가지를 시도해 봤지만 마지막엔 Arduino ISP가 제일 편했고요. 

 

그래서 제가 주로 쓰는 칩만 모아서 편하게 프로그램할 수 있는 ISP를 만들기로 했습니다. 

 

회로는 단순합니다만 ZIP 소켓과 TQFP32 소켓 주문이 매우 오래 걸려 배송됐는데 그나마도 실수로 잘못 주문하는 바람에 제작에는 거의 반년이 걸려 버렸습니다.

 

 

 

Attiny85 의 DIP 형과 SOIP, Atmega328의 DIP과 TQFP 패키지를 올릴 수 있습니다. 

 

 

 

 

 

간단하게 Attiny85에 Blink 소스를 수정해서 올리고 테스트해봤습니다. 

 

 

728x90

'D.I.Y.' 카테고리의 다른 글

STM32 보드를 아두이노로 사용하기.  (0) 2020.05.09
중고 배터리와 배터리 테스터  (0) 2020.04.05
공기 청정기 필터 어댑터.  (1) 2020.01.30
디지털 멀티미터 프로브 단자 교체.  (0) 2019.12.03
CNC 정비.  (0) 2019.11.19
728x90

 

PCB를 조립하고 테스트 스폿을 했을 때 니켈판이 전혀 붙지가 않더군요

 

 

 

 

 

 

 

전압을 높이고 별짓을 다해도 붙질 않았습니다. 

커터칼 없이 니켈판만 대고 해보면 구멍을 뻥뻥 뚫을 정도로 강력한데 이상하더군요.

 

 

 

 

 

 

 

 

 

전부 분해해서 접점을 깨끗하게 연마했습니다. 

 

 

 

 

 

반짝반짝 광나게 닦았습니다. 

스폿 용접기는 저전압 고전류를 사용하는지라 작은 저항의 차이도 큰 변화를 가져옵니다. 

 

 

 

 

 

 

 

동 부스바는 표면산화가 빨라서 금방 원래대로 될 것 같더군요.

프로젝트 원저자가 사용하던 Noalox라는 접점용 산화 차단제를 발라봤습니다. 

근데 이 용액 자체는 전도도가 0이던데 접점에 사용해도 전기 전도에 영향이 없는지 모르겠네요

 

 

 

 

 

 

잘 연마하고 잘 조립했더니 체감상 성능이 좋아졌습니다만 결과는 마찬가지로 잘 안붙더군요.

니켈도금판이 아닌 순수 니켈판으로 해봤더니 아주 잘됩니다. 

검색해보니 커터칼에는 워낙 잘 안붙는 경우가 있답니다.

니켈도금판과 커터칼 조합은 잘 안되는것 같습니다. 

 

 

 

 

 

 

 

어쨋건 성능문제는 해결했습니다.

길쭉한 부스바를 잘라내고 용접봉이 전면을 향하게 90도 절곡을 하기로 했습니다. 

 

 

 

 

 

 

생각보다 꺾는게 굉장히 힘들더군요.

일반 펜치 정도로는 절대 불가능합니다. 

바이스와 바이스 클램프를 사용해서 간신히 45도 정도 꺾고 바이스에 물린채로 망치질해서 90도 만들어줬습니다. 

표면이 울퉁불퉁해져서 다시 사포질로 매끈하게 정리했습니다. 

 

 

 

 

 

 

테스트해보니 수정하고 싶은 부분이 좀 생겼습니다. 

아두이노의 전원을 따로 만들어 2원화 하거나 전원보강을 해 줘야 할 것 같습니다. 

스폿후 캐패시터 충전하느라 전류가 딸려 OLED 화면이 깜박깜박 합니다. 

캐패시터 충전시 순간 요구하는 전류랑이 상당해 어댑터가 리셋될 가능성이 높습니다. 

CC-CV 모듈을 사용해 전류를 제한해야 하지 않을까 싶네요. 

오토스팟 기능도 확인해 봐야 할 것 같습니다. 

이제 슬슬 외형 설계를 들어갈 차례네요. 

728x90
728x90

 

화단 가꾸기는 참 느긋한 취미인듯 합니다. 

작년의 실수를 올해에 수정하고 있네요. 

올해는 날씨를 봐 가며 영하권을 벗어나는 걸 확인하고 바로 모종을 정식했습니다. 

 

 

 

아직 식물을 구별하는 눈은 키우지 못해서 뭔질 모르겠네요. 

작년에 심었던 꽃씨가 저절로 발아해서 자랐습니다.

일단 여기저기 흩어져 있는 모종을 한쪽으로 모아두기만 했습니다. 

 

 

 

 

 

 

나머지는 삽으로 땅을 고르고 퇴비를 섞고 조금씩 집단별로 심었습니다. 

꽃의 높낮이로 조화를 이루는 걸 하고 싶긴 하지만 아직까진 뭐가 얼마나 자랄지, 어떻게 심어야 예쁠지 모릅니다. 

작년 가을에는 처음으로 무스카리 구근을 거둬서 따로 심었다가 정식했습니다.(가운데 하단)

무스카리는 잡초처럼 잘 자라긴 하는데 관리가 안돼서 잡초처럼 보인다는게 문제네요.

 

 

 

 

 

 

튤립 구근 뒤로 수레국화

 

 

 

 

 

 

오른쪽에는 로벨리아. 

로벨리아는 꽃도 오래가고 자잘하게 많이 피어서 화단 앞쪽에 왕창 심기 괜찮더군요. 

가운데는 금어초. 좀 더 자란다음 나눠서 심었어야 하나 싶네요. 

 

왼쪽의 쪽파줄기같은건 이름을 모릅니다. 어느정도 자란다음에 인터넷 검색해볼 예정. 

728x90

'Gardening' 카테고리의 다른 글

올해의 모종.  (0) 2020.01.26
겨울모종.  (0) 2019.12.15
가드닝 일기.  (0) 2019.04.17
포트에 심었던 모종들 일부 정식.  (0) 2019.04.06
새 식물 LED 투입, 2단으로 변경  (0) 2019.03.30
728x90

지난 포스트(링크) 에서도 얘기했지만 프린터 사용량이 참 많습니다. 

그래서 참 불편한 것 중 하나가 있습니다.

프린터 출력이 끝난 뒤 베드에서 출력물을 제거하기 전에는 새 프린팅을 할 수 없다는거죠. 

 

 

당연한 것이지만 집에 있을 때 출력이 완료됐다는 텔레그램 봇의 메세지를 보면 다시 달려나가서 새 출력을 걸고 싶을때가 많습니다. 

 

 

 

 

 

 

 

 

[이미지 출처 : https://blackbelt-3d.com/ ]

이 프린터가 처음 나왔을때는 저렴한 카피가 나오지 않을까 좀 기대를 했습니다만

몇년이 지난 지금도 딱히 소식이 없네요.

 

 

 

 

 

 

 

최근에 유튜브를 보다가 비슷한 물건을 발견했습니다. 

white knight 라는 제품명이 붙은 물건입니다. 

특이한 것은 오픈 소스입니다. 설계 파일과 모든 도면이 공개되어 있습니다. 

https://github.com/NAK3DDesigns/White-Knight

 

NAK3DDesigns/White-Knight

White Knight Belt Printer. Contribute to NAK3DDesigns/White-Knight development by creating an account on GitHub.

github.com

 

 

 

 

 

 

하지만 부품 비용들이 상당한 문제가 있습니다. 

다른 부품들은 갖고 있는 것으로 대체하거나 직접 설계해서 출력하거나 할 수 있습니다.

하지만 벨트 부품은 대체가 불가능할 뿐더러 가격이 저가형 프린터 1개를 넘기 때문에 예산을 많이 초과합니다. 

또한 제가 필요한 것은 '다른 출력물을 연속해서 출력하는 것'이지

'프린터 베드 넓이를 벗어나는 대형 출력을 하는 것'은 아닙니다. 

 

 

 

 

 

 

 

그러니까 제가 원하는 것은 이런 형태의 베드가 되겠네요

 

 

 

 

 

 

벨트 대신 스텐레스 박판을 사용해 보려 합니다.

내열 테이프 등으로 잘 붙이거나 스폿 용접 등으로 연결할 수 있지 않을까 합니다. 

 

 

 

 

 

 

 

 

 

 

 

 

CR-10S 베드에 장착할 생각으로 설계중입니다. 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
728x90

요즘 쉴새없이 프린팅을 했더니 베드 센서선에 단선이 일어났습니다. 

고치고 며칠 쓰니 노즐이 자주 막히는 현상이 일어나서 확인해 보니 옆으로 새기도 하고 실리콘 삭스는 찢어져 있네요

요즘 PETG를 실험해 보느라고 230도 이상의 고온에서 열심히 돌린 탓인 듯 합니다. 

정비를 끝내고 필라멘트를 얼마나 사용해 왔는지 궁금해서 구매기록을 찾아봤습니다. 

 

 

 

 

필라멘트를 대량으로 사용하다 보니 비용 부담에 타오바오 직구를 애용합니다. 

 

 

 

 

 

 

 

생각보다 구매기록이 많군요.. 

내친김에 국내에서 구매했던 쇼핑몰 기록도 뒤져서 쭉 적어봤습니다. 

 

--------------->14년 12월 첫 3D 프린터 - 델타 K800 구입. 

<이후 중간기록 찾을 수 없음>

16년 11월 2롤 - 국내구입
17년 3월 4롤

---------------->17년 8월 자작 CoreXY 완성 
17년 9월 3롤 - 국내구입

18년 5월 5롤

18년 7월 10롤

18년 8월 4롤

---------------->18년 늦여름쯤 CR-10S 구입. 
18년 10월 7롤
18년 11월 5롤
18년 12월 10롤 + 1롤 (PETG)
18년 11월 5롤

---------------->19년 3월 - Prusa MK3 구입
19년 4월 6롤
19년 6월 10롤
19년 10월 5롤
19년 11월 3롤
19년 12월 2롤 + 8롤(PETG)

 

구매이력이 확실히 있는 3년 1개월간 총 90롤을 구매했네요. 

지금 쌓여있는 롤들을 제외하고 대충 계산하면 1달에 2.4롤 가량 되는군요. 

 

인터넷을 찾아보니 PLA의 밀도는 1.24g / cm^3 라 하는군요. 

1kg 의 PLA의 부피는 1000/1.24 = 806.45cm^3 이겠고요.

 

1.75mm 필라멘트의 단면적은 

(0.175 / 2)^2 * 3.1415 = 0.024cm^2 이고

0.024 * X = 806.45 가 되는 X의 길이는 336미터 정도 되는군요. 

 

 

 

 

 

슬라이서 돌려보면 1시간에 필라멘트 2.2미터 가량 소비하는 듯 합니다. 

336 / 2.2 = 152.72 시간이고

30으로 다시 나누면 매일 5시간 가량 돌려야 하는군요. 

월 소비량이 2.4롤이니 5*2.4 = 12시간 입니다. 

프린터를 2대 운용하는 기간도 꽤 있었지만 3년내내 쉬지않고 프린터가 매일 12시간 넘게 돌아갔단 얘기가 되네요.

 

참 많이도 썼군요

728x90
728x90

 

이미 시중에 많은 공기 청정기가 나와있죠.

 

 

 

 

처음에는 자동차용 에어컨 필터를 이용해서 DIY를 하는 분들이 계셨죠. 

한두군데 업체에서 대량생산 납품을 하기 때문에 가격은 저렴하고 성능은 공기청정기 필터에 뒤떨어지지 않습니다. 

다만 가정용 공기청정기 필터와 달리 등급분류가 써 있지 않기 때문에 성능 좋은 필터를 찾으려면 구글링을 많이 해야 합니다. 

 

저도 작년 초에 한번 만들어 보려고 필터만 사 뒀는데 영 안 하게 되더라고요

 

 

 

 

집에서 사용하는 삼성제 공기정화기는 필터가 다소 비싼 편이지만 호환필터는 딱히 부담될 정도는 아닙니다. 

장점이라면 완제품이기에 팬소음도 조용하고 먼지 상태에 따라 자동으로 조절도 되고요. 

 

 

 

 

그래서 DIY하기에 애매한 상태로 한참 지났습니다.

그러다 최근에 공기청정기 필터 상태를 보려고 열었다가 아이디어가 떠올랐습니다

삼성 필터의 면적은 305*277이고 제가 구입한 차량용 에어컨 필터의 면적은 262*226 입니다. 

면적은 70%고 5~6천원선에 구매했으니 결국 공기청정기 필터와 가격차이가 그리 심한것도 아니네요.

 

일단 차량용 필터의 크기가 작으니 어댑터를 만들면 되지 않을까? 하는 생각이 들었습니다. 

 

 

 

 

 

퓨전에서 설계하고 출력이 가능하도록 4분할 했습니다. 

에어컨 필터는 4면중 양쪽 2면이 단단하게 벽이 세워져 있고 2면은 흐늘하게 늘어집니다. 

안쪽에 고정이 되도록 2면만 턱을 만들어서 걸리도록 했습니다. 

 

 

 

 

출력된 부품을 가조립해 봤습니다. 수정 한두번은 각오했는데 그럭저럭 괜찮게 맞는 것 같네요

 

 

 

 

 

 

 

본드로 결합하고 문풍지 테이프를 준비합니다. 

 

 

 

 

 

 

 

약간 잘라서 폭을 맞췄습니다. 

 

 

 

 

 

 

 

필터를 끼워보니 얼추 맞습니다. 

가운데는 받쳐주는 부분이 없어 살짝 떠 보이는데 반대쪽에서 문풍지 스폰지가 밀어주고 있습니다. 

 

 

 

 

 

 

 

 

 

소음없이 조용하고 잘 되네요

728x90

'D.I.Y.' 카테고리의 다른 글

중고 배터리와 배터리 테스터  (0) 2020.04.05
아두이노 ISP 용 범용보드 제작.  (3) 2020.03.03
디지털 멀티미터 프로브 단자 교체.  (0) 2019.12.03
CNC 정비.  (0) 2019.11.19
PLA 재생용 세절기 연구.  (0) 2019.10.31
728x90

작년에 키운 꽃들은 성과가 그리 좋진 않았습니다. 

발아단계에서 잘못된 조명으로 성장하지 못한 씨앗들이 많았고 파종시기도 한참 늦었죠. 

이번에는 화단에서 겨울전에 미리 무스카리 구근들을 파내어 정리했습니다. 

따로 구매한 튤립 구근들도 이번에 심었더니 잎이 쑥쑥 올라오더군요. 

여러 씨앗들도 파종해서 싹이 올라오는 것들은 따로 정리하고 

아예 발아되지 않는 것들은 폐기하고 있습니다. 

 

로즈마리는 씨앗으로 키우는걸 2년 연속 실패해서;

모종을 하나 사서 키우며 꺾꽂이로 조금씩 늘리려고 합니다. 

 

 

 

 

 

 

추가로 버섯재배를 하고 있습니다. 

커피가루를 버리려다가 커피가루에 버섯 포자를 키우는 키트 생각이 났습니다.

커피가루 100%는 아닌거 같고 뭔가 섞어 쓰는 것 같아 찾아봤습니다. 

면실피는 목화씨의 껍질을 모은 것, 면실박은 목화씨에서 기름을 짜낸 후의 찌꺼기,

비트펄프는 사탕무에서 즙을 짜낸 후의 찌꺼기라네요. 

 

 

외국의 예를 검색해 보니 살균된 지푸라기나 톱밥 등을 10~20% 정도 추가하는걸 권장하는군요. 

 

저는 그런게 없어서 일단 그냥 커피 찌꺼기 100%에 팽이버섯 뿌리를 섞어 두었습니다. 

며칠 지나니 이렇게 포자가 자라는 모습이 보이네요. 

온도도 맞지 않는데 그래도 열심히 자라는 것 같아 신기하군요. 

 

728x90

'Gardening' 카테고리의 다른 글

모종 정식.  (0) 2020.02.25
겨울모종.  (0) 2019.12.15
가드닝 일기.  (0) 2019.04.17
포트에 심었던 모종들 일부 정식.  (0) 2019.04.06
새 식물 LED 투입, 2단으로 변경  (0) 2019.03.30

+ Recent posts