아두이노 - 온도 센서 - 서보 모터 | Arduino - Temperature Sensor - Servo Motor

이 튜토리얼은 아두이노와 DS18B20 온도 센서를 사용하여 서보 모터를 제어하는 방법을 소개합니다. 구체적으로는 아두이노가 DS18B20 센서를 사용하여 지속적으로 온도를 측정하도록 프로그램되어 있습니다. 그런 다음 다음 규칙에 따라 서보 모터가 조정됩니다:

준비물

1×Arduino Uno Amazon
1×USB 2.0 cable type A/B 쿠팡 | Amazon
1×DS18B20 Temperature Sensor (WITH Adapter) 쿠팡 | Amazon
1×DS18B20 Temperature Sensor (WITHOUT Adapter) Amazon
1×Servo Motor Amazon
1×Jumper Wires Amazon
1×(Optional) 9V Power Adapter for Arduino Amazon
1×(Recommended) Screw Terminal Block Shield for Arduino Uno 쿠팡 | Amazon
1×(Optional) Transparent Acrylic Enclosure For Arduino Uno Amazon
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

Buy Note: Many DS18B20 sensors available in the market are unreliable. We strongly recommend buying the sensor from the DIYables brand using the link provided above. We tested it, and it worked reliably.

서보 모터와 온도 센서에 대하여

서보 모터와 온도 센서(핀 배치, 작동 방식, 프로그래밍 방법 등)에 대해 모른다면, 다음 튜토리얼에서 배우십시오:

선연결

브레드보드와 배선도

Arduino DS18B20 servo motor wiring diagram

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

어댑터 포함 배선도 (권장)

Arduino temperature sensor servo motor wiring diagram

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

우리는 쉬운 연결을 위해 DS18B20 센서와 함께 제공되는 배선 어댑터 구매를 제안합니다. 어댑터에는 별도의 저항기가 필요 없게 하는 내장 저항기가 있습니다.

아두이노 코드 - 온도 센서가 서보 모터를 작동시킵니다

/* * 이 Arduino 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino/arduino-temperature-sensor-servo-motor */ #include <Servo.h> #include <OneWire.h> #include <DallasTemperature.h> const int SERVO_PIN = 5; // 서보 모터의 핀에 연결된 Arduino 핀 const int SENSOR_PIN = 2; // DS18B20 센서의 DATA 핀에 연결된 Arduino 핀 const float TEMPERATURE_THRESHOLD = 20; // °C Servo servo; // 서보 제어를 위한 서보 객체 생성 OneWire oneWire(SENSOR_PIN); // oneWire 인스턴스 설정 DallasTemperature sensor(&oneWire); // oneWire를 DallasTemperature 라이브러리에 전달 float temperature; int angle; void setup() { Serial.begin(9600); // 시리얼 초기화 servo.attach(SERVO_PIN); // 서보 객체에 9번 핀을 서보로 첨부 servo.write(0); sensor.begin(); // 센서 초기화 } void loop() { sensor.requestTemperatures(); // 온도를 얻기 위한 명령어 보내기 temperature = sensor.getTempCByIndex(0); // 섭씨 온도 읽기 if (temperature > TEMPERATURE_THRESHOLD) angle = 90; // 각도를 90도로 설정 else angle = 0; // 각도를 0도로 설정 servo.write(angle); // 서보 모터 회전 // 시리얼로 출력 Serial.print("Temperature: "); Serial.print(temperature); Serial.print("°C => servo angle: "); Serial.println(angle); }

사용 방법

  • 위의 다이어그램처럼 아두이노, 온도 센서 및 서보 모터 사이의 배선을 하세요.
  • USB 케이블을 사용하여 아두이노를 PC에 연결하세요.
  • 아두이노 IDE를 열고, 올바른 보드와 포트를 선택하세요.
  • 아두이노 IDE의 왼쪽 바에 있는 Libraries 아이콘으로 이동하세요.
  • “DallasTemperature”을 검색한 다음, Miles Burton에 의한 DallasTemperature 라이브러리를 찾으세요.
  • DallasTemperature 라이브러리를 설치하려면 Install 버튼을 클릭하세요.
