본문 바로가기

IT/IoT

Waspmote event-sensor-board 2.0

출처: http://www.libelium.com/downloads/documentation/v12/events-sensor-board_2.0.pdf

Hardware

일반적인 설명(General Description)

Waspmote가 수면 모드 또는 수심 모드 인 동안 센서는 이벤트 센서 보드 2.0에서 활성화됩니다. 센서가 이전에 프로그래밍 된 임계 값보다 높은 값을 선택하면 낮은 소비 상태에서 모트를 깨우고 어떤 센서가 신호를 생성했는지 알려주는 신호가 생성됩니다.

Waspmote가 활성 모드 (ON)에 있으면 인터럽트를 수신하고 이전 사례와 동일한 방식으로 인터럽트에 응답 할 수 있습니다.

조작:

이 보드는 출력이 임계 값과 비교되는 최대 8 개의 센서와 동시 연결을 허용하며, 모트를 깨우는 인터럽트 비트의 변경을 구현하는 OR 논리 게이트에서 결합됩니다. 의 가치

시스템이 디지털 포텐쇼미터 (디지털 포텐쇼미터)를 통해 제어됨에 따라 이러한 임계 값은 버스 I2C를 통해 마이크로 컨트롤러에 의해 프로그래밍됩니다.

mote를 중단 한 센서는 정상적인 작동 상태에서 Waspmote가 읽을 수있는 시프트 레지스터에서 식별됩니다.

스펙(Specifications)

무게(Weight): 20gr

치수(Dimensions): 73.5 x 51 x 1.3 mm

온도범위(Temperature Range): [-20oC, 65oC]

전기 특성(Electrical Characteristics)

보드 전원 전압(Board power voltages): 3.3V

센서 전원 전압(Sensor power voltage): 3.3V

최대 허용 전류(지속)(Maximum admitted current(continuous)): 200mA

최대 허용 전류(피크)(Maximum admitted current(peak)): 400mA

센서(Sensors)

온도 센서(Temperature Sensor (MCP9700A))

스펙(Specifications)

측정범위(Measurement range): [-40ºC,+125ºC]

출력 전압(Output voltage (0°)): 500mV

민감도(Sensitivity): 10mV/ºC

정확도(Accuracy): ±2ºC (range 0ºC ~ +70ºC), ±4ºC (range -40 ~ +125ºC)

일반적인 소비량(Typical consumption): 6μA Maximum consumption: 12μA

측정과정(Measurement Process)

MCP9700A는 온도 값을 비례 아날로그 전압으로 변환하는 아날로그 센서입니다. 출력 전압 범위는 100mV (-40°) ~ 1.75V (125°C)이며, 이로 인해 10mV/°C의 변동이 발생하며 0°C의 출력은 500mV입니다. 아날로그 센서이므로 커넥터 5 또는 6에 놓아야합니다.

마이크로 칩 센서의 데이터 시트에서 얻은 온도에 따른 MCP9700A 센서 출력 전압의 그래프

센서를 읽는 코드는 다음과 같습니다.

float value;
{
    SensorEventv20.ON();
    delay(10);
    value = SensorEventv20.readValue(SOCKET, SENS_TEMPERATURE);
}

값은 섭씨 온도 (ºC)의 온도가 저장되는 부동 변수입니다.

소켓은 센서가 놓여있는 커넥터를 나타냅니다 (이 센서의 경우 SENS_SOCKET5 및 SENS_SOCKET6 일 수 있음).

예제(Examples)

소스코드(Sources code)
/*  
 *  ------ [BS_01] Getting the value of temperature sensor -------- 
 *  
 *  Explanation: This example shows how to get the vale of temperature
 *  sensor. Temperature Sensor MCP9700A plugged to ANALOG6 pin
 *  
 *  Copyright (C) 2012 Libelium Comunicaciones Distribuidas S.L. 
 *  http://www.libelium.com 
 *  
 *  This program is free software: you can redistribute it and/or modify 
 *  it under the terms of the GNU General Public License as published by 
 *  the Free Software Foundation, either version 3 of the License, or 
 *  (at your option) any later version. 
 *  
 *  This program is distributed in the hope that it will be useful, 
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of 
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 *  GNU General Public License for more details. 
 *  
 *  You should have received a copy of the GNU General Public License 
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>. 
 *  
 *  Version:           0.1 
 *  Design:            Marcos Yarza
 *  Implementation:    Marcos Yarza
 */

