[ AI 연계 메이커 연수 5일차 중등 ]
주강사 : 상암고등학교 교사 성원경
실습강사 : 서울인공지능고등학교 고성훈, 서울전자고등학교 홍성수
👉 수업 시작 전 사전과제
1. VSCODE 설치 후 파이썬 개발 환경 구축
2. 아나콘다 설치하기
주의) 설치시 PATH enviroment variable에 꼭 클릭을 해주어야 한다. (그냥 다음 계속 누르기 금지)
3. 아두이노 IDE 설치하기
👋오늘 메이커 프로젝트 진행 방향
[오리엔테이션] AI 메이커 프로젝트의 이해
1. 프로젝트 목표 확인 및 팀 구성
2. 아두이노 - 서보모터 제어 실습
3. 재활용품을 활용한 로봇팔 하드웨어 제작
4. 음성 인식 모델 - 파이썬 - 아두이노 연동하기
5. 결과 공유 및 피드백
😄 수업 시작 전 체크 리스트 : 아래 링크 Click !
오리엔테이션. AI 메이커 프로젝트에 대한 이해
1단계. 프로젝트 목표 확인 및 팀 구성
스마트폰 <-> 사진 기록은 아래 링크 활용
팀 구성 및 과제 제출처
2단계. 아두이노 서보모터 제어
실습 1. 서보모터 1개 제어하기
- 회로
- 코드 원본
#include <Servo.h>
Servo servo;
int value = 0;
void setup() {
servo.attach(7);
}
void loop() {
value = 0;
servo.write(value);
delay(500);
value = 90;
servo.write(value);
delay(500);
value = 179;
servo.write(value);
delay(500);
}
실습 2. 서보모터 2개 시리얼 통신으로 제어하기
- 회로
- 코드
#include <Servo.h> //헤더파일 포함
Servo servo1; //servo1 변수 선언
Servo servo2; //servo2 변수 선언
int motor1 = 3; //motor1을 입출력 3번 핀에 연결
int motor2 = 5; //motor2을 입출력 5번 핀에 연결
int angle1 = 90; //초기 각도값 설정
int angle2 = 90; //초기 각도값 설정
void setup() {
servo1.attach(motor1); //servo1에 입출력 3번 핀을 지정
servo2.attach(motor2); //servo2에 입출력 5번 핀을 지정
Serial.begin(9600); //시리얼 모니터 사용
Serial.println("Enter the w,a,s,d ");
}
void loop() {
if(Serial.available()) //시리얼 통신이 가능할 경우
{
char input = Serial.read(); //시리얼 모니터 입력 값을 읽어옴
if(input =='w') //입력값이 W일 경우
{
Serial.print("+30");
for(int i = 0; i <30; i++) // 30번 반복
{
angle1 = angle1 + 1; // angle1의 값에 1씩 30번을 더함
if(angle1 >=180) // angle1이 180보다 커지거나 같아질 경우
angle1 = 180; // angle1을 180으로 고정
servo1.write(angle1); // servo1을 angle1 값에 맞추어 동작
delay(10);
}
Serial.print("\t\t");
Serial.println(angle1);
}
else if(input =='a') //입력값이 a일 경우
{
Serial.print("+30");
for(int j = 0; j <30; j++)
{
angle2 = angle2 + 1;
if(angle2 >=180)
angle2 = 180;
servo2.write(angle2);
delay(10);
}
Serial.print("\t\t");
Serial.println(angle2);
}
else if(input == 's') //입력값이 s일 경우
{
Serial.print("\t-30\t");
for(int i = 0; i <30; i++) // 30번 반복
{
angle1 = angle1 -1; // angle1의 값에 1씩 30번을 빼기
if(angle1 <= 0) // angle1이 0보다 작아지거나 같을 경우
angle1 = 0; // angle1을 0으로 고정
servo1.write(angle1); // servo1을 angle 값에 맞추어 동작
delay(10);
}
Serial.println(angle1);
}
else if(input == 'd') //입력값이 d일 경우
{
Serial.print("\t-30\t");
for(int j = 0; j <30; j++)
{
angle2 = angle2 -1;
if(angle2 <= 0)
angle2 = 0;
servo2.write(angle2);
delay(10);
}
Serial.println(angle2);
}
}
}
- 코드 업로드 후 시리얼 모니터에서 코드 동작 확인 -> 서보모터 2개 동작 확인
그 외에 3축, 4축 서보모터에 제어 코드와 위 코드 상세 설명은 아래 링크 확인.
3단계. 재활용품을 활용한 로봇 하드웨어 제작
- 앞에 주어진 재료를 활용하여, 로봇팔 하드웨어를 제작하시오.
- 본인이 가지고 온 재활용품을 활용하여 하드웨어 제작 가능합니다.
- 글루건을 사용 할때는 화상의 위험이 있으니 주의합니다.
- 아이스크림 바에 송곳으로 구멍을 뚫을 때는 테이프를 붙여서 뚫어서 금가지 않도록 합니다.
- 구멍에는 이쑤시개나 클립을 롱로즈로 펴서 꼿아서 회전축을 만든 뒤 니퍼로 나머지 부위를 잘라줍니다.
4단계. 음성 인식 모델 - 파이썬 - 아두이노 연동하기
🤓혹시 파이썬 가상환경에 대한 이해가 없다면 아래 자료 확인(그림 클릭)
VSCODE 터미널 가상환경(python3.6버전 및 pyaudio 패키지 설치) 생성 명령어
# 파이썬 3.7버전 가상환경 생성 및 활성화
conda create -n pyaudio37 python=3.7
y
conda activate pyaudio37
# 필요 패키지 설치
pip install pyaudio
pip install SpeechRecognition
# 동작 테스트
python test.py # 현재 코드가 있는 파일명, 각자 다를 수 있음.
음성테스트 코드 : test.py
import speech_recognition as sr
# 인스턴스 생성
r = sr.Recognizer()
# 마이크 설정
microphone = sr.Microphone(sample_rate=16000)
# 마이크 소음 수치 반영
with microphone as source:
r.adjust_for_ambient_noise(source)
print("주변 소음 수치 {}".format(r.energy_threshold))
# 음성 수집해서 텍스트로 변환
with microphone as source:
print("말씀하세요.")
result = r.listen(source)
text = r.recognize_google(result, language='ko')
#변환된 텍스트 출력
print(text)
- 가상환경 활성화 및 패키지 설치 화면 예시
- 테스트 화면 : 내장 혹은 외장 마이크 있어야 함
- 아두이노와 파이썬 음성인식 시리얼 통신 연결 코드 : 아두이노 포트 COM7 부분과 보내는 신호 갯수 및 종류 변경해서 써야 함.
예시 : ser.write(b'z') -> ser.write(b'a')
import speech_recognition as sr
import time
import serial
ser = serial.Serial('COM7',9600)
r = sr.Recognizer()
microphone = sr.Microphone(sample_rate=16000)
try:
while True:
with microphone as source:
r.adjust_for_ambient_noise(source)
print("소음수치 {}".format(r.energy_threshold))
with microphone as source:
text=None
print("말씀하세요.")
result = r.listen(source)
try: #음성 인식이 잘 안될 경우 UnknownValueError 예외가 발생, 예외 처리 추가(시작)
text = r.recognize_google(result, language='ko') #UnknownValueError 발생 코드
print(text)
if '왼' in text:
ser.write(b'z')
print('왼쪽으로.')
elif '오' in text:
ser.write(b'c')
print('오른쪽으로.')
elif '위' in text:
ser.write(b'w')
print('위로')
elif '아래' in text:
ser.write(b's')
print('아래로')
elif '올려'in text:
ser.write(b'd')
print('더 위로')
elif '내려'in text:
ser.write(b'a')
print('더 아래로')
elif '잡아' in text or '자' in text or '바' in text:
ser.write(b'e')
print('물건 잡아')
elif '풀어'in text or '놔' in text:
ser.write(b'q')
print('물건 풀어')
except sr.UnknownValueError: #UnknownValueError 예외 발생할 경우 메시지 출력
print("다시 말씀하세요")
except KeyboardInterrupt:
print('ctrl + c 중지 메세지 출력')
print('프로그램을 종료합니다')
동작 예시
5단계. 결과 공유 및 피드백
과제 제출처 : 과제 제출 후 다른 팀 과제 코멘트 달기
@ Wonking AI Maker Class 2023
컨텐츠 제작
주 집필자 : 상암고등학교 교사 성원경
도움을 주신 분들
소스코드 작성 : 송례중학교 교사 곽정근(서울시교육청)
강의 컨텐츠 구성 및 실시 : 서울인공지능고등학교 교사 고성훈, 서울전자고등학교 교사 홍성수
하드웨어 제작 : 서울문화고 교사 이상훈, 신림고등학고 교사 정태우, 상문고등학교 교사 신규하, 영일고등학교 교사 박철희
'메이커 프로젝트' 카테고리의 다른 글
라즈베리파이 피코 RC카 제작하기 - 블루투스 제어 버전 (0) | 2023.11.15 |
---|---|
얼굴 트래킹 레이저 건 메이킹 자료 (5) | 2022.11.08 |
[AI 메이커 특강] 경기기계공업고등학교 미니 로봇 음성제어 프로젝트 자료 (0) | 2022.11.02 |
라즈베리파이 설치 안내 및 스마트 액자 만들기 강의자료 (0) | 2022.09.29 |
음성으로 로봇 팔 제어하기 (17) | 2022.07.16 |