BASIC4MCU | 질문게시판 | 개인 활동 스마트 선풍기 만들기 질문
페이지 정보
작성자 김창현 작성일2020-12-11 16:49 조회3,463회 댓글2건본문
안녕하세요! 덕분에 많이 보고 배우고 있습니다 ^^
이번에 제가 스마트 선풍기를 하나 만들어 보려고 부품도 사고 회로구성과 코딩도 해봤는데 코딩이 아직 익숙하지않아서
제 마음처럼 움직이질않네요..그래서 도움을 구하고자 이글을 써봅니다.
제가 구매한 제품은 첨부해 두었구요
이걸로 하고싶은건 음성인식 을 받아( "켜" , "꺼" )껐다가 킬수있고, 초음파센서를 달아 센서값이 변하면(근접) 그쪽으로 선풍기머리가 따라가는 스마트 선풍기를 구상중입니다.
음성인식 초음파 각각 코딩하여 동작하는걸 확인하고 음성인식 + 12v팬 + 초음파를 한 회로로 연결하는데 잘 되지않습니다
초음파가 사물을 따라가야는데 제멋대로 입니다 ㅜㅜ
궁금한 부분은 12v팬을 아두이노와 연결하는 방법과 초음파의 사물 트랙킹 입니다.
거리센서는 거리마다 바람세기를 제어하고 싶어 샀는데 이것도 잘 모르겠습니다.
초음파 값으로 서보모터를 돌리고 서보모터가 선풍기머리를 돌리는 것입니다.
댓글 2
조회수 3,463김창현님의 댓글
김창현 작성일
제가 해본 코딩입니다
수정도 좋고요! 새로운걸 알려주셔도 너무 좋을거같습니다!
현재 코딩으로 하면 음성인식으로 켜지긴 하는데 꺼지지않습니다...ㅜㅜ 초음파도 잘 안되네요 아는대로 다 끼워넣어봤는데 안되서 단순하게 해봤지만 역시...
12v 팬은 tip120과 5V 2A DC 전원 어댑터, DC 배럴잭 파워 어댑터 - Female타입를 구매해서 택배 기다리는 중입니다.
#include <SoftwareSerial.h>
#include <LedControl.h>
#define fanPin 1
int parameter = 0;
SoftwareSerial mySerial(10, 11);
#include <Servo.h>
Servo myservo;
int trigPin1 = 2;
int echoPin1 = 3;
int trigPin2 = 4;
int echoPin2 = 5;
int trigPin3 = 6;
int echoPin3 = 7;
int one = 3;
int two;
float duration1, distance1;
float duration2, distance2;
float duration3, distance3;
// Din 핀을 12번, ClK핀을 11번 CS핀을 10번에 연결
// 매트릭스는 1개를 사용 선언
int voice_recogn=0;
void setup()
{
Serial.begin(9600); // 통신 속도 9600bps로 PC와 시리얼 통신 시작
mySerial.begin(9600); // 통신 속도 9600bps로 모듈과 시리얼 통신 시작
Serial.println("wait settings are in progress");
delay(1000);
mySerial.write(0xAA); // compact mode 사용
mySerial.write(0x37);
delay(1000);
mySerial.write(0xAA); // 그룹1 음성 명령어 imported
mySerial.write(0x21);
Serial.println("The settings are complete");
pinMode(fanPin, OUTPUT); //팬 셋업
myservo.attach(9);
myservo.write(37*(one-1));
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin2, INPUT);
pinMode(trigPin3, OUTPUT);
pinMode(echoPin3, INPUT);
}
void loop()
{
while(mySerial.available())
{
Serial.println("voice input");
voice_recogn=mySerial.read();
switch(voice_recogn)
{
case 0x11:
Serial.println("ON");
parameters(); //거리측정
FuncManualAction(); // 거리에 따른 팬 출력
attack(); // 초음파센서로 3방향 물체 감지
movement(); // 물체쪽으로 서보모터 회전
delay(1000);
break;
case 0x12:
Serial.println("OFF");
break;
}
}
}
void parameters () { //거리센서 함수
int volt = map(analogRead(A0), 0, 1023, 0, 5000);
parameter = (27.61 / (volt - 0.1696)) * 2000;
Serial.print(parameter); //거리값을 시리얼모니터로 출력해줍니다.
Serial.println(" cm");
Serial.println(" ");
delay(1000);
}
void FuncManualAction() { //팬 세기조절 함수
if (parameter>0 && parameter <= 50) {
analogWrite(fanPin, 0);
}
if (parameter>50 && parameter <=100) {
analogWrite(fanPin, 400);
}
if (parameter >= 101) {
analogWrite(fanPin, 600);
}
}
void attack () { //초음파센서 함수
digitalWrite(trigPin1, HIGH);
delay(5);
digitalWrite(trigPin1, LOW);
duration1 = pulseIn(echoPin1, HIGH);
distance1 = ((float)(340*duration1)/10000)/2;
Serial.print("Sensor1 : ");
Serial.print(distance1);
Serial.println("cm");
delay(5);
digitalWrite(trigPin2, HIGH);
delay(5);
digitalWrite(trigPin2, LOW);
duration2 = pulseIn(echoPin2, HIGH);
distance2 = ((float)(340*duration2)/10000)/2;
Serial.print("Sensor2 : ");
Serial.print(distance2);
Serial.println("cm");
delay(5);
digitalWrite(trigPin3, HIGH);
delay(5);
digitalWrite(trigPin3, LOW);
duration3 = pulseIn(echoPin3, HIGH);
distance3 = ((float)(340*duration3)/10000)/2;
Serial.print("Sensor3 : ");
Serial.print(distance3);
Serial.println("cm");
delay(5);
}
void movement () { // 서보모터 함수
if (distance1<distance2 && distance1<distance3) {
one--;
Serial.print ("one Down ");
Serial.println (one);
}else if (distance2<distance1 && distance2<distance3) {
Serial.print ("one stop ");
Serial.println (one);
}else if (distance3<distance1 && distance3<distance2) {
one++;
Serial.print ("one up ");
Serial.println (one);
}
if (one==0) {
one++;
}else if (one==6) {
one--;
}
two = 37*(one-1);
Serial.print ("one = ");
Serial.println (one);
Serial.print ("two = ");
Serial.println (two);
myservo.write(two);
delay(500);
}
master님의 댓글
master 작성일
음성인식 예제
초음파센서 예제
DC팬 ON/OFF 예제
각각 구동한 후에 합쳐서 완성하세요
미완성인 것을 합치면 더 어렵습니다.