'본좌급 분류'에 해당되는 글 168건
- 2012.08.24 MPad 1.7.1 버전 문제... 해결법
- 2012.08.09 perpetual bootloader mode 에 대하여..
- 2012.07.26 a축을 추가하다.
- 2012.07.22 DLP 의 제작 (아날라이저 부분)
- 2012.06.15 이젠 이걸로 밥을 먹을 수 있을까??
- 2012.06.15 1단계 제작 완료...라고 볼 수 있나?
- 2012.06.09 아이로봇 룸바 쓰다가 완전 방전된 경우....
- 2012.05.18 mini-cnc 를 만들다
- 2012.05.11 이글캐드를 이용하여 레이아웃을 G-CODE 로 변환
- 2012.04.26 셀발란싱 프로그램
MPad 1.7.1 버전 문제... 해결법
아이패드용 mpd 접속 프로그램인 mpad 가, 최신 버전으로 업데이트 되면서 connection 문제가 이슈가 되었습니다.
저도 또한, 갑자기 접속이 안되는데, 이를 해결하기 위해서 개발자 페이지에 해당 내용이 없는지 구글신에게 여쭈어 보았습니다.
http://www.katoemba.net/makesnosenseatall/2012/06/12/connection-issues-with-v1-7-1/
이에 블라블라...라고 계시를 받았습니다.
말 그대로 wired 한데, 서버 설정에서 pasword 를 삭제해보세요.
다시 접속이 됩니다 :-)
perpetual bootloader mode 에 대하여..
In this mode, Maple stays a DFU device and does not jump to user code until the next reset. This is useful for guaranteeing that your Maple will be available for reprogramming.
To put your Maple (or other Maple board) into perpetual bootloader mode:
- Plug your board into the USB port.
- Hit the reset button (it’s the button labeled RESET). Notice that your board blinks quickly 6 times, then blinks slowly a few more times.
- Hit reset again, and this time push and hold the other button during the 6 fast blinks (the normal button is labeled BUT). You can release it once the slow blinks start.
그러나 이렇게 한 후에도 여전히 문제점은 남아있다.
메이플 보드에는 PA4 핀이 BOOT0 핀과 묶여있다.
따라서 PA4 핀도 BUT 버튼이 눌릴 때에 같이 0 으로 떨어진다.
망고보드에서 BOOT0 핀은 외부 핀으로 빠져있지 않기 때문에, 안타깝게도 보드에 인두를 대야 하는 상황이 발생한다.
현재 이런 개조를 할것인지 고려중이다.
a축을 추가하다.
저가형 A축을 추가..
스텝 모터를 달아보고 테스트 해봤다.
타이밍 벨트를 감싸고 있는 커버가 얇은 철판이어서인지 몰라도, 회전할 때에 목욕탕에서나 들을 수 있는 범우주적인 사운드가 난다.
그리고 저가형이라서 베아링과 베아링집 사이에 약간 유격이 있는데.. ㄷㄷㄷ
어떻게 고정해줄까 흠.
애니웨이.. 나도 이제 볼펜같은거에 뭐 새기고 그러는거 아닐지 몰라.
ps. 스텝모터 컨트롤러 만들어놓은거 (검정박스) 유용하게 사용해 봤다 ㅎㅎㅎ
DLP 의 제작 (아날라이저 부분)
새로 시작한 프로젝트는 Dual Langmuir Probe(DLP) 라고 불리우는 플라즈마 용 진단 툴이다.
노이즈가 적고 간단하게 플라즈마 내의 전자 온도와 밀도를 계산할 수 있어 많이 선호된다.
사실 이미 모든 파트의 제작이 완료되었다.
DAQ 는 직접 제작하고 싶었으나, 시간 관계로 상용품을 사용하였다.
사용한 제품은 NI 사의 USB-6009 이다.
이 제품은 14BIT 해상도의 48Ksps 의 속도를 가진 adc,
그리고, 12BIT 해상도의 150sps 속도를 가진 dac 로 이루어져있다.
dac 사양이 살짝 모라자 보이지만 50만원 이하라는 나름 경제적인 측면에서 선택하였다.
NI 사의 DAQ 를 쓰면 흔히 랩뷰로 구현하는 걸 상상하지만, 나름 C로도 쉽게 사용할 수 있다.
NI-DAQmx 라는 라이브러리를 제공하는데 mfc 에서 쉽게 불러올 수 있다.
어쨌든 실행 화면은 다음과 같다.
프루브는 다음글에서 잠깐 소개하겠다.
제작된 컨트롤러 박스에 프루브를 물리고, 화면의 RUN 을 돌리면 유명한 DLP 곡선이 그려진다.
여기에 연구자들에게도 마약과 같은 SMOOTH 를 돌려준다. (red line)
사실 SMOOTH 는 너무나도 매혹적이긴 하지만, 남용하면 곤란하다.
특히 그래프의 미분이 필요한 경우, 로 데이타를 smooth 없이 미분하면 결과가 끔찍해진다.
그러나, 많이 돌리면 디테일이 사라진다는 거...
사용된 알고리즘은 아직도 그 읽는 법이 궁금한 Savitzky- Goray 알고리즘이다.
이 넘이 가장 적당해 보여서 썼는데 구현이 좀 어렵더군.
이거 마음대로 갖다 쓰면 저작권같은게 걸리는거 아닐까 궁금한데, 어쨌든 일단 구현해서 사용하였다.
Calculate 를 누르면, 선형 피팅이 이뤄진 후에, 다음과 같이 밀도와 온도가 계산된다.
이젠 이걸로 밥을 먹을 수 있을까??
아크릴 명판 가공을 해보고 있다.
깔끔하다..
개인 정보 보호상 동영상 뒷부분은 잘랐다. 물론 내 전화 번호는 아니다.
1단계 제작 완료...라고 볼 수 있나?
3호기의 핵심은 프로파일에서 벗어나는 것.
프로파일이 같은 두께의 알루미늄 판재의 80% 강성을 가지고 있다고 여러번 봤는데
강성은 둘째 치고 진동 때문에 시끄러워서 ㄷㄷㄷㄷ
일단 가장 시급한 건 겐트리 부분을 판재로 가는 거고,, 두번째는 베드를 판재로 가는 것..
이 두가지를 개선한 결과 놀라운 결과가..
어쨌든 피드가 천이상 나오게 됐다.
아이로봇 룸바 쓰다가 완전 방전된 경우....
룸바를 몇달째 충전을 안했더니, 충전독에 올려 놓아도 아예 반응이 없다.
전원을 눌러도 먹통이고...
인터넷을 검색해보니 완방된 경우에 무슨 회로 고장 뭐시기 하면서 15만원을 받아간다 하더군
설마... 누굴 호구로 보는건가.
어쨌든 충전독에 올려놓은 상태에서 이짓저짓 해보다가
spot + clean + dock 버튼을 동시에 3초 이상 누르고 나니 살아났다.
반가운 목소리 "룸바를 충전해주세요" 가...
돈 굳었다 ㅎㅎㅎㅎ
mini-cnc 를 만들다
남은 부품을 조합해서 미니 CNC 를 만들었습니다.
사용한 볼나사 피치가 짧아서 피드가 많이 안나오네요.
이글캐드를 이용하여 레이아웃을 G-CODE 로 변환
cnc를 이용하여 pcb 자작 등을 위한 G-CODE 생성을 위하여
기존 ORCAD 의 LAYOUT 을 쓰는 사람들은 K-PCB? 등의 번거로운 작업을 거쳐서 뽑아낼 수 밖에 없었는데
이글캐드의 pcb-gcode 라는 플러그인을 이용하여 손쉽게 변환할 수 있는 방법이 생겼다.
플러그인은 다음과 같은 사이트에서 받을 수 있다
http://www.brusselsprout.org/PCB-Routing/
중간에 빨갛게 표시된 here 라는 링크를 클릭하여
pcb-gcode.zip 파일을 받은 후에 이글 캐드가 설치된 폴더 밑에 ulp 폴더에 압축을 풀어준다.
여러개의 파일이 생성되는 것을 확인한다.
gcode 로 변환하기에 앞서 몇가지 설정이 필요하다.
이글 캐드에서 brd 를 열고, 메뉴바 밑의 실행창에 다음과 같이 입력한다
run pcb-gcode-setup
다음과 같은 대화창이 뜬다.
자신이 가지고 있는 머신 타입을 설정해준다.
대부분은 mach 를 쓰고 있을 것이다. 그러나 나는 LINUX-CNC 프로그램인 EMC 를 사용하고 있으므로
이를 선택해주었다.
선택해주고 Accept 를 누른다
중간 창에 okay를 누르면 다음 창이 뜬다
귀찮은 일은 영어를 해석하는 것이다.
보드의 아웃라인을 깍을지 여부.. 드릴링을 할지 여부 등을 설정하는 것이다.
Isolation 이 정확히뭔지는 모르겠으나 아마도 클리어런스를 설정하는 듯 하다.
각 탭을 클릭하여 해당 사항을 체크한다. 예를 들어 자신이 가진 머신의 z 범위 등을 적어준다.
실제 적용해보자.
이글캐드를 깔면 기본적으로 포함되어 있는 예제중에
singlesided 란 보드를 열어보았다.
메뉴바 밑의 실행창에
run pcb-gcode 를 입력하고 엔터를 친다
창이 깜빡거리는 걸 반복한 후에, 프로세스가 끝나면 brd 파일이 있는 폴더에 4개의 nc 파일이 생성된다
찾아가보면
singlesidedbd.nc
singlesidedbot.nc
singlesidedtd.nc
singlesided.top.nc
가 생겼다.
2층기판이므로 차례대로, 바텀 드릴링, 바텀 레이아웃, 탑 드릴링, 탑 레이아웃에 대한 g-code 들이다.
하나만 열어보면 다음과 같이 생성된다
-------------------------------------------------------------
singlesidedbd.nc
------------------------------------------------------------
( This gcode generated by C:/Program Files/EAGLE-6.1.0/ulp/pcb-gcode.ulp )
( Copyright 2005 by John Johnson. See readme.txt for licensing terms. )
( This file generated from the board C:/Program Files/EAGLE-6.1.0/projects/examples/singlesided/singlesided.brd )
( This file generated 2012-05-11 오후 11:31:50 )
( T01 0.609600 )
( T02 0.812800 )
( T03 1.016000 )
G21
G90
M05
G00 X0.0000 Y0.0000 Z10.0000
M06 T01 ; 0.6096
G00 Z0.5080
M03
G04 P10.000000
G82 X-36.8300 Y6.3500 Z-3.0480 F100.00 R0.5080 P10.000000
G82 X-41.2750 Y25.4000
G82 X-41.9100 Y6.3500
G82 X-45.7200 Y31.7500
G82 X-48.2600 Y31.7500
G82 X-11.4300 Y31.7500
G82 X-13.9700 Y31.7500
G82 X-13.9700 Y3.8100
G82 X-14.6050 Y1.9050
G82 X-15.2400 Y30.4800
G82 X-16.5100 Y31.7500
G82 X-17.1450 Y1.9050
G82 X-17.7800 Y26.0350
G82 X-19.0500 Y1.9050
G82 X-20.3200 Y28.5750
G82 X-21.5900 Y1.9050
G82 X-21.5900 Y24.1300
G82 X-21.5900 Y26.0350
G82 X-23.4950 Y1.9050
G82 X-24.1300 Y33.6550
G82 X-24.1300 Y30.4800
G82 X-25.4000 Y28.5750
G82 X-26.6700 Y31.7500
G82 X-26.6700 Y33.6550
G82 X-26.6700 Y25.4000
G82 X-26.6700 Y27.3050
G82 X-29.2100 Y24.1300
G82 X-29.2100 Y27.3050
M05
G00 X0.0000 Y0.0000 Z10.0000
M06 T02 ; 0.8128
G00 Z0.5080
M03
G04 P10.000000
G82 X-31.7500 Y5.0800 Z-3.0480 F100.00 R0.5080 P10.000000
G82 X-31.7500 Y7.6200
G82 X-33.0200 Y13.9700
G82 X-33.0200 Y21.5900
G82 X-35.5600 Y13.9700
G82 X-35.5600 Y21.5900
G82 X-38.1000 Y13.9700
G82 X-38.1000 Y21.5900
G82 X-43.1800 Y11.4300
G82 X-43.1800 Y13.9700
G82 X-48.2600 Y5.0800
G82 X-48.2600 Y10.1600
G82 X-48.2600 Y22.8600
G82 X-48.2600 Y27.9400
G82 X-49.5300 Y15.2400
G82 X-49.5300 Y17.7800
G82 X-50.8000 Y5.0800
G82 X-50.8000 Y10.1600
G82 X-50.8000 Y22.8600
G82 X-50.8000 Y27.9400
G82 X-51.4350 Y16.5100
G82 X-17.7800 Y5.0800
G82 X-17.7800 Y8.8900
G82 X-17.7800 Y13.9700
G82 X-17.7800 Y21.5900
G82 X-20.3200 Y13.9700
G82 X-20.3200 Y21.5900
G82 X-22.8600 Y13.9700
G82 X-22.8600 Y21.5900
G82 X-25.4000 Y13.9700
G82 X-25.4000 Y21.5900
G82 X-27.9400 Y5.0800
G82 X-27.9400 Y8.8900
G82 X-27.9400 Y13.9700
G82 X-27.9400 Y21.5900
G82 X-30.4800 Y13.9700
G82 X-30.4800 Y21.5900
M05
G00 X0.0000 Y0.0000 Z10.0000
M06 T03 ; 1.0160
G00 Z0.5080
M03
G04 P10.000000
G82 X-33.0200 Y35.5600 Z-3.0480 F100.00 R0.5080 P10.000000
G82 X-35.5600 Y35.5600
G82 X-38.1000 Y35.5600
G82 X-40.6400 Y35.5600
G82 X-43.1800 Y35.5600
G82 X-45.7200 Y35.5600
G82 X-48.2600 Y35.5600
G82 X-5.0800 Y35.5600
G82 X-50.8000 Y35.5600
G82 X-7.6200 Y35.5600
G82 X-10.1600 Y35.5600
G82 X-12.7000 Y35.5600
G82 X-15.2400 Y35.5600
G82 X-17.7800 Y35.5600
G82 X-20.3200 Y35.5600
G82 X-22.8600 Y35.5600
G82 X-2.5400 Y35.5600
G82 X-25.4000 Y35.5600
G82 X-27.9400 Y35.5600
G82 X-30.4800 Y35.5600
(File Footer)
T01
G00 Z12.7000
-------------------------------------------------------------
emc 에서 사용할 사람은 확장자만 ngc로 바꾸면될 것이다.
일단 가공한 결과는 다음에 포스팅하겠다.
#include <stdio.h>
#include <stdlib.h>
#define V_RISING (0.05) // per 1sec
#define V_BLEED (0.02) // per 1sec
#define V_TH (4.0)
#define CELL_NUM (3)
#define V_FINISH (4.2)
#define V_HYS (4.18)
int main()
{
FILE* fout = fopen("data.txt","w");
fprintf(fout,"TIME,CELL1,CELL2,CELL3\r\n");
float Vcell[CELL_NUM];
int Vcell_balance[CELL_NUM];
int balance_mode = 0;
long time = 0;
// define initial cell voltage
Vcell[0] = 3.3;
Vcell[1] = 3.5;
Vcell[2] = 3.55;
for(int i = 0;i < CELL_NUM;i++) {
Vcell_balance[i] = 0;
}
while(1) { // 1sec per 1 loop
// balance mode 인지 확인한다
// 셀중 어느 한 셀이 4.2v 에 도달하면 balance mode 로 진입한다
if(balance_mode) {
for(int i = 0;i < CELL_NUM;i++) {
if(Vcell_balance[i] == 1) {
Vcell[i] += V_BLEED;
if(Vcell[i] <= V_HYS) Vcell_balance[i] = 0;
}
}
for(int i = 0;i < CELL_NUM;i++) {
Vcell[i] += V_RISING;
if(Vcell[i] >= V_FINISH) {
Vcell_balance
}
// 모든 셀이 Vth 를 넘기면 Bleeding current 가 없다
if(Vcell[0] > V_TH && Vcell[1] > V_TH && Vcell[2] > V_TH) {
} else {
for(int i = 0; i < CELL_NUM;i++) {
if(Vcell[i] >= V_TH) Vcell[i] += V_BLEED;
}
for(int i =0; i < CELL_NUM; i++) {
if(Vcell[i] >= V_FINISH) { // 어느 하나라도 Vfinish 에 도달하면
Vcell_balance[i] = 1;
}
}
}
// 현재 전압을 프린트한다
fprintf(fout,"%d,%f,%f,%f\r\n",time,Vcell[0],Vcell[1],Vcell[2]);
// 모든 셀이 V hysterisis 를 넘기면 프로그램을 끝낸다
if(Vcell[0] > V_HYS && Vcell[1] > V_HYS && Vcell[2] > V_HYS) {
fprintf(stderr,"Finish!!\r\n");
}
}
fclose(fout);
return 0;
}