드디어 3학년 2학기가 마치고 올해 마지막 학년을 남겨두고 있는데요 이번 방학은 작년처럼 어영부영 보내지 말고 이것저것 해보자는 생각으로 학과 동기 2명과 같이 해커톤에 신청하게 되었습니다. 1월 10일 금요일 9시 건국대학교 스마트 팩토리에 도착하자마 우리 학교의 상징인(?) 초록색 옷을 입고 3D 프린터, UV평판 프린터, 레이저 커팅, 목공 등등의 장비 교육을 받고 해커톤을 진행하였습니다.
해커톤 진행 과정을 보시기 전에 먼저, "아프니까 청춘이다"라는 책 다들 읽어보셨을 텐데요 (저도 재수할 때, 힘들 때마다 읽곤 했습니다.. 하하) 이 책의 저자이신 서울대 김난도 교수님이 쓰신 "트렌드 코리아 2020 (MIGHT MICE)"에서 나온 2020 주요 트렌드 키워드를 살펴보면 아래와 같이 10가지 키워드가 있습니다.
● 멀티 페르소나(Me and Myself)
- SNS를 통한 양면성 (직장 vs 퇴근 후의 나 / SNS 다계정, 뒷 계정)
- 양면적 소비 행태(초저가 vs 프리미엄), 취향 정체성(원데이 클래스, 러닝 크루)
- 젠더 프리 트렌드(유니섹스, 탈코르셋), 디지털 허언증의 확산(브이로그)
● 라스트 핏 이코노미(Immediate Satisfaction)
- 1인 가구/밀레니얼/Z세대 → 고객의 마지막 순간 최적화하는 근거리 경제
- 쇼핑 번거로움 해소 편리한 배송(새벽 배송 / 헬로네이처 비건 / 정기구독) 목표 지점까지 접근성(당근 마켓 / 킥보드)
/ 구매 경험(언박싱, 포장 정교화)
● 페어 플레이어(Goodness and Fairness)
- 기능 중심 수평적 관계 / 계약과 매뉴얼 / 공정 평가 시스템과 서번트 리더 지향
- 공평하고 올바른 것에 대한 추구 (직장, 가사노동 / 불매운동 등)
- 구매 시 상품뿐만 아니라, 타인과 사회에 미치는 선한 영향력 중시
● 스트리밍 라이프(Here and Now)
- 밀레니얼 세대 / 소유보다 경험 / 스트리밍 하듯 가볍게 옮겨 다님
- 공간 대여(위 리브(게임)), 취향 큐레이팅(데일리 샷), 신렌털(우버 콥터)
- 판매가 아닌 서비스 접속하고 있는 기간 동안의 고객 만족도 관리 필요
● 초개인화 기술(Technology of Hyper~personalization)
- 최첨단 기술 종착지 : 실시간으로 소비자 상황과 맥락 파악 → 상품/서비스
- 모든 것의 데이터화 → AI 알고리즘 분석 → 미디어를 통한 상호 커뮤니케이션
- 기대가치 : 사용자 지원·인지·예측 / "아마존은 0.1명 규모로 세그먼트"
● 팬슈머(You're woth Us)
- 단순 선택이 아닌, 상품 생애주기 전반에 직접 참여, 간섭 견제하는 소비자층
- 클라우드 펀딩(와디즈, 기묘한 이야기), 서포터 활동(샤오미 펀, 배짱이)
- 고객과 함께 → 고객에 의해(바이미 신드롬) 가치 중요 / 인플루언서 양성 필요
● 특화 생존(Make or Break, Specialize or Die)
- 명확한 타겟팅, 선택과 집중 / Niche한 것이 Rich한 것이 된다.
- 핀셋(고객특성), 현미경(고객니즈), 컴퍼스(상권), 낚싯대(자사 역량 집중)
※ 상권 적응력 특화(매가박스 삼천포(바다 보이는 영화관), 롯데마트 해빗(유기농))
● 오팔세대(Iridescent OPAL : the new 5060 generation)
- 58년생 개띠 중심 / 활기찬 인생을 즐기는 신중년층 ※ Old People with Active Lives
- 새로운 일자리(생계수단→꿈), 여가(여행), 콘텐츠(실버서퍼, 웹버족)
- 인터넷, 신기술을 자유자재로 사용 (박막례할머니, 사딸라아저씨)
● 편리미엄(Covenience as a Premium)
- '편리한 것이 프리미엄이다' / 최소의 시간과 노력으로 최대의 효과 원함
- 수시노동 제공하는 가교노동자↑→ 수요와 공급 연결하는 앱 발달(심부름)
- 사이렌오더, 오디오북, 홈클리닝, 가사노동 대행 업체(대리주부, 부르심 등)
● 업글인간(Elevate Yourself)
- 성공보다 성장 추구 / 삶 전체의 커리어 관리(건강, 취미, 지식, 관계)
- 52시간제, 평생 직장의 축소, 고령화 급속화 → 인생의 경력관리에 중점
- 운동(나이키런, 덤벨경제) / 취미(다도클래스, 도장깨기) / 지식(밀리의서재)
건국대학교 공학혁신센터측에서 미리 사전수요조사를 진행해서 이번 해커톤의 주제는 "편리미엄" 으로 채택되었습니다. 편리미엄이란, 바쁜 일상의 시간을 아껴주는 '편리함'이 '프리미엄'이 되는 시대를 뜻하는 신조어라고 합니다. 보다 다양한 경험에 사용하는 것이 경쟁력인 시대에 귀찮은 일에 들어가는 '시간과 노력'을 줄여주기 때문에 편리미엄은 프리미엄이 될 수 있습니다. 편리미엄이 주목받는 이유는 1인 가구, 맞벌이 부부등 바쁜 소비층 증가, 인스턴트식 관계 선호, 새로운 노동유형 등장과 같이 현대에 새로운 소비자층이 생겨나면서 소비트렌드 또한 바뀌었기 때문 입니다. 편리미엄 서비스의 종류를 살펴보면 1.시간 절약형 2.노력 절약형 3.효율 극대화형 이 있고 대표적으로 신한은행sol, 마켓컬리, 카카오T_AI 추천 등등이 있습니다. 이 외에도 새벽 배송, 스마트오더, 광고 삭제 어플. 이처럼 개인의 시간을 아껴주는 편의성에 대한 관심이 나날이 높아지고 있으며, 바쁜 일상을 살아가고 스마트한 현대인들의 소비 트렌드에 ‘편리미엄’이 자리 잡고 있다고 합니다.
아래는 해커톤 세부 일정이며 무박2일간 진행하였습니다.
‘편리미엄’이라는 주제에 맞는 아이디어에 대해 여러 방면으로 구상을 해보았습니다. 그러다 이야기가 나온 것이, 요즘 식물을 많이 키우는 여러 가정집에서 각 식물별로 물을 주어야 하는 주기가 3일부터 2주까지 너무 다양하기 때문에 그 시기에 맞춰 물을 주지 못해 시드는 경우가 많다는 것이었는데요. 요즈음은 공기정화, 전시, 취미 등 각자의 목적으로 식물을 키우는 경우가 많습니다. 하지만 바쁜 현대인들이 식물을 키우기에는 지속적인 관심 없이는 힘들다는 것이라 생각하였습니다.
그리하여 출장이나 다른 바쁜 일들에도 구애받지 않고 반려식물을 쉽고 편리하게 키울 수 있도록 ‘편리하게 식물을 키울 수 있도록 자동으로 수분 공급을 해주는 장치가 있으면 어떨까?’ 라는 생각을 하였고 ‘단비’ 라는 제품을 기획하게 되었습니다. 하지만 검색 결과 시중에 이미 ‘스마트 화분’이라는 이름으로 판매되고 있는 제품을 찾을 수 있었는데, 여기서 중요한 부분은 시중에 판매되고 있는 제품과 우리가 만들 제품간의 차이와 경쟁력입니다. 시중에 판매되는 제품은 크게 두 가지인데요.
1) 조그마한 식물을 하나 넣을 수 있는 스마트 화분
2) 식물 두,세 개 정도를 심을 수 있는 스마트 화분
그러나 우리가 만들 제품의 특징은
첫째, 중앙 워터탱크 하나에서 각 식물별로 급수장치를 연결하여 1대 다 시스템을 가능하게 해줍니다. (시중 제품에서는 여러 개의 식물을 키우기 위해서는 각 식물별로 스마트 화분을 사야하므로 비용적인 측면도 있고, 각 스마트 화분별 워터탱크를 관리해야 하는 시간적인 측면도 있습니다.)
둘째, 시중에 판매되는 스마트화분과의 가격차이입니다. 시중에서 파는 스마트 화분의 경우 화분 하나당 149,000원 정도의 가격대를 형성하고 있는 것을 알게 되었습니다. 저희 제품 같은 경우 사용되는 재료를 살펴보면
시중에서 판매중인 스마트 화분
재료값(예시) : 아두이노 우노 1개(3450원), 서보모터 2개(개당 1300원) 고무호스 5M 1개(500원 이하), 토양수분센서 4개(화분 당 1080원), 수중펌프 1개(1000원), 3D프린팅 재료값 (1000원 이하) 으로 총 제작비 12870원으로 대량 제작 시 재료비를 감액 할 수 있음을 감안하면 제작 단가를 10000원 까지 낮출 수 있음을 기대할 수 있을 것 같습니다.
따라서 시중에 판매되는 스마트 화분보다 10배 이상 저렴하며 물통에 물만 채워 넣으면 각각의 토양수분센서를 통한 급수제어를 통해 여러 개의 화분을 편리하게 관리할 수 있기 때문에 충분히 경쟁력 있다고 판단되었습니다.
<아이디에이션 Form>
<기술 설명>
처음 회의 때는 워터펌프를 사용하지 않고 중력을 이용하여 물을 흘려 보내고 물을 각 화분으로 분배하는 급수 분배기를 S자 관 형태로 3D프린팅 제작하여 2개의 서보모터에 3D 프린팅으로 만든 원판 형 막을 통해 평소에는 물의 출입을 제한하고 고무 호스를 통해 물 분배기에 연결하여 토양 수분 센서에서 아두이노로 정보를 받으면 2개의 서보모터가 움직여 원하는 화분에 수분을 공급할 수 있게 할려고 했습니다. 또한 입구 부분을 일반 페트병(1.5L) 뚜껑과 맞물리게 만들어 각 가정집에 남는 페트병으로 물탱크 역할을 할 수 있게 3D설계를 할 에정이였습니다.
하지만 설계가 복잡할 뿐만 아니라 모터의 팔을 넣기 위해 구멍을 뚫어야 했는데 그렇다면 물이 샐 가능성이 농후했기때문에 다른 방안을 구상하다가 서보모터로 호스를 잡고 각도에따라 화분에 물을 분배하는 방안을 생각해내었습니다.
-초기 모델-
이러한 방식으로 화분에서 토양수분센서를 통해 물부족 정보를 받는다면 분배기에서 호스를 고정한 하나의 서보모터가 해당 화분의 구역으로 회전한 뒤 물탱크에서 하나의 워터펌프를 통해 물을 공급할 수 있게 됩니다. 그리고 실시간으로 정보를 받기위해 토양수분센서를 계속 동작시킨다면 부식의 문제가 발생하기 때문에 30분에 한번 씩 각각의 화분에 토양수분측정량 정보를 보내게 하고 지속적으로 일정한 수분량 범위를 유지할 수 있도록 하였습니다.
정해창 학우가 설계한 물 분배기 3D 모델
8시간에 걸쳐 프린팅중...
그리하여 첫째날 일정이 끝나고 동기집으로 다시 모여서 추가적인 작업을 하였습니다.
동기들 발표 준비하는동안 아두이노 센서 코딩 및 테스트하기.
그리고 둘째날에는 스마트팩토리에 가자마자 화분 및 물탱크를 배치하기 위해 외형 또한 레이저 커팅으로 제작!
저런식으로 짤라서 상자처럼 조립 가능!!
팀원들 외형제작하고 PPT발표 준비하는 모습
코드 수정중
<아두이노 소스코드>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C LCD 객체 선언
#include<Adafruit_NeoPixel.h>
Adafruit_NeoPixel strip1 =Adafruit_NeoPixel(8,9,NEO_GRB+NEO_KHZ800);
Adafruit_NeoPixel strip2 =Adafruit_NeoPixel(8,10,NEO_GRB+NEO_KHZ800);
#include <SoftwareSerial.h> // 블루투스 라이브러리 사용
#define BT_RXD 13
#define BT_TXD 12
SoftwareSerial bluetooth(BT_RXD, BT_TXD);
#include<Servo.h> //Servo 라이브러리를 추가
Servo servo; //Servo 클래스로 servo객체 생성
#include "DHT.h" // DHT.h 라이브러리를 포함한다
#define DHTPIN 2 // DHT핀을 2번으로 정의한다(DATA핀)
#define DHTTYPE DHT11 // DHT타입을 DHT11로 정의한다
DHT dht(DHTPIN, DHTTYPE); // DHT설정 - dht (디지털2, dht11)
const int trigPin = 6; //Trig 핀 할당
const int echoPin = 8; //Echo 핀 할당
int sound = 11; //사운드핀번호
double value = 0; // 각도를 조절할 변수 value
double iValue0; // 토양 ADC 값 읽기
double iValue1; // 토양 ADC 값 읽기
int iValue2; // 토양 ADC 값 읽기
int sw = 12;
int t;
int h;
long duration, distance; //기본 변수 선언
char a = 'a';
void setup()
{
Serial.begin(9600); // 9600 속도로 시리얼 통신을 시작한다
bluetooth.begin(9600); // 9600 속도로 블루투스시리얼(소프트웨어시리얼) 통신을 시작한다
pinMode(trigPin, OUTPUT); //Trig 핀 output으로 세팅
pinMode(echoPin, INPUT); //Echo 핀 input으로 세팅
pinMode(sw, INPUT_PULLUP); // 스위치 핀
pinMode(4, OUTPUT); // Motor B 방향설정1
pinMode(5, OUTPUT); // Motor B 방향설정2
servo.attach(7); //맴버함수인 attach : 핀 설정
Serial.begin(9600); //시리얼 모니터 사용 고고
strip1.begin();
strip1.setBrightness(125);
strip2.begin();
strip2.setBrightness(25);
}
void loop()
{
Temperature();
Ultra_Sonic();
Soil_Moisture();
if(distance > 20)
{
Boozer();
NeoPixel();
}
if(iValue0 > 800 && iValue0 < 1000)
{
servo.write(150);
delay(500);
digitalWrite(4, HIGH); // Motor B 방향설정1
analogWrite(3, 200); // Motor B 속도조절 (0~255)
delay(4000);
digitalWrite(4, HIGH); // Motor B 방향설정1
analogWrite(3, 0); // Motor B 속도조절 (0~255)
}
if(iValue1 > 800 && iValue1 < 1000)
{
servo.write(90);
delay(500);
digitalWrite(4, HIGH); // Motor B 방향설정1
analogWrite(3, 200); // Motor B 속도조절 (0~255)
delay(4000);
digitalWrite(4, HIGH); // Motor B 방향설정1
analogWrite(3, 0); // Motor B 속도조절 (0~255)
}
if(iValue2 > 800 && iValue2 < 1000)
{
servo.write(30);
delay(500);
digitalWrite(4, HIGH); // Motor B 방향설정1
analogWrite(3, 200); // Motor B 속도조절 (0~255)
delay(4000);
digitalWrite(4, HIGH); // Motor B 방향설정1
analogWrite(3, 0); // Motor B 속도조절 (0~255)
}
LCD();
if (bluetooth.available()) {
Serial.write(bluetooth.read());
}
if (Serial.available()) {
bluetooth.write(Serial.read());
}
delay(50);
}
void Ultra_Sonic()
{
//Trig 핀으로 10us의 pulse 발생
digitalWrite(trigPin, LOW); //Trig 핀 Low
delayMicroseconds(2); //2us 유지
digitalWrite(trigPin, HIGH); //Trig 핀 High
delayMicroseconds(10); //10us 유지
digitalWrite(trigPin, LOW); //Trig 핀 Low
//Echo 핀으로 들어오는 펄스의 시간 측정
duration = pulseIn(echoPin, HIGH); //pulseIn함수가 호출되고 펄스가 입력될 때까지의 시간. us단위로 값을 리턴.
//음파가 반사된 시간을 거리로 환산
//음파의 속도는 340m/s 이므로 1cm를 이동하는데 약 29us.
//따라서, 음파의 이동거리 = 왕복시간 / 1cm 이동 시간 / 2 이다.
distance = duration / 29 / 2; //센치미터로 환산
Serial.print(distance);
Serial.print("cm");
Serial.println();
delay(50);
}
void Blue_Tooth()
{
// 마지막에 블루투스 연결이 안되서 지웠습니다... ㅜ.ㅜ
}
void Boozer()
{
tone(sound, 500,250); // 스피커(핀번호,헤르쯔)
delay(150);
tone(sound, 0,250); // 스피커(핀번호,헤르쯔)
delay(50);
tone(sound, 500,250); // 스피커(핀번호,헤르쯔)
delay(200);
tone(sound, 0,250); // 스피커(핀번호,헤르쯔)
//delay(1000);
}
void LCD()
{
lcd.begin();
lcd.backlight(); // backstrip를 On 시킵니다.
lcd.print(t);
lcd.print("C ");
lcd.print(h);
lcd.print("% ");
lcd.print(" W:");
if(distance > 20)
{
lcd.print("BAD");
}
else if(distance <= 20 && distance > 15)
{
lcd.print("NORMAL");
}
else
{
lcd.print("GOOD");
}
lcd.setCursor(0,1); // 다음줄로 이동
lcd.print("1:");
lcd.print(int((1023-iValue0)/1023*100));
lcd.print("% ");
lcd.print("2:");
lcd.print(int((1023-iValue1)/1023*100));
lcd.print("% ");
lcd.print("3:");
lcd.print(int((1023-iValue2)/1023*100));
lcd.print("% ");
}
void Soil_Moisture()
{
iValue0 = analogRead(A0); // ADC 값 읽기
iValue1 = analogRead(A1); // ADC 값 읽기
iValue2 = analogRead(A2); // ADC 값 읽기
// 시리얼 통신으로 전송
Serial.print("A0:");
Serial.print(iValue0);
Serial.println();
Serial.print("A1:");
Serial.print(iValue1);
Serial.println();
Serial.print("A2:");
Serial.print(iValue2);
Serial.println();
//delay(200); // delay
}
void Temperature()
{
h = dht.readHumidity(); // 변수 h에 습도 값을 저장
t = dht.readTemperature(); // 변수 t에 온도 값을 저장
Serial.print("Humidity: "); // 문자열 Humidity: 를 출력한다.
Serial.print(h); // 변수 h(습도)를 출력한다.
Serial.print("%\t"); // %를 출력한다
Serial.print("Temperature: "); // 이하생략
Serial.print(t);
Serial.println(" C");
//delay(200);
}
void NeoPixel()
{
if(distance > 20)
{
for(int i = 0; i < 8; i++)
{
strip1.setPixelColor(i,255,0,0);
}
strip1.show();
}
else
{
for(int i = 0; i < 8; i++)
{
strip1.setPixelColor(i,0,0,0);
}
strip1.show();
}
//delay(1000);
}
<최종 완성품>
작동 영상
(테스트 후라 찍기전에 이미 흙이 다 적셔저서 토양센서를 좀 건드려야 했습니다)
1시 30분에 발표자료, 시제품 제출을 완료하고 1시간 뒤 시상식을 진행하였는데 금상 100만원, 은상 70만원, 동상 50만원, 장려상 20만원에서 아쉽게도 장려상으로 마무리를 하였습니다.
밤새가면서 열심히 준비했었는데 아직은 부족한 점이 많은 것 같습니다. 발표 중간에 한 학우가 한곳에만 물을 주면 물이 골고루 공급이 안 될 수도 있다고 질문을 하였는데, 그 부분에 대해서 화분 배치하는 아래쪽에 돌림판을 달아 모터로 물 공급과 동시에 돌려주는 방안으로 개선하면 좋을 것 같다고 생각하였습니다. 그리고 원격 조종 및 수분량 체크를 웹 어플로 가능하게 구현했었으면 좋았을 텐데 아직까진 어플을 개발해 본 적이 없어 그 부분에 대한 공부가 필요하다고 절실히 느꼈습니다. 그리하여 이번 방학 끝나기 전 까지 무작정 제가 만들어 보고 싶은 간단한 어플 하나를 만들어 볼 예정이고 바로바로 블로그 포스팅 할 예정입니다.
이번 해커톤을 통해 편리미엄에 대해서, 그리고 스마트 화분과 스마트 팜 시장과 기술에 대해 깊게 알게 되었으며, 원하는 하드웨어를 뽑아내기 위한 캐드나 인벤터 실력 향상의 필요성과 어플, 아두이노 데이터 통신에 관해 깊게 공부해야 한다는 것을 느겼습니다. 그리고 좋았던 점은 3D프린팅과 레이저 커팅 사용법을 배울 수 있게되서 재료만 있다면 제가 원하는 것 어떤 것이든 만들 수 있을 것만 같았습니다. 다음에 또 이러한 대회에 참여하게 된다면 아두이노로 단순히 센서로 정보받고 움직이는 것이 아닌 영상처리 데이터들을 서버에서 종합하여 판단하고 행동하는 고차원 적인 작품을 만들어 보고 싶습니다.
(+ 끝나고 회식 사진)
피곤했던 무박 2일 해커톤 뒤 고기집 회식.
'👨🏻💻Project' 카테고리의 다른 글
[Project] 네이버 로그인 페이지 제작하기 <#2 CSS로 디자인 하기> (0) | 2021.04.11 |
---|---|
[Project] 네이버 로그인 페이지 제작하기 <#1 HTML로 뼈대 세우기> (0) | 2021.04.01 |
[HTML] 간단한 회원가입 form 만들기 (0) | 2020.12.15 |
[모두의 버스 : UNIBUS 프로젝트] Python으로 공공데이터 포털 오픈API 정보 조회하기 (0) | 2020.11.21 |
[졸업작품 프로젝트] OpenCV를 이용한 자율주행차 제작 준비 (3) | 2020.04.04 |