반응하는 인형 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 개발 가이드 3 - 센서 다루기 (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 |
취업, 창업의 막막함, 외주 관리, 제품 부재!
당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약,
아이디어는 있지만 구현할 기술이 없는 막막함.
우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.
이제 고민을 멈추고, 캐어랩을 만나세요!
코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.
제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!
귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.
캐어랩