float temperature = 0.0;
int light = 0;


void setup()
{
  // Open the USB connection
  USB.ON();
  USB.println(F("USB port started..."));

}

void loop()
{  
  // read temperature sensor connected to ANALOG6 pin
  temperature = Utils.readTemperature();
  USB.print(F("Value of temperature: "));
  USB.print(temperature);
  USB.println(F(" Celsius degrees"));
  
  USB.println(F("------------------------------------------------------"));
  delay(1000);
  
  
}
결과값(Output)

조도 센서(Luminosity Sensor (LDR))

스펙(Specifications)

어둠에 저항(Resistance in darkness): 20MΩ

빛에 저항(Resistance in light(10lux)): 5 ~ 20kΩ

스펙트럼 범위(Spectral range): 400 ~ 700nm

작동 온도(Operating temperature): -30oC ~ +75oC

최소 소비량(Minimum consumption): 0μA*

측정과정(Measurement Process)

이것은 감광성 부분에 수신되는 빛의 강도에 따라 전도도가 달라지며 측정 할 광도의 범위에 따라 커넥터 또는 소켓 1, 2 및 3 중 하나에 위치해야합니다.(1 매우 낮은 광도에서의 측정, 높은 광도에서의 측정에 대해서는 2와 3) 측정 가능한 스펙트럼 범위 (400nm - 700nm)는 사람의 눈으로 볼 수있는 스펙트럼과 일치하므로 사람의 눈으로 감지하는 것과 같은 방식으로 빛과 어둠을 감지하는 데 사용할 수 있습니다.

센서를 읽는 코드는 다음과 같습니다.

float value;
{
	 SensorEventv20.ON();
	 delay(10);
	 value = SensorEventv20.readValue(SOCKET, SENS_RESISTIVE);
}

value는 in kilohhms의 저항이 저장되는 float 변수입니다.

SOCKET은 센서가 놓여있는 커넥터를 나타냅니다. (이 센서의 경우 SENS_SOCKET1, SENS_SOCKET2 및 SENS_SOCKET3 일 수 있음).

예제(Examples)

소스코드(Sources code)
/*  
 *  --[Ag_4] - Reading the LDR sensor at Agriculture v20 board(Agriculture v20 보드에서 LDR 센서 읽기)-- 
 *  
 *  Explanation: Turn on the Agriculture v20 board and read the 
 *  LDR sensor on it once every second
 *  (설명 : Agriculture v20 보드를 켜고 1 초에 한 번씩 LDR 센서를 읽습니다.)
 *  
 *  Copyright (C) 2012 Libelium Comunicaciones Distribuidas S.L. 
 *  http://www.libelium.com 
 *  
 *  This program is free software: you can redistribute it and/or modify 
 *  it under the terms of the GNU General Public License as published by 
 *  the Free Software Foundation, either version 3 of the License, or 
 *  (at your option) any later version. 
 *  
 *  This program is distributed in the hope that it will be useful, 
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of 
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 *  GNU General Public License for more details. 
 *  
 *  You should have received a copy of the GNU General Public License 
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>. 
 *  
 *  Version:           0.1 
 *  Design:            David Gascón 
 *  Implementation:    Manuel Calahorra
 */

#include <WaspSensorAgr_v20.h>

// Variable to store the read luminosity value
float value;

void setup()
{
  // Turn on the USB and print a start message(USB를 키고, start message를 출력)
  USB.ON();
  USB.println(F("start"));
  delay(100);

  // Turn on the sensor board(sensor board 켜기)
  SensorAgrv20.ON();
  
  // Turn on the RTC(Real Time Clock 켜기)
  RTC.ON();
  
}
 
