제조공정
| 아두이노 UNO | × | 1 |
| 점퍼 와이어 (범용) | × | 25 |
| 브레드보드 (범용) | × | 1 |
| 로터리 포텐셔미터 10kΩ | × | 1 |
| Adafruit RGB 백라이트 LCD - 16x2 | × | 1 |
| 스루홀 저항 220kΩ | × | 1 |
| Diymall 전압 센서 DC 0-25V | × | 1 |
| DROK 신호 증폭기 AD620 | × | 1 |
| 컵 블레이드 풍속계 (아네모미터) | × | 1 |
| 납땜 인두 (범용) |
가정용으로 사용할 수 있는 풍량계(airflow flowmeter) 제작 과제가 주어졌습니다. 불행히도 현재 HVAC 업계에서 판매되는 풍량 감지 장치는 모두 산업용 시스템용으로 설계돼 있습니다. 현재 산업용 레지스터의 풍량을 계산하는 장치들은 가정용 레지스터에는 너무 크거나, 가정용 HVAC 시스템의 적은 풍량 출력을 측정하지 못합니다.
공기 흐름에서 신호를 생성하기 위해 컵 아네모미터를 사용해 공기를 포착했습니다. Autodesk Inventor로 맞춤형 3D 프린팅 블레이드를 제작해 팬 블레이드의 공기 포집 성능을 최적화했습니다. 아네모미터를 담을 인클로저도 3D 프린팅했습니다.


아네모미터가 출력한 신호를 읽기 위해 전압 센서를 선택했습니다. 센서 신호는 전압 센서에서 더 정확한 읽기를 위해 증폭이 필요했습니다. 증폭기는 아네모미터의 출력 전압을 10배 증폭합니다. 이 증폭 배율은 입력 전압에 따라 1.5배에서 1000배 사이로 조절 가능합니다.
아두이노 우노로 전압 센서의 아날로그 신호를 읽고 LCD 화면에 표시할 내용을 제어했습니다. 이 문제에서는 풍속을 CFM(분당 입방피트)로 표시하고자 했으므로 화면에 CFM으로 표시되게 했습니다.
전자부품
첫 단계는 아네모미터부터 시작합니다. 아래는 장치 사진들입니다.


"아네모미터 탑 뷰" 이미지를 보세요. 블레이드가 아네모미터에 연결되는 부분이 L자형이고 매우 얇습니다. 고속에서 견디기 어려우니 여기서 새로운 블레이드를 설계했습니다. 더 두꺼운 블레이드와 더 견고한 핸들 디자인을 원했습니다. 더 큰 블레이드의 목적은 블레이드와 하우징 유닛(팬이 들어갈 곳) 사이의 단면적 공기 간격을 줄여, 스쿱이 포집하는 공기량과 모터가 생성하는 전압을 늘리는 것입니다. 아래는 블레이드가 아네모미터에 연결되는 부분 사진입니다.

이게 큰 차이를 만들까? 좋은 질문입니다. Autodesk Inventor에서 응력 해석 테스트를 수행해 새 디자인이 얼마나 더 견고한지 확인했습니다. 아래 그림이 결과입니다.


새 블레이드가 고속에서 훨씬 더 효과적임을 알 수 있습니다. 블레이드 STL 파일은 파일 섹션에 첨부돼 있습니다. 아직 새 블레이드를 장착하지 마세요.
다음으로 수정된 아네모미터를 하우징 유닛에 장착합니다. 하우징 유닛 STL 파일도 파일 섹션에 있습니다. 블레이드 없는 아네모미터를 하우징 바닥 구멍으로 위로 밀어 넣습니다. 아네모미터 바닥을 얇은 나무 원형 두 개(호비 로비 제품)에 고릴라 글루로 붙입니다. 원형과 ABS 플라스틱 하우징에 작은 구멍 4개 뚫기. 하나는 와이어 통과용, 세 개는 나사용. 아래 그림처럼 됩니다.

다음으로 아네모미터를 증폭기에 배선합니다. 아래는 증폭기 사진입니다.

