Merge pull request #1483 from Zolertia/pm10-sensor

Added PM10, VAC and AAC sensor drivers
This commit is contained in:
George Oikonomou 2016-01-27 11:47:07 +00:00
commit 7d6966b22c
8 changed files with 533 additions and 3 deletions

View File

@ -4,10 +4,11 @@ CONTIKI_PROJECT = zoul-demo test-tsl2563 test-sht25 test-pwm test-power-mgmt
CONTIKI_PROJECT += test-bmp085-bmp180 test-motion test-rotation-sensor CONTIKI_PROJECT += test-bmp085-bmp180 test-motion test-rotation-sensor
CONTIKI_PROJECT += test-grove-light-sensor test-grove-loudness-sensor CONTIKI_PROJECT += test-grove-light-sensor test-grove-loudness-sensor
CONTIKI_PROJECT += test-weather-meter test-grove-gyro test-lcd CONTIKI_PROJECT += test-weather-meter test-grove-gyro test-lcd
CONTIKI_PROJECT += test-pm10-sensor test-vac-sensor test-aac-sensor
CONTIKI_TARGET_SOURCEFILES += tsl2563.c sht25.c bmpx8x.c motion-sensor.c CONTIKI_TARGET_SOURCEFILES += tsl2563.c sht25.c bmpx8x.c motion-sensor.c
CONTIKI_TARGET_SOURCEFILES += adc-sensors.c weather-meter.c grove-gyro.c CONTIKI_TARGET_SOURCEFILES += adc-sensors.c weather-meter.c grove-gyro.c
CONTIKI_TARGET_SOURCEFILES += rgb-bl-lcd.c CONTIKI_TARGET_SOURCEFILES += rgb-bl-lcd.c pm10-sensor.c
all: $(CONTIKI_PROJECT) all: $(CONTIKI_PROJECT)

View File

@ -0,0 +1,102 @@
/*
* Copyright (c) 2016, Zolertia - http://www.zolertia.com
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* \addtogroup zoul-examples
* @{
* \defgroup zoul-aac-sensor-test Test AAC sensor
*
* Demonstrates the operation of the current AAC analog sensor
* @{
*
* \file
* Example demonstrating the Zoul module on the RE-Mote & AAC sensor 0-5V 50Amps AC
*
* \author
* Javier Sánchez <asanchez@zolertia.com>
*/
#include "contiki.h"
#include "sys/etimer.h"
#include "sys/rtimer.h"
#include "dev/leds.h"
#include "dev/adc-sensors.h"
#include <stdio.h>
#include <stdint.h>
/*---------------------------------------------------------------------------*/
#define ADC_PIN 2
#define LOOP_PERIOD 2
#define LOOP_INTERVAL (CLOCK_SECOND * LOOP_PERIOD)
#define LEDS_PERIODIC LEDS_GREEN
/*---------------------------------------------------------------------------*/
static struct etimer et;
static uint16_t counter;
/*---------------------------------------------------------------------------*/
PROCESS(test_aac_sensor_process, "Test AAC sensor process");
AUTOSTART_PROCESSES(&test_aac_sensor_process);
/*---------------------------------------------------------------------------*/
PROCESS_THREAD(test_aac_sensor_process, ev, data)
{
PROCESS_BEGIN();
counter = 0;
/* Configure the ADC ports */
/* Use pin number not mask, for example if using the PA5 pin then use 5 */
adc_sensors.configure(ANALOG_AAC_SENSOR, ADC_PIN);
printf("AAC test application\n");
leds_on(LEDS_PERIODIC);
etimer_set(&et, LOOP_INTERVAL);
while(1) {
PROCESS_YIELD();
if(ev == PROCESS_EVENT_TIMER) {
leds_toggle(LEDS_PERIODIC);
printf("-----------------------------------------\n"
"Counter = 0x%08x\n", counter);
printf("AC Amps = %d mA\n", adc_sensors.value(ANALOG_AAC_SENSOR));
etimer_set(&et, LOOP_INTERVAL);
counter++;
}
}
PROCESS_END();
}
/*---------------------------------------------------------------------------*/
/**
* @}
* @}
*/

View File

