4주차 서보모터와 동전 먹는 저금통 만들기(블록코딩): 두 판 사이의 차이

아두위키 : Arduwiki
117번째 줄: 117번째 줄:


==== 4-2. 실습2) INPUT_PULLUP을 이용한 동전 존재 여부 판단하기 ====
==== 4-2. 실습2) INPUT_PULLUP을 이용한 동전 존재 여부 판단하기 ====
[[2주차 버튼 제어하기]] 에서 배운 INPUT_PULLUP 를 이용해 저금통에 동전을 올려놓았는지 확인하는 코드를 작성해봅시다.
[[2주차 버튼 제어하기(블록코딩)|2주차 버튼 제어하기]] 에서 배운 INPUT_PULLUP 를 이용해 저금통에 동전을 올려놓았는지 확인하는 코드를 작성해봅시다.


우리는 저금통의 양 팔에 2개의 전선을 이용해 GND, digital pin에 연결하였습니다.
우리는 저금통의 양 팔에 2개의 전선을 이용해 GND, digital pin에 연결하였습니다.
123번째 줄: 123번째 줄:
INPUT_PULLUP을 이용하면 동전이 전도체 역할을 하여 digital pin으로 LOW값을 읽어올 수 있을 것입니다.
INPUT_PULLUP을 이용하면 동전이 전도체 역할을 하여 digital pin으로 LOW값을 읽어올 수 있을 것입니다.


Serial monitor에 동전을 올리게 되면 "coin!!"라는 코드를 출력하는 프로그램을 작성해보세요.<syntaxhighlight lang="arduino" line="1">
동전을 올리게 되면 아두이노의 13번 디지털핀에 출력을 이용해 LED를 켤 수 있도록 프로그램을 작성해보세요.
int coin = pin number;
[[파일:4주차 LED.png|없음|섬네일|참고) 디지털 13번 핀은 LED를 회로로 연결하지 않아도 아두이노의 [L] 옆의 LED를 제어할 수 있답니다! (2주차에서 배웠어용~!)]]


void setup() {
  pinMode(coin, INPUT_PULLUP);
  Serial.begin(9600);
}


void loop() {
[[파일:4주차 실습2.png|프레임없음|381x381픽셀]]
  // code..
}
</syntaxhighlight>


==== 4-3. 실습3) 서보모터 각도 제어하기 ====
==== 4-3. 실습3) 서보모터 각도 제어하기 ====
143번째 줄: 136번째 줄:
실습2) 를 이용해 동전이 올라오면 서보모터를 움직여 동전을 먹는 모습을 만들어 봅시다.
실습2) 를 이용해 동전이 올라오면 서보모터를 움직여 동전을 먹는 모습을 만들어 봅시다.


또, 동전이 올라오면 LED가 켜지고 동전을 삼켜 없어지면 LED가 꺼지도록 만들어 봅시다.<syntaxhighlight lang="arduino" line="1">
#include <Servo.h>


int coin = pin number;
int LED = pin number;
Servo s;


void setup() {
, 동전이 올라오면 LED가 켜지고 동전을 삼켜 없어지면 LED가 꺼지도록 만들어 봅시다.
  s.attach(pin number);
  pinMode(LED, OUTPUT);
  pinMode(coin, INPUT_PULLUP);
  Serial.begin(9600);
}


void loop() {
[[파일:4주차 실습3 수정.png|프레임없음|486x486픽셀]]
  // code..
}
</syntaxhighlight>


=== 5. 실습 코드 참고하기 ===
=== 5. 실습 코드 참고하기 ===


==== 1. 실습 코드) LED 제어하기 ====
==== 1. 실습 코드) LED 제어하기 ====
<syntaxhighlight lang="arduino" line="1">
[[파일:4주차 실습1 코드.png|프레임없음|541x541픽셀]]
int LED = 3;
 
void setup() {
  pinMode(LED, OUTPUT);
}
 
void loop() {
  digitalWrite(LED, HIGH);
  delay(1000);
  digitalWrite(LED, LOW);
  delay(1000);
}
</syntaxhighlight>


