ESP32 - 피드백이 있는 액추에이터 | ESP32 - Actuator with Feedback

이전 튜토리얼에서는 피드백 없는 리니어 액추에이터에 대해 배웠습니다. 이번 튜토리얼에서는 피드백이 있는 리니어 액추에이터(피드백 리니어 액추에이터라고도 함)에 대해 배울 예정입니다. 리니어 액추에이터로부터의 피드백은 그것의 스트로크 위치를 식별하는 정보를 제공하고, 그 위치를 제어할 수 있습니다. 상세하게, 우리는 다음을 학습할 것입니다:

준비물

1×ESP-WROOM-32 Dev Module 쿠팡 | Amazon
1×USB Cable Type-C 쿠팡 | Amazon
1×12V Linear Actuator with Feedback Amazon
1×L298N Motor Driver Module 쿠팡 | Amazon
1×12V Power Adapter Amazon
1×DC Power Jack 쿠팡 | Amazon
1×Jumper Wires Amazon
1×(Recommended) Screw Terminal Expansion Board for ESP32 쿠팡 | Amazon
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

피드백 선형 액추에이터에 관하여

피드백 선형 액추에이터는 위치를 식별하고 제어할 수 있는 피드백 신호가 있는 선형 액추에이터입니다. 피드백은 스트로크 위치에 비례하여 전압 값을 출력하는 포텐시오미터입니다.

피드백 선형 액추에이터 핀배열

피드백 선형 액추에이터는 5개의 전선이 있습니다:

  • 구동기 양극선: 이 전선은 고전압(12V, 24V, 48V...)을 사용하여 선형 구동기를 제어하는 데 사용됩니다.
  • 구동기 양극선: 이 전선은 고전압(12V, 24V, 48V...)을 사용하여 선형 구동기를 제어하는 데 사용됩니다.
  • 5V 전선: 이 전선은 피드백 포텐쇼미터에 사용됩니다. 이 전선을 5V나 3.3V에 연결하세요.
  • GND 전선: 이 전선은 피드백 포텐쇼미터에 사용됩니다. 이 전선을 GND에 연결하세요.
  • 포텐쇼미터 전선: (피드백 전선 또는 출력 전선이라고도 함) 이 전선은 스트로크 위치에 비례하여 전압 값을 출력합니다.
Feedback Linear Actuator Pinout

작동 원리

만약 우리가 양극과 음극 선에 고전압을 공급한다면, 액추에이터의 작동 범위는 확장되거나 축소될 것입니다. 자세히 말하면, 만약 우리가 연결한다면:

  • 12V(12V, 24V, 48V...)와 GND를 각각 양선과 음선에 연결하면: 선형 액추에이터가 제한에 도달할 때까지 전속력으로 확장됩니다.
  • 12V(12V, 24V, 48V...)와 GND를 각각 음선과 양선에 연결하면: 선형 액추에이터가 제한에 도달할 때까지 전속력으로 축소됩니다.
  • 확장하거나 축소하는 동안, 액추에이터에 전력을 차단하면(양선과 음선 모두에 GND를 연결하면), 액추에이터가 확장/축소를 멈춥니다.

※ NOTE THAT:

  • 구동기를 제어하기 위한 전압 값은 구동기의 사양에 따라 달라집니다. 해당 전압 값을 알려면 데이터시트나 매뉴얼을 읽어보세요.
  • 구동기는 부하를 지탱하면서 전원을 차단해도 위치를 유지할 수 있습니다.

포텐쇼미터 와이어의 전압 값은 액추에이터의 스트로크 위치에 비례합니다. 이 전압을 측정함으로써 스트로크의 위치를 알 수 있습니다.

배선도

L298N 모듈의 모든 점퍼 세 개를 배선하기 전에 제거해 주세요.

ESP32 Linear Actuator L298N Driver Wiring Diagram

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

