산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

뇌파로 드론 조종: EEG 센서로 마이크로 레이싱 드론 날리기

부품 및 소모품

부품 수량 비고
아두이노 MKR1000 1 3.3V 로직, WiFi 내장
마이크로 레이싱 드론 + 컨트롤러 1 조이스틱 2개(4축) 타입
커패시터 100µF 4 로우패스 필터용
저항 220Ω 4 로우패스 필터용
점퍼 와이어 12
브레드보드 1
마인드웨이브 뉴로스카이 (MindWave NeuroSky) 1 EEG 헤드셋, 블루투스

필수 도구

소프트웨어 및 온라인 서비스

프로젝트 개요

배경

드론은 매력적입니다. 멋진 기술로 프로젝트를 할 기회가 생겨 '마음으로 드론 조종'이라는 소년의 꿈을 실현해보려 합니다. 기존 튜토리얼들은 드론 직접 제작이나 통신 프로토콜 해킹에 치우쳐 있어, 컨트롤러 PCB를 디지털로 해킹하는 가장 기초적인 방법을 다루고자 합니다. 이 개념만 익히면 다양한 입력으로 드론을 제어하는 실험을 할 수 있습니다.

주의사항

필요 기술

납땜/디솔더링 경험이 필요합니다.

부품 리스트 요약

Phase 1: 드론 컨트롤러 PCB 분석 및 해킹

  1. 컨트롤러 케이스 개봉. 이 컨트롤러는 1.5V 배터리 2개(약 3.3V) 사용 → 아두이노 MKR1000 3.3V 출력과 호환. (다른 아두이노 사용 시 전압 초과 주의! 경험담: 보드 태워 먹음)
  2. 조이스틱 중간/최고/최저 전압 멀티미터로 측정해 기록.
  3. 조이스틱 부품(포텐셔미터) PCB에서 디솔더링.
  4. 조이스틱 +/− 단자 간 저항 측정 → 최대 저항값 확인.
  5. 조이스틱 +/− 자리에 측정된 저항값과 같은 저항(예: 10Ω) 납땜해 회로 완성.
  6. PCB의 +(B+), -(B-), 각 조이스틱 신호 단자에 솔리드 와이어 납땜.
뇌파로 드론 조종: EEG 센서로 마이크로 레이싱 드론 날리기
뇌파로 드론 조종: EEG 센서로 마이크로 레이싱 드론 날리기
뇌파로 드론 조종: EEG 센서로 마이크로 레이싱 드론 날리기
뇌파로 드론 조종: EEG 센서로 마이크로 레이싱 드론 날리기
뇌파로 드론 조종: EEG 센서로 마이크로 레이싱 드론 날리기
뇌파로 드론 조종: EEG 센서로 마이크로 레이싱 드론 날리기
뇌파로 드론 조종: EEG 센서로 마이크로 레이싱 드론 날리기

Phase 2: 디지털 PWM → 아날로그 전압 변환 (로우패스 필터)

아두이노 analogWrite()는 PWM(펄스 폭 변조) 신호를 출력하지만, 해킹된 PCB는 안정된 아날로그 전압을 기대합니다. DAC 칩이나 R-2R 래더 대신 로우패스 필터(RC 필터)로 간단히 구현합니다.

저항(R)과 커패시터(C)로 구성: PWM 신호가 필터를 통과하면 평균 전압(아날로그 값) 출력. 단, 전압 변화에 시간이 걸림( 서서히 변함). 이 프로젝트에서는 부품 수 최소화와 원하는 출력 범위 확보를 위해 이 방식을 채택.

뇌파로 드론 조종: EEG 센서로 마이크로 레이싱 드론 날리기
뇌파로 드론 조종: EEG 센서로 마이크로 레이싱 드론 날리기
뇌파로 드론 조종: EEG 센서로 마이크로 레이싱 드론 날리기

Phase 3: 아두이노 회로 구성

로우패스 필터 4개를 나란히 배치해 4축(스로틀, 요, 피치, 롤) 모두에 아날로그 전압 공급.

뇌파로 드론 조종: EEG 센서로 마이크로 레이싱 드론 날리기
뇌파로 드론 조종: EEG 센서로 마이크로 레이싱 드론 날리기

아두이노 PWM 핀(2,3,4,5) → 필터 → 컨트롤러 PCB 해당 신호 단자 연결. 표준 드론 레이아웃:

연결 확인 후 아두이노 스케치 업로드. 이제 아두이노가 배터리 역할을 하며 PWM으로 조이스틱 신호 모사. 이 상태에서 원하는 프로그램으로 드론 제어 가능.

뇌파로 드론 조종: EEG 센서로 마이크로 레이싱 드론 날리기
뇌파로 드론 조종: EEG 센서로 마이크로 레이싱 드론 날리기

Phase 4: 마인드 컨트롤 (Processing + 마인드웨이브)

  1. 마인드웨이브 드라이버 설치 (동봉 CD).
  2. 블루투스 페어링: 전원 버튼 3초 누르면 파란 LED 2회 점멸 → 검색 가능 상태.
  3. Processing 실행. Jorge C. S Cardoso의 MindSet 라이브러리 다운로드 후 Processing 라이브러리 폴더에 압축 해제.
  4. COM 포트 설정: 장치 관리자에서 아두이노 포트(Tools→Port), 마인드웨이브 포트(ThinkGear Connector Preferences→Options) 확인 후 코드에 반영.
    receiver = new Serial(this, "COM10", 115200); // 아두이노
    mindSet = new MindSet(this, "COM5");           // 마인드웨이브
    
  5. Processing 스케치 실행. 집중도(Attention) 40% 이상이면 드론 이륙, 집중할수록 스로틀 상승. 마음 편히 하면 착륙.
