질문게시판 > 아두이노-앱인벤터 관련 질문입니다.

인기검색어 > 아두이노 센서 ATMEGA128

최신글 질문게시판 동영상강좌 가입하기

▼ BASIC4MCU 후원업체 신제품 정보 ▼

▲ BASIC4MCU 후원업체 신제품 정보 ▲

BASIC4MCU > 질문게시판

아두이노-앱인벤터 관련 질문입니다.

페이지 정보

작성자 아하어렵다 작성일21-06-09 22:17 조회7,859회 댓글3건

본문

안녕하세요. 아두이노 우노, 아두이노 그로브 베이스 쉴드, L298P 모터 드라이버 쉴드를 가지고 앱 기반 공기청정기를 만드는 중인 사람입니다. 다름이 아니라 아래의 아두이노 코딩을 업로드하여 공기청정기를 구동하는 것과 'Arduino BlueControl' 이라는 앱을 통해 입력한 숫자값을 블루투스 센서(HC-06)를 통해 공기청정기를 구동하는 것에 문제가 없습니다만, 앱인벤터를 통해 해당 디자인과 블록 코딩으로 실행시 블루투스 연결, 해제만 가능하고 미세먼지 농도, 온습도를 포함하는 기타 센서들의 값들이 앱 상에서 표시되지 않고, 각 단계별로 설정한 버튼도 작동하지 않음을 발견하게 되었습니다. 2주를 고민하고 수정했는데 변함이 없어서 도움을 구하고자 질문을 올립니다. 각 코딩은 아래에 첨부했습니다.

 

 

 

<아두이노 코딩>

 

#include 

 

#include 

#include 

#include 

 

 

#define DHTPIN 4

#define LED_PIN 6 // neo pixel 6번 핀

#define PPD42NS 8 // PPD42NS input D8

#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);

#include "CO2Sensor.h"

Adafruit_NeoPixel strip = Adafruit_NeoPixel(8, LED_PIN, NEO_GRB + NEO_KHZ800);

 

 

unsigned long duration;

unsigned long starttime;

unsigned long endtime;

unsigned long sampletime_ms = 15000 ; /* 30초 동안 미세먼지 양 누적 */

unsigned long lowpulseoccupancy = 0;

float ratio = 0; /* 비율값 저장 */

float concentration = 0; /* 농도값 저장 */

float ugm3 = 0;

int discom = 0;

CO2Sensor co2Sensor(A2, 0.99, 100);

int E1 = 10;

int M1 = 12;

SoftwareSerial BT(2, 3);//블루투스 모듈 선언

char data; // 블루투스 통신을 통해 받은 값을 저장하는 변수를 만들어줍니다.

 

void setup()

{

 

  int i;

 

  Serial.begin(9600);

  BT.begin(9600);

 

  pinMode(LED_PIN, OUTPUT);

  pinMode(PPD42NS, INPUT);

  pinMode(M1, OUTPUT);

 

  strip.begin();

  strip.setBrightness(50);

  strip.show();

 

  starttime = millis();//get the current time;

  digitalWrite(M1, HIGH);

  analogWrite(E1, 200);

  for (i = 0; i < 5; i++) 

  {

    colorWipe(strip.Color(255, 0, 0), 90);

    colorWipe(strip.Color(255, 255, 0), 90);

    colorWipe(strip.Color(0, 255, 0), 90);

    colorWipe(strip.Color(0, 0, 255), 90);

  }

  Serial.println("Start");

  co2Sensor.calibrate();

  strip.begin();

  strip.setBrightness(50);

  strip.show(); // Initialize all pixels to 'off'

 

}

 

void loop()