ESP32 및 다른 구성 요소에 전원을 공급하는 방법에 대해 잘 알지 못하는 경우, 다음 튜토리얼에서 안내를 찾을 수 있습니다: ESP32 전원 공급 방법.

선형 액추에이터를 확장/축소하는 방법

ESP32 - 액추에이터 튜토리얼을 참조하세요

선형 액추에이터의 위치를 찾는 방법

아래는 리니어 액추에이터에서 스트로크의 위치를 확인하는 방법을 보여줍니다.

보정

  • 액추에이터의 스트로크 길이(밀리미터 단위)를 자를 사용하여 측정하거나 데이터시트를 읽어 확인하십시오.
  • 아래 코드를 실행하여 선형 액추에이터가 완전히 확장되었을 때와 완전히 축소되었을 때의 출력 값을 확인하십시오.
/* * 이 ESP32 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32/esp32-actuator-with-feedback */ // 작동기가 완전히 확장되고 축소될 때의 피드백을 받기 위한 코드입니다 #define ENA_PIN 27 // ESP32 핀 GPIO27이 L298N의 EN1 핀에 연결됩니다 #define IN1_PIN 26 // ESP32 핀 GPIO26이 L298N의 IN1 핀에 연결됩니다 #define IN2_PIN 25 // ESP32 핀 GPIO25가 L298N의 IN2 핀에 연결됩니다 #define POTENTIOMETER_PIN 36 // ESP32 핀 GPIO36 (ADC0)이 작동기의 포텐쇼미터에 연결됩니다 void setup() { Serial.begin(9600); // 디지털 핀을 출력으로 초기화합니다. pinMode(ENA_PIN, OUTPUT); pinMode(IN1_PIN, OUTPUT); pinMode(IN2_PIN, OUTPUT); digitalWrite(ENA_PIN, HIGH); } void loop() { // 작동기를 확장합니다 digitalWrite(IN1_PIN, HIGH); digitalWrite(IN2_PIN, LOW); delay(20000); // 작동기가 완전히 확장될 때까지 기다립니다. 한계에 도달하면 자동으로 확장을 멈춥니다 // 아날로그 입력 값을 읽습니다: int POTENTIOMETER_MAX = analogRead(POTENTIOMETER_PIN); Serial.print("POTENTIOMETER_MAX = "); Serial.println(POTENTIOMETER_MAX); // 작동기를 축소합니다 digitalWrite(IN1_PIN, LOW); digitalWrite(IN2_PIN, HIGH); delay(20000); // 작동기가 완전히 축소될 때까지 기다립니다. 한계에 도달하면 자동으로 축소를 멈춥니다 int POTENTIOMETER_MIN = analogRead(POTENTIOMETER_PIN); Serial.print("POTENTIOMETER_MIN = "); Serial.println(POTENTIOMETER_MIN); }

아래 예시처럼 시리얼 모니터에서 로그가 표시됩니다.

