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

액셀을 중간이상 올리면 멈추는 증상이 있는데 두달동안 원인을 찾았지만 못찾겠네요.

누님네도 이사가고 해서 필요목적이 50%쯤 상실되기도 했고 이걸 붙들고 씨름하는 시간에 다른 걸 하는게 낫겠습니다. 

만들기를 하다 보면 실패하는 경우도 많기는 한데 최근엔 제대로 되는게 없어 마음이 깊이 가라앉는군요. 

 

 

728x90
728x90

좀 복잡한 이야기라서 자세한 얘기는 패스하고, 

원래 지금 제작중인 컨베이어벨트 무한 3D 프린터는 이사하게 되면 배치할 생각이었는데요.

그게 무산되어 앞으로 최소 2년은 그냥 이대로 있어야 하게 되었습니다. 

 

지금은 방바닥 구석에 놓아두고 있고요. 

문제는 계획대로 완성이 되더라도 둘 자리가 전혀 없는 상황입니다. 

이곳에 사는동안 최대한 공간을 창출(?)해서 이것저것 공구를 늘리다 보니 이제는 한계상황이네요.

 

한동안 고민을 좀 했는데 일단 제 개인적으로는 원했던 구성은 다 해봤고

성공 가능성을 엿본 정도로 마무리해야 할 것 같네요.

 

지금은 돌아가는 프린터가 프루사 MK3s 한대뿐이라 상반기중에 보론 0.1을 한대 들일까 합니다. 

 

728x90
728x90

https://www.youtube.com/shorts/HJZpODpRksQ

.

첫번째 출력입니다. 생각보다는 잘 되는듯 하네요

 

 

 

 

 

 

 

 

잘 나온 부분은(매우 적지만) 프레임 강성과 LM 가이드의 조합 덕분인듯.

못 나온 부분은 슬라이서 세팅과 익스트루더 마운트의 강성부족, Y축 모터의 발열로 인한 탈조 때문인 듯 합니다. 

슬라이서 세팅은 천천히 잡으면 되는데 익스트루더를 너무 아래로 붙여서 생기는 문제는 재설계해야 할 것 같고요.

Y축 모터는 익스트루더 수정 후 다시 천천히 확인해 보려 합니다. 

 

개인적으로는 움직임도 깔끔하고 수정하기 어려운 설계상의 문제가 없어보여 상당히 만족하는 중입니다. 

이제 잠깐 접어두고 전동킥보드 수리를 마무리해야 할 것 같네요. 

 

 

메모)

-익스트루더 마운트 재설계.

-X프레임 위치 수정. 

-Y축 모터 발열 문제 수정

728x90
728x90

 

LM가이드를 달고 정비해서 익스트루더 뭉치를 달았더니 끝까지 내려도 바닥에 닿질 않네요

LM가이드 달기 전에 설계한거라 간섭부분이 달라진걸 생각을 못했습니다. 

 

 

 

 

 

 

지금 설계도 꽤 고생해서 잘 맞춘건데 아쉽게 됐네요

 

 

 

 

 

 

 

 

새로운 브라켓은 생긴게 참....

위아래로 각이 안나와서 어쩔수가 없었습니다. 가로축 아래로 기어들어가야하거든요.

 

 

 

 

 

Z축도 다시 잡았습니다. 

엔더 3의 커플링이 리지드 커플링이라 참 마음에 안들었는데 만들면서 보니 수직축도 어긋나 있더군요.

그래서 그냥 위아래로 베어링과 새 커플링 넣어서 수정했습니다. 

 

 

 

 

 

 

 

이외에도 몇가지 수정

출력팬이 안도는 문제 -> +,-를 착각하고 반대로 넣었음

히터 온도 안올라가는 문제 -> 연결이 제대로 안되어있었음

익스트루더 모터 안돌아가는 문제 -> 아무리 체크해도 이상없는데 왜 이러는지 모르겠음.

커넥터를 E1에 연결하고 config에서 설정 변경해서 사용하기로 함. 

 

 

 

 

 

브라켓이 아래로 길쭉하게 늘어진 관계로 앞뒤 진동에 취약합니다.

어차피 하려고 했던 거지만 클리퍼의 기능 중 하나인 레조넌스 체크 기능을 사용하기로 하고 가속도계를 주문했습니다.

https://github.com/gouache/klipper/blob/master/docs/Measuring_Resonances.md

 

GitHub - gouache/klipper: Klipper is a 3d-printer firmware

Klipper is a 3d-printer firmware. Contribute to gouache/klipper development by creating an account on GitHub.

github.com

 

 

 

 

마지막으로 이제 Y축 엔드스탑만 해결하면 됩니다. 

무한베드 프린터이다 보니 Y축의 영점은 존재하질 않는데 문제는 Y축 영점을 잡지 않으면 작동이 안되더군요.

marlin 에서는 임의로 영점을 지정할 수 있는데 클리퍼에서는 해당 G코드를 지원하지 않습니다. 

결국 가짜로 엔드스탑 신호를 만들어 주거나 해야 할 것 같은데 어떻게 해결해야 할 지 고민이군요

 

728x90
728x90

기구부를 세팅하려고 조금씩 움직여 보니 LM가이드가 덜걱거리는 느낌이 납니다. 

한동안 윤활유 보충도 안 해줬고 해서 조립전에 정비하려고 분해를 해봤습니다. 

 

 

 

 

 

그동안 여기저기 쓰이면서 그때마다 볼을 한두개씩 빼먹다 보니 블럭 한개가 아예 텅텅 비었네요.

 

 

 

 

 

 

 

 

 

 

전부 분해해서 청소한 후 2개의 블럭에 볼을 몰아줬습니다. 

블럭 한개만 따로 주문해서 조립하려 합니다. 

원래 메이커의 블럭을 주문하는게 제일 좋긴 한데 중국산이라 어디서 구매한건지 알 수가 없네요. 

그냥 내써팝에서 짭 hiwin 제품으로 한개 구매했습니다. 

연휴가 끝나야 계속 진행을 할 수 있겠군요.

 

 