Arduino Dallas Temperature library
  • 라이브러리 종속성을 설치하라는 요청을 받게 됩니다.
  • OneWire 라이브러리를 설치하려면 Install All 버튼을 클릭하세요.
Arduino onewire library
  • 위의 코드를 복사하고 아두이노 IDE로 열기
  • 아두이노 IDE에서 Upload 버튼을 클릭하여 아두이노로 코드 업로드
  • 온도 센서 주변의 온도 변경
  • 서보 모터의 변화를 관찰
  • 시리얼 모니터에서 결과를 확인, 다음과 같이 보임:
COM6
Send
Temperature: 19.2°C => servo angle: 0 Temperature: 19.5°C => servo angle: 0 Temperature: 19.6°C => servo angle: 0 Temperature: 19.9°C => servo angle: 0 Temperature: 20.2°C => servo angle: 90 Temperature: 20.7°C => servo angle: 90 Temperature: 21.3°C => servo angle: 90
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

아두이노 코드 - 온도 센서가 허용 오차를 가진 서보 모터를 작동시킵니다

작업 중에 온도가 임계값 위나 아래로 변동할 수 있으며, 이로 인해 서보 모터에 빠르고 지속적인 조정이 발생할 수 있습니다. 이것은 원하는 각도로의 부드러운 회전 대신에 진동을 초래할 수 있습니다. 이 문제를 완화하기 위해 임계값에 허용 오차를 포함시킬 수 있습니다. 다음 코드는 이 솔루션을 구현하는 방법을 보여줍니다:

/* * 이 Arduino 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino/arduino-temperature-sensor-servo-motor */ #include <Servo.h> #include <OneWire.h> #include <DallasTemperature.h> const int SERVO_PIN = 5; // 아두이노 핀을 서보 모터의 핀에 연결 const int SENSOR_PIN = 2; // 아두이노 핀을 DS18B20 센서의 DATA 핀에 연결 const float TEMPERATURE_THRESHOLD = 20; // °C const float TOLERANCE = 0.5; // °C Servo servo; // 서보을 제어하기 위한 서보 객체를 생성 OneWire oneWire(SENSOR_PIN); // oneWire 인스턴스 설정 DallasTemperature sensor(&oneWire); // oneWire를 DallasTemperature 라이브러리에 전달 float temperature; int angle; void setup() { Serial.begin(9600); // 시리얼 초기화 servo.attach(SERVO_PIN); // 서보 객체에 9번 핀의 서보를 부착 servo.write(0); sensor.begin(); // 센서 초기화 } void loop() { sensor.requestTemperatures(); // 온도를 얻기 위한 명령 보내기 temperature = sensor.getTempCByIndex(0); // 온도를 섭씨로 읽기 if (temperature > (TEMPERATURE_THRESHOLD + TOLERANCE)) angle = 90; // 각도를 90도로 설정 else if (temperature < (TEMPERATURE_THRESHOLD - TOLERANCE)) angle = 0; // 각도를 0도로 설정 servo.write(angle); // 서보 모터 회전 // 시리얼로 출력 Serial.print("Temperature: "); Serial.print(temperature); Serial.print("°C => servo angle: "); Serial.println(angle); }

위에 제시된 코드는 20°C의 기준치와 0.5°C의 허용 오차를 지정합니다. 다음 조건이 적용됩니다:

  • 온도가 19.5°C 이하인 경우, 서보 모터 각도를 0°로 조정합니다.
  • 온도가 20.5°C를 초과하는 경우, 서보 모터 각도를 90°로 조정합니다.
  • 온도가 19.5°C와 20.5°C 사이인 경우, 서보 모터 각도의 조정이 이루어지지 않습니다.

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!