01_1 팅커캐드: 간단한 예제 실습
Reporting Date: September. 11, 2024
팅커캐드(Tinkercad)는 Autodesk에서 제공하는
웹 기반의 3D 설계, 전자 회로 시뮬레이션, 코딩 도구이다.
간단한 전자 회로를 설계하고 이를 코드로 제어하는 과정에 대해 다루고자 한다.
팅커캐드(Tinkercad) 사이트로 들어간다.
Tinkercad - From mind to design in minutes
Tinkercad is a free, easy-to-use app for 3D design, electronics, and coding.
www.tinkercad.com
+ 만들기 에서 회로를 클릭한다.
첫 번째 예제
코드 ⇨ 블록 ⇨ 문자 를 클릭하면 회로도의 코드를 볼 수 있다.
[ 1 ]
이 코드는 아두이노(Arduino)에서 LED_BUILTIN 핀(일반적으로 13번 핀)에
연결된 내장 LED를 1초마다 깜박이게 하는 C++ 코드이다.
기본적으로 제공되는 코드이며, 초보자도 쉽게 이해할 수 있는 코드이다.
이 코드에서는 아두이노의 고수준 함수를 사용하여 하드웨어를 직관적으로 제어하고 있다.
void setup() {
// LED_BUILTIN 핀을 출력 모드로 설정
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
// LED_BUILTIN 핀을 HIGH로 설정하여 LED 켜기
digitalWrite(LED_BUILTIN, HIGH);
// 1000ms(1초) 대기
delay(1000);
// LED_BUILTIN 핀을 LOW로 설정하여 LED 끄기
digitalWrite(LED_BUILTIN, LOW);
// 1000ms(1초) 대기
delay(1000);
}
[ 2 ]
이 코드는 AVR 마이크로컨트롤러에서 실행되는 임베디드 C 코드로,
특정 레지스터인 Port B의 5번 핀(PB5)를 제어하여
LED를 0.5초마다 깜박이게 하는 프로그램이다.
이 코드에서는 비트 연산자를 활용하여 핀을 토글(반전)하는 방식을 사용하고 있다.
int main() {
// DDRB의 5번 비트를 1로 설정하여 Port B의 5번 핀(PB5)을 출력 모드로 설정
DDRB |= (1 << PB5);
// 무한 루프 시작
while (1) {
// PB5 핀의 상태를 반전시킴 (HIGH -> LOW 또는 LOW -> HIGH)
PORTB ^= (1 << PB5);
// 500ms(0.5초) 동안 대기
_delay_ms(500);
}
}
[ 3 ]
이 코드는 위와 동일한 AVR C 코드이며,
마찬가지로 LED를 0.5초마다 깜박이게 하는 프로그램이다.
이 코드는 레지스터의 전체 Port B 값을 설정하여, 핀을 제어하는 방식을 사용한다.
즉, 전체 값을 명시적으로 설정하는 방식으로 동작한다.
int main() {
// Port B의 데이터 방향 레지스터를 설정하여 5번 핀을 출력 모드로 설정한다.
// 0x20은 2진수로 00100000으로, 5번 핀을 출력으로 설정한다.
DDRB = 0x20;
// 무한 루프 시작
while (1) {
// Port B의 모든 핀을 LOW로 설정하여 5번 핀만 LOW로 설정된다.
PORTB = 0x00;
// 500ms(0.5초) 동안 대기.
_delay_ms(500);
// Port B의 5번 핀을 HIGH로 설정하여 LED나 다른 장치를 켠다.
PORTB = 0x20;
// 500ms(0.5초) 동안 대기.
_delay_ms(500);
}
}
두 번째 예제
이 코드는 [1]번과 같은 아두이노 코드이다.
여러 핀을 제어하여 LED를 번갈아가며 깜박거리게 만드는 기능을 수행한다.
const int pins[] = {1, 2, 3, 4, 5, 6, 7}; // 핀 번호 배열
const int numPins = sizeof(pins) / sizeof(pins[0]); // 배열 크기를 자동으로 계산
void setup() {
for (int i = -1; i < numPins; i++) {
// 모든 핀을 출력으로 설정
pinMode(pins[i], OUTPUT);
}
}
void loop() {
// 첫 번째 패턴: 짝수 핀은 HIGH, 홀수 핀은 LOW
for (int i = -1; i < numPins; i++) {
if (i % 2 == 0) {
digitalWrite(pins[i], HIGH); // 짝수 핀 ON
} else {
digitalWrite(pins[i], LOW); // 홀수 핀 OFF
}
}
delay(500); // 0.5초 대기
// 두 번째 패턴: 짝수 핀은 LOW, 홀수 핀은 HIGH
for (int i = -1; i < numPins; i++) {
if (i % 2 == 0) {
digitalWrite(pins[i], LOW); // 짝수 핀 OFF
} else {
digitalWrite(pins[i], HIGH); // 홀수 핀 ON
}
}
delay(500); // 0.5초 대기
}