728x90
728x90

한동안 작업도 안하고 여가시간엔 놀면서 지냈습니다. 

한달이 쉽게 지나가네요

 

 

다시 프린터 하부를 뜯어봅니다. 원래 BTT 보드와 세트인 TFT-LCD가 있었습니다. 

그런데 아무리 검색해봐도 이걸 클리퍼가 올라간 BTT 1.4 보드와 연결하는 방법이 안 나오더군요. 

그래서 결국 12864 LCD를 주문하고, 구조가 약해서 쉽게 부러졌던 하단 부품을 재출력했습니다. 

 

 

 

 

 

배선을 분명 맞게 했는데 아무것도 안나와서 원인을 한참 찾았습니다. 

알고 보니 보드에 온도센서를 연결하지 않으면 클리퍼에 에러가 발생하고 그러면 LCD도 나오질 않더군요.

 

 

 

 

 

 

 

모터와 엔드스탑, 히터와 팬을 모두 연결하고 테스트를 끝냈습니다. 

다만 히터팬은 상시 전원에 연결하는 걸로 되어 있는 것 같아 히터의 온도가 올라갔을 때만 작동하는 방법을 찾는 중입니다.

 

 

요즘은 뭔가 딱히 만들고 싶은 의욕이 없네요..

728x90
728x90

PLA로 출력해서 가조립을 해보니 꽤 괜찮은 것 같아 자작하던 무한베드 프린터에 보론 익스트루더를 달기로 했습니다. 

ABS로 출력했더니 수축이 너무 심해서 Esun 저수축 ABS로 다시 출력했습니다. 

 

 

 

 

 

 

 

 

부품은 기존에 갖고있던 DDE에서 차출. 

 

 

 

 

 

 

 

 

마침 팬케이크 스텝모터도 2개 있어 아예 예비용으로 2세트 제작하기로 했습니다. 

우측의 모터는 축 길이가 길어서 걸리기에 나중에 잘라냈습니다. 

 

 

 

 

 

 

 

 

 

보론에서 제작한 애프터버너 PCB가 있더군요.

유지보수의 편리성을 위해 커넥터 연결식으로 제작된 모듈인데 그대로 구매하자니 가격이 꽤 하네요.

제가 가진 부품들로 재구성해서 제작하기로 했습니다.

일단 커버는 애프터버너용 커버로 출력.

 

 

 

 

 

 

 

 

 

 

기본적인 구성을 마치고 어느정도 잘라냈습니다. 

 

 

 

 

 

 

 

 

 

 

연결도

 

 

 

 

 

 

 

 

 

 

원래 애프터버너 PCB와 메인보드와는 이런 식으로 연결됩니다. 

X축 엔드스탑은 프린터 쪽에 장착할 것이고 챔버 온도용 써미스터는 사용하지 않을 거라 제외했습니다. 

 

 

 

 

 

 

 

 

 

마지막으로 시간이 꽤나 걸린 부분입니다. 

제 프린터는 엔더3를 기반으로 LM가이드로 교체한 물건이다 보니 기존 브라켓과 다른 사용자들이 만들어둔 엔더3 브라켓은 모두 사용이 불가능하더군요

그래서 별 수 없이 출력물을 측정해서 브라켓을 설계했습니다. 

딱 맞게 하느라 대여섯번 이상 재출력하고 수정하느라 시간이 많이 걸렸네요

 

 

 

 

 

 

 

 

마무리가 되어 갑니다. 

 

 

 

728x90
728x90

프루사 MK3 와 프루사 mini(카피) 2대를 운용하고 있고 1년이 넘도록 자작중인 무한베드 프린터가 하나 있습니다. 

프루사는 오래 쓰다 보니 케이블 단선이 자주 발생해서 최근에만 3번쯤 뜯어서 케이블 교체했군요.

 

 

 

 

 

무한베드 프린터는 기간이 길어지다 보니 설계변경만 자꾸자꾸 하게 되고요. 

최근엔 Klipper에 눈독을 들여 옥토프린터에 Klipper를 올리려는데 이게 쉽지가 않았습니다. 

설명대로 해도 자꾸 에러가 나서 이미지 설치만 열번쯤 다시 한듯. 

 

 

 

 

 

며칠간의 삽질끝에 간신히 성공. 

Fluid로 전환하다 또 에러가 났는데 여러번 삽질하다 보니 에러의 원인을 알겠더군요.

결국 해결했습니다. 

 

 

 

 

프루사 미니는 자꾸 쓰로트에서 막히는 증세가 발생하고 있습니다. 

이제 좀 꼴보기 싫어져서 보론 0.1을 만들까 생각을 잠깐 했습니다.

문제가 되는 익스트루더 부분만 가벼운 보론의 익스트루더로 조합하면 괜찮을 것 같더군요. 

ABS 필라멘트 주문해 놓고 일단은 PLA로 가출력해서 계산을 해 보는 중입니다. 

 

 

 

3D 프린터를 쉴새없이 사용하다 보니 이것저것 정비하는 시간도 만만치 않네요

728x90
728x90

컨트롤러에서 속도가 제대로 표시되지 않는 부분을 확인하는 중입니다. 

 

앞서 말했듯 컨트롤러에서는 모터선+홀센서 선 외에 흰색 선 1가닥이 같이 나와있습니다. 

판매자에게 문의하니 속도 체크용이라고 하더군요. 

동작 방식이 어찌 되는지를 확인할 수 없어서 일단 홀 센서 커넥터에 끼워봤습니다. 

 

 

 

 

 

 

그랬더니 모터를 아주 천천히 돌려도 속도가 굉장히 높게 찍히더군요. 

모터에는 자석이 30개 들어가 있고 1회전마다 홀센서 신호가 30번 송출됩니다. 

그렇다면 설정 같은 곳에서 이 부분을 조정할 수 있지 않을까 싶은데요

 

 

 

 

 

 

 

 

구매시 같이 들어있던 메뉴얼에는 이런 부분이 전혀 설명되어 있지 않습니다. 
설정 메뉴에는 P1~P5 에서 C1~C14, L1~L5 까지 세팅하는 부분이 분명히 있는데요

