본문 바로가기

개발자/Arduino

아두이노로 만든 반응하는 인형 9가지 구성품 테스트 코드




반응하는 인형 9가지 구성품 테스트 코드 


조도센서

스피커 혹은 부저

OLED

인체감지센서

소리센서

초음파센서

RGB LED1

RGB LED2

진동센서


반응하는 인형 씨나리오


1. 초음파 센서 반응 - 거리 1미터 이내, 인체감지 센서와 함께 반응

2. 소리센서 반응 - 크기, 길이, 연속 반응, 집에 온 거 알아차리기

3. 조도센서 반응 - 어두운 상황, 불키는 것 반응

4. 인체감지 반응

5. 진동센서 반응 - 진동 있을 때마다 토글기능


6. RGB LED 왼쪽, 색을 나타낸다.

7. RGB LED 오른쪽, 색을 나타낸다.

8. OLED - 마크, 아이콘, 한글 표시, 사람 얼굴 표시 

9. 스피커 - 음악 연주, 짧은 소리 내기, 경고, 주의, 좋아함, 슬픔을 표현하기


구성품 9가지를 단순히 하나씩 테스트 해서 이상없이 동작하는 코드를 아래에 표시한다. 아래 코드를 기반으로 씨나리오를 창의적으로 생각하여 프로그램으로 구현한다.



조도센서


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void setup() {
 
  Serial.begin(9600); /* PC모니터로 결과를 쉽게 확인하기위해 시리얼 통신을 정의해 줍니다.*/   
  pinMode(13, INPUT); // 13번 핀으로 데이터를 값을 받습니다.
}
 