@ -0,0 +1,95 @@
/*
* Copyright (c) 2016, Zolertia - http://www.zolertia.com
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the Institute nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
*/
/*---------------------------------------------------------------------------*/
/**
* \addtogroup zoul-examples
* @{
* \defgroup zoul-pm10-sensor-test Test PM10 sensor
*
* Demonstrates the operation of the Sharp PM10 analog sensor
* @{
*
* \file
* GP2Y1010AU0F PM10 sensor example using the ADC sensors wrapper
*
* \author
* Toni Lozano <tlozano@zolertia.com>
*/
/*---------------------------------------------------------------------------*/
#include <stdio.h>
#include "cpu.h"
#include "contiki.h"
#include "dev/leds.h"
#include "dev/adc-sensors.h"
#include "dev/zoul-sensors.h"
#include "lib/sensors.h"
#include "dev/sys-ctrl.h"
#include "dev/pm10-sensor.h"
/*---------------------------------------------------------------------------*/
#define ADC_PIN 2
#define SENSOR_READ_INTERVAL (CLOCK_SECOND)
/*---------------------------------------------------------------------------*/
PROCESS(test_pm10_sensor_process, "Test PM10 sensor process");
AUTOSTART_PROCESSES(&test_pm10_sensor_process);
/*---------------------------------------------------------------------------*/
static struct etimer et;
/*---------------------------------------------------------------------------*/
PROCESS_THREAD(test_pm10_sensor_process, ev, data)
{
PROCESS_BEGIN();
static uint16_t pm10_value;
/* Use pin number not mask, for example if using the PA5 pin then use 2 */
pm10.configure(SENSORS_ACTIVE, ADC_PIN);
/* And periodically poll the sensor */
while(1) {
etimer_set(&et, SENSOR_READ_INTERVAL);
PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et));
leds_toggle(LEDS_GREEN);
pm10_value = pm10.value(1);
if(pm10_value != ADC_WRAPPER_ERROR) {
printf("PM10 value = %u ppm\n", pm10_value);
} else {
printf("Error, enable the DEBUG flag in adc-wrapper.c for info\n");
PROCESS_EXIT();
}
}
PROCESS_END();
}
/*---------------------------------------------------------------------------*/
/**
* @}
* @}
*/

View File

@ -0,0 +1,104 @@
/*
* Copyright (c) 2016, Zolertia - http://www.zolertia.com
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* \addtogroup zoul-examples
* @{
* \defgroup zoul-vac-sensor-test Test VAC sensor
*
* Demonstrates the operation of the voltage VAC analog sensor
* @{
*
* \file
* Example demonstrating the Zoul module on the RE-Mote & VAC sensor 0-5V 250V AC
*
* \author
* Javier Sánchez <asanchez@zolertia.com>
*/
#include "contiki.h"
#include "sys/etimer.h"
#include "sys/rtimer.h"
#include "dev/leds.h"
#include "dev/adc-sensors.h"
#include <stdio.h>
#include <stdint.h>
/*---------------------------------------------------------------------------*/
#define ADC_PIN 2
#define LOOP_PERIOD 2
#define LOOP_INTERVAL (CLOCK_SECOND * LOOP_PERIOD)
#define LEDS_PERIODIC LEDS_GREEN
#define BUTTON_PRESS_EVENT_INTERVAL (CLOCK_SECOND)
/*---------------------------------------------------------------------------*/
static struct etimer et;
static uint16_t counter;
/*---------------------------------------------------------------------------*/
PROCESS(test_vac_sensor_process, "test VAC sensor process");
AUTOSTART_PROCESSES(&test_vac_sensor_process);
/*---------------------------------------------------------------------------*/
PROCESS_THREAD(test_vac_sensor_process, ev, data)
{
PROCESS_BEGIN();
counter = 0;
/* Configure the ADC ports */
/* Use pin number not mask, for example if using the PA5 pin then use 5 */
adc_sensors.configure(ANALOG_VAC_SENSOR, ADC_PIN);
printf("VAC test application\n");
leds_on(LEDS_PERIODIC);
etimer_set(&et, LOOP_INTERVAL);
while(1) {
PROCESS_YIELD();
if(ev == PROCESS_EVENT_TIMER) {
leds_toggle(LEDS_PERIODIC);
printf("-----------------------------------------\n"
"Counter = 0x%08x\n", counter);
/*AC voltage value, with applied corresponding sensor algorithm*/
printf("AC voltage = %d V\n", adc_sensors.value(ANALOG_VAC_SENSOR));
etimer_set(&et, LOOP_INTERVAL);
counter++;
}
}
PROCESS_END();
}
/*---------------------------------------------------------------------------*/
/**
* @}
* @}
*/

View File