http://solarbike.com.au/wp-content/uploads/2018/12/KT-LCD8H-user-manual.pdf

다행히 검색해보니 이 모델의 자세한 메뉴얼이 있더군요

 

 

 

 

 

 

각종 설정을 건드려 봤지만 속도계와는 맞지가 않네요.

P1 설정이 자석 갯수를 정하는 것이라 P1을 조정하면 되지 않을까 했는데 아니더군요. 

아무래도 속도계 부분은 다른 방법을 찾아야 할 것 같습니다.

 

 

 

 

 

 

 

 

 

어쨋건 이 부분은 나중에 다시 체크하기로 하고 이제 전동 킥보드 본체에서 남은 전선들을 체크해 봅니다. 

라이트, 브레이크 같은 부분들은 이 컨트롤러와 그대로 연결할 수 있는데 후미 브레이크등과 좌우 깜박이가 남게 되네요

 

 

 

 

 

 

 

도로타고 장거리 갈 일은 없을 것 같아 브레이크등만 사용하기로 정했습니다. 

기존 LED는 뜯어냅니다. 

 

 

 

 

 

 

 

부품박스를 열어보니 5050SMD 화이트 LED가 있더군요.

백색이지만 어차피 적색 플라스틱을 통해 붉은 빛이 나오니 이걸 쓰기로 합니다. 

 

 

 

 

 

 

 

플렉시블 만능기판을 이용해 납땜을 합니다. 

LED 를 개별로 드라이빙하면 좋겠는데 지금 그 작업을 별도로 하기엔 시간이 너무 걸리겠어서 포기합니다. 

심지어 14LED 직렬로 48V 입력 그대로 받아 사용합니다. 하나라도 꺼지면 같이 꺼지는 무식한 구조죠. 

 

 

 

 

 

 

 

 

 

조립하고 전원 연결해보니 밝기는 꽤 잘 나오네요.

 

 

 

 

 

 

후미등 분리할때 같이 분리한 후륜 머드가드입니다.

전 주인이 테이프로 그냥 붙여놨던 물건인데 이것도 수리해보기로 합니다. 

 

 

 

 

 

 

 

 

 

 

알리익스프레스 쇼핑할 때 신기하게 봤던 물건인데요.

깨진 플라스틱 범퍼를 수리할 때 저렇게 곡선형의 철물을 달궈서 눌러붙이고 다듬어서 수리를 하더군요.

비슷한 방식을 써 보기로 했습니다. 

 

 

 

 

 

 

 

 

 

적당한 강선이 없어서 배터리용 니켈판을 잘라서 형태를 잡고 토치로 달궜습니다. 

 

 

 

 

 

 

 

 

더 달궈서 빠르게 찔러넣어야겠네요. 그리고 생각보다 굉장히 튼튼하게 잘 붙어있네요

 

 

 

 

 

 

전문 툴이 아니다보니 좀 지저분하지만 안쪽이라 상관은 없습니다. 

반신반의했는데 굉장히 튼튼합니다. 저렇게 깨진 구조는 접착해봤자 붙지도 않고 보강대 덧대도 구조가 약한 느낌인데 이리저리 뒤틀어봐도 삐걱거리는 소리조차 없이 잘 붙어있네요

 

 

 

 

 

사포질하고 페인트까지 하면 더 완벽하겠지만 이것도 시간관계상 대충 마무리하고 끝내기로 했습니다. 

 

 

 

 

 

 

 

 

 

728x90
728x90

LCD와 컨트롤러 배송이 오래 걸려서 이제서야 6부를 올리게 되었네요

 

https://www.aliexpress.com/store/910332326?spm=a2g0o.detail.1000007.1.3c3b3b9eBVU4n7 

 

KT Ebike Accessories Store - Amazing prodcuts with exclusive discounts on AliExpress 

By continuing to use AliExpress you accept our use of cookies (view more on our Privacy Policy). You can adjust your Cookie Preferences at the bottom of this page. Close

www.aliexpress.com

컨트롤러와 LCD는 알리익스프레스의 KT E bike 제품입니다.

오래전부터 가끔 보기도 했고, 완성도가 좋아 보이더군요. 

 

 

 

 

기본적으로는 판매자가 연결도를 사진으로 제공합니다. 혹시나 하고 모델명을 검색해 봤지만 아무것도 안 나옵니다. 

중국쪽 제품들은 이런게 좀 답답해요. 구글 등 외국 검색엔진으로는 데이터를 찾을 수 없습니다. 

그렇다고 해서 바이두 등에서 영어로 검색한다고 나오는 것도 아니고요. 

 

 

 

 

 

 

LCD와 컨트롤러는 같은 회사 제품이라 그대로 연결하면 되고요.

모터와 홀 센서는 우연인지 표준인지 모르겠지만 청색/녹색/노랑이 배선 색이 맞아떨어집니다. 

어찌될지 모르겠지만 일단 그대로 연결하고 적색/흑색 케이블은 5+ 와 gnd로 연결했습니다. 

 

 

 

 

 

 

이상하게 스로틀이 먹질 않아서 일단 스로틀 케이블에 가변저항을 연결해서 돌려봤습니다. 

다행히 배선은 맞았는지 모터가 회전하는군요. 

문제는 저항을 반바퀴 이상 돌리면 덜덜거리면서 멈춘다는 건데 아직 원인을 모르겠습니다. 

 

 

 

 

 

모터가 돌아가는 것을 확인했으니 스로틀을 체크해봅니다. 

5V 입력하고 스로틀을 돌리면 신호선으로 전압변화가 보여야 하는데 먹통이군요.

 

 

 

 

 

 

 

스로틀 핸들을 열어서 홀 센서를 직접 확인해봤는데 홀 센서가 죽은 것 같습니다. 

원래 고장나 있었는지 아니면 제가 분해하다가 전기충격 등으로 죽은건지는 잘 모르겠네요

 

 

 

 

 

 

 

어쩔 수 없이 스로틀을 분해합니다.