COM6
Send
POTENTIOMETER_MAX = 987 POTENTIOMETER_MIN = 13
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • 이 값들을 적으세요
  • 최소/최대 값이 바뀌어 있다면, IN1_PIN과 IN2_PIN을 바꾸세요
  • 아래 코드에 세 가지 값을 업데이트하세요
  • 액추에이터의 위치를 계산하는 ESP32 코드

    /* * 이 ESP32 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32/esp32-actuator-with-feedback */ #define ENA_PIN 27 // ESP32 핀 GPIO27이 L298N의 EN1 핀에 연결됨 #define IN1_PIN 26 // ESP32 핀 GPIO26이 L298N의 IN1 핀에 연결됨 #define IN2_PIN 25 // ESP32 핀 GPIO25가 L298N의 IN2 핀에 연결됨 #define POTENTIOMETER_PIN 36 // ESP32 핀 GPIO36 (ADC0)이 액추에이터의 가변 저항에 연결됨 #define STROKE_LENGTH 102 // 이 값을 업데이트하십시오 (밀리미터 단위) #define POTENTIOMETER_MAX 2340 // 이 값을 업데이트하십시오 #define POTENTIOMETER_MIN 13 // 이 값을 업데이트하십시오 void setup() { Serial.begin(9600); // 디지털 핀을 출력으로 초기화합니다. pinMode(ENA_PIN, OUTPUT); pinMode(IN1_PIN, OUTPUT); pinMode(IN2_PIN, OUTPUT); digitalWrite(ENA_PIN, HIGH); } void loop() { // 액추에이터를 확장합니다. digitalWrite(IN1_PIN, HIGH); digitalWrite(IN2_PIN, LOW); int potentiometer_value = analogRead(POTENTIOMETER_PIN); int stroke_pos = map(potentiometer_value, POTENTIOMETER_MIN, POTENTIOMETER_MAX, 0, STROKE_LENGTH); Serial.print("The stroke's position = "); Serial.print(stroke_pos); Serial.println(" mm"); }
    • 보정된 세 가지 값을 코드에 업데이트하세요.
    • 코드를 ESP32에 업로드하세요.
    • 시리얼 모니터에서 결과를 확인하세요.
    COM6
    Send
    The stroke's position = 2 mm The stroke's position = 35 mm The stroke's position = 43 mm The stroke's position = 60 mm The stroke's position = 68 mm The stroke's position = 79 mm The stroke's position = 83 mm The stroke's position = 96 mm The stroke's position = 100 mm
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

    특정 위치로 선형 작동기를 제어하는 방법

    /* * 이 ESP32 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32/esp32-actuator-with-feedback */ #define ENA_PIN 27 // ESP32 핀 GPIO27이 L298N의 EN1 핀에 연결됨 #define IN1_PIN 26 // ESP32 핀 GPIO26이 L298N의 IN1 핀에 연결됨 #define IN2_PIN 25 // ESP32 핀 GPIO25가 L298N의 IN2 핀에 연결됨 #define POTENTIOMETER_PIN 36 // ESP32 핀 GPIO36 (ADC0)이 액추에이터의 가변저항에 연결됨 #define STROKE_LENGTH 102 // 이 값을 업데이트해주세요 (밀리미터 단위) #define POTENTIOMETER_MAX 2340 // 이 값을 업데이트해주세요 #define POTENTIOMETER_MIN 13 // 이 값을 업데이트해주세요 #define TOLERANCE 5 // 밀리미터 단위 int targetPosition_mm = 50; // 밀리미터 단위 void setup() { Serial.begin(9600); // 디지털 핀을 출력으로 초기화합니다. pinMode(ENA_PIN, OUTPUT); pinMode(IN1_PIN, OUTPUT); pinMode(IN2_PIN, OUTPUT); digitalWrite(ENA_PIN, HIGH); } void loop() { int potentiometer_value = analogRead(POTENTIOMETER_PIN); int stroke_pos = map(potentiometer_value, POTENTIOMETER_MIN, POTENTIOMETER_MAX, 0, STROKE_LENGTH); Serial.print("행정의 위치 = "); Serial.print(stroke_pos); Serial.println(" mm"); if (stroke_pos < (targetPosition_mm - TOLERANCE)) ACTUATOR_extend(); else if (stroke_pos > (targetPosition_mm + TOLERANCE)) ACTUATOR_retract(); else ACTUATOR_stop(); } void ACTUATOR_extend() { digitalWrite(IN1_PIN, HIGH); digitalWrite(IN2_PIN, LOW); } void ACTUATOR_retract() { digitalWrite(IN1_PIN, LOW); digitalWrite(IN2_PIN, HIGH); } void ACTUATOR_stop() { digitalWrite(IN1_PIN, LOW); digitalWrite(IN2_PIN, LOW); }

    동영상

    비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.

    댓글

    관련 튜토리얼

    ※ 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!