ESP8266 - 피드백 액추에이터 | ESP8266 - Feedback Actuator

이전 튜토리얼에서는 피드백이 없는 리니어 액추에이터에 대해 논의했습니다. 이 튜토리얼은 여러분에게 피드백 리니어 액추에이터(피드백 리니어 액추에이터로도 알려져 있음)를 지시합니다. 이 유형의 리니어 액추에이터는 그것의 스트로크 위치를 식별하고 제어하는 데 필요한 정보를 제공합니다. 구체적으로, 우리는 다음을 학습할 것입니다:

준비물

1×ESP8266 NodeMCU Amazon
1×Micro USB Cable Amazon
1×12V Linear Feedback Actuator Amazon
1×L298N Motor Driver Module Amazon
1×12V Power Adapter Amazon
1×DC Power Jack 쿠팡 | Amazon
1×Jumper Wires Amazon
1×(Optional) 5V Power Adapter for ESP8266 Amazon
1×(Optional) ESP8266 Screw Terminal Adapter 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 모듈의 점퍼 3개를 모두 제거한 후에 전선을 연결하세요.

ESP8266 NodeMCU Linear Actuator L298N Driver wiring diagram

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

ESP8266의 핀 배치ESP8266 및 다른 구성 요소에 전원을 공급하는 방법에 대해 더 많이 보십시오.

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

ESP8266 - 구동기 튜토리얼을 확인하세요.

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

이것은 리니어 액추에이터에서 스트로크의 위치를 찾는 방법을 설명한 일러스트레이션입니다.

보정

  • 액추에이터의 스트로크 길이(밀리미터 단위)를 자로 측정하거나 데이터시트를 참조하여 결정하세요.
  • 선형 액추에이터가 완전히 확장되었을 때와 완전히 축소되었을 때의 출력 값을 확인하려면 아래의 코드를 실행하세요.
/* * 이 ESP8266 NodeMCU 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP8266 NodeMCU 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp8266/esp8266-feedback-actuator */ // 작동기가 완전히 확장되고 축소될 때의 피드백을 얻기 위한 코드 #define ENA_PIN 7 // EN1 핀 L298N에 연결된 ESP8266 핀 #define IN1_PIN 6 // IN1 핀 L298N에 연결된 ESP8266 핀 #define IN2_PIN 5 // IN2 핀 L298N에 연결된 ESP8266 핀 #define POTENTIOMETER_PIN A0 // 작동기의 포텐셔미터에 연결된 ESP8266 핀 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을 바꾸십시오.

아래 코드에서 세 가지 값을 기록하세요. 최솟값과 최댓값이 바뀌었다면, IN1_PIN과 IN2_PIN을 서로 교환하세요.

액추에이터의 위치를 계산하는 ESP8266 코드

/* * 이 ESP8266 NodeMCU 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP8266 NodeMCU 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp8266/esp8266-feedback-actuator */ #define ENA_PIN 7 // ESP8266 핀이 L298N의 EN1 핀에 연결됨 #define IN1_PIN 6 // ESP8266 핀이 L298N의 IN1 핀에 연결됨 #define IN2_PIN 5 // ESP8266 핀이 L298N의 IN2 핀에 연결됨 #define POTENTIOMETER_PIN A0 // ESP8266 핀이 작동기의 포텐쇼미터에 연결됨 #define STROKE_LENGTH 102 // 이 값을 업데이트 하세요 (밀리미터 단위) #define POTENTIOMETER_MAX 987 // 이 값을 업데이트 하세요 #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("스트로크 위치 = "); Serial.print(stroke_pos); Serial.println(" mm"); }
  • 세 개의 보정된 값을 가지고 코드를 업데이트하세요.
  • 코드를 ESP8266에 업로드하세요.
  • 시리얼 모니터에서 결과를 확인하세요.
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  

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

/* * 이 ESP8266 NodeMCU 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP8266 NodeMCU 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp8266/esp8266-feedback-actuator */ #define ENA_PIN 7 // ESP8266 핀이 L298N의 EN1 핀에 연결됨 #define IN1_PIN 6 // ESP8266 핀이 L298N의 IN1 핀에 연결됨 #define IN2_PIN 5 // ESP8266 핀이 L298N의 IN2 핀에 연결됨 #define POTENTIOMETER_PIN A0 // ESP8266 핀이 액추에이터의 전위차계에 연결됨 #define STROKE_LENGTH 102 // 이 값을 업데이트 해주세요 (밀리미터 단위) #define POTENTIOMETER_MAX 987 // 이 값을 업데이트 해주세요 #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("The stroke's position = "); 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!