본문 바로가기

카테고리 없음

Teachable Machine + Arduino로 이미지 분류 AI LED 만들기

티쳐블머신 + 아두이노로 이미지 분류 인공지능 LED(신호등) 만들기

 

일단.. 여기저기서 교육용으로 가끔 쓰던 방식입니다.

보통은 마이크로비트로 많이 하는데, 마이크로비트가 어디 갔는지 안보여서 아두이노로 대신 합니다.

마이크로비트로 하면 어쨌든 확장 연결(서브모터, DC모터, LED 등)에 관한 제어를 블록 프로그래밍으로 대신할 수 있으니 편하기는 하다.

 

준비물 : 웹캠, 아두이노(우노), 브레드보드, LED와 핀 들

 

1. 먼저 아두이노를 USB에 연결한다.

가끔 연결이 실패했다고 뜨면 연결되지 않는다. 여러번 꽂아서 아두이노를 연결되도록 하여야 한다.

빨간 불빛도 정상적으로 들어와야 한다.

 

 

2. Teachable Machine에서 모델 학습을 완료한다.

ⓐ 클래스 이름은 0, 1, 2 로 지정하였고 예제에서는 가위,바위,보를 학습하였다.

ⓑ 모델 내보내기를 통해 모델을 업로드 해야한다. 복사한 주소를 가지고 있는다.

 

3. 아두이노 스케치 프로그램 설치

https://www.arduino.cc/en/software

들어가면 후원해달라고 나오는데.. 일단 just download

 

 

4. 아두이노 스케치 프로그램 테스트

ⓐ 아두이노 우노 연결 확인

ⓑ 테스트 프로그램 업로드 & 실행 (blink - 아두이노 깜빡이는 거 확인)

화살표 버튼 눌러서 실행 / 실행 확인 / 안될경우 다시 연결 / 혹시 뒤에 할 p5jsserial이 연결되어 있을 시 연결 해제 후 다시 실행

 

 

5. 아두이노 브레드 보드 조립하기

 

아두이노 7번 핀 - LED - GND ┓

                                        아두이노 GND

아두이노 8번 핀 - LED - GND ┘

 

로 연결되도록 조립하기

아두이노 이해를 위한 보드 그림

 

 

5. 아두이노 스케치에 프로그램 코딩하고 업로드하기

 

<예제 프로그램>

0이 입력되면 7번에 LED 불빛 켜기

1이 입력되면 8번에 LED 불빛 켜기

2가 입력되면 7,8번에 동시에 LED 불빛 켜기

 

char result = '0';

void setup() {
  Serial.begin(9600);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
}

void loop() {
  if (Serial.available() > 0) {
    result = Serial.read();
  }
  switch (result) {
    case '0':
      digitalWrite(7, HIGH);
      digitalWrite(8, LOW);
      break;
    case '1':
      digitalWrite(7, LOW);
      digitalWrite(8, HIGH);
      break;
    case '2':
      digitalWrite(7, HIGH);
      digitalWrite(8, HIGH);
      break;
    default:
      digitalWrite(7, LOW);
      digitalWrite(8, LOW);
  }
}

후 → 눌러 프로그램 업로드하기

 

 

6. p5js 시리얼 프로그램으로 시리얼 포트 연결하기

https://github.com/p5-serial/p5.serialcontrol/releases

 

Releases · p5-serial/p5.serialcontrol

GUI (Electron) application for use with p5.serialport - p5-serial/p5.serialcontrol

github.com

보통 윈도우 쓰실테니까.... ㅎ
실행
Select Port 에서 내 포트 (여기서는 COM4) 선택하고 Open 하기

 

 

 

7. p5.js 웹 에디터 접속하여 내 티쳐블머신 모델 올리기

(아까 학습한 모델 업로드)

Image recognition: https://editor.p5js.org/krantas/sketches/IKUf43rB
Sound recognition: https://editor.p5js.org/krantas/sketches/3wZ9hAwG

 

p5.js Web Editor

 

editor.p5js.org

 

이미지를 사용했으니 이미지 모델로 접속하기, 주소랑 port 넣기

자신의 모델과 포트 입력하기

 

8. 테스트하기

 

 

9. 기타

만약 다른 것을 제어하고 싶다면?

서보모터(아두이노)

#include <Servo.h>

Servo myservo;
char result;

void setup() {
    Serial.begin(9600);
    myservo.attach(9);
    myservo.write(90);
}

void loop() {
    while (Serial.available() > 0) {
        result = Serial.read();
        switch (result) {
            case '1':
                myservo.write(0);
                break;
            case '2':
                myservo.write(180);
                break;
        }
    }
    delay(100);
}

 

마이크로비트로도 충분히 가능하다. makecode에 시리얼포트 블록 기능이 있다.

블록 코드는 아래 동영상 참조

https://www.youtube.com/watch?v=yN8PA48zG9A