교육 프로그램
home
선생님 도입 커리큘럼
home
🍩

7조 - 동그랑땡

삼각형을 누르면 목차가 나와요 클릭하면 바로 이동합니다!

우리 팀을 소개합니다

팀원 소개

전동킥보드 VVS! (Very Very Safely!)

문제의 발견

택시와 도보 중간 정도의 이동수단인 전동킥보드의 사용이 증가함에 따라 사고도 많이 발생하고 있다. 법이 있어도 가까운 거리(캠퍼스 내)니까 나는 안걸리겠지라는 생각으로 관련 법들을 무시하는 경우가 있다.

그래서 우리가 찾은 해결 방법은!

1. 탑승자와 시민들 또는 차량과의 접촉사고를 방지하기 위해서 일정거리 가까워졌을 때 위험신호를 줄 수 있는 소리장착 및 자동 속도제어 장치를 생각했습니다.
⇒ 초음파센서를 이용하여 거리를 측정하고 피에조부저를 통해 위험신호를 알림과 동시에 모터의 자동 강제 속도제어를 할 수 있는 장치
2. 밤 또는 어두운 곳에서 전동킥보드가 운행하고 있다는 것을 알 수 있게하기 위해서 자동으로 불이 켜졌다, 꺼졌다 할 수 있는 점멸등을 생각했습니다.
⇒ 조도센서를 이용하여 주위의 밝기를 인지하고 자동으로 LED등을 켜고 꺼지는 장치
3. 전동킥보드 사용 시 2인 이상 탑승하여 운행을 할 수 없도록 하는 장치를 생각했습니다.
⇒ 적외선센서를 이용하여 2명이 탑승했다는 것을 인지하여 모터가 작동하지 않도록 만든 장치

이렇게 만들었어요 (회로도 + 시연 영상)

1. 오토라이트
2. 센서 이용 탑승 제한 - 2인 탑승 금지
3. 자동 감속 장치
4. 시연영상
코딩
1.
오토라이트
// 오토라이트: 조도센서를 이용한 자동 점멸등 // 각 센서 및 액츄에이터 핀 설정 int rLED1 = 2, rLED2 = 3; void setup() { //시리얼 통신 설정 Serial.begin(9600); //핀모드 설정 pinMode(A0 + 0, INPUT); pinMode(rLED1, OUTPUT); pinMode(rLED2, OUTPUT); } void loop() { // 조도센서로 주위 밝기를 입력 시리얼 모니터에 출력 Serial.println(analogRead(A0 + 0)); delay(100); if (analogRead(A0 + 0) > 600) { digitalWrite(rLED1, HIGH); // 어두워지면 자동으로 붉은색 LED 켜기 digitalWrite(rLED2, HIGH); // } else { digitalWrite(rLED1, LOW); // 밝아지면 자동으로 붉은색 LED 끄기 digitalWrite(rLED2, LOW); // } }
C
2.
센서 이용 탑승제한
//적외선 센서로 장애물 감지에 따른 DC모터 제어 int irPin = A0; int MotorA_SPEED_PIN = 10; int MotorB_SPEED_PIN = 11; int MotorA_DIRECTION_PIN = 12; int MotorB_DIRECTION_PIN = 13; int distance = 0; // 거리값을 저장할 변수 void setup() { pinMode(irPin, INPUT); pinMode(MotorA_SPEED_PIN, OUTPUT); // 모터 속도 pinMode(MotorB_SPEED_PIN, OUTPUT); pinMode(MotorA_DIRECTION_PIN , OUTPUT); // 모터 방향 pinMode(MotorB_DIRECTION_PIN , OUTPUT); //시리얼 통신 설정 Serial.begin(9600); //PC와의 시리얼 통신속도를 9600bps로 설정 } void loop() { int volt = map(analogRead(A0), 0, 1023, 0, 5000); // 0~1023 사이 값을 갖는 아날로그 신호값을 // 0~5000 (5V) 사이 값으로 변환 distance = (27.61 / (volt - 0.1696)) * 1000; // 읽어들인 Voltage 값을 거리값(단위: cm)로 변환하는 공 Serial.print(distance); //거리값을 시리얼모니터로 출력해줍니다. Serial.print(" cm"); Serial.println(" "); delay(100); if(distance <= 5) { digitalWrite(MotorA_DIRECTION_PIN, LOW); // 모터 방향 analogWrite(MotorA_SPEED_PIN, 0); // 모터 속도 digitalWrite(MotorB_DIRECTION_PIN, LOW); analogWrite(MotorB_SPEED_PIN, 0); } }
C
3.
자동 감속 장치
// 초음파센서로 거리에 따라서 LED 제어 및 피에조부저 소리 발생 그리고 DC모터제어 // 초음파센서로 거리 측정하여 I2C LCD로 출력하기 #include <Wire.h> #include <hd44780.h> #include <hd44780ioClass/hd44780_I2Cexp.h> hd44780_I2Cexp lcd; //LCD 객체 // 각 센서 및 액츄에이터 핀 설정 int trig = 8, echo = 7; // int piezo = 4; int melody[4] = {523, 494, 440, 392}; int MotorA_SPEED_PIN = 10; int MotorB_SPEED_PIN = 11; int MotorA_DIRECTION_PIN = 12; int MotorB_DIRECTION_PIN = 13; void setup() { //시리얼 통신 설정 Serial.begin(9600); //LCD 통신 사용 lcd.begin(16,2); //핀모드 설정 pinMode(trig, OUTPUT); pinMode(echo, INPUT); pinMode(piezo, OUTPUT); pinMode(MotorA_SPEED_PIN, OUTPUT); pinMode(MotorB_SPEED_PIN, OUTPUT); pinMode(MotorA_DIRECTION_PIN , OUTPUT); pinMode(MotorB_DIRECTION_PIN , OUTPUT); } void loop() { //초음파 이동 시간과 거리를 저장할 변수 선언 float distance, duration; //초음파 발사 digitalWrite(trig, HIGH); delay(1); digitalWrite(trig, LOW); //이동시간 구하기 duration = pulseIn(echo, HIGH); //거리 구하기 //시간을 거리로 cm단위 환산 distance = ((float)(duration * 340) / 10000) / 2; //시리얼 모니터에 거리 출력 Serial.print("거리 : "); Serial.print(distance); Serial.println("cm"); delay(100); // 딜레이 설정 1000=1초 { lcd.clear (); // LCD 출력내용 지우기 lcd.setCursor (0, 0); //LCD 내용 출력 위치 Cursor 설정 (첫번째 행, 첫번째 열) lcd.print ("distance:"); lcd.print (distance); lcd.print ("cm"); delay(200); } if (distance <= 30) { lcd.setCursor (1,1); //LCD 내용 출력 위치 Cursor 설정 (두번째 행, 두번째 열) lcd.print("stop stop stop"); delay(200); } else { lcd.clear (); // LCD 출력내용 지우기 } //거리에 따라서 도레미파 소리내기 (10cm 간격) if(distance <= 30) { int i; //인덱스로 사용할 변수 //map()함수를 사용하여 거리에 따라 인덱스 설정 i = map(distance, 0, 30, 0, 3); tone(piezo, melody[i], 250); delay(300); } else { noTone(piezo); } if(distance <= 40) { //map()함수를 사용하여 거리에 따라 인덱스 설정 int motorValue_2 = map(distance, 0, 40, 0, 110); //거리에 따라 DC모터 속도가 서서히 변경 digitalWrite(MotorA_DIRECTION_PIN, LOW); // 모터 방향 analogWrite(MotorA_SPEED_PIN, motorValue_2); // 모터 속도 digitalWrite(MotorB_DIRECTION_PIN, LOW); analogWrite(MotorB_SPEED_PIN, motorValue_2); } else{ digitalWrite(MotorA_DIRECTION_PIN, LOW); // 모터 방향 analogWrite(MotorA_SPEED_PIN, 100); // 모터 속도 digitalWrite(MotorB_DIRECTION_PIN, LOW); analogWrite(MotorB_SPEED_PIN, 100); } }
C

