질문게시판 > 아두이노 DHT11,팬모터,네오픽셀,적외선센서,블루투스(부기능코딩)

TODAY953 TOTAL2,152,339
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

아두이노 센서 ATMEGA128 PWM LED 초음파 AVR 블루투스 LCD UART 모터 적외선


BASIC4MCU | 질문게시판 | 아두이노 DHT11,팬모터,네오픽셀,적외선센서,블루투스(부기능코딩)

페이지 정보

작성자 조숩인 작성일2022-05-07 06:59 조회298회 댓글5건

본문

	학교에서 활동으로 프로그래밍 하고있는데요… 제발 살려주세요ㅠㅠ 마지막 합치는 단계에서 막혔어요.. 제가 원하는 코딩은 

1. 55%습도가 넘어가면 5초동안 팬모터가 켜졌다가 꺼짐
2. 앱에서 y버튼 누르면 5초동안 팬모터 켜짐
3. 슬라이더 제어로 표시된 값이 현재 습도값보다 낮으면 팬모터 켜짐
4. 적외선 센서 거리값이 13미만일 때 네오픽셀 켜짐
5. 앱에서 o누르면 네오픽셀 5초동안 켜졌다가 꺼짐
이거입니다. (앱이랑도 연동) 각각 할 때는 원하는데로 잘 됐는데 합치니깐 모순이 너무 많네요 ㅠㅠㅠㅠㅜ 이상하게 작동돼요.. 1,2번은 잘 되는데 3번이 아예 안돼요 1번 팬모터 구동할 때 millis함수 쓰고 5초동안 켜졌다가 꺼지게 고쳐주시면 감사하겠습니다.. 그리고 4,5번은 잘 켜지긴하는데 값이 자꾸 튀는지 지멋대로 1초 켜지고 꺼지고 갑자기 켜졌다가 꺼지고 반복해요ㅜㅜ 제발 도와주세요.. 정말 고민 많이 하고 올리는 겁니다! 혹시 구동원리? 이해안가시는 거 있으면 댓글 남겨주세요..!  피드백 주시면 바로 센서들로 실험 가능해서 잘 된다면 기프티콘 드릴게유,,, 정말 간절합니다 도와주시면 감사하겠습니다. 아! delay함수 대신 millis함수로 사용해야합니당

#include "DHT.h"
#define DHTTYPE DHT11
#define DHTPIN A11 //DHT 핀번호
#define R A10 //릴레이 핀번호
DHT dht(DHTPIN, DHTTYPE);

#include <Adafruit_NeoPixel.h>
#define sensor A0 //적외선 센서 입력번호
#define Pin1 A8 //네오픽셀 핀번호
#define NUM_LEDS 11 //네오픽셀 갯수
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, Pin1, NEO_GRB + NEO_KHZ800);

#define CTIME 5000
#define LTIME 5000

void setup()
{
  Serial.begin(9600);
  Serial1.begin(9600);

  pinMode(DHTPIN, INPUT);
  pinMode(A9, OUTPUT);
  pinMode(R, OUTPUT);
  digitalWrite(A9, HIGH);

  dht.begin();

  strip.setBrightness(50);
  strip.begin();
  strip.show();
}


