오픈소스를 이용한 값싼 미아방지 장치


류도영




제작동기


이 제품을 만들게 된 이유는 동생이 낯선 사람을 잘 따르기 때문에 걱정되었기 때문이다.  더구나 예전에 이모가 기르던 고양이가 한눈 판 사이에 도망갔던 경험도 있다.



기존 제품의 문제점


부모님과 아이디어를 나누는 도중에 유사한 제품이 있다는 걸 알았다. 하지만 잘 사용되지 않는 것을 알게 되어 사람들에게 그 이유를 물어보았다. 그 결과는 다음과 같다.

  • 제품이 있는 줄 몰랐다: 3명

  • 비싸다: 8명

  • 필요 없을 것 같다: 4명

그래서 나는 누구나 쉽게 사용할 수 있는 값싼 미아 방지 제품을 만들고 싶었다. 게다가 평상시에 관심을 갖고 있던 아두이노를 응용하면 실용적인 제품을 만들 수 있다고 생각했다.



주요 부품 구성


이 제품을 만들기 위한 부품은 다음과 같다.  대량으로 만들면 더욱 가격이 싸진다.

  • 무선 송수신 모듈: 700원

  • 부저: 100원

  • 아두이노 칩: 820원 (2개 필요)

  • 기타

    • 건전지

    • 제품 박스



작품 요약 및 원리

아이에게 송신기를 부착하고 부모는 수신기를 지니고 다닌다. 아이가 일정 거리 이상 멀어지면, 신호가 약해지는 것을 감지해 알람을 울린다.  송신기에서는 일정 주파수의 전파를 발생한다. 전파는 멀어질수록 약해지므로 수신기에 신되는 전파가 일정 시간 내에 들어오지 않으면 알람을 울린다.



기대효과


값싸기 때문에 많은 사람들이 쉽게 사용할 수 있고, 사람이 많은 곳으로 나들이 갔을 때  안심할 수 있다. 애완견이나 자전거에도 활용 할 수 있다.



기타 아이디어


  • 수신기 쪽에는 알람과 함께 진동으로 알려준다.

  • 거리 제한을 사용자가 직접 제한할 수 있게 만든다.

  • 아이쪽에서도 알람이 울리도록 한다.

  • 미아 찾기 앱을 이용해 오픈 된 인터넷을 만나면 부모에게 위치를 알려준다.

  • 공공기관 등에서 미아 방지용으로 공유기를 오픈하는 것도 괜찮을 것 같다.




제작 과정 - 무선 모듈 테스트


[사진 1] 송신 모듈에서 데이터를 보내지 않을 때


[사진 2] 송신 모듈에서 데이터를 보낼 때


송신기와 수신기의 동작 원리를 알아보기 위해서 다음과 같이 실험을 했다.

  • 송신기를 부착한다

  • 송신기의 VCC는 빨간색 (+) 줄 아무 곳이나 끼운다.

  • 송신기의 GND는 파란색 (-) 줄 아무 곳이나 끼운다.

  • 수신기를 부착한다.

  • 수신기의 VCC는 빨간색 (+) 줄 아무 곳이나 끼운다.

  • 수신기의 GND는 파란색(-) 줄 아무 곳이나 끼운다.

  • 수신기의 DATA는 LED의 (+) 에 연결하다.

  • LED의 (-)는 파란색 줄 아무 곳에나 끼운다.

  • 이 상태에서 [사진 1]과 같이 LED에 불이 들어오는 지 확인한다.

  • 송신기의 DATA를 빨간색(+) 줄에 끼우면 신호가 전송된다.

  • 이때 수신기에 연결되어 있는 LED의 불이 밝아졌다가 꺼진다.  즉, 수신기가 신호를 받지 않을 때는 LED가 켜져 있고, 신호를 받고 있을 때는 LED가 꺼진다.



제작 과정 - 아두이노 연결


[사진 3] 수신기

  • 부저:  j9 (+) - j12

  • RF 433 MHz수신기

    • j20 - (-)

    • j21

    • j22

    • j23 - (+)

  • LED: a21 - (-)

  • 점퍼선

    • f21 - c21

    • b21 - a4


[사진 4] 송신기

  • 송신기

    • j20 - j11

    • j21 - (+)

    • j22 - (-)



[사진 5] 작게 만든 송신기


[사진 5]는 [사진 4]의 송신기를 작게 만든 것이다.  실제 사용은 팔찌 모양으로 만들고 싶다.




프로그램 설명 - 송신기


// 아두이노가 켜지면 한 번 실행 된다.

// 프로그램에 필요한 준비 작업을 하는 공간

void setup() {

 // 아두이노의 2번 핀을 출력 모드로 바꾼다.

 // 이제부터 아두이노 2번 핀에서는 전기를 내보 낼 수가 있다.

 pinMode(2, OUTPUT);

}


void loop() {

 // 2번 핀에 전기를 내보낸다.

 digitalWrite(2, HIGH);


 // 0.1초 동안 기다린다.

 delay(100);


 // 2번 핀의 전기를 끈다.

 digitalWrite(2, LOW);


 // 0.1초 동안 기다린다.

 delay(100);

}


이렇게하면 송신기에서 계속 신호가 나가게 된다.  나중에는 글자로 된 신호를 보내서 어떤 송신기가 신호를 보내는 지 확인 할 수 있도록 개선하려고 한다.




프로그램 설명 - 수신기


unsigned long old_tick;

unsigned long tick;


void setup() {

 // millis()는 아두이노가 켜진 이후 흐른 시간을 알려준다.

 // 현재까지의 시간을 old_tick에 넣어준다.

 old_tick = millis();

}


void loop() {

 // analogRead(0)은 아날로그 방식으로 0번 핀에서 전기를 읽어 온다.

 // 즉, 0번 핀으로 얼마나 큰 전기가 흘러 들어 오는 지 알 수 있다.

 // 0번 핀에 들어 오는 전기가 300보다 크다면, 현재까지의 시간을 old_tick에 넣어준다.

 if (analogRead(0) > 300) old_tick = millis();  


 // 현재까지의 시간을 tick에 넣어준다.

 tick = millis();


 // 1초 동안 신호가 없으면 4번 핀에 연결 된 부저로 100Hz의 알람을 울린다.

 if ((tick - old_tick) > 1000) {

   tone(4, 100);

 } else {

   noTone(4);

 }

}


부저가 울리면서 발생하는 잡음 때문에 알람이 울렸다가 끊어졌다가 반복된다.  이 부분은 사용에 문제가 없기 때문에 걱정하지 않아도 된다.


저작자 표시 비영리 변경 금지
신고

Posted by 류종택


티스토리 툴바