@ -45,7 +45,6 @@
#include "adc-sensors.h" #include "adc-sensors.h"
#include "adc-zoul.h" #include "adc-zoul.h"
#include "zoul-sensors.h" #include "zoul-sensors.h"
#include <stdio.h> #include <stdio.h>
#include <stdint.h> #include <stdint.h>
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
@ -108,6 +107,21 @@ convert_to_value(uint8_t index)
value /= 100000; value /= 100000;
return (uint16_t)value; return (uint16_t)value;
/* VDD+5 sensors */
case ANALOG_VAC_SENSOR:
/* Linear sensor from 0 to 5 V; 0.0088 resolution*/
value *= 88;
value /= 10000;
return (uint16_t)value;
case ANALOG_AAC_SENSOR:
/* Linear sensor from 0 to 5 V;*/
return (uint16_t)value;
case ANALOG_PM10_SENSOR:
/* PM10 sensor from 0 to 3.9 V;*/
return (uint16_t)value;
default: default:
return ADC_WRAPPER_ERROR; return ADC_WRAPPER_ERROR;
} }
@ -154,7 +168,8 @@ configure(int type, int value)
uint8_t pin_mask = GPIO_PIN_MASK(value); uint8_t pin_mask = GPIO_PIN_MASK(value);
if((type != ANALOG_GROVE_LIGHT) && (type != ANALOG_PHIDGET_ROTATION_1109) && if((type != ANALOG_GROVE_LIGHT) && (type != ANALOG_PHIDGET_ROTATION_1109) &&
(type != ANALOG_GROVE_LOUDNESS)) { (type != ANALOG_GROVE_LOUDNESS) && (type != ANALOG_PM10_SENSOR) &&
(type != ANALOG_VAC_SENSOR) && (type != ANALOG_AAC_SENSOR) ) {
PRINTF("ADC sensors: sensor not supported, check adc_wrapper.h header\n"); PRINTF("ADC sensors: sensor not supported, check adc_wrapper.h header\n");
return ADC_WRAPPER_ERROR; return ADC_WRAPPER_ERROR;
} }
@ -187,6 +202,19 @@ configure(int type, int value)
sensors.sensor[sensors.sensors_num].vdd3 = 1; sensors.sensor[sensors.sensors_num].vdd3 = 1;
break; break;
/*V+5 sensors*/
case ANALOG_VAC_SENSOR:
case ANALOG_AAC_SENSOR:
case ANALOG_PM10_SENSOR:
if(adc_zoul.configure(SENSORS_HW_INIT, pin_mask) == ZOUL_SENSORS_ERROR) {
return ADC_WRAPPER_ERROR;
}
sensors.sensor[sensors.sensors_num].type = type;
sensors.sensor[sensors.sensors_num].pin_mask = pin_mask;
sensors.sensor[sensors.sensors_num].vdd3 = 0;
break;
default: default:
return ADC_WRAPPER_ERROR; return ADC_WRAPPER_ERROR;
} }

View File

@ -71,6 +71,9 @@
#define ANALOG_GROVE_LIGHT 0x01 #define ANALOG_GROVE_LIGHT 0x01
#define ANALOG_PHIDGET_ROTATION_1109 0x02 #define ANALOG_PHIDGET_ROTATION_1109 0x02
#define ANALOG_GROVE_LOUDNESS 0x03 #define ANALOG_GROVE_LOUDNESS 0x03
#define ANALOG_VAC_SENSOR 0x04
#define ANALOG_AAC_SENSOR 0x05
#define ANALOG_PM10_SENSOR 0x06
/* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */
#define ADC_SENSORS "ADC sensors API" #define ADC_SENSORS "ADC sensors API"
/* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */

View File

