This circuit involves an Arduino UNO microcontroller, a pushbutton, a servo motor, a DC motor controlled by an L298N motor driver, a resistor, and a 9V battery. The pushbutton is used to start the servo motor and the DC motor. The servo motor moves between 0 and 180 degrees, while the DC motor runs forward and then in reverse for a specified duration.
Arduino UNO
Pushbutton
Servo
Resistor
9V Battery
L298N DC Motor Driver
DC Motor
#include <Servo.h>
int ServoPin = 13; // 서보 핀 번호
Servo sun; // Servo 객체 생성
int buttonPin = 2; // 버튼 핀 번호
bool programStarted = false; // 프로그램 시작 상태
// DC 모터 핀 설정
int motorIn3 = 4; // IN3 핀
int motorIn4 = 5; // IN4 핀
int motorEn2 = 10; // EN2 핀 (PWM 제어)
void setup() {
// 서보 모터 설정
sun.attach(ServoPin); // 서보 핀 연결
// 버튼 설정
pinMode(buttonPin, INPUT_PULLUP); // 버튼 핀을 풀업 입력으로 설정
// DC 모터 핀 설정
pinMode(motorIn3, OUTPUT);
pinMode(motorIn4, OUTPUT);
pinMode(motorEn2, OUTPUT);
Serial.begin(9600);
Serial.println("Press the button to start the servo motor.");
}
void loop() {
// 버튼이 눌렸는지 확인
if (digitalRead(buttonPin) == LOW && !programStarted) {
delay(50); // 디바운싱
if (digitalRead(buttonPin) == LOW) { // 버튼 상태 다시 확인
programStarted = true; // 프로그램 시작
Serial.println("Button pressed, servo motor starting!");
controlServo(); // 서보 모터 제어 함수 호출
controlDCMotor(); // DC 모터 제어 함수 호출
reverseDCMotor(); // DC 모터 반대 방향 제어 함수 호출
programStarted = false; // 프로그램 종료 후 재작동 가능
}
}
}
// 서보 모터를 제어하는 함수
void controlServo() {
// 서보를 0도에서 180도로 이동
Serial.println("Servo moving from 0 to 180 degrees...");
sun.write(180); // 바로 180도로 이동
delay(1000); // 1초 대기 (이동 시간 보장)
// 3초 동안 멈춤
Serial.println("Servo stopped at 180 degrees for 10 seconds.");
delay(3000);
// 서보를 180도에서 0도로 이동
Serial.println("Servo returning to 0 degrees...");
sun.write(0); // 바로 0도로 이동
delay(1000); // 1초 대기
// 3초 동안 대기
Serial.println("Servo stopped at 0 degrees for 5 seconds.");
delay(3000);
}
// DC 모터를 전진시키는 함수
void controlDCMotor() {
// DC 모터를 40초 동안 동작
Serial.println("DC motor running forward for 40 seconds...");
digitalWrite(motorIn3, HIGH); // IN3 HIGH
digitalWrite(motorIn4, LOW); // IN4 LOW (모터 전진)
analogWrite(motorEn2, 255); // 최대 속도로 동작 (PWM 255)
delay(40000); // 40초 동안 동작
// DC 모터 정지
Serial.println("DC motor stopped.");
digitalWrite(motorIn3, LOW); // IN3 LOW
digitalWrite(motorIn4, LOW); // IN4 LOW (모터 정지)
analogWrite(motorEn2, 0); // PWM 신호 0
}
// DC 모터를 반대 방향으로 동작시키는 함수
void reverseDCMotor() {
// DC 모터를 40초 동안 반대 방향으로 동작
Serial.println("DC motor running in reverse for 40 seconds...");
digitalWrite(motorIn3, LOW); // IN3 LOW
digitalWrite(motorIn4, HIGH); // IN4 HIGH (모터 반대 방향)
analogWrite(motorEn2, 255); // 최대 속도로 동작 (PWM 255)
delay(40000); // 40초 동안 동작
// DC 모터 정지
Serial.println("DC motor stopped.");
digitalWrite(motorIn3, LOW); // IN3 LOW
digitalWrite(motorIn4, LOW); // IN4 LOW (모터 정지)
analogWrite(motorEn2, 0); // PWM 신호 0
}
This code controls the servo motor and the DC motor based on the pushbutton input. The servo motor moves between 0 and 180 degrees, and the DC motor runs forward and then in reverse for 40 seconds each.