뇌파로 드론 조종: EEG 센서로 마이크로 레이싱 드론 날리기
뇌파로 드론 조종: EEG 센서로 마이크로 레이싱 드론 날리기
뇌파로 드론 조종: EEG 센서로 마이크로 레이싱 드론 날리기

결론

드론 컨트롤러(또는 일반 PCB)를 해킹해 새로운 입력을 주는 일이 얼마나 간단한지 보여드렸습니다. 이륙/착륙 외 다른 움직임도 실험으로 구현 가능합니다. 여러분의 멋진 작품을 기대합니다!

코드

Processing 마스터 (마인드웨이브 → 시리얼 전송)

/* Drone mind control
   Neurosky MindSet 헤드셋에서 집중도 읽어 8비트 정수로 아두이노 전송
   Created 21 March 2018 by Wesley Hartogs */
import processing.serial.*;
import pt.citar.diablu.processing.mindset.*;

Serial receiver;
MindSet mindSet;
int throttle = 0, yaw = 127, pitch = 127, roll = 127;

void setup() {
  size(150, 500);
  receiver = new Serial(this, "COM10", 115200);
  mindSet = new MindSet(this, "COM5");
  smooth();
  strokeWeight(5); stroke(255); strokeCap(SQUARE); fill(255);
}

void draw() {
  background(0);
  line(0, height*0.60, width, height*0.60); // 40% 기준선
  line(width*0.5, height, width*0.5, height*map(float(attentionLevel)/100, 0, 1, 1, 0)); // 집중도 바

  throttle = int(map(attentionLevel, 40, 100, 30, 255));
  throttle = constrain(throttle, 0, 255);
  pitch = constrain(pitch, 0, 255);
  roll = constrain(roll, 0, 255);
  yaw = constrain(yaw, 0, 255);

  if (receiver.available() > 0) {
    println("attentionLevel: "+attentionLevel+" throttle: "+throttle+" yaw: "+yaw+" pitch: "+pitch+" roll: "+roll);
    receiver.write("throttle: "+throttle+" yaw: "+yaw+" pitch: "+pitch+" roll: "+roll);
  }
}

void keyPressed() { // K 또는 ESC로 비상 정지
  if (key == 'k' || key == ESC) {
    if (receiver.available() > 0) {
      receiver.write("throttle: 0 yaw: 127 pitch: 127 roll: 127");
      exit();
    }
  }
}

int signalStrenght = 0, attentionLevel = 0;
public void attentionEvent(int attentionLevel_val) { attentionLevel = attentionLevel_val; }
public void poorSignalEvent(int signalNoise) {
  if (signalNoise == 200) println("Mindset is not touching your skin!");
  signalStrenght = int(map(200-signalNoise, 200, 0, 100, 0));
  println("Signal strength: " + signalStrenght + "%");
}

아두이노 스케치 (Drone Control)

/* Drone control: Processing에서 시리얼 수신 → 해킹된 컨트롤러로 PWM 출력
   아두이노 MKR1000(또는 3.3V 아두이노) 전용
   회로: 4x 로우패스 필터(100µF, 220Ω) + 해킹된 컨트롤러 */
int throttle = 0, yaw = 127, pitch = 127, roll = 127;
int throttlePin = 2, yawPin = 3, pitchPin = 4, rollPin = 5;

void setup() {
  Serial.begin(115200);
  pinMode(throttlePin, OUTPUT);
  pinMode(yawPin, OUTPUT);
  pinMode(pitchPin, OUTPUT);
  pinMode(rollPin, OUTPUT);
}

void loop() {
  if (Serial.available() > 0) {
    throttle = Serial.parseInt();
    yaw = Serial.parseInt();
    pitch = Serial.parseInt();
    roll = Serial.parseInt();
  }
  analogWrite(throttlePin, throttle);
  analogWrite(yawPin, yaw);
  analogWrite(pitchPin, pitch);
  analogWrite(rollPin, roll);
}

회로도

뇌파로 드론 조종: EEG 센서로 마이크로 레이싱 드론 날리기
뇌파로 드론 조종: EEG 센서로 마이크로 레이싱 드론 날리기

제조공정

  1. 아두이노 나노 33 BLE 센스에서 Edge Impulse로 구현하는 TinyML 언어 감지기
  2. 아두이노 나노와 MPU-6050으로 실시간 자이로스코프 게임 만들기
  3. 아두이노 디지털 주사위: LCD 기반 랜덤 넘버 제너레이터 만들기
  4. 아두이노 나노로 37개 LED 룰렛 게임 만들기
  5. ATtiny85 미니 아케이드: 스네이크 게임 - 휴대용 OLED 게임기 만들기
  6. 휴대용 거리 감지기: HC-SR04, 18650 배터리, 3D 프린트 케이스의 아두이노 나노 DIY 키트
  7. 아두이노 릴레이 제어 가습기 자동화 – 고전압 안전 설계
  8. 정밀 핸들링을 위한 고급 원격 제어 그리퍼 로봇
  9. 구리 도금 프로젝트: 아두이노 우노로 만드는 스마트 전기분해 시스템
  10. 아두이노 나노와 네오픽셀 매트릭스로 만드는 네온 퐁 게임