{

  byte h = dht.readHumidity();

  byte t = dht.readTemperature();

  int val = co2Sensor.read();

  duration = pulseIn(PPD42NS, LOW);

  lowpulseoccupancy = lowpulseoccupancy + duration;

  endtime = millis();

 

  

  

  if (BT.available()) // 블루투스 모듈을 통해 새로운 값을 받으면 (회로도 1에서 값을 보내면)

  {

    data = BT.read();

 

     switch (data) {

      case'0':

        while (BT.available() == 0)

          device_off();

        break;

      case'1':

        break; // 자동모드

      case'2':

        while (BT.available() == 0)

          phase2();

        break;

      case'3':

        while (BT.available() == 0)

          phase3();

        break;

      case'4':

        while (BT.available() == 0)

          phase4();

        break;

    }

 

 

  } else if ((endtime - starttime) > sampletime_ms) //if the sampel time == 15s

  {

    colorWipe(strip.Color(0, 0, 0), 100);// led 초기화

    delay(1000);

 

    ratio = lowpulseoccupancy / (sampletime_ms * 10.0); /* 백분율로 계산 */

    concentration = 1.1*pow(ratio, 3)-3.8*pow(ratio, 2)+520*ratio+0.62; /* using spec sheet curve */

    ugm3 = concentration * 100 / 13000; /*m3당 마이크로그램 미세먼지 값*/

    discom =  0.81 * t + 0.01 * h * (0.99 * t - 14.3) + 46.3;

 

    

    

 

 

 

  if (lowpulseoccupancy) {

 

    if (ugm3 > 75) {

      phase4();

    } else if (ugm3 > 35) {

      phase3();

    } else if (ugm3 > 15) {

      phase2();

    } else {

      phase1();

    }

 

 

 

  }

 

  Serial.print("lowpulseoccupancy: ");

  Serial.print(lowpulseoccupancy);

  Serial.print(" ratio: " );

  Serial.print(ratio);

  Serial.print(" ugm3: ");

  Serial.println(ugm3); /*미세먼지 농도(단위:마이크로그램)*/

 

  Serial.print("Humidity: ");

  Serial.print(h);

  Serial.print(" %\t");

  Serial.print("Temperature: ");

  Serial.print(t);

  Serial.println(" C");

  Serial.print("Discomfort index: ");

  Serial.println(discom);

  Serial.print("CO2 value:  ");

  Serial.println(val);

 

  BT.print(ugm3);

  BT.print("|");

  BT.print(t);

  BT.print("|");

  BT.print(h);

  BT.print("|");

  BT.print(discom);

  BT.print("|");

  BT.print(val);

 

 

 

 

  if (val > 1000 ) {

    Serial.println ("Exceed safe value of 1000ppm, ventilate!" );

 

  }

 

 

 

  lowpulseoccupancy = 0; /*초기화*/

  starttime = millis();/*시작 시간 초기화*/

 }

}

 

void device_off()

{

  digitalWrite(M1, HIGH);

  analogWrite(E1, 0);

  colorWipe(strip.Color(0, 0, 0), 100); // 공기청정기 off

}

void phase1()

{

  digitalWrite(M1, HIGH);

  analogWrite(E1, 0);

  colorWipe(strip.Color(0, 0, 255), 100); // blue

}

void phase2()

{

  digitalWrite(M1, HIGH);

  analogWrite(E1, 150);

  colorWipe(strip.Color(0, 255, 0), 100); // green

}

void phase3()

{

  digitalWrite(M1, HIGH);

  analogWrite(E1, 200);

  colorWipe(strip.Color(255, 255, 0), 100); // yellow

}

void phase4()

{

  digitalWrite(M1, HIGH);

  analogWrite(E1, 255);

  colorWipe(strip.Color(255, 0, 0), 100); // Red

}

 

// Fill the dots one after the other with a color

void colorWipe(uint32_t c, uint8_t wait) {

  for (uint16_t i = 0; i < strip.numPixels(); i++) {

    strip.setPixelColor(i, c);

    strip.show();

    delay(wait);

  }

}

 

< 앱인벤터 블록 코딩 >

 

d9f024f6b468d070057198f78346a555_1623244190_0533.PNG
d9f024f6b468d070057198f78346a555_1623244190_1044.PNG
d9f024f6b468d070057198f78346a555_1623244190_1456.PNG
d9f024f6b468d070057198f78346a555_1623244190_181.PNG
d9f024f6b468d070057198f78346a555_1623244190_219.PNG
d9f024f6b468d070057198f78346a555_1623244190_2582.PNG
d9f024f6b468d070057198f78346a555_1623244190_2976.PNG
 