void loop()
{
  int depth;
  double humidity, humThHtoD;
  unsigned long ledTime = millis() - 10000, ledTime2 = millis() - 10000, coolTime = millis() - 10000, coolTime2 = millis() - 10000;
  unsigned long ledtime;
  char bt;
  String humThH = ""; //빈 문자 생성

  while (1)
  {
    humidity = dht.readHumidity();
    Serial.println(humidity);
    Serial1.println(humidity); //어플에 습도값 띄움

    if (humidity >= 55)
    {
      coolTime2 = millis();
    }
    else
    {
      digitalWrite(R, LOW);
    }

    bt = Serial1.read(); //어플에서 버튼을 읽었을 때
    /*앱에서 수동으로 팬모터 및 LED 제어*/
    if (bt == 'y') // fanManual
    {
      coolTime = millis();
    }
    else if ( bt == 'o') //ledManual
    {
      ledTime = millis();
    }
    /*앱에서 슬라이더로 팬모터 제어*/
    if (Serial1.available())
    {
      humThH = Serial1.readStringUntil('c');
      humThHtoD = humThH.toDouble();
      digitalWrite(R, humidity > humThHtoD ? HIGH : LOW);
    }


    // 팬모터 구동
    digitalWrite(R, (millis() - coolTime < CTIME) || (millis() - coolTime2 < CTIME) ? HIGH : LOW);

    //적외선 센서 거리
    depth = AtoD();
    //Serial.println(depth);


    /*적외선 거리 13 미만일 때 LED ON되게 millis로 제어*/
    if (depth < 13)
    {
      millis() - ledtime < LTIME;
    }
    else
    {
      LedOff();
      ledtime = millis();
    }

    //LED 구동
    (millis() - ledTime < LTIME) || (depth < 13) ? LedOn() : LedOff();

  }
}

void LedOn()
{
  for (int i = 0; i < strip.numPixels(); i++)
  {
    strip.setPixelColor(i, 0, 255, 255);
    strip.show(); //OFF
  }
}
void LedOff()
{
  for (int i = 0; i < strip.numPixels(); i++)
  {
    strip.setPixelColor(i, 0, 0, 0);
    strip.show(); //OFF
  }
}
int AtoD()
{
  int d;
  float volts;
  volts = analogRead(sensor) * 0.0048828125;
  // A/D 값 변환을 위한 5/1024(분해능)을 곱해준다
  d = 13 * pow(volts, -1); // pow(x,y):x의 y승
  return d;
}
  • BASIC4MCU 작성글 SNS에 공유하기
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기

댓글 5

조회수 298

master님의 댓글

master 작성일

//humThH=Serial1.readStringUntil('c');
      //humThHtoD=humThH.toDouble();
      //digitalWrite(R,humidity>humThHtoD ? HIGH:LOW);
3. 슬라이더 제어로 표시된 값이 현재 습도값보다 낮으면 팬모터 켜짐
아두이노에서 슬라이더 값을 받는 것이 간단하지 않습니다.
앱에서 아두이노가 보내주는 습도값을 받아서 슬라이더 값과 비교하고
팬모터 킬 일이 있으면 'y'를 보내세요

master님의 댓글

master 작성일