*증폭기에 연결된 모든 와이어는 수-수 타입
수-수 와이어 두 개(색상 무관, 본 프로젝트에서 쓴 색으로 설명)를 준비합니다. 빨강 와이어를 오른쪽 +S 서클에 납땜, 다른 끝을 아네모미터에서 나온 빨강 와이어에 납땜. 검정 와이어를 오른쪽 -S 서클에 납땜, 다른 끝을 아네모미터에서 나온 노란 와이어에 납땜. 전기 테이프로 고정하면 좋습니다.


다음으로 증폭기를 배터리 전원에 배선합니다. 노란 와이어를 오른쪽 GND에 납땜, 다른 끝을 배터리 팩 커넥터의 검정 와이어에 납땜. 흰 와이어를 오른쪽 Vln 서클에 납땜, 다른 끝을 배터리 팩 커넥터의 빨강 와이어에 납땜.
다음으로 증폭기를 전압 센서에 배선합니다. 파란 와이어를 증폭기 GND에 납땜, 다른 끝을 전압 센서 VCC에 납땜. 초록 와이어를 증폭기 Vout에 납땜, 다른 끝을 전압 센서 GND에 납땜.


이제 전압 센서를 아두이노에 배선하고 배선 마무리. 회로도 섹션의 배선도가 이 부분을 보여줍니다.
마무리 작업
가장 어려운 부분 끝! 모든 배선 완료했으니 전자부품을 풍량계에 장착합니다. 폼 보드 조각을 팬 하우징 상단의 천장 삼아 쓰고 고릴라 글루로 고정. 전자부품을 폼 보드 위에 올리고 폼 보드로 전자부품을 감쌉니다. 아래 사진들에서 폼으로 전자부품을 감싼 모습을 볼 수 있습니다.

아두이노와 증폭기가 각자의 9V 배터리 전원에 접근할 수 있게 폼에 구멍을 뚫었습니다. 아래 사진에서 확인 가능.

다음으로 깔때기(funnel)를 만듭니다. PVC 자재로 깔때기 판 4개를 만들었습니다. 사다리꼴 모양 4개. 판들을 고릴라 글루와 실리콘으로 서로 연결. 같은 방식으로 깔때기를 팬 하우징에 연결. 깔때기 큰 끝 둘레에 웨더 스트리핑을 둘러 벤트에 밀착시 밀봉되게 했습니다. 깔때기 큰 끝 단면은 14" x 14". 아래 그림은 깔때기 정면도입니다.
캘리브레이션
모든 제작 완료 후 풍량계를 캘리브레이션했습니다. 정확한 풍량을 아는 장치로 테스트했습니다. 최초 코드는 센서가 읽은 전압을 LCD에 표시했습니다. 수집한 데이터로 LCD에 CFM을 표시하는 방정식을 만들었습니다. 아래 데이터가 캘리브레이션 과정입니다.


그래프에서 두 곡선, 초기 풍량과 실제 풍량이 보입니다. 깔때기로 공기를 모으면 속도가 약간 감소하므로 다릅니다. 여기선 실제 풍량에 대한 최적 적합 방정식인
y = 1.1409x² + 44.958x
를 아두이노 코드에 사용합니다. 코드는 세 부분으로 나뉩니다: 풍속 0 영역, 중저속 풍속 영역, 고속 풍속 영역. 위 최적 적합 방정식으로 전체 풍속 범위를 모델링할 수 있지만, 중저속 범위를 더 잘 모델링하는 방정식을 찾았습니다. 범위는 다음 방정식들로 표현:
대용량 CFM (고속):
y = 1.1409x² + 44.958x
중소용량 CFM (중저속):
y = 40x + 20
영 CFM (풍속 0):
y = 0
코드는 뒷부분에 있습니다.
코드를 아두이노에 업로드하면 풍량계 완성!
직접 캘리브레이션하기 (선택 사항)
직접 캘리브레이션하고 싶을 수도 있습니다. 풍속 단위를 m/s나 mph로 쓰고 싶을 수도 있죠. 직접 캘리브레이션 단계를 안내합니다.

