실습5. 모터 제어
- 모터 종류(6): AC모터, DC모터, BLDC모터, Servo모터, Stepping 모터, Geared 모터
- DC모터 사용.
- 트랜지스터: 전류 흐름을 스위칭(디지털)하거나 증폭(아날로그)
- 스위칭 - off: 베이스(B)에 0V(low)가 주어지면 에미터(E)에서 콜렉터(C)로의 전류 흐름이 멈춤.
- 스위칭 - on: 베이스에 5V(high)가 주어지면 에미터에서 콜렉터로의 전류가 공급됨.
- 증폭: 베이스에서 나오는 작은 전압이 콜렉터로 갈 때 증폭되어 출력됨.
- Atmega 128 마이크로 컨트롤러와, NPN 트랜지스터를 사용.
- LED 4개 구동.
- PC0에 HIGH가 출력되면 Q1의 스위칭 동작은 ON -> LED 켜짐
- PC0에 LOW가 출력되면 Q1의 스위칭 동작은 OFF-> LED 꺼짐.
- IC = 75[mA]: IC는 트랜지스터의 콜렉터 전류를 나타냄. 5V = 3.2V + 0.3V + 20IC로 부터 구함. -> IC = 75. 20은 저항값.(전압 = 전류*저항)
- VCE(Sat) = 0.3[V]: VCE는 트랜지스터의 포화 콜렉터-에미터 전압을 나타냄. 이는 트랜지스터가 ON의 상태일 때 콜렉터와 에미터 사이의 전압이 최소로 유지되는 값임.
- LED 전압 강하 3.2[V]: LED가 동작하는 데 필요한 전압.
- VBE(Sat) = 0.7[v]
- 20[옴] 양단의 전압강하는 1.5[V]: 5 - 3.2 - 0.3 = 1.5
- IB = 6[mA]: IB는 트랜지스터의 베이스 전류를 나타냄. (5V - 1.5V -0.7V)/470[옴] = 6.0[mA]
- (전압강하란 전기 회로에서 전압이 감소하는 것을 나타냄.)
- H-bridge회로: 네 개의 스위치 or 트랜지스터로 구성된 회로.
- 단락: 전류 흐름이 가능하게됨.
- 개방: 전류 사이의 흐름이 차단되어있음.
- L294D는 모터를 제어하기 위한 H-bridge 드라이버 직적회로 중하나. 왼쪽에 하나, 오른쪽에 하나로 총 2개의 모터를 제어할 수 있음.
- 코드
#define motor1EnablePin 9
#define motor1_1 2
#define motor1_2 4
void setup() {
pinMode(motor1_1, OUTPUT);
pinMode(motor1_2, OUTPUT);
analogWrite(motor1EnablePin,0);
}
void loop() {
digitalWrite(motor1_1, HIGH);
digitalWrite(motor1_2, LOW);
analogWrite(motor1EnablePin, 255);
delay(2000);
analogWrite(motor1EnablePin, 128);
delay(2000);
analogWrite(motor1EnablePin, 50);
delay(2000);
analogWrite(motor1EnablePin, 0);
delay(1000);
digitalWrite(motor1_1, LOW);
digitalWrite(motor1_2, HIGH);
analogWrite(motor1EnablePin, 255);
delay(2000);
analogWrite(motor1EnablePin, 128);
delay(2000);
analogWrite(motor1EnablePin, 50);
delay(2000);
analogWrite(motor1EnablePin, 0);
delay(1000);
}
실습6. 초음파 센서
- 준비물(5): 아두이노 보드, USB cable, 빵판, 초음파 거리센서, 점퍼
- 함수
- pulseIn(pin, value): pin-핀번호, value-HIGH또는 LOW.
- pulseIn(pin, value, timeout): timeout-펄스의 최대 길이 제한. 제한 시간 내에 못하면 0 반환.
: value가 HIGH이면 전압이 HIGH에서 LOW가 되는 시점까지의 시간.
즉, HIGH로 상태가 될 때까지 기다린 후, HIGH가 되면 측정을 시작하는 것임!.
LOW로 바뀌면 시간 측정 종료.
- 코
const int TriggerPin = 8; //Trig pin - 반사되어 돌아오는 시간 측정을 위한 신호
const int EchoPin = 9; //Echo pin - 초음파 신호 방출 신호
long Duration = 0;
void setup() {
pinMode(TriggerPin, OUTPUT);
pinMode(EchoPin, INPUT);
Serial.begin(9600); //시리얼 통신 초기화
}
void loop() {
digitalWrite(TriggerPin, LOW);
delayMicroseconds(2);
digitalWrite(TriggerPin, HIGH); // Trigger pin to HIGH
delayMicroseconds(10); // 10us high
digitalWrite(TriggerPin, LOW); // Trigger pin to HIGH
Duration = pulseIn(EchoPin, HIGH); // echo가 high될 때부터 시간 측정 시작.
// returns the Duration in microseconds
long Distance_mm = Distance(Duration); // 시간 -> 거리
Serial.print("Distance = "); // Output to serial
Serial.print(Distance_mm);
Serial.println(" mm");
delay(1000); // Wait to do next measurement
}
long Distance(long time)
{
// Calculates the Distance in mm
// ((time)*(Speed of sound))/ toward and backward of object) * 10
long DistanceCalc; // Calculation variable
DistanceCalc = ((time / 2.9) / 2); // 시간을 입력받아 mm로 계산
//DistanceCalc = time / 74 / 2; // Actual calculation in inches
return DistanceCalc; // return calculated value
}
- Echo pin은 초음파가 방출되는 순간부터 HIGH 상태임. 초음파 반사가 감지되면, LOW됨. (맞는지 모르겠음)
실습7. Serial LCD
- 준비물: 16x2 LCD.
- 코드
void setup()
{
Serial.begin(9600); // 시리얼 통신 초기화
Serial.print("$CLEAR\r\n"); // 화면 지움
Serial.print("$GO 1 1\r\n"); // 디스플레이 화면 특정 위치로 이동. (1,1)로 이동
Serial.print("$PRINT Bigfoot \r\n"); // "Bigfoot" 출력
Serial.print("$GO 2 4\r\n"); // 2행 4열로 이동
Serial.print("$PRINT Hello World!\r\n"); // "Hello World!" 출력
delay(1000);
}
void loop()
{
}
- 결과
실습8. 가변 저항
- 가변 저항: 저항 값을 조절할 수 있는 부품
- 전압 분배, 저항 조절의 역할
- ADC:(Analog-to-Digital Converter) 아날로그신호를 디지털로 변환.
- ADC의 정밀도(resolution): 0-5V사이를 몇 단계로 나눌건지.
- 8 bit = 256 단계
- 10 bits = 1024 단계
- 16 bits = 65536 단계
- 코드
int potPin= A2;
int ledPin= 9;
int val= 0;
void setup() {
pinMode(ledPin, OUTPUT);
Serial.begin(9600); //시리얼 통신 초기화
}
void loop() {
val= analogRead(potPin);
Serial.print("Input Value = "); // Output to serial
Serial.print(val);
Serial.println(" unit(5V/1024)");
val= val/4;
analogWrite(ledPin, val);
}
- analogRead()는 포트 입력 전압을 0~1023값으로 변환
- analogWrite(pin, val): val은 0~255, 출력전압은 val*(5V/255)
'Computer Science > Embedded System Design' 카테고리의 다른 글
[임베디드] 3장 라즈베리파이 실습 (2) (0) | 2023.10.20 |
---|---|
[임베디드] 3장 라즈베리파이 실습 (1) (0) | 2023.10.20 |
[임베디드] 2장 라즈베리파이 소개 (0) | 2023.10.20 |
[임베디드] 1장 아두이노보드 실습 (1) (0) | 2023.10.20 |
[임베디드] 0장 임베디드 시스템과 아두이노 보드 (2) | 2023.09.20 |