개발자/Arduino

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

지구빵집 2018. 6. 22. 10:30
반응형




반응하는 인형 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









반응형