void loop()
{
  // Part 1: Sensor reading(파트1: 센서 읽기)
  // Turn on the sensor and wait for stabilization and response time(센서를 키고, 안정화 및 응답 시간을 기다림)
  SensorAgrv20.setSensorMode(SENS_ON, SENS_AGR_LDR);
  delay(100);
  
  // Read the LDR sensor (LDR 센서 읽기)
  value = SensorAgrv20.readValue(SENS_AGR_LDR);
  
  // Turn off the sensor (센서 끄기)
  SensorAgrv20.setSensorMode(SENS_OFF, SENS_AGR_LDR);
  
  // Part 2: USB printing (파트 2: USB 출력)
  // Print the LDR value through the USB (USB를 통해 LDR 값 출력)
  USB.print(F("Luminosity: "));
  USB.print(value);
  USB.println(F("V"));
  
  delay(1000);
}
결과값(Output)

적외선 센서(Presence Sensor (PIR))

스펙(Specifications)

높이(Height): 25.4mm

너비(Width): 24.3mm

길이(Length): 28.0mm

소비량(Consumption): 100μA

감지 범위(Range of detection): 6 ~ 7m

스펙트럼 범위(Spectral range): ~ 10μm

측정과정(Measurement Process)

PIR 센서 (Passive Infra-Red)는 적외선 수신 장치와 출력 신호를 높게 설정하여이 움직임을 반영하는 적외선 수신 장치의 수신 레벨 변화에 대한 모니터링을 기반으로 하는 초점 렌즈로 주로 구성된 초전 센서입니다.

디지털 센서이므로 커넥터 7에 있어야합니다. 10μm 스펙트럼은 대부분 36 ° C의 온도에서 방출되는 포유 동물의 열 방출에 해당합니다.

최대 감지 방향이 이벤트 센서 보드 2.0에 수직이되므로 PIR 센서를 사용할 때 Waspmote를 지면에 수직으로 놓는 것이 좋습니다.

센서를 읽는 코드는 다음과 같습니다.

int value;
{
	 SensorEventv20.ON();
	 delay(10);
	 value = SensorEventv20.readValue(SENS_SOCKET7);
}

값은 센서 상태 (존재 여부를 나타내는 높은 값 ('1') 또는 낮은 값 ('0'))이 저장되는 정수 변수입니다.

예제(Examples)

소스코드(Sources code)
/*  
 *  ------ [Ev_7] - Socket 7 Reading for Events v20(Socket 7 이벤트 읽기 v20)-------- 
 *  
 *  Explanation: Turn on the Events Board v20 waiting for an interruption
 *  from the PIR sensor, placed on socket 7, printing a message when received
 * (설명 : 이벤트 보드 v20을 켜고 소켓 7에있는 PIR 센서가 중단 될 때까지 대기하고 수신시 메시지를 인쇄하십시오.)
 *  
 *  Copyright (C) 2015 Libelium Comunicaciones Distribuidas S.L. 
 *  http://www.libelium.com 
 *  
 *  This program is free software: you can redistribute it and/or modify 
 *  it under the terms of the GNU General Public License as published by 
 *  the Free Software Foundation, either version 3 of the License, or 
 *  (at your option) any later version. 
 *  
 *  This program is distributed in the hope that it will be useful, 
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of 
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 *  GNU General Public License for more details. 
 *  
 *  You should have received a copy of the GNU General Public License 
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>. 
 *  
 *  Version:           0.2
 *  Design:            David Gascon
 *  Implementation:    Manuel Calahorra
 */

#include <WaspSensorEvent_v20.h>

// Variable to store the read value(읽은 값을 저장하는 변수)
float value;