#include "DHT.h"
#define DHTTYPE DHT11
#define DHTPIN  A11 //DHT 핀번호
#define R      A10 //릴레이 핀번호
DHT dht(DHTPIN,DHTTYPE);
//
#include <Adafruit_NeoPixel.h>
#define sensor  A0 //적외선 센서 입력번호
#define Pin1    A8 //네오픽셀 핀번호
#define NUM_LEDS 11 //네오픽셀 갯수
Adafruit_NeoPixel strip=Adafruit_NeoPixel(NUM_LEDS,Pin1,NEO_GRB + NEO_KHZ800);
//
#define CTIME 5000
#define LTIME 5000
//
void setup(){
  pinMode(DHTPIN,INPUT);
  pinMode(A9,OUTPUT); digitalWrite(A9,HIGH);
  pinMode(R,OUTPUT);
  Serial.begin(9600);
  Serial1.begin(9600);
  dht.begin();
  strip.begin(); strip.setBrightness(50); strip.show();
}
//
void LedOn(){
  for(int i=0;i<strip.numPixels();i++)strip.setPixelColor(i,0,255,255);
  strip.show();
}
void LedOff(){
  for(int i=0;i<strip.numPixels();i++){ strip.setPixelColor(i,0,0,0); }
  strip.show();
}
//
int AtoD(){
  int d;
  float volts;
  volts=analogRead(sensor)*0.0048828125;
  d=13*pow(volts,-1); // pow(x,y):x의 y승
  return d;
}
//
bool humi_flag=0,depth_flag=0;
char bt;
int  depth;
unsigned long t,t1,coolTime,coolTime2,ledTime,ledTime2;
double humidity;
//
void loop(){
    unsigned long t=millis();
    //---------------------------------------
    if(t-t1>=1000){ t1=t; // 1초마다
      humidity=dht.readHumidity();
      Serial.println(humidity); Serial1.println(humidity); // 습도 출력
      //---------------------------------------
      if(humidity>=55){ // 1. 55%습도가 넘어가면
        if(humi_flag==0){ humi_flag=1; coolTime2=t+5000; }
      }
      else{ humi_flag=0; }
    }
    //---------------------------------------
    if(Serial1.available()){
      bt=Serial1.read();
      if    (bt=='y'){ coolTime=t+5000; } // fanManual // 2. 앱에서 y버튼 누르면 팬모터 5초동안 켜졌다가 꺼짐
      else if(bt=='o'){ ledTime =t+5000; } // ledManual // 5. 앱에서 o누르면 네오픽셀 5초동안 켜졌다가 꺼짐
    }
    //---------------------------------------
    // 팬모터 구동
    if((coolTime>t)||(coolTime2>t)){ digitalWrite(R,1); } // 5초동안 팬모터가 켜졌다가
    else                          { digitalWrite(R,0); } // 꺼짐
    //---------------------------------------
    // 4. 적외선 센서 거리값이 13미만일 때 네오픽셀 켜짐
    depth=AtoD(); // Serial.println(depth);
    if(depth<13){ // 적외선 거리 13 미만일 때 5초동안 LED ON
      if(depth_flag==0){ depth_flag=1; ledTime2=t+5000; }
    }
    else{ depth_flag=0; }
    //---------------------------------------
    //LED 구동
    if((ledTime>t)||(ledTime2>t)){ LedOn():  } // 5초동안 led가 켜졌다가
    else                        { LedOff(); } // 꺼짐
}

조숩인님의 댓글

조숩인 댓글의 댓글 작성일

알려주신데로 해봤는데 led가 항상 켜진상태로 있다가 13미만이면 5초동안 켜지고 꺼집니다. 13미만이 아닐 때는 또 항상 켜진상태로 유지됩니다..
조금 수정하여 led는 이런식으로 바꾸었는데 손으로 대고 5초 이후에 켜지고 손을 떼면 바로 꺼지는 상태로 돼요 이 방법이 스쳐지나가는 물건에도 감지를 안해서 좋은 방법인 거 같은데 5초 동안 거리를 인식하고 5초만 켜지게 할 수 있는 if문은 무엇을 쓰는게 좋을까요..??
depth = AtoD();
  if (depth < 13)
  {
    if (depth_flag == 0)
    {
      ledTime2 = t + 5000;
      depth_flag = 1;
    }
  }
  else
  {
    depth_flag = 0;
  }



  //LED ON, OFF
  if ((ledTime > t) || (ledTime2 < t))
  {
    LedOn();
  }
  else
  {
    LedOff();
  }
}

master님의 댓글

master 작성일

led가 항상 켜진상태로 있다가 13미만이면 5초동안 켜지고 꺼집니다. 13미만이 아닐 때는 또 항상 켜진상태로 유지됩니다..
//
  //LED 구동
    if((ledTime>t)||(ledTime2>t)){ LedOn():  } // 5초동안 led가 켜졌다가
    else                        { LedOff(); } // 꺼짐
ledTime2는 정상적으로 동작하고 있는 것으로 보입니다.
ledTime이 문제가 있겠죠
 else if(bt=='o'){ ledTime =t+5000; } // ledManual // 5. 앱에서 o누르면 네오픽셀 5초동안 켜졌다가 꺼짐
앱에서 'o'를 계속 주고 있는 것 아닌지 체크하세요

master님의 댓글

master 작성일

