[ 융합과학 ] 과학고 R&E 결과보고서 뇌파를이용한곤충제어 연구기간 : 2013. 3. 1 ~ 2014. 2. 28 연구책임자 : 최홍수 ( 대구경북과학기술원 ) 지도교사 : 박경희 ( 부산일과학고 ) 참여학생 : 김남호 ( 부산일과학고 ) 안진웅 ( 부산일과학고 ) 장은영 ( 부산일과학고 ) 정우현 ( 부산일과학고 ) 조아현 ( 부산일과학고 )
1 - (Brain Machine Interface, BMI)., (Electroencephalogram, EEG). EEG Cyborg Bug( ).,,. Cyborg Bug. BMI.. Mind wave Headset (Neurosky, US) EEG, GUI LabVIEW Software Data Acquisition (DAQ, National Instruments, US). EEG Peak. Scanning electron microscope(sem). SEM,., Try and error method Voltage(0.9mV) frequency(10~20hz).,. BMI. - 2 -
2 1.. BMI BCI BMI Brain-Machine Interface,.,., BMI. BMI, [1],.,, [2], [3]. BCI Brain-Computer Interface,, BMI.( BMI ) 그림 1. BMI(BCI) [4] - 3 -
. EEG( ) EEG Electro Encephalo Graphy,.,. Hans Berger,. BMI, fmri.,,., fmri,. (EEG),.,,,....,. δ( ) (0.50-4Hz), θ( ) (4-7Hz), α( ) (8-12Hz), β( ) (12-30Hz), γ( ) (30-Hz)[5]. 그림 2. [6] - 4 -
,.,,.,., (Bluetooth) Neurosky BMI.. (Blinking) 그림 3.,.,. Neurosky Headset (artifact).. Raw EEG, EEG. - 5 -
. LabVIEW LabVIEW National Instruments. LabVIEW, Mindwave,. DAQ..,.,.,. ( ). - (Central Nervous System), (Visceral Nervous System), (peripheral nervous system) 3. -( ) (stomatogastric nerve), (ventral nerve), (caudal nerve), [7]... 그림 4. [8] 그림 5. [9] - 6 -
2...,, Mindwave(EEG) Control Signal. Mindwave RAW EEG, RAW EEG, (Blinking) (II-3 ) threshold, Control Signal., Control signal Labview. RS-232, NI RS-232 Basic Serial Write and Read.vi., Zigbee,, PROC 3 PWM. RS-232 Zigbee., Try and Error,.......,.,. 10 ~20.., (Dremel ). - 7 -
.. 그림 6. ➀ 그림 7. 2 그림 8. 그림 9. < 6.> < 7.>... < 8.>... SEM. SEM. 1:1 20. 20... - 8 -
. 4 4. ( ). (Dremel ) 2~3mm.. 15~20cm. 1mm. (Function generator)... (sin) (Square wave). - 9 -
3 1. INPUT, INPUT OUTPUT, INPUT Mindwave(EEG) Control Signal. RAW EEG (Blinking) (II-3 ) threshold, Control Signal.. 그림 10. Flow chart - 10 -
. 그림 11. : 그림 12. : DAQ LED, LED., Cybug RS-232, ZBS-100 Zigbee.. - 11 -
그림 13. DAQ : 그림 15. - 12 -
, PROC 5 PWM Signal.( PROC 5 PROC 3.). APPENDIX. 그림 16. / 그림 17. 2. OUTPUT... - 13 -
. A B A. + + - -. < 18.> SEM. 그림 18. [11] - 14 -
표 1. 그림 19.SEM : - 15 -
4.,. CYBUG. BMI (Artifact),,. BMI.,,.,,,.,.. - 16 -
5 Reference [1] Hochberg 11 Reach and grasp by people with tetraplegia using a neurally controlled robotic arm, 2012 [2] Yoshitsugu Yosui, A Brainwave Signal Measurement and Data Processing Technique for Daily Life Applications, Journal of Physiological Anthropology, 2009 [3] Gerwin Schalk, Dennis J. McFarland, Thilo Hinterberger, Niels Birbaumer, Jonathan R. Wolpaw, "A Genaral-Purpose Brain-Conputer Interface(BCI) System, IEEE Transactions on Biomedical Engineering VOL.51, No.6", 2004 [4] Jonghun Kim, Jun Kim, "Interactive Multimedia System Using Brain Waves", [5] NeuroSky, Brainwave EEG Signal, 2009 [6], LabVIEW, &,, 2008-17 -
6 APPENDIX < PWM embeded C > #include <device.h> /==========================================================================/ basic init= #define Freq(1000000.0)//1Mhz= #define Unit_msec (Freq/1000.0)//1msec= #define RxBufferSize20 /==========================================================================/ hw / switch= #define dig_analog (1)//PWM mode : 1, analog : 0= #define sig_rev (0) //nor : 0, rev : 1 = #define ST_code_num (0x01)//(0x01)'SOH'0000 0001=//0x01, 0x01, 0x01, 0x01};// #define END_code_num (0xFB) /==========================================================================unsigned int PWM_st_data2_end[4]=0};//ST_code 4PWM data 2end data 1 //=================================================================== PWM CY_ISR_PROTO(MyRxInt); uint8receivebuffer[rxbuffersize]; uint8*rxreadindex= ReceiveBuffer; uint8*rxwriteindex= ReceiveBuffer; uint8ischarready(void);// Returns TRUE when a char is ready uint8getrxchar(void);// Blocking get a character void PWM_AP(void); void main() CyGlobalIntEnable; Rx_Int_StartEx(MyRxInt); UART_1_Start(); Clock_1_Enable(); PWM_1_Start(); LCD_Char_1_Start(); while(1) PWM_AP(); } } CY_ISR(MyRxInt) while(uart_1_readrxstatus() & UART_1_RX_STS_FIFO_NOTEMPTY) *RxWriteIndex++ = UART_1_ReadRxData(); - 18 -
if (RxWriteIndex >= ReceiveBuffer + RxBufferSize) RxWriteIndex = ReceiveBuffer; } } uint8ischarready(void) return!(rxwriteindex == RxReadIndex); } uint8getrxchar(void) uint8result; while(!ischarready()) Wait(); Result = *RxReadIndex++; if (RxReadIndex >= ReceiveBuffer + RxBufferSize) RxReadIndex = ReceiveBuffer; return Result; } void PWM_AP(void) unsigned int ij=0, PWM_gDATA=0; unsigned int pwm_ch1_data=0, pwm_ch2_data=0; if(st_code_num == GetRxChar())//UART_1_GetChar())// PWM_st_data2_end[0]=ST_code_num; for(ij=1;ij<4;ij++) //st_cod data1 data2 end_cod end PWM_st_data2_end[ij] = GetRxChar();//UART_1_GetChar(); }//for2 LCD_Char_1_Position(0,0); LCD_Char_1_PrintInt8(PWM_st_data2_end[0]); LCD_Char_1_Position(0,3); LCD_Char_1_PrintInt8(PWM_st_data2_end[1]); LCD_Char_1_Position(0,6); LCD_Char_1_PrintInt8(PWM_st_data2_end[2]); LCD_Char_1_Position(0,9); LCD_Char_1_PrintInt8(PWM_st_data2_end[3]); PWM_gDATA = (uint8)(((float)pwm_st_data2_end[1]+(float)pwm_st_data2_end[2])/2.0); if(128==pwm_gdata) pwm_ch1_data=128; LED_0_Write(0); - 19 -
} else pwm_ch1_data=0; LED_0_Write(1); } }//for1_if if (PWM_st_data2_end[3] == END_code_num)//dataend_code PWM_1_WriteCompare1(pwm_ch1_data); //VDAC_1_SetValue(pwm_ch1_data); PWM_1_WriteCompare2(pwm_ch2_data); //DAC_2_SetValue(pwm_ch2_data); LCD_Char_1_Position(1,0); LCD_Char_1_PrintInt8(pwm_ch1_data); LCD_Char_1_Position(1,3); LCD_Char_1_PrintInt8(pwm_ch2_data); }//for2_if : cal_data else LED_0_Write(1); LED_1_Write(1); }//if-else : cal_data } //PWM_AP /* [] END OF FILE */ - 20 -