1. #include <LiquidCrystal.h>
2.
3. LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
4. // 사용할 핀들
5.
6. // 센서 내 저항값들
7. float R1=30000;
8. float R2=7500;
9.
10. void setup()
11. {
12. Serial.begin(9600);
13. lcd.begin(16, 2);
14. // LCD 화면 사용 가능하게
15.
16. }
17.
18. void loop()
19. {
20. int sensorValue = analogRead(A0);
21. // 센서 값 읽기
22.
23. float voltage = ((5*sensorValue*(R1+R2))/(1024*R2));
24. // 실제 전압 방정식
25.
26. //*********************************************************//
27. // CFM 방정식은 전압의 구간별 함수이므로
28. // if문으로 각 구간 나누기
29. //*********************************************************//
30.
31. if (voltage > 1)
32. // 대용량 CFM 첫 번째 구간
33. {
34. float cfm = (1.1409*(voltage))*((voltage))+44.258*(voltage);
35. Serial.println(cfm);
36. // CFM 표시
37. lcd.print("CFM = ");
38. lcd.setCursor(0, 1);
39. lcd.print(cfm);
40. delay(1000);
41. // 1000ms 지연
42. lcd.clear();
43. // 반복 위해 클리어
44. delay(1000);
45. }
46.
47. else if (0.01 < voltage && voltage < 1)
48. // 중소용량 CFM 두 번째 구간
49. {
50. float cfm = (40*(voltage)+20);
51. Serial.println(cfm);
52. lcd.print("CFM = ");
53. lcd.setCursor(0, 1);
54. lcd.print(cfm);
55. delay(1000);
56. lcd.clear();
57. delay(1000);
58. }
59.
60. else
61. // 팬이 안 돌면 CFM은 0
62. {
63. float cfm = 0;
64. Serial.println(cfm);
65. lcd.print("CFM = ");
66. lcd.setCursor(0, 1);
67. lcd.print(cfm);
68. delay(1000);
69. lcd.clear();
70. delay(1000);
71. }
72.
73. }
직접 캘리브레이션하려면 전압 읽기용 코드:
// 센서 내 저항값들
float R1=30000;
float R2=7500;
void setup() {
Serial.begin(9600);
}
void loop() {
int sensorValue = analogRead(A0);
float voltage = ((5*sensorValue*(R1+R2))/(1024*R2));
Serial.println(voltage);
delay(1000);
}
풍량계 직접 캘리브레이션용 코드:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// 사용할 핀들
// 센서 내 저항값들
float R1=30000;
float R2=7500;
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
}
void loop() {
int sensorValue = analogRead(A0);
float voltage = ((5*sensorValue*(R1+R2))/(1024*R2));
Serial.println(voltage);
lcd.print("V = ");
lcd.setCursor(0, 1);
lcd.print(voltage);
delay(1000);
lcd.clear();
delay(1000);
}
제조공정
부품 및 소모품 SparkFun 듀얼 H-브리지 모터 드라이버 L298 1개 DC 모터 (일반) 4개 Arduino UNO 1개 LED (일반) 8개 저항 221옴 8개 서보 모터 (Tower Pro MG996R) 1개 초음파 센서 HC-SR04 1개 앱 및 온라인 서비스 Arduino IDE Microsoft Visual Studio 2015 Microsoft Windows 10 IoT Core 프로젝트 소개 여러 실내 로봇을 제작한 후, 험한 지형을 주행할 수 있는 야외 로봇을 만들기로 결
부품 및 소모품 부품 수량 비고 초음파 센서 HC-SR04 2 좌/우 눈 거리 측정용 아두이노 나노 R3 1 소형, USB 전원/프로그래밍, 충분한 GPIO 포토 레지스터 (LDR) 1 주변 밝기 감지 → LED 밝기 자동 조절 MAX7219 8x8 LED 매트릭스 모듈 2 데이지 체인 연결 가능 (SPI) 하프 사이즈 브레드보드 1 납땜 없이 프로토타이핑 점퍼 와이어 다수 빨강/검정은 전원/그라운드용 권장 저항 330 옴 1 LDR 분압용 앱 및 온라인 서비스 아두이노 IDE 프로젝트