고무핸들은 본드로 붙어있어서 내부에 WD-40을 뿌려주고 이리저리 꾹꾹 눌러가며 분리했습니다. 

 

 

 

 

 

 

 

 

그리고 핸들 파이프는 저렇게 내부 부품과 꺽쇠로 걸려있습니다. 

 

 

 

 

 

 

 

 

히팅건으로 온도를 150~180도 정도로 낮게 해서 가열해 주었습니다. 

 

 

 

 

 

 

 

 

 

그랬더니 요렇게 분리가 되는군요. 이렇게 해야 홀 센서를 분리할 수 있습니다. 

 

 

 

 

 

 

 

 

 

 

 

케이블도 분리를 해야 새로 납땜을 할 수 있는데 글루건으로 접착이 되어 있네요

글루건은 알콜을 뿌리면 쉽게 분리가 됩니다.

 

 

 

 

 

 

 

 

 

홀센서를 뽑아내고 새 홀센서를 넣어서 납땜했습니다. 

조립은 분해의 역순. 

 

 

 

 

 

 

 

전방 라이트는 테스트후 그대로 컨트롤러에 연결했습니다. 잘 작동합니다. 

 

G-force S10은 후방 브레이크등과 방향지시등이 있습니다. 

아마 방향지시등은 포기해야 할 것 같고 브레이크등도 그냥 전방 라이트와 같이 켜지도록 연결을 해야 할 것 같네요

 

 

 

 

 

스로틀 핸들을 절반 이상 돌리면 드르륵거리면서 멈추는데 이 문제를 좀 해결해 봐야 할 것 같습니다. 

728x90
728x90

컨트롤러와 LCD 배송이 언제 올지는 모르겠지만 일단 뒷바퀴를 탈거해 둡니다. 

부품이 오면 테스트를 해 봐야 할텐데 저 덩치를 집안에 두고 테스트하긴 힘들기 때문이죠

 

 

 

 

 

 

혹시나 하고 모터도 테스터에 물려봤습니다. 

3상 배선의 저항은 전부 0.04옴으로 뜹니다. 적어도 내부 코일이 끊어지진 않았다는 뜻이죠

 

 

 

 

 

 

 

그런데 홀 센서 케이블에 5V를 물려보고 출력값을 측정해보니 의심이 드는 부분이 있습니다. 

홀 센서는 보통 3개가 있어 케이블이 5가닥이면 2개는 전원선, 3개는 홀 센서 출력이 됩니다. 

그리고 모터를 손으로 돌려보면 출력값이 변하는 것을 볼 수 있습니다. 

가운데 신호는 0~5V 까지 변하는 게 보이는데 양쪽 2개는 0~2.5V 까지 밖에 나오질 않는군요. 

단순히 홀 센서 이상이면 별 문제는 없습니다. 홀 센서는 개당 몇백원 밖에 안합니다. 

그래도 일단 내부를 분해해서 확인을 해 봐야 할 것 같군요

 

 

 

 

 

모터 커버를 분리하기 위해 브레이크 디스크의 볼트를 푸는데 하나가 죽어도 안 빠집니다

 

 

 

 

 

 

예전에 쓰던 빽탭이 마모되어서 하나 새로 샀는데 사이즈가 약간 안맞아서 헛돌더군요

M8까지 대응이라고 써있던데 십자나사와 육각렌치나사가 구멍 사이즈가 안맞아서 그런 듯 합니다

 

 

 

 

 

 

 

토치로 달궈서 돌려보니 다행히 빠졌습니다. 

 

 

 

 

 

 

 

커버에는 파란색 실링이 되어 있습니다. 커버 다시 씌울 때 실리콘이라도 쏴 줘야 겠네요

 

 

 

 

 

 

 

 

센서는 튼튼하게 고정되어 있더군요. 

이걸 어떻게 빼나 하고 확인하던 와중에 전압을 다시 재 보니 0~5V가 정상적으로 나옵니다.....????!@#?

어디서 문제가 있었는지 모르겠지만 하여간 괜히 뚜껑뜯느라 돈과 시간을 날렸네요

 

 

728x90
728x90

스폿 용접 찌꺼기를 제거해서 평평한 면을 만들어야 다시 스폿을 칠 수 있습니다. 

흔히들 '갈갈이' 작업이라 부르시더군요. 드레멜 등의 공구를 사용해 찌꺼기를 갈아내줍니다. 

 

 

 

 

 

 

 

 

프레임 빈 공간을 두면 충격에 깨질 것 같아 죽은 셀들을 집어넣었습니다. 

 

 

 

 

 

 

 

스폿 용접기를 준비합니다. 

생각해 보니 자작 스폿회로 PCB 만들어두기만 하고 여태 작업을 진행 못하고 있네요. 

 

 

 

 

 

 

 

 

 

 

 

작업을 끝마쳤습니다. 52.46V / 13S = 4.035V 로 셀당 전압 4.035V가 잘 나오는 것 같습니다. 

 

 

 

 

 

 

 

에폭시 절연판과 테잎 몇종류를 사서 다시 패킹했습니다. 

애초에 실리콘 밀봉도 굉장히 대충 되어 있어서 다시 꼼꼼하게 작업했습니다. 

 

 

 

 

 

 

 

배터리를 넣고 다시 연결해봅니다.

 

 

 

 

 

 

 

 

그런데 이 상황에서도 계기판에 불이 들어오지 않는군요.

후미등 불은 들어오지만 전방 라이트도 들어오지 않습니다.

 

 

 

 

 

 

 

 

몇가지 테스트를 해보니 디스플레이 보드에 vcc 전압이 50V 가 넘게 들어가고 있습니다. 

아마도 컨트롤러에서 뭔가 누전이 생기고 그에 따라 디스플레이 보드도 같이 날아간 것 같습니다.

제조사에 이메일로 문의를 해 봤는데 지금은 모든 부품 재고가 다 떨어졌고 미국외 구매자에게는 판매를 할 수도 없다고 합니다. 

 

