이전 튜토리얼에서는 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 핀voidsetup() {Serial.begin(9600);// 디지털 핀을 출력으로 초기화합니다.pinMode(ENA_PIN, OUTPUT);pinMode(IN1_PIN, OUTPUT);pinMode(IN2_PIN, OUTPUT);digitalWrite(ENA_PIN, HIGH);}voidloop() {// 작동기를 확장합니다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);}
아래 예시에서와 같이 시리얼 모니터에서 로그를 관찰할 것입니다.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Nodemcu 1.0 (ESP-12E Module)
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Nodemcu 1.0 (ESP-12E Module)' on 'COM15')
New Line
9600 baud
POTENTIOMETER_MAX = 987
POTENTIOMETER_MIN = 13
Ln 11, Col 1
Nodemcu 1.0 (ESP-12E Module) on COM15
2
아래 코드에서 세 가지 값을 기록하십시오. 최소값과 최대값이 반대인 경우, 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 // 이 값을 업데이트 하세요voidsetup() {Serial.begin(9600);// 디지털 핀을 출력으로 초기화합니다.pinMode(ENA_PIN, OUTPUT);pinMode(IN1_PIN, OUTPUT);pinMode(IN2_PIN, OUTPUT);digitalWrite(ENA_PIN, HIGH);}voidloop() {// 작동기를 확장합니다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에 업로드하세요.
시리얼 모니터에서 결과를 확인하세요.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Nodemcu 1.0 (ESP-12E Module)
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Nodemcu 1.0 (ESP-12E Module)' on 'COM15')
New Line
9600 baud
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
Ln 11, Col 1
Nodemcu 1.0 (ESP-12E Module) on COM15
2
특정 위치로 선형 구동기를 제어하는 방법
/* * 이 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; // 밀리미터 단위voidsetup() {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 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.