이러한 효과를 기대하고 있어요!

사회적 효과 이용자 - 기본적으로 전동 킥보드를 이용하는 이용자의 운전을 보조하고, 금지된 행동을 막아 연령대나 운전의 숙련도와 상과없이 운전 중 안전함을 제공합니다. 기업 - 기업에게는 이용자의 부주의한 사용을 막고, 공유 킥보드의 부정적인 인식을 개선함으로써 고객층의 확장을 유발합니다. 이에따라 기업은 시장의 확대와 시장내 점유율을 높이는 효과를 얻을 수 있을 것으로 생각됩니다. 관리자(정부) - 공유 킥보드 이용자의 사고를 예방하고, 차도와 도로의 혼란을 막을 수 있습니다. 안전한 공유 킥보드 운영은 지역내 대중교통 수단이 다양하지 않은 중소 도시에 새로운 교통 수단이 될 수 있습니다.
비즈니스 모델 - 공유 킥보드 시장의 성장과 고객군을 넓히고 싶어하는 국내 20개 공유 킥보드 업체 - 지역내 공유 킥보드와 협력하여 대중교통 수단을 다양화 하고 싶어하는 지자체 - 전동 킥보드를 소유하고 운영하고 있는 개인

발표 자료가 궁금하다면?

7조 동그랑땡 발표 자료.pptx
55080.4KB

appendix

12주 간의 기록을 더 자세히 보고 싶다면?

12주간의 여정을 통해 느낀 점

아래 카드의 이모지를 누르면 바꿀 수 있어요!
김민교
매주 블록 코딩을 통해 아두이노를 접해 볼 수 있는 좋은 기회였습니다. 그렇다고 아두이노를 활용함에 있어 자신감이 생기는 드라마틱한 일은 없었습니다. 다만 문제를 고민하고 해결하는 것에 아두이노를 이용하는것, 혹은 해커톤은 너무 너무 재밌는 일이라 생각하게 됐습니다. 조장님과 지윤님 덕분에 공유 전동킥보드에 대해 고민하고 해결책을 제시하는 꽤나 긴(?) 여정을 잘 마칠 수 있었습니다. 또한 너무 많은 도움을 주셨던 멘토분들 특히 범진님 너무 너무 감사합니다ㅠㅠ
정지윤
단순하게 문제를 해결하는 것이 아닌 팀원들과 함께 5why기법을 사용하여 지역의 문제에 대해 깊게 고민을 해보고 이를 바탕으로 정말 필요한 해결방안을 찾아 해결한 거 같아 뿌듯했습니다!!
박상현
걱정 반 기대 반으로 시작했던 이번 아두이노 수업에서 정말 잘 선택했다는 생각이 들 정도로 재미있었고 특히 정해지 틀에서 어떤 것을 만드는 게 아닌 내가 생각하고자 한 것을 여러 번 시도해보면서 성공적으로 완성했을 때 그 성취감이 너무 뿌듯했습니다. 그리고 혼자서 문제를 해결해 나가는 것이 아닌 팀원들과 소통하면서 함께하는 시간이 있어서 더 뜻깊었던 것 같습니다.