반응형
반응하는 인형 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); } |
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[] = { 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4 }; // 해당하는 음이 울리는 길이 설정 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[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 }; // 음계 톤 설정 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(0, 255, 255); // red delay(1000); setColor(255, 0, 255); // green delay(1000); setColor(255, 255, 0); // 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(255, 0, 0); // red delay(1000); setColor(0, 255, 0); // green delay(1000); setColor(0, 0, 255); // blue delay(1000); setColor(255, 255, 0); // yellow delay(1000); setColor(80, 0, 80); // purple delay(1000); setColor(0, 255, 255); // aqua delay(1000); setColor(255, 134, 238); // 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(0, 255, 255); // red delay(1000); setColor(255, 0, 255); // green delay(1000); setColor(255, 255, 0); // 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(0, 255, 255); // red delay(1000); setColor(255, 0, 255); // green delay(1000); setColor(255, 255, 0); // 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 |
반응형
'개발자 > Arduino' 카테고리의 다른 글
Arduino NANO 33 BLE Sense 개발 가이드 1 - 시작하기 (2) | 2020.05.01 |
---|---|
Ultrasonic Sensors: Comparison and Test (US42V2, JSN-SR04T, and US-100) (0) | 2019.05.22 |
아두이노 먼지센서 PM2005, PM2007, PM2008M 예제코드 (0) | 2018.11.23 |
레이저 미세먼지 센서 PM2008M 을 아두이노메가 측정 코드와 결과 (2) | 2018.11.22 |
아두이노 라이브러리 리스트 Arduino Library List 1470개의 라이브러리 모아놓은 곳 (0) | 2018.04.24 |
MMA8452Q 3축 가속도 센서 모듈 아두이노 코드 digital accelerometer (0) | 2018.04.19 |
조도 빛 센서 TMD27723 센서 - ambient light sensing (ALS) (0) | 2018.04.19 |
bmp180 디지털 압력센서 아두이노 라이브러리 테스트 (0) | 2018.04.19 |
더욱 좋은 정보를 제공하겠습니다.~ ^^