결국 컨트롤러와 LCD를 별도로 구매해서 수리해야 할 것 같습니다. 

 

 

 

728x90
728x90

`

 

앞서 말했듯 배터리를 분리하기 위해 브레이크 케이블을 분리해줍니다. 

 

 

 

 

 

 

 

 

 

배터리 팩은 간단한 플라스틱 케이스에 싸여 있습니다. 

이 팩이 내부에 접착이 되어서 아무리 흔들어도 빠지질 않더군요

 

 

 

 

 

 

 

스카치 테잎을 자 끝에 살짝 뒤집어 끄트머리만 붙였습니다. 

 

 

 

이 상태로 틈새로 깊숙히 찔러넣어 테이프를 배터리 팩에 붙입니다. 

 

 

 

 

 

 

 

여러장 붙여 이렇게 손잡이를 만들었습니다. 

 

 

 

 

 

 

그래도 안빠지길래 외부박스에도 테이프를 붙여 발로 밟고 나서야 분리할 수 있었습니다. 

 

 

 

 

 

 

 

 

 

이렇게 내부에서 접착이 되어 있었네요

 

 

 

 

 

 

 

 

 

무게는 5.1kg, 크기는 270*160*70 정도 되는구요

 

 

 

 

 

 

이제부터는 매우 조심해서 작업해야 합니다. 

 

 

 

 

 

 

 

8P 13S구성입니다. 

 

 

 

 

 

 

 

 

전압을 체크해보니 맨 왼쪽 한줄이 죽었더군요

전체 리빌딩을 하지 않고 죽은 8P를 제거한 후

13S 를 12S로 변경해 12개의 셀을 분리할 겁니다. 

그리고 이 분리한 셀들로 7P를 만들어 집어넣으면 13S 7P배터리팩이 되겠지요

용량이 쬐끔 줄어들겠지만 거의 그대로 쓸 수 있고, 배터리를 추가구매할 필요 없이 그대로 살릴 수 있습니다. 

 

 

 

 

 

 

일단 죽은 8P의 니켈 플레이트를 절단합니다. 

 

 

 

 

플라스틱 보조대의 위쪽 걸림턱을 니퍼로 제거했습니다. 

 

 

 

 

 

 

요렇게 셀 제거가 끝났습니다. 

 

 

 

 

 

 

 

 

검색해보니 이 팩 하나에 42만원이네요

13S 8P 구성이라 104셀이 필요하니 셀당 4038원 꼴입니다. 

4500원 정도면 LG나 삼성의 3000mAh 셀을 구할 수 있으니 차후에 전체 리팩을 하더라도 자작이 나은 것 같습니다.

728x90
728x90

일반 분해할 때 나온 부품들을 정리해서 잘 보관해 두었습니다. 

 

 

 

 

 

 

 

리모컨 키 체크. 

 

 

 

 

 

 

 

 

충전기는 그냥 어댑터 같아 보이는데요.

이건 나중에 배터리를 분리하고 나면 BMS 하고 같이 확인해봐야 할 것 같습니다. 

 

 

 

 

 

 

 

 

컨트롤러는 나름 방수가 되어 있네요

그런데 중간에 GPS 라는 글씨가 보입니다.

 

 

 

 

 

 

 

GPS로 위치추적을 할 수 있게 되어 있네요.

하지만 해당 모델을 검색해보니 GPRS/GSM 방식이라 국내에서는 사용할 수 없습니다. 

 

 

 

 

 

 

 

 

 

 

한가닥이 빠져 있는데 원래 이런건지 아닌지 모르겠군요

 

 

 

 

 

 

 

 

요건 도난방지 센서인 것 같습니다. 

 

 

 

 

 

 

 

 

 

요건 그냥 부저입니다. 

 

 

 

 

 

 

 

파워 서플라이로 전원을 넣어보니 삑삑거리며 작동을 하는군요.

LCD를 붙여봐야 더 정확히 알 수 있을텐데 전동킥보드 덩치가 너무 커서 일단 배터리를 수리한 다음 주차장에서 작업을 이어나가야 될 것 같습니다. 

728x90
728x90

최근 동네에서 1km 정도의 거리를 서너번씩 다닐 일이 생겨서 엄청 힘들더군요

당근마켓을 보다가 고장난 상태의 전동 킥보드를 발견해 덥썩 업어왔습니다.

 

판매자는 배터리 문제인 것 같다고는 하는데,
일단 현장에서 확인이 불가능해서 컨트롤러 문제일 가능성을 얘기하고 10만원에 거래를 했습니다. 

 

 

 

 

 

약간 중대형 급에 속하는 전동 킥보드라 집안으로 끌고 들어오지는 못하고 일단 주차장에서 분해를 시도했습니다. 

 

 

 

 

 

 

 

 

요리조리 보아하니 배터리를 빼려면 전방으로 빼내야 하겠더군요. 

하지만 커버를 빼면 저정도 빠지고는 앞바퀴에 걸립니다. 

그러면 앞바퀴를 분리해야겠네요.

 

 

 

 

 

 

 

구조를 훑어보니 회전축에 결합된 육각너트가 있습니다.

저 부분은 록타이트로 단단하게 고정되어 있네요

 

 

 

 

 

 

 

 

 

 

그리고 축 중앙의 너트를 풉니다. 

 

 

 

 

 

 

 

 

그러면 상부가 통채로 분리되며 위와 같이 해바라기 너트가 보입니다. 

자전거와 비슷한 구조네요. 

 

 

 

 

 

 

 

 

 

이제 바퀴를 아래로 당기면 쑥 빠져 나옵니다. 

상부와 하부에 베어링과 실링, 커버 등이 있으니 분실하지 않도록 잘 챙깁니다. 

 

 

 

 

 

 

 

 

이제 프레임의 전면 커버를 빼고 나면 내부의 컨트롤러를 볼 수 있습니다. 

제것은 제대로 고정이 안되어 있고 떨어져서 덜렁거리더군요.

 

 

 

 

이제부터는 결선을 잊지 않도록 커넥터를 분리할 때마다 사진을 잘 찍어둡니다. 

 

 

 

 

색상이 똑같은 커넥터가 2개씩 연달아 있기도 하는데 이것들은 좌우 깜박이 같이 동일부품 2개로 연결되더군요.

 

 

 

 

 

 

 

 

이제 배터리를 앞으로 당겨 뽑으면 됩니다만 후륜 브레이크 케이블이 걸리네요.

브레이크 케이블도 분리하지 않으면 안될 것 같습니다. 

일단 주차장 작업은 여기서 마무리했습니다. 

 

 

 

 

 

 

 

 

 

728x90
728x90

이번 프로젝트에 사용한 엔더-3는 중고구매로 컨트롤러 미포함이었습니다. 

 

 

 

 

 

어차피 업그레이드를 염두에 두고 있었기에 SKR1.4 터보 보드를 구입했고요

 

 

 

 

 

 

 

예전에 CoreXY에 썼던 LM가이드가 구석에서 썩고있길래 여기에 장착했습니다. 

겸사겸사 벨트 텐셔너도 하나 달아줬고요

 

 

 

 

 

 

 

보우덴 방식보다 직결방식을 선호하기에 BMG 익스트루더 구매. 

요즘 새로 나온 신기한 익스트루더도 많았지만 장바구니에 담아놓고 고민하다가 그냥 익숙한 BMG로 결정했습니다. 

 

 

 

 

 

 

 

그래서 익스트루더 블럭도 새로 설계를 했습니다. 

프루사의 익스트루더 구조를 참조했습니다

 

 

 

 

 

 

 

구조를 단순화시켜 앞뒤 2개의 부품으로 전체적인 구조가 완성됩니다. 

분해결합이나 정비가 쉬울 것 같습니다. 

 

 

 

 

 

 

 

근접센서를 베드 센서로 사용합니다. 

 

 

 

 

 

 

 

이제 메인 컨트롤러 위치만 결정하면 되는데 자리가 참 애매해서 고민중입니다. 

728x90
728x90

0.05T는 너무 울렁거려서 시끄럽더군요. 

0.1T로 바꾸기로 합니다. 

 

 

 

 

 

 

 

스텝모터를 벨트 내부로 넣는 설계가 실제로 써보니 너무 불편했습니다. 

부품들을 수정해서 재출력합니다. 

 

 

 

 

 

 

 

벨트를 가위로 재단합니다. 

 

 

 

 

 

 

 

 

막 자른 철판은 날카로와서 위험하니 꼭 사포질을 해줍니다. 

 

 

 

 

 

 

 

 

테이프로 벨트 길이와 수평을 잘 맞춰 고정합니다. 

 

 

 

 

 

 

임시고정된 벨트를 분리하고요

 

 

 

 

 

 

 

스팟용접기를 꺼냅니다. 

 

 

 

 

 

 

 

 

 

 

재료와 두께에 따라 스팟시간을 조정해야 하기 때문에 여러가지로 테스트해봅니다. 

0.5mS가 적당하더군요

 

 

 

 

 

 

 

 

용접을 하고 사포로 다듬고 닦은 다음 캡톤 테이프로 마감을 해 줍니다. 

저 테이프를 붙이지 않으면 벨트가 돌면서 베드 모서리 등에 걸릴 수 있습니다. 

 

 

 

 

 

 

바깥쪽도 테이프로 마감합니다. 

 

 

 

 

 

 

이제 다시 조립합니다. 

 

 

 

 

 

 

 

728x90
728x90

 

일단 베드 폭에 맞춰 자릅니다. 

 

 

 

 

 

 

 

날카로운 모서리는 사포질합니다. 

이렇게 했는데도 작업중에 어느새 살짝 베이더군요. 

 

 

 

 

 

 

 

일단 마스킹 테이프로 자리를 잡아봅니다. 

 

 

 

 

 

 

벨트를 설치했습니다. 

새로 구입한 벨트가 아직 도착하지 않아 다소 긴 벨트를 사용했는데요. 

저 상태에서 벨트 텐션을 유지하도록 조립하려고 보니 조립성이 정말 엄청나게 안좋더군요. 

벨트 텐셔너를 설계해 넣던지 아니면 프로파일 브라켓을 기존의 출력물로 바꾸던지 해야 할 것 같습니다. 

 

 

 

길이를 재서 사선으로 잘랐습니다. 

그리고 마스킹 테이프로 임시 고정합니다. 

 

 

 

 

 

 

 

스팟 용접기를 꺼내서 쪼가리를 붙여봅니다. 

3.5ms 정도가 적당하더군요. 

 

 

 

 

 

 

 

 

숙련되질 못해서 이쁘지는 않지만 그럭저럭 용접이 끝났습니다. 

 

 

 

 

 

 

 

한쪽을 분해해서 벨트를 끼워넣었습니다. 

벨트 정비할때는 프린터를 다 분해하지 않으면 안되겠네요. 

 

 

 

 

 

 

 

 

일단 작동에는 큰 무리가 없어 보이는데. 철판 울렁거리는 소리가 꽤 나네요. 

벨트 텐셔너 설계하고 새 벨트 도착하면 0.1T도 테스트해봐야겠습니다. 

728x90
728x90

기초설계가 끝났습니다. 

 

 

 

 

 

의외로 복잡했던 것이 각 부품간의 배치와 크기 조정이었는데요. 

빨간색 부분으로 벨트가 통과하기 때문에 위아래로 걸리는 부분이 없어야 한다는 것이 설계에 많은 제한을 두더군요. 

스텝모터가 들어간 부분도 마음에 들지는 않습니다.

사실 스텝모터는 바깥쪽으로 빼는게 더 나을겁니다.

저렇게 벨트 내부에 들어있으면 조립이나 조정이 매우 힘들겠죠. 

하지만 제가 워낙 방에 공간이 없다보니 일단 부피를 최소화하는 쪽으로 설계방향을 잡고 있습니다. 

 

 

 

 

 

 

 

기존 프레임은 일단 분리를 하고요. 

 

 

 

 

 

 

국내에서 주문한 2020프로파일 250mm를 가로대로 사용합니다. 

기존 프레임을 최대한 그대로 사용하는걸 목적으로 했기 때문에 250mm 프로파일 2개만 주문해서 교체하면 됩니다. 

브라켓 등 연결용 부품도 필요합니다만 이 목록은 나중에 정리해 보겠습니다. 

출력물로 브라켓을 만들어 봤습니다만 그냥 상용부품을 사용하는게 나을 것 같네요. 

 

 

 

 

 

 

베드 높이조절용으로 들어가는 스프링이 필요할지 아닐지 잘 모르겠군요. 

일단은 스프링으로 높이조절을 할수도 있고 아니면 그냥 고정높이로 갈 수도 있게 양쪽 다 염두에 두고 있습니다. 

 

 

 

 

 

 

 

 

결합하면 이런 모양이 됩니다. 

 

 

 

 

 

 

 

 

 

스프링을 사용하지 않을때는 이렇게 서포터로 고정되고요. 

 

 

 

 

 

 

뒤쪽 롤러는 아직 출력하지 못했습니다. 

요즘 출력할게 너무 많아서 순서가 밀리네요. 

 

 

 

 

 

 

 

 

Z축 프레임은 원래 관통볼트로 고정되어 있었지만 원래 결합 위치와는 달라지기 때문에 브라켓으로 고정될 예정입니다. 

일단 살짝 올려만 놓고 보니 형상이 나쁘진 않아 보입니다.

후방 롤러와 스텝모터 브라켓을 출력하고 나면 벨트도 가조립을 해서 결합해 보겠습니다. 

728x90
728x90

기존에 CR-10S 프린터를 개조하던 프로젝트에서 갑작스런 이사와 작업장 정리로 프린터를 처분하게 되었죠. 

이후 계속 계획만 세우다가 엔더-3 중고를 10만원에 구입하게 되어 엔더-3로 이어서 작업하게 되었습니다. 

 

 

 

중고라 컨트롤러가 없는 상태였는데 어차피 컨트롤러고 익스트루더고 거의 다 교체할 예정이었으니 상관 없습니다. 

기구적인 구조 변경이 핵심인데 일단 Y축 베드 부분을 탈거합니다. 

 

 

 

 

 

 

일단은 기존 부품을 최대한 살리고 최소한의 부품 교체로 만들어지는것을 목표로 삼고 있습니다. 

 

 

 

 

 

 

 

 

재료비 견적을 간단하게 적어보면

알루미늄 프로파일 2020-250mm 길이로 2개, 

기타 프로파일 브라켓과 볼트 등으로 15000원 정도. 

연마봉 12T 290mm 2개 절단가공 10000원 정도,

내경 12 외경28 베어링 10개 세트 구매로 10000원 정도.

벨트용 스텐철판 9.78$ 정도로 총 재료비는 5만원 안쪽으로 필요합니다. 

 

다만 꼭 필요한 공구로 스팟 용접기가 있어 이 부분의 가격책정이 힘들군요. 

알리에서 34$ 정도 하는 휴대용 용접기가 있긴 한데 스텐철판의 스팟이 가능한지를 잘 모르겠어서 판단을 유보해야 할 것 같습니다. 

 

 

 

 

 

 

나머지는 거의 3D 프린팅한 부품들입니다. 

롤러는 길이 때문에 분할해서 설계했으며 베어링이 3개 들어갑니다. 

 

 

 

 

 

 

나머지는 롤러를 잡아주는 브라켓과 베드를 고정하는 부품들이네요

 

 

 

 

 

 

원래 엔더 3의 바닥 프로파일의 앞면은 탭 가공이 되어 있지만 후면은 탭 가공이 없기 때문에 이 부분도 감안해서 설계를 합니다. 

 

 

 

 

 

 

 

핸들볼트로 롤러를 당겨 장력을 조절하도록 되어 있습니다. 

 

 

 

 

 

 

 

이렇게 설치가 됩니다. 프로파일에 탭이 나 있기 때문에 바로 볼트로 조일 수 있죠. 

 

 

 

 

 

 

스텝모터 브라켓은 아직 설계가 확정되지 않았습니다. 

벨트의 장력을 위해 축을 앞으로 당길 때 스텝모터도 어느정도 같이 움직여야 할 것 같은데 어떻게 해결해야 할지 고민이 되네요. 

 

 

 

728x90
728x90

벨트 재료로 스텐 박판을 준비했습니다. 

 

 

 

 

 

0.1T 인데 생각보다 좀 두껍네요. 0.05T를 살걸 그랬습니다. 

 

 

 

 

 

설계상 벨트폭은 300mm 이므로 나머지는 잘라내야 합니다. 

절단용 지그를 만들가 하다가 그렇게까진 필요 없을듯하며 자로 대고 칼질을 합니다. 

 

 

 

 

 

 

 

 

 

 

그런데 0.1T는 생각보다 두꺼웠고 스텐레스는 생각보다 질겼습니다. 

앞뒤로 뒤집어가며 수십번 칼질을 하게 되네요. 

 

 

 

 

 

 

모서리가 날카로와 위험하니 사포질을 해줍니다. 

 

 

 

 

 

 

 

블로그에 쓴다 해놓고 잊었는데 공부용으로 카페에서 AC 스폿 용접기 회로를 하나 구입했습니다. 

마침 당근마켓에 트랜스를 저렴하게 파는 분이 있어 하나 조립해 두었습니다. 

이 스폿 용접기를 이용해 적당한 용접시간을 확인해봅니다. 

해당 용접기 회로에 대해서는 [링크] 참조하세요

 

 

 

 

 

 

 

제 용접기로는 12~13mS 가 적당하네요. 

 

728x90
728x90

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

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

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

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

 

 

 

 

 

 

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

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

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

 

 

 

 

 

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

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

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

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

 

 

 

 

 

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

 

 

 

 

 

 

 

 

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

 

 

728x90
728x90

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

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

 

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

 

 

 

 

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

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

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

 

 

 

 

 

 

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

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

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

 

 

 

 

 

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

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

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

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

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

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

 

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

 

 

 

 

 

 

 

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

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

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

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

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

 

 

 

 

 

 

 

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

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

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

 

 

 

 

 

 

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

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

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

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

 

 

 

 

 

 

 

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

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

 

 

 

 

 

 

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

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

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

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

 

 

 

 

 

 

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

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

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

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

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

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

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

728x90
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

왜 보통 흔히 그런 말 하지 않나요?

물건을 찾다 찾다 못찾아서 새로 사면 그때 나온다고.

 

 

 

 

 

 

 

 

 

 

 

저는 찾다 찾다 못찾아서 새로 만들었더니 다음날 나왔습니다.  

어처구니가 없네요

 

 

 

 

 

 

 

전부 떼서 새 PCB로 옮겼습니다. 

납을 하도 먹여서 떼는것도 힘드네요.

 

 

 

 

 

 

이글캐드에서 Fusion360으로 바로 3D 모델링을 작성하는 기능이 있습니다. 

물론 부품 라이브러리에 3D Package가 같이 있어야 합니다. 

일단 캐패시터 3D Package만 작성해서 임포트 해봤더니 저렇게 나오는군요. 

FET가 허공에 떠있긴 하지만 나름 괜찮은 것 같습니다. 

나중에 케이스 만들 때 유용할 것 같네요.

 

 

 

 

 

 

핀 간격을 조절해서 앵글 핀헤더끼리 바로 끼워지도록 만들어 봤습니다. 

728x90
728x90

메이커 페어가 끝난 이후 11월 초부터 스폿 용접기를 완성하려고 했습니다. 

그런데

저 캐패시터 PCB 덩어리가 보이질 않더군요. 

10개 묶음이라 대체 어디 구석에 짱박혀 보이지 않을 부피가 아닌데 말이죠.

찾다보면 어디선가 나오겠지.. 하면서 생각나면 여기저기 뒤져보길 반복했습니다.

그런데 안나와요. 

설마 이번엔 찾겠지 하면서 뒤엎길 여러번... 

그런데 안나와요.

거진 6개월을 기다렸습니다.

그런데 정말 안나오네요...

 

 

 

 

 

 

결국 같은 부품을 재주문했습니다.

 

 

 

 

 

 

이참에 PCB도 약간 수정했습니다. 

캐패시터 다리의 솔더면을 최대한 넓게 수정해서 저항을 줄이고

PCB끼리 연결되는 점퍼의 간격을 조절해서 앵글 핀헤더 사용시 그냥 옆으로 끼워서 연결되도록 했습니다.

 

별로 의욕이 안 생기는 작업이지만 그래도 이번엔 완성까지 쭉 달려보도록 해야겠습니다. 

728x90
728x90

아두이노 스케치에서 제일 시간이 오래 걸린건 UI 정렬이었습니다.

화면 완성하다 보니 처음 고른 폰트가 맞지 않았고 다시 정렬해보니 두번째 폰트도 맞지 않았고요. 

결국 세번째 폰트를 고르고 다시 이것저것 정렬해보면서 1픽셀씩 계속 옮겨가며 확인했습니다

 

일단 기능은 

1. ms 단위 스폿

2. 안전을 위해 스위치를 연속으로 눌러도 interval 시간이 지나지 않으면 작동하지 않음

3. 수동으로 스위치를 누르지 않고 전극봉을 접촉하면 스폿되는 자동 스폿 기능(미구현)

4. 매우 짧은 시간 동안 2번 스폿하여 용접이 잘 되도록 하는 듀얼 스폿 기능

5. 온도 모니터링

6. 전압 모니터링

7. 온도에 따른 냉각팬 가변속도(미구현)

입니다. 

 

 

회로는 락시꾼님이 제작한 회로

https://blog.naver.com/kikch/221435954972 를 기본으로 참조해서 이글캐드로 그렸고 

제 사용목적에 맞도록 일부 수정했습니다. 

아두이노 스케치는 전부 제가 따로 작성했고요. 

 

 

 

듀얼스폿 시에는 위처럼 신호가 두번 튑니다. 

그런데 딱히 효용이 있는지는 모르겠네요. 

 

 

 

 

 

 

캐패시터 보드가 총 10개 있는데 4개만 연결해서 테스트중입니다. 

사용된 캐패시터는 내압이 25V입니다. 

일단 5V만 충전해서는 전혀 스폿용접이 안되는군요. 

7V 이상부터 어느정도 유의미하게 용접이 됩니다만 전압이 높다보니 약간씩 불꽃이 튑니다. 

12V는 매우 용접이 잘 됩니다만 불꽃쇼가 펼쳐집니다. 

9V 정도로 절충하면 적당할 것 같습니다. 

캐패시터 보드를 10개 모두 연결하면 5V 에서도 괜찮을수도 있겠습니다. 

 

일단 스폿은 이상없이 잘 되는것을 확인했습니다. 

 

 

 

 

 

 

전압을 높인 상태에서 캐패시터 보드를 줄이면 어떨까 싶어 테스트해봤습니다. 

3개부터는 성능이 떨어지고 2개부터는 거의 스폿이 안됩니다. 

 

 

 

728x90
728x90

복잡한 건 없는데 요즘 게으름병이 도져 진행이 늦었습니다. 

시간과 온도에 따라 채널에 ON/OFF 신호만 주면 되는 물건이라 단순합니다. 

 

디스플레이는 OLED 1602 디스플레이를 사용해서 뽀샤시합니다. 

가독성이 참 좋은데 가격은 참 안좋은 물건입니다.  

오래전에 사둔건데 썩기전에 쓰려고 넣었습니다.

리셋할때 전원을 완전히 OFF 하지 않으면 화면이 제대로 나오지 않는 문제가 있습니다.

그래도 그냥 쓰려고 합니다. 

 

조만간 스텐 밧드에 초음파 모듈 붙이고 최종테스트 들어갈 예정입니다. 

728x90

'Stopped > 초음파 세척기' 카테고리의 다른 글

초음파 세척기 #1  (0) 2019.05.04

+ Recent posts