2022 부산 SW, AI 교육 고등학생 해커톤 대회 회고

김민세·2022년 12월 5일
1
post-thumbnail

▶️ 시작

학교에 대회 포스터가 붙고 2일 뒤었다. 운동을 하고 있는 나에게 친구가 찾아와 함께 나가지 않겠냐고 하드웨어와 웹을 할 줄 아는 사람이 필요하다고 제의가 들어왔고 나는 동의하고 간절한 임베디드이라는 팀이름으로 시작하게 되었다. 우리는 프론트 1명, 백엔드 1명, 하드웨어 2명으로 시작하였다.

그 중에 나는 웹디자인과 하드웨어 코딩을 맡게 되었다. 그리고 팀을 이끌어나가는 팀장이자 리더가 되었다.
대회는 좋은 환경을 만들어가는 IOT이었다.


스마트 배관공이란?

우리의 프로젝트는 스마트 배관공이다.

환경 문제 탐색

해커톤의 주제인 환경과 우리의 일상생활에서 가까운 문제가 무엇이 있을까 찾아 보았다. 그리고 나의 눈에 들어온 것은 환경부 사이트 올라온 배수구 문제였다.
환경부 사이트

개발 배경

사람이 배수구에 쓰레기를 많이 버리고 있다.
자신이 쓰레기를 버려도 막히지 않을 것이라고 생각하는 사람들이 있는데 그런 사람들이 여러 명이면 쓰레기는 늘어날 것이고 결국 배수구가 막힌다.

  • 좋지 않은 냄새가 나는 상황이 일어날 것입니다.
  • 지금도 배수구 아래 쓰레기들(담배꽁초, 과자 포장지 등) 때문에 배수구가 막히거나 수질이 안 좋아지고 있어서 피해가 큽니다.
  • 막힌 것을 뚫을 때 비용도 많이 들고 하수구가 막히면 폭우가 왔을 때 홍수가 발생할 위험이 있습니다.

프로젝트 설명

스마트 배관공은 3가지 구성되어 있다.

  • 자동으로 열리는 하수구
  • 쓰레기를 모으는 쓰레기통
  • 관리용 웹사이트

자동으로 열리는 하수구
평소에는 하수구가 열려있지 않아 쓰레기를 버리는 것을 방지한다. 비가 오거나 빗물이 고이면 하수구를 열어 물을 뺀다.

쓰레기를 모으는 쓰레기통
하수구에서 쓰레기가 빠지는 곳을 만들고 웹사이트에 얼마나 찼는지 확인

관리용 웹사이트
스마트 배관공의 현제 상태와 위치를 확인할 수 있는 스마트배관공 관리용 사이트


🛠️기술스택

언어
웹: react
서버: nest.js
하드웨어: ARDUINO

하드웨어 구성


프로젝트의 리드

나는 팀장이니 프로젝트를 개발하는 것 외에 팀을 이끌어 나가는 역할도 하였다. 내가 팀장으로 리드한 역할은 팀원들의 멘탈 관리와 프로젝트 진행상황 확인 및 팀원들간의 소통 원할하게 하기였다.


💻개발하기

시작하기
디자이너가 없는 우리팀에서 피그마를 해본 경험이 있는 내가 웹디자인을 하게 되었다. 디자인을 해본 적이 없는 나는 간단하게 디자인을 하고 아두이노 코딩에 들어갔다.

난관 봉착
아두이노를 코딩을 하며 난관을 만났다. 수분 센서와 서보 모터를 제어하는 것은 금방 끝났다. 하지만 ESP8266을 통해 웹사이트에 값을 넘겨주는 것에서 어려움을 느끼게 되었다. 1시간 동안 수많은 시도와 구글링을 하였지만 성공하지 못했고 실패함에 의한 피로와 멘탈 공격에 의해 너무 힘이 들었다.

개발 성공
계속한 시도를 통해 client.println을 응용하여 웹사이트에 값을 보내는 것을 성공했다. 그 성공을 했을 때의 짜림함은 그동안의 피로와 멘탈 공격이 없어지는 것 같았다.

코드

#include <ESP8266WiFi.h>
#include <ArduinoJson.h>
#include <Servo.h> // servo library  
#define SensorPin A0  // used for Arduino and ESP8266
//#define SensorPin 4  // used for ESP32
#define SOUND_VELOCITY 0.034
#define CM_TO_INCH 0.393701

long duration;
int distanceCm;
float distanceInch;
Servo s1;
Servo s2;
const int trigPin = 12;
const int echoPin = 14;
String jsondata = ""; 
String li = "";
int status = WL_IDLE_STATUS;
WiFiClient client;

 StaticJsonBuffer<200> jsonBuffer;
 JsonObject& root = jsonBuffer.createObject();
   int re = client.connect(서버 보안);

void sonarValue(){
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  // Sets the trigPin on HIGH state for 10 micro seconds
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  
  // Reads the echoPin, returns the sound wave travel time in microseconds
  duration = pulseIn(echoPin, HIGH);
  
  // Calculate the distance
  distanceCm = duration * SOUND_VELOCITY/2;
  
  // Convert to inches
  distanceInch = distanceCm * CM_TO_INCH;
  
  // Prints the distance on the Serial Monitor
  Serial.print("Distance (cm): ");
  Serial.println(distanceCm);
  Serial.print("Distance (inch): ");
  Serial.println(distanceInch);
}

void setup() {
  Serial.begin(115200);
  pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
  pinMode(echoPin, INPUT); // Sets the echoPin as an Input
  s1.attach(0);
  s2.attach(2);
  WiFi.begin(보안);
  Serial.print("Connecting");
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println();
  Serial.print("Connected, IP address: ");
  Serial.println(WiFi.localIP());
}


void loop() {
  Serial.println(analogRead(SensorPin));
  sonarValue();
  if(analogRead(SensorPin)>400){
    s1.write(180); 
    s2.write(180);
    root["openStatus"] = true;
  }
  else{
    s1.write(0);
    s2.write(0); 
    root["openStatus"] = false;
  }
  jsondata = "";
  root["garbageAmount"] = distanceCm;
  root.printTo(jsondata);
  re = client.connect("보안);
  if (re) {
    client.println("POST 보안/1 HTTP/1.1");
    client.println("Host: 보안");
    client.println("Cache-Control: no-cache");
    client.println("Content-Type: application/json");
    client.print("Content-Length: ");
    client.println(jsondata.length());
    client.println();
    client.print(jsondata);
    li = client.readString();
    Serial.println(li);
  }
  Serial.println("good");
} 

🏆해커톤 결과

우리팀은 장려를 받았다. 노력을 다 같이 많이 했고 기대하였지만 장려를 받아서 아쉬움이 있었지만 노력의 성과가 있어 좋은 것 같다.

느낀점

개발을 하는데 어려움을 많이 겪은 해커톤이었던 것 같다. 내가 팀장으로써 팀원들을 조율하는 일을 많이 하였지만 내가 멘탈이 많이 흔들리고 있을 때 주위의 팀원들이 내 멘탈을 많이 회복시켜주어 좋았던 것 같다. ESP8266 제어법 등 많은 것들을 알게 되었지만 가장 많이 깨우친 것은 팀원들과 단합이 정말 중요하다는 것을 알게되었다.

profile
김민세

1개의 댓글

comment-user-thumbnail
2022년 12월 27일

좋은글이네요 화이팅 하세요!!!

답글 달기