아두이노를 이용한 음식 탐지기

by 하민정 | 2017-01-05 16:41
iot 스마트홈 아두이노 음식탐지기 특이한프로젝트

재료

  • 저항기 10k 옴 1개
  • 점퍼 와이어 1개
  • 표준 LCD 1개
  • 아두이노 우노 1개
  • 브래드 보드 1개

                    


아두이노를 이용해서 다양한 전자 제품들을 만들어 보는 것이 익숙하지만,

조금 다른 프로젝트를 Hackster 에서 접하였습니다.

이 프로젝트는 아두이노를 음식 판별하는데 응용한 것으로 흥미로운 주제였습니다. 


선천적으로 몸에 맞지 않은 음식물이나,

후천적으로 체질이 변하여 몸에 맞지 않은 음식들이 생기기 마련입니다.

음식물을 매번 확인하기 어려울때 이 프로젝트를 응용해

자신이 피해야 할 음식을 쉽게 확인 할 수 있습니다




'Food Detector : By Measuring Resistances' 라는 흥미로운 동영상이 있습니다. 

동영상 속 사람들이 선반에 놓여진 다양한 음식들에 전류계를 가져다 대 보고, 

앞에 놓여진 화면에는 이것이 어떤 음식인지를 판별해 알려줍니다. 


동영상 속의 튜토리얼을 알아내진 못하였지만, 이를 통해 새로운 프로젝트의 영감을 받았습니다. 

음식들은 서로 다른 저항을 갖고 있고,이를 응용해 어떤 음식인지를 판별할 수 있을 것이라는 것이죠. 


따라서 아두이노와 10k 옴 저항을 이용해 간단한 과일과 야채들을 구별해 내는

정말 간단하지만 흥미로운 프로젝트를 진행하였습니다. 


Step 1. 준비물 


- 아두이노 우노 

- 저항기 10k 옴 

- 표준 LCD 

- 브래드 보드 

- 점퍼 와이어 


Step 2. 하드웨어 연결방법 



10k 옴의 저항기를 아두이노의 A0에 연결합니다. 그리고 5V 를 탐침에 연결합니다.

탐침 연결을 위해 절연체를 먼저 5V에 절연체를 연결하고 이것에 탐침을 연결하도록 했습니다. 

그리고 우리가 식별하고 싶은 과일을 하나 준비합니다. 


이때 탐침을 넣기 쉬운 과일로 준비하면 보다 정확히 식별 할 수 있겠죠? 


Step 3. 코드 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
const int frootSense = 0;
int frootResistance, high = 0, low = 1023;
int frootDetect;
 
#include <LiquidCrystal.h>                   
LiquidCrystal lcd(12,11,5,4,3,2);          
void setup(){
Serial.begin(9600);
lcd.begin(16, 2);                      
lcd.clear();                            
}
 
void loop()
{
lcd.clear();                    
lcd.setCursor(0,0);        
lcd.print("Food Detect:");         
lcd.setCursor(0,1);              
frootResistance = analogRead(frootSense);
Serial.print("Resistance:");
Serial.print(frootResistance);
Serial.print("\n");
if (frootResistance>400 & frootResistance<700){
Serial.print("Cucumber \n");
lcd.print("Cucumber");     
}
else if(frootResistance>140 & frootResistance<300){
Serial.print("Apple");
lcd.print("Apple");    
}
else {
Serial.print("No Food \n");
lcd.print("No Food");     
}
delay(1000);
}
cs


'음식 각각은 모두 다른 저항을 갖고 있다는 사실' 을 이용해 

각 과일을 구별해 낼 수 있도록 if 문과 else 문으로 구분지었습니다. 


⓵ 먼저, 각각의 음식들이 어떤 저항 범위를 갖고 있는지를 조사하기 위해

아두이노의 시리얼 입출력을 이용합니다. 


1
2
3
4
frootResistance = analogRead(frootSense);
Serial.print("Resistance:");
Serial.print(frootResistance);
Serial.print("\n");
cs


⓶ 해당 저항 범위를 구하면 각각에 이름을 붙여 어떤 음식의 저항 값인지로 구별해 놓습니다. 


1
2
3
if (frootResistance>400 & frootResistance<700){
Serial.print("Cucumber \n");
lcd.print("Cucumber");    
cs


이 프로젝트에서는 오이, 딸기, 사과를 이용해 프로젝트가 잘 구별해 내는지 테스트 했는데, 

오이와 딸기의 경우엔 일정 범위의 저항 값을 갖고 있어서 상관이 없었지만, 

사과의 경우 화학적 작용으로 갈변 하는 경우가 생겨서 저항으로 판별하는 이 프로젝트에서

오차의 주범이기도 했습니다.

따라서 이 프로젝트의 경우 공기중에 화학적 작용으로 저항 값이 변하는 음식물을 제외한 경우에만

오차 없이 진행 될 수 있음을 주의하시길 바랍니다. 


⓷ 판별하고 싶은 과일에 탐침을 넣고, 나오게 되는 저함의 범위에 우리가 설정한 음식이 있다면

그것을 시리얼 출력에도 내보내지만, 연결한 LCD 화면에 무엇인지 출력하도록 만들었습니다. 


LCD를 활용하기 위해서 LiquidCrystal.h 라는 라이브러리를 사용했습니다. 

이 라이브러리의 내부 함수인 print를 이용해 LCD 화면에 출력될 수 있도록 하였습니다. 


LCD를 굳이 이용하지 않는 경우에도 Serial.print( )로 시리얼 통신을 이용해 출력해 주었습니다. 


Step 4. 수행결과 







댓글 2

MADE BY