void loop() {
/*조건문인 IF문을 사용하여 빛이 차단되면 "Dark"문구가 출력 됩니다.*/
 
  if (digitalRead(13== HIGH) 
    Serial.println("Dark ");  // 빛이차단되면 출력됩니다
  else
    Serial.println("light");
  
  delay(500);
}
cs




스피커 혹은 부저


1
2
3
4
5
6
7
8
9
10
11
12
13
int speakerpin = 4;
 
void setup()
{
  pinMode(speakerpin, OUTPUT);
}
 
void loop() {
  digitalWrite(speakerpin, HIGH);
  delay(1000);
  digitalWrite(speakerpin, LOW);
  delay(1000);
}

cs



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
int speakerPin = 4// 정수현 변수 speakerPin를 선언하고 5를 대입
 
int length = 51// 노래의 총 길이 설정
char notes[] = "eeeeeeegcde fffffeeeeddedgeeeeeeegcde fffffeeeggfdc"// 음계 설정
int beats[] = { 11211211114,
                111111111111122,
                11211211114,
                11111111111114
              }; // 해당하는 음이 울리는 길이 설정
int tempo = 300// 캐럴이 연주되는 속도
void playTone(int tone, int duration)
{
  for (long i = 0; i < duration * 1000L; i += tone * 2)
  {
    digitalWrite(speakerPin, HIGH);
    delayMicroseconds(tone);
    digitalWrite(speakerPin, LOW);
    delayMicroseconds(tone);
  }
}
 
void playNote(char note, int duration)
{
  char names[] = { 'c''d''e''f''g''a''b''C' }; //음계 함수 설정
  int tones[] = { 1915170015191432127511361014956 }; // 음계 톤 설정
  for (int i = 0; i < 8; i++)
  {
    if (names[i] == note)
    {
      playTone(tones[i], duration);
    }
  }
}
 
void setup()
{
  pinMode(speakerPin, OUTPUT);
}
 
void loop() {
  for (int i = 0; i < length; i++)
  {
    if (notes[i] == ' ')
    {
      delay(beats[i] * tempo); // rest
    }
    else
    {
      playNote(notes[i], beats[i] * tempo);
    }
    delay(tempo / 10);
  }
  delay(500);
}
cs



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int speakerpin = 4//스피커나 부저가 연결된 디지털핀 설정
 
int repeat = 0
 
void setup() 
{
}
 
void loop() 
{
  for(repeat=0; repeat < 5 ; repeat++){
    tone(speakerpin,300,1000);  //500: 음의 높낮이(주파수), 1000: 음의 지속시간(1초)
      delay(2000);
      }
}
cs


OLED 설명 필요 넘어가고


인체감지센서


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
int mandetectpin = 3;
int blueled = 7;
 
void setup() {
 
  Serial.begin(9600); /* PC모니터로 결과를 쉽게 확인하기위해 시리얼 통신을 정의해 줍니다.*/   
  pinMode(mandetectpin, INPUT); // 8번 핀으로 데이터를 값을 받습니다.
  pinMode(blueled, OUTPUT);
}
 
void loop() {
/*조건문인 IF문을 사용하여 진동 결과 출력*/
 
  if (digitalRead(mandetectpin) == HIGH)
  {
    Serial.println("Man detect ");  // 빛이차단되면 출력됩니다
    digitalWrite(blueled, LOW); //Turn ON Led
  }
  else
  {
    Serial.println("non-detect");
    digitalWrite(blueled, HIGH); //Turn ON Led
  }
  
  //delay(500);
}
 
cs



소리센서


사운드센서의 아날로그 출력을 받아 시리얼 모니터에 출력한다


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
int blueled = 7;
int threshold = 250//Change This
int volume;
 
void setup() {                
  Serial.begin(9600); // For debugging
  pinMode(blueled, OUTPUT);     
}
 
void loop() {
  
  volume = analogRead(A2); // Reads the value from the Analog PIN A0
  //데이터 값 출력
   Serial.println(volume);
   //delay(100);
    
  if(volume >= threshold){
    digitalWrite(blueled, HIGH); //Turn ON Led
  }  
  else{
    digitalWrite(blueled, LOW); // Turn OFF Led
  }
 
}
 
cs


사운드 센서의 디지털 출력을 받아 불루 LED 견다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
int blueled = 7;
int soundpin = 11//Change This
//int threshold = 250; //Change This
int volume;
 
void setup() {
 
  Serial.begin(9600); /* PC모니터로 결과를 쉽게 확인하기위해 시리얼 통신을 정의해 줍니다.*/   
  pinMode(soundpin, INPUT); // 11번 핀으로 데이터를 값을 받습니다.
  pinMode(blueled, OUTPUT);
}
 
void loop() {
/*조건문인 IF문을 사용하여 빛이 차단되면 "Dark"문구가 출력 됩니다.*/
 
  volume = digitalRead(soundpin); // Reads the value from the Analog PIN A0
  //데이터 값 출력
   Serial.println(volume);
   //delay(100);
  if (digitalRead(soundpin) == HIGH)
  {
    digitalWrite(blueled, LOW); //Turn ON Led; 
    delay(300);
  }
  else
  {
    digitalWrite(blueled, HIGH);
    delay(300);
  }
  
  //delay(100);
}
 
cs



사운드센서 아날로그 값 읽어서 블루 LED 켠다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
int blueled = 7;
int threshold = 520//Change This
int volume;
 
void setup() {                
  Serial.begin(9600); // For debugging
  pinMode(blueled, OUTPUT);     
}
 
void loop() {
  
  volume = analogRead(A2); // Reads the value from the Analog PIN A0
  //데이터 값 출력
   Serial.println(volume);
   //delay(100);
    
  if(volume >= threshold){
    digitalWrite(blueled, LOW); //Turn ON Led
  }  
  else{
    digitalWrite(blueled, HIGH); // Turn OFF Led
  }
 
}
 
cs



초음파센서


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
int echoPin = 9;
int trigPin = 10;
 
void setup() {
  Serial.begin(9600);
  // trig를 출력모드로 설정, echo를 입력모드로 설정
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}
 
void loop() {
  float duration, distance;
  
  // 초음파를 보낸다. 다 보내면 echo가 HIGH 상태로 대기하게 된다.
  digitalWrite(trigPin, HIGH);
  delay(10);
  digitalWrite(trigPin, LOW);
  
  // echoPin 이 HIGH를 유지한 시간을 저장 한다.
  duration = pulseIn(echoPin, HIGH); 
  // HIGH 였을 때 시간(초음파가 보냈다가 다시 들어온 시간)을 가지고 거리를 계산 한다.
  distance = ((float)(340 * duration) / 10000/ 2;  
  
  Serial.print(distance);
  Serial.println("cm");
  // 수정한 값을 출력
  delay(500);
}
 
cs


RGB LED1


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
int redPin = 5;
int greenPin = 6;
int bluePin = 7;
 
void setup()
{
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT); 
}
 
void loop()
{
  setColor(0255255); // red
  delay(1000);
  setColor(2550255); // green
  delay(1000);
  setColor(2552550); // blue
  delay(1000);
}
 
void setColor(int red, int green, int blue)
{
  digitalWrite(redPin, red);
  digitalWrite(greenPin, green);
  digitalWrite(bluePin, blue); 
}
 
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
int redPin = 5;
int greenPin = 6;
int bluePin = 7;
 
void setup()
{
  pinMode(redPin, OUTPUT);
 
 pinMode(greenPin, OUTPUT);
 pinMode(bluePin, OUTPUT); 
}
 
void loop()
{
  setColor(25500); // red
  delay(1000);
  setColor(02550); // green
  delay(1000);
  setColor(00255); // blue
  delay(1000);
  setColor(2552550); // yellow
  delay(1000); 
  setColor(80080); // purple
  delay(1000);
  setColor(0255255); // aqua
  delay(1000);
  setColor(255134238); // aqua
  delay(1000);
}
 
void setColor(int red, int green, int blue)
{
  analogWrite(redPin, red);
  analogWrite(greenPin, green);
  analogWrite(bluePin, blue); 
}
 
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
int redPin = 5;
int greenPin = 6;
int bluePin = 7;
 
void setup()
{
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT); 
}
 
