아두이노 - 온도 센서 - 서보 모터 | 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×(Recommended) Breadboard Shield For Arduino Uno 쿠팡 | Amazon
1×(Recommended) Enclosure For Arduino Uno Amazon
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

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

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

선연결

브레드보드와 배선도

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!