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

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

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


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

페이지 정보

작성자 조숩인 작성일2022-05-07 06:59 조회5,926회 댓글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

조회수 5,926

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
전체 스위치 센서
질문게시판 목록
제목 작성자 작성일 조회
질문 아두이노 스케치 후 pc usb 연결없이 사용한가요?댓글[1] 까치 22-05-20 1024
질문 atmega128 서보모터와 초음파센서댓글[5] tmiae 22-05-20 2440
질문 avr compiler 종류 질문입니다!댓글[3] 민준싸 22-05-20 1498
질문 컴퓨터 usb연결시 정상 작동하나 9V건전지 외부전원 연결 시 작동하지 않는 문제댓글[4] 이미지첨부파일 보겐을운용 22-05-19 1903
질문 아두이노 dac 연결댓글[7] 이미지첨부파일 kodory 22-05-19 2045
질문 아두이노 millis ->atmega128에서 사용하고 싶습니다. akmong413 22-05-19 1186
답변 답변글 답변 : 아두이노 millis ->atmega128에서 사용하고 싶습니다.댓글[2] master 22-05-19 1731
질문 아트메가 모터드라이브와 초음파 센서 연동 질문입니다댓글[1] 123424135123q 22-05-19 1234
질문 스텝모터 드라이버 선정 질문드립니다. 아흐흑 22-05-18 1331
답변 답변글 답변 : 스텝모터 드라이버 선정 질문드립니다.댓글[1] 이미지 master 22-05-19 1197
질문 아두이노로 모터+드라이버 제어댓글[6] 모토 22-05-18 2570
질문 온도센서로 서보모터 제어 코딩댓글[1] 진수네1조 22-05-18 1587
질문 라즈베리파이 웹캠 데이터 아두이노 전송 (초보)댓글[3] 전자과 22-05-17 1384
질문 아두이노 코딩 도와주세요 (초음파센서와 금속감지센서로 서보모터 제어하기) 이현주 22-05-17 2043
답변 답변글 답변 : 아두이노 코딩 도와주세요 (초음파센서와 금속감지센서로 서보모터 제어하기) master 22-05-18 1538
질문 아두이노 우노 2개와 앱인벤터끼리의 블루투스 통신 방법댓글[3] 이미지첨부파일 pyoleo 22-05-17 2244
질문 졸업작품 첨부파일 ejdog 22-05-16 1558
질문 PCB의 커넥터 연결관련 이슈같은데.. 원인을 정확히 모르겠습니다.댓글[2] 이미지 설계못해서개털림 22-05-16 1682
질문 STM32F767 사용중인데 발열이 발생합니다.댓글[5] 존클라프 22-05-16 2991
질문 리니어 레일 거리 조절댓글[1] 면수 22-05-16 1440
질문 아두이노 심전도 센서 BPM 계산댓글[3] 쥬쥬 22-05-16 1657
질문 아두이노 서로 다른 전압을 가진 부품 제어 이미지 chovo 22-05-16 1214
질문 앱인벤터 질문입니다.댓글[2] 이미지 귀끠우유 22-05-16 2250
질문 아두이노 우노끼리 블루투스 통신댓글[1] 첨부파일 pyoleo 22-05-16 1771
질문 마이크로 받은 입력을 주파수로 변경댓글[3] 생늧판출 22-05-16 1402
질문 while문 안 if문 빠져나오는 방법 kyho3855 22-05-15 1426
답변 답변글 답변 : while문 안 if문 빠져나오는 방법댓글[1] master 22-05-16 1257
질문 초음파센서로 속도구하기(코드 합치는법) 쥰니 22-05-15 1600
답변 답변글 답변 : 초음파센서로 속도구하기(코드 합치는법)댓글[1] master 22-05-16 1331
질문 360서보모터 질문입니다댓글[1] 한잔해2 22-05-14 1357
게시물 검색

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
모바일버전으로보기