void loop()
{
  setColor(0255255); // red
  delay(1000);
  setColor(2550255); // green
  delay(1000);
  setColor(2552550); // blue
  delay(1000);
}
 
void setColor(int red, int green, int blue)
{
  digitalWrite(redPin, red);
  digitalWrite(greenPin, green);
  digitalWrite(bluePin, blue); 
}
 
cs


RGB LED2


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
int redPin = 27;
int greenPin = 25;
int bluePin = 23;
 
void setup()
{
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT); 
}
 
void loop()
{
  setColor(0255255); // red
  delay(1000);
  setColor(2550255); // green
  delay(1000);
  setColor(2552550); // blue
  delay(1000);
}
 
void setColor(int red, int green, int blue)
{
  digitalWrite(redPin, red);
  digitalWrite(greenPin, green);
  digitalWrite(bluePin, blue); 
}
 
cs


진동센서


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
int vibpin = 22;
int blueled = 7;
 
void setup() {
 
  Serial.begin(9600); /* PC모니터로 결과를 쉽게 확인하기위해 시리얼 통신을 정의해 줍니다.*/   
  pinMode(vibpin, INPUT); // 8번 핀으로 데이터를 값을 받습니다.
  pinMode(blueled, OUTPUT);
}
 
void loop() {
/*조건문인 IF문을 사용하여 진동 결과 출력*/
 
  if (digitalRead(vibpin) == HIGH)
  {
    Serial.println("vib ");  // 빛이차단되면 출력됩니다
    digitalWrite(blueled, LOW); //Turn ON Led
  }
  else
  {
    Serial.println("non-vib");
    digitalWrite(blueled, HIGH); //Turn ON Led
  }
  
  //delay(500);
}
 
cs