< 앱 인벤터 디자인 >

 

 

 

 

 

 

  • BASIC4MCU 작성글 SNS에 공유하기
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기
  • 카카오톡으로 보내기

댓글 : 3

조회수 : 7,859

아하어렵다님의 댓글

아하어렵다 작성일

아두이노 코딩 #include 뒤의 글자가 자꾸 지워지네요 ㅠㅠ
본문 #include 뒤의 글자는
#include <SoftwareSerial.h>
#include <Adafruit_NeoPixel.h>
#include <CO2Sensor.h>
#include <DHT.h>
입니다

master님의 댓글

master 작성일

#include 뒤의 글자가 지워지는 이유는 네이버에서 작성한 코드를 복사했을 때 발생하는 문제입니다.
네이버측에서 삭제하는 것과 마찬가지죠, 원 소스코드를 복사해야지 문제가 생기지 않습니다.

master님의 댓글

master 작성일

여러바이트 전송하는 것은 쉽지 않습니다.
시리얼데이터 전송예제를 많이 공부한 후에 시도해보세요

게시물 검색

BASIC4MCU > 질문게시판 목록

제목 날짜
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은… 스태프  19-01-15
공지 사이트 이용 안내 댓글[25] master  17-10-29
질문 lcd 1602에 특수문자를 출력하는 방법을 알고싶습니… 댓글[3] dndktn 새글 22-08-12
질문 stm32 wifi 파일전송 댓글[3] 하리 새글 22-08-11
질문 회로 구성 수정 댓글[2] 첨부파일픽공부 새글 22-08-11
질문 아두이노 와이파이통신 질문 있습니다 댓글[1] 학생 새글 22-08-11
질문 포토다이오드와의 연결 질문합니다. 댓글[7] 첨부파일박윤모  22-08-10
질문 회로 구성 댓글[4] 픽공부  22-08-10
질문 아두이노 센서, 와이파이, 블루투스 연결 댓글[1] pattern  22-08-10
질문 PIC 블루투스 연결 댓글[19] 픽공부  22-08-09
질문 PIC18F452 블루투스 연결 댓글[4] 마이컴  22-08-08
질문 아두이노 코드 해석을 못하겠습니다... 댓글[2] 김가헌  22-08-08
질문 아두이노 코드를 avr로 변환해 주세요 ...ㅠ 댓글[3] 옹냥냥  22-08-08
질문 아두이노 녹음-스피커모듈 관련 질문있습니다 ㅠㅠ 댓글[2] 방귀뿡뿡  22-08-08
질문 Serial EEPROM 실수값 저장.. 댓글[2] 첨부파일광이  22-08-07
질문 STM32 Live Expression 값들이 깜빡이는… 댓글[3] 둠둠  22-08-05
질문 아두이노 ESP32 wifi module 댓글[1] Yoon  22-08-03
질문 atmega128과 dht11, lcd를 연결했는데 0… 댓글[1] 고양이33  22-08-02
질문 ATMEGA 128 코드를 합치려고 하는데 어렵네요 댓글[2] 고양이33  22-08-02
질문 서보모터 제어에 대해 질문있습니다. 댓글[2] 첨부파일뉴비에오  22-07-30
질문 적외선 통신 알려주실분있나요 ㅠㅠ 댓글[1] hkjsj10  22-07-30
질문 아두이노 관련 궁금합니다. 댓글[1] 뱝뱝  22-07-28
질문 아두이노 우노 MCP4725 댓글[3] opqr  22-07-27
질문 레오나르도 인체감지센서 알림 안옴 면지지  22-07-24
답변 답변 : 레오나르도 인체감지센서 알림 안옴 master  22-07-25
질문 Uno에서 엔코더값 놓치는 이유가 뭘까요... 댓글[3] MAKTUB  22-07-24
질문 아두이노 압력센서 연동 질문 댓글[4] dbice  22-07-23
질문 아두이노 버튼 누르기 문의 댓글[1] 김형근  22-07-23
질문 HM10 다중페어링 댓글[1] ㅎㅋㅎㅋㅎ  22-07-22
질문 모터드라이브 선정 댓글[6] 조숩인  22-07-22
게시물 검색


Privacy Policy
MCU BASIC ⓒ 2017
PC버전