void loop(){
    unsigned long t=millis();
중요한 것은 아니지만
void loop(){
    t=millis();
이렇게 수정하세요

질문게시판HOME > 질문게시판 목록

MCU, AVR, 아두이노 등 전자공학에 관련된 질문을 무료회원가입 후 작성해주시면 전문가가 답변해드립니다.
ATMEGA128PWMLED초음파
아두이노AVR블루투스LCD
UART모터적외선ATMEGA
전체 스위치 센서
질문게시판 목록
제목 작성자 작성일 조회
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은 질문게시판에서만 작성 가능합니다. 스태프 19-01-15 9600
공지 사이트 이용 안내댓글[24] master 17-10-29 29473
질문 아두이노 심전도 센서 BPM 계산댓글[1] 새글 쥬쥬 11:15 11
질문 아두이노 서로 다른 전압을 가진 부품 제어 이미지새글 chovo 10:09 11
질문 앱인벤터 질문입니다.댓글[2] 이미지새글 귀끠우유 09:51 15
질문 아두이노 우노끼리 블루투스 통신댓글[1] 새글첨부파일 pyoleo 02:18 21
질문 마이크로 받은 입력을 주파수로 변경댓글[3] 새글 생늧판출 01:37 18
질문 while문 안 if문 빠져나오는 방법 새글 kyho3855 22-05-15 16
답변 답변글 답변 : while문 안 if문 빠져나오는 방법 새글 master 07:19 15
질문 초음파센서로 속도구하기(코드 합치는법) 새글 쥰니 22-05-15 29
답변 답변글 답변 : 초음파센서로 속도구하기(코드 합치는법) 새글 master 06:50 12
질문 360서보모터 질문입니다댓글[1] 한잔해2 22-05-14 59
질문 아두이노 초보 24V DC 제품 제어댓글[2] 제로펲시 22-05-13 57
질문 임베디드 시스템 디지털 도어락 구현댓글[1] 이미지첨부파일 ejdog 22-05-12 50
질문 임베디드 시스템 디지털 도어락 구현댓글[1] ejdog 22-05-12 46
질문 ATMEGA128 TCCR2 = 0X0B가 의미하는것은 무엇인지 궁금합니다. dfas123 22-05-12 85
답변 답변글 답변 : ATMEGA128 TCCR2 = 0X0B가 의미하는것은 무엇인지 궁금합니다.댓글[1] master 22-05-12 92
질문 ATMEGA128 0번핀과1번핀 스위치를 누르면 LED점등 속도 제어댓글[3] dfas123 22-05-11 113
질문 아두이노 로드셀 관련 질문드립니다.댓글[1] 끼약 22-05-11 76
질문 앱 인벤터 및 아두이노 질문 suhosin 22-05-10 88
답변 답변글 답변 : 앱 인벤터 및 아두이노 질문댓글[1] master 22-05-11 89
질문 블루투스 모듈, 적외선온도센서, 스피커 모듈댓글[4] 죠르디 22-05-10 146
질문 Hm-10블루투스 사용하여 rc카 조종기로부터 데이터 받는방법을 모르겠습니다.댓글[1] 뚱보개 22-05-10 674
질문 아두이노 로드셀 [졸업작품]댓글[1] 이미지 졸업작품 22-05-10 125
질문 아두이노 조이스틱으로 스텝모터2개제어댓글[4] 초보진 22-05-10 181
질문 초음파센서 스텝모터 질문입니다댓글[1] 응애 22-05-09 145
질문 아두이노 적외선온도센서 스피커모듈댓글[4] 죠르디 22-05-09 148
질문 stm32 uart serial 통신댓글[1] 하리 22-05-09 136
질문 적외선,금속,조도,서보모터 질문댓글[2] 하허히 22-05-08 133
질문 analogRead 관련 문의댓글[2] toemm 22-05-08 107
게시물 검색

2022년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2021년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2020년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2019년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2018년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
Privacy Policy
MCU BASIC ⓒ 2020
모바일버전으로보기