@ -0,0 +1,123 @@
/*
* Copyright (c) 2016, Zolertia <http://www.zolertia.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the Institute nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* This file is part of the Contiki operating system.
*
*/
/*---------------------------------------------------------------------------*/
/**
* \addtogroup zoul-pm10-sensor
* @{
*
* \file
* GP2Y1010AU0F PM10 sensor example using the ADC sensors wrapper
* \author
* Toni Lozano <tlozano@zolertia.com>
*/
/*---------------------------------------------------------------------------*/
#include <stdio.h>
#include "contiki.h"
#include "adc-sensors.h"
#include "adc-zoul.h"
#include "zoul-sensors.h"
#include "dev/pm10-sensor.h"
#include "dev/sys-ctrl.h"
#include "lib/sensors.h"
#include "dev/gpio.h"
#include "dev/ioc.h"
/*---------------------------------------------------------------------------*/
#define PM10_SENSOR_PORT_BASE GPIO_PORT_TO_BASE(PM10_SENSOR_CTRL_PORT)
#define PM10_SENSOR_PIN_MASK GPIO_PIN_MASK(PM10_SENSOR_CTRL_PIN)
/*---------------------------------------------------------------------------*/
static int pm10_channel;
/*---------------------------------------------------------------------------*/
static int
configure(int type, int value)
{
if(type != SENSORS_ACTIVE) {
return PM10_ERROR;
}
if(value) {
/* Set as output, used as pulse-driven wave */
GPIO_SOFTWARE_CONTROL(PM10_SENSOR_PORT_BASE, PM10_SENSOR_PIN_MASK);
ioc_set_over(PM10_SENSOR_CTRL_PORT, PM10_SENSOR_CTRL_PIN, IOC_OVERRIDE_DIS);
GPIO_SET_OUTPUT(PM10_SENSOR_PORT_BASE, PM10_SENSOR_PIN_MASK);
GPIO_CLR_PIN(PM10_SENSOR_PORT_BASE, PM10_SENSOR_PIN_MASK);
pm10_channel = (1 << value);
return adc_zoul.configure(SENSORS_HW_INIT, pm10_channel);
}
pm10_channel = 0;
return PM10_SUCCESS;
}
/*---------------------------------------------------------------------------*/
static int
value(int type)
{
uint32_t val;
if(!pm10_channel) {
return PM10_ERROR;
}
/* Set Pulse Wave pin before measure */
GPIO_SET_PIN(PM10_SENSOR_PORT_BASE, PM10_SENSOR_PIN_MASK);
/* Pulse wave delay */
clock_delay_usec(PM10_SENSOR_PULSE_DELAY);
/* Data acquisition */
val = (uint32_t)adc_zoul.value(pm10_channel);
if(val == ZOUL_SENSORS_ERROR) {
printf("PM10 sensor: failed retrieving data\n");
return PM10_ERROR;
}
/* Default voltage divisor relation is 5/3 aprox, change at adc_wrapper.h,
* calculations below assume a decimation rate of 512 (12 bits ENOB) and
* AVVD5 voltage reference of 3.3V
*/
val *= PM10_EXTERNAL_VREF;
val /= PM10_EXTERNAL_VREF_CROSSVAL;
/* Applied constant conversion from UAir project
* to obtain value in ppm (value in mV * 0.28)
*/
val *= 28;
val /= 1000;
/* Clear pulse wave pin */
GPIO_CLR_PIN(PM10_SENSOR_PORT_BASE, PM10_SENSOR_PIN_MASK);
return (uint16_t)val;
}
/*---------------------------------------------------------------------------*/
SENSORS_SENSOR(pm10, PM10_SENSOR, value, configure, NULL);
/*---------------------------------------------------------------------------*/
/** @} */

View File

@ -0,0 +1,74 @@
/*
* Copyright (c) 2016, Zolertia <http://www.zolertia.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the Institute nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* This file is part of the Contiki operating system.
*
*/
/*---------------------------------------------------------------------------*/
/**
* \addtogroup zoul-sensors
* @{
*
* \defgroup zoul-pm10-sensor Analog PM10 sensor
* @{
* \file
* GP2Y1010AU0F PM10 sensor driver
* \author
* Toni Lozano <tlozano@zolertia.com>
*/
/*---------------------------------------------------------------------------*/
#include "lib/sensors.h"
/*---------------------------------------------------------------------------*/
#ifndef PM10_SENSOR_H_
#define PM10_SENSOR_H_
/* -------------------------------------------------------------------------- */
#define PM10_ERROR (-1)
#define PM10_SUCCESS 0
#define PM10_SENSOR "PM10 Sensor"
#define PM10_SENSOR_PULSE_DELAY 280
#define PM10_EXTERNAL_VREF 5000
#define PM10_EXTERNAL_VREF_CROSSVAL 3300
/* -------------------------------------------------------------------------- */
#ifdef PM10_SENSOR_CONF_CTRL_PIN
#define PM10_SENSOR_CTRL_PIN PM10_SENSOR_CONF_CTRL_PIN
#else
#define PM10_SENSOR_CTRL_PIN 7
#endif
#ifdef PM10_SENSOR_CONF_CTRL_PORT
#define PM10_SENSOR_CTRL_PORT PM10_SENSOR_CONF_CTRL_PORT
#else
#define PM10_SENSOR_CTRL_PORT GPIO_A_NUM
#endif
/* -------------------------------------------------------------------------- */
extern const struct sensors_sensor pm10;
/* -------------------------------------------------------------------------- */
#endif /* ifndef PM10_SENSOR_H_ */
/**
* @}
* @}
*/