void setup()
{
  // 1. Initialization of the modules(모듈의 초기화)

  // Turn on the USB and print a start message(USB를 켜고 시작 메시지를 인쇄)
  USB.ON();
  USB.println(F("start"));

  // Turn on the sensor board(센서 보드 켜기)
  SensorEventv20.ON();

  // Turn on the RTC(Real Time Clock 켜기)
  RTC.ON();
  
  // Firstly, wait for signal stabilization(첫째, 신호 안정화를 기다린다.)  
  while( digitalRead(DIGITAL5) == 1 )
  {    
    USB.println(F("...wait for stabilization"));
    delay(1000);
  }

  // Enable interruptions from the board(보드에서 중단을 가능하게 한다.)
  SensorEventv20.attachInt();

}


void loop()
{
  ///////////////////////////////////////
  // 1. Read the sensor voltage output(센서 전압 출력 읽기)
  ///////////////////////////////////////

  // Read the sensor voltage output(센서 전압 출력 읽기)
  value = SensorEventv20.readValue(SENS_SOCKET7);

  // Print the info(정보 출력)
  USB.print(F("Sensor output: "));    
  USB.print(value);
  USB.println(F(" Volts"));

  
  ///////////////////////////////////////
  // 2. Go to deep sleep mode(딥 슬립 모드로 이동)
  ///////////////////////////////////////
  USB.println(F("enter deep sleep"));
  PWR.deepSleep("00:00:00:10",RTC_OFFSET,RTC_ALM1_MODE1,SOCKET0_OFF);

  USB.ON();
  USB.println(F("wake up\n"));



  ///////////////////////////////////////
  // 3. Check Interruption Flags(인터럽트 플래그 검사)
  ///////////////////////////////////////
   
  // 3.1. Check interruption from Sensor Board(센서 보드의 중단 확인)
  if(intFlag & SENS_INT)
  {
    interrupt_function();
  }

  // 3.2. Check interruption from RTC alarm
  if( intFlag & RTC_INT )
  {   
    USB.println(F("-----------------------------"));
    USB.println(F("RTC INT captured"));
    USB.println(F("-----------------------------"));
  
    // clear flag(플래그 제거)
    intFlag &= ~(RTC_INT);
  }
}

 





/**********************************************
 *
 * interrupt_function()
 *  
 * Local function to treat the sensor interruption
 * (센서 인터럽트를 처리하는 로컬 함수)
 *
 *
 ***********************************************/
void interrupt_function()
{  
  // Disable interruptions from the board(보드에서 중단을 해제)
  SensorEventv20.detachInt();

  // Load the interruption flag(interruption 플래그 불러오기)
  SensorEventv20.loadInt();  

  // In case the interruption came from socket 7(소켓 7에서 가져온 중단의 경우)
  if( SensorEventv20.intFlag & SENS_SOCKET7)
  {
    USB.println(F("-----------------------------"));
    USB.println(F("Interruption from socket 7"));
    USB.println(F("-----------------------------"));
  }

  // Printing and enabling interruptions(interruption 출력 및 활성화)
  USB.println(F("Presence detected\n"));   

  // User should implement some warning(사용자는 몇 가지 경고를 구현해야함)
  // In this example, now wait for signal
  // stabilization to generate a new interruption
 // (이 예에서는 신호 안정화가 새로운 인터럽트를 생성 할 때까지 기다립니다.)
  while( digitalRead(DIGITAL5) == 1 )
  {    
    USB.println(F("...wait for stabilization"));
    delay(1000);
  }

  // Clean the interruption flag(interruption 플래그 제거)
  intFlag &= ~(SENS_INT);

  // Enable interruptions from the board(보드에서 인터럽트 활성화)
  SensorEventv20.attachInt();

}
결과값(Output)


'IT > IoT' 카테고리의 다른 글

Waspmote 802.15.4  (0) 2017.12.28
Waspmote ZigBee Networking Guide  (0) 2017.12.28
Waspmote PRO v1.2 실습  (0) 2017.12.28
Waspmote-SD Examples  (0) 2017.12.28
Waspmote Quickstart Guide  (0) 2017.12.28