==== 2. 실습 코드) INPUT_PULLUP을 이용한 동전 존재 여부 판단하기 ====
==== 2. 실습 코드) INPUT_PULLUP을 이용한 동전 존재 여부 판단하기 ====
<syntaxhighlight lang="arduino" line="1">
[[파일:4주차 실습2 코드.png|프레임없음|506x506픽셀]]
int coin = pin number;
 
void setup() {
  pinMode(coin, INPUT_PULLUP);
  Serial.begin(9600);
}
 
void loop() {
  if(digitalRead(coin)==LOW) {
    Serial.println("coin!!");
  }
}
</syntaxhighlight>


==== 3. 실습 코드) 서보모터 각도 제어하기 ====
==== 3. 실습 코드) 서보모터 각도 제어하기 ====
<syntaxhighlight lang="arduino" line="1">
[[파일:4주차 실습3 코드.png|프레임없음|610x610픽셀]]
#include <Servo.h>
 
int coin = pin number;
int LED = pin number;
Servo s;
 
void setup() {
  s.attach(pin number);
  pinMode(LED, OUTPUT);
  pinMode(coin, INPUT_PULLUP);
  Serial.begin(9600);
 
  s.write(180);
}
 
void loop() {
  if(digitalRead(coin) == LOW) {
    delay(300);
    s.write(120);
    digitalWrite(LED, HIGH);
    delay(1000);
    s.write(180);
    digitalWrite(LED, LOW);
    delay(300);
  }
}
</syntaxhighlight>

2024년 7월 20일 (토) 19:12 판

1. 서보모터 제어하기


서보모터를 아두이노에 연결해봅시다.

서보모터의 검정색 선을 GND, 빨간색 선을 5V, 주황색 선을 디지털 핀(8번)에 연결해주세요.


서보모터는 신호에 따라 회전 각도를 조절할 수 있습니다. 단, 0~180도 범위를 제어할 수 있습니다.



서보모터는 "서보모터 핀 [ ] 번 각도를 [ ] 으로 설정" 블록을 사용하여 각도를 제어할 수 ㅣㅇㅆ습니다.

핀 [ ] 칸에 서보모터를 연결한 디지털 핀 번호를 넣어줍니다. 뒤의 빈 칸 [ ] 에는 0~180 사이의 각도 값을 넣습니다. 서보모터가 설정한 각도로 움직이는 모습을 볼 수 있습니다.

위 코드를 실행하여 서보모터가 0도, 180도로 번갈아가며 각도가 변경되는 모습을 확인해봅시다.

2. 동전 먹는 저금통 조립하기.

2-1. 몸통 조립

먼저 5개의 조각을 가져옵니다. 저금통 모형의 아래 부분을 만들어봅시다.

아래 모양처럼 왼쪽, 오른쪽을 잘 보고 맞춰서 조립해주세요.

조립 후 몸통 부분에 나사가 구멍이 있는 곳을 7mm 나사로 고정할 수 있도록 조아주세요.

2-2. 머리 조립

먼저 5개의 조각을 가져옵니다. 저금통 모형의 머리 부분을 만들어봅시다.

아래 모양처럼 왼쪽, 오른쪽을 잘 보고 맞춰서 조립해주세요.

머리 부분의 왼쪽 면에 빨간색 동그라미로 표시한 구멍은 머리의 뒷 편으로 가도록 조립해야 합니다!

조립 후 머리 부분에 나사가 구멍이 있는 곳을 7mm 나사로 고정할 수 있도록 조아주세요.

2-3. 왼쪽 팔

저금통의 왼쪽 팔을 만들어 봅시다. 3개의 조각을 가져오고 10mm 핀과 주황 고무를 이용해 고정시켜 주세요.

2-4. 오른쪽 팔

저금통의 오른쪽 팔을 만들어 봅시다. 3개의 조각을 가져오고 7mm 나사를 이용해 조아주세요.

2-4. 서보모터 조립

위 그림처럼 서보모터를 몸통에 조립해주세요. 2개의 동그라미 조각을 가져와 양 옆에 끼워주세요.

서보모터가 조립되는 방향을 잘 보고 똑같이 적용시켜 주세요.

2-5. 팔 조립

2-3, 2-4에서 만든 팔을 저금통 몸통에 달아주세요! 주황색 고무를 이용해 고정시켜 주세요.

2-6. 철판 연결

양 팔에 전선을 먼저 연결시킵니다. 빨간색 동그라미를 잘 보고 구멍을 통과시킬 수 있도록 만들어주세요.

전선을 먼저 팔에 연결시킨 후 철판 조각 2개를 가져와서 전선과 연결시켜 주세요.

2-7. 철판 고정

철판을 고정시킬 조각을 가져와서 4mm 나사로 조아주세요.

2-8. 서보모터 선 정리

서보모터의 선을 몸통의 오른쪽 구멍으로 빼서 정리해주세요.

그 다음 서보모터를 아크릴 테이프를 이용해 흔들리지 않도록 고정시켜 주세요.

2-9. LED 연결

LED를 저금통 머리 부분에 연결합니다.

두 개의 선은 뒷 편에 있는 구멍 2개로 빼서 정리합니다.

2-10. 경첩으로 몸통과 머리 연결

경첩을 이용해 저금통의 몸통과 머리를 연결합니다. 4mm 나사를 이용해 조아줍니다.

2-11. 왼쪽 팔과 머리 연결

왼쪽 팔과 머리를 연결시켜 줍니다.

10mm 핀과 주황 고무를 이용해 고정시켜 주세요.

2-12. 동전 고정대

마지막으로 동전 거치를 위한 고정대를 조립합니다.

조립할 조각을 가져와서 7mm 나사로 조아줍니다.

3. 회로 연결

  1. 양 팔에 연결한 전선 2개 : 1개의 전선은 gnd / 1개의 전선은 digital pin에 연결합니다.
  2. LED 전선 2개 : 1개의 전선은 gnd / 1개의 전선은 digital pin에 연결합니다.
  3. 서보모터 전선 3개 : 갈색 전선은 gnd / 빨간색 전선은 5v / 주황색 전선은 digital pin에 연결합니다.

4. 코딩!

4-1. 실습) LED 제어하기

먼저 LED를 제어해봅시다. LED가 잘 동작하는지 확인해보세요.


앞서 배운 내용을 토대로 1초 간격으로 LED를 켜고 끄는 동작을 코딩해봅시다.


4-2. 실습2) INPUT_PULLUP을 이용한 동전 존재 여부 판단하기

2주차 버튼 제어하기 에서 배운 INPUT_PULLUP 를 이용해 저금통에 동전을 올려놓았는지 확인하는 코드를 작성해봅시다.

우리는 저금통의 양 팔에 2개의 전선을 이용해 GND, digital pin에 연결하였습니다.

INPUT_PULLUP을 이용하면 동전이 전도체 역할을 하여 digital pin으로 LOW값을 읽어올 수 있을 것입니다.

동전을 올리게 되면 아두이노의 13번 디지털핀에 출력을 이용해 LED를 켤 수 있도록 프로그램을 작성해보세요.

참고) 디지털 13번 핀은 LED를 회로로 연결하지 않아도 아두이노의 [L] 옆의 LED를 제어할 수 있답니다! (2주차에서 배웠어용~!)


4-3. 실습3) 서보모터 각도 제어하기

이제 동전을 저금통 위에 올려둔다면 서보모터의 각도를 제어하여 저금통이 움직일 수 있도록 만들어 봅시다.

서보모터의 각도가 180도 일 때 저금통이 입을 닫고 있는 모양이며, 120도 일 때 저금통이 입을 열어 동전을 먹는 모습을 만들 수 있습니다.

실습2) 를 이용해 동전이 올라오면 서보모터를 움직여 동전을 먹는 모습을 만들어 봅시다.


또, 동전이 올라오면 LED가 켜지고 동전을 삼켜 없어지면 LED가 꺼지도록 만들어 봅시다.

5. 실습 코드 참고하기

1. 실습 코드) LED 제어하기

2. 실습 코드) INPUT_PULLUP을 이용한 동전 존재 여부 판단하기

3. 실습 코드) 서보모터 각도 제어하기