Added PM10 and VAC parameters to adc_sensors driver

This commit is contained in:
Toni Lozano 2016-01-20 15:50:56 +01:00
parent d4251d7c3b
commit 1fca3e810a
7 changed files with 363 additions and 2 deletions

View file

@ -4,7 +4,7 @@ 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 test-vac-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

View file

@ -0,0 +1,92 @@
/*
* 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
* @{
*
* 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 "contiki.h"
#include "dev/leds.h"
#include "dev/adc-sensors.h"
/*---------------------------------------------------------------------------*/
#define ADC_PIN 2
#define SENSOR_READ_INTERVAL (CLOCK_SECOND / 8)
/*---------------------------------------------------------------------------*/
PROCESS(remote_pm10_sensor_process, "PM10 sensor test process");
AUTOSTART_PROCESSES(&remote_grove_loudness_process);
/*---------------------------------------------------------------------------*/
static struct etimer et;
/*---------------------------------------------------------------------------*/
PROCESS_THREAD(remote_pm10_sensor_process, ev, data)
{
PROCESS_BEGIN();
uint16_t pm10_value;
/* Use pin number not mask, for example if using the PA5 pin then use 2 */
adc_sensors.configure(ANALOG_PM10_SENSOR, 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 = adc_sensors.value(ANALOG_PM10_SENSOR);
if(pm10_value != ADC_WRAPPER_ERROR) {
printf("%u\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,120 @@
/*
* Copyright (c) 2012, Texas Instruments Incorporated - http://www.ti.com/
* Copyright (c) 2015, 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.
*/
/*
*
*
* @{
*
* \file
* Example demonstrating the Zoul module on the RE-Mote & VAC sensor
*/
#include "contiki.h"
#include "cpu.h"
#include "sys/etimer.h"
#include "sys/rtimer.h"
#include "dev/leds.h"
#include "dev/uart.h"
#include "dev/button-sensor.h"
#include "dev/zoul-sensors.h"
#include "dev/watchdog.h"
#include "dev/serial-line.h"
#include "dev/sys-ctrl.h"
#include "net/rime/broadcast.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(zoul_demo_process, "Zoul demo process");
AUTOSTART_PROCESSES(&zoul_demo_process);
/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/
PROCESS_THREAD(zoul_demo_process, ev, data)
{
PROCESS_BEGIN();
counter = 0;
/* Configure the user button */
button_sensor.configure(BUTTON_SENSOR_CONFIG_TYPE_INTERVAL,
BUTTON_PRESS_EVENT_INTERVAL);
/* Configure the ADC ports */
/* Use pin number not mask, for example if using the PA5 pin then use 5 */
printf("return configure, %d \n", 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);
printf("ADC3 = %d V\n", adc_sensors.value(ANALOG_VAC_SENSOR));
uint32_t as = (adc_sensors.value(ANALOG_VAC_SENSOR) * 0.176);
printf("ADC5V = %ld V\n", as);
//printf("AC voltage = %d V\n", vac.value(VAC_VAL));
etimer_set(&et, LOOP_INTERVAL);
counter++;
}
}
PROCESS_END();
}
/*---------------------------------------------------------------------------*/
/**
* @}
* @}
* @}
*/

View file

@ -108,6 +108,18 @@ convert_to_value(uint8_t index)
value /= 100000; value /= 100000;
return (uint16_t)value; return (uint16_t)value;
case ANALOG_VAC_SENSOR:
/* Linear sensor from 0 to 5 V; 0.0088 resolution*/
value *= 88;
value /= 10000;
return (uint16_t)value;
case ANALOG_PM10_SENSOR:
/* PM10 sensor from 0 to 5 V; 0.0088 resolution*/
value *= 88;
value /= 10000;
return (uint16_t)value;
default: default:
return ADC_WRAPPER_ERROR; return ADC_WRAPPER_ERROR;
} }
@ -154,7 +166,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) ) {
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;
} }
@ -179,6 +192,7 @@ configure(int type, int value)
case ANALOG_GROVE_LIGHT: case ANALOG_GROVE_LIGHT:
case ANALOG_GROVE_LOUDNESS: case ANALOG_GROVE_LOUDNESS:
case ANALOG_PHIDGET_ROTATION_1109: case ANALOG_PHIDGET_ROTATION_1109:
case ANALOG_VAC_SENSOR:
if(adc_zoul.configure(SENSORS_HW_INIT, pin_mask) == ZOUL_SENSORS_ERROR) { if(adc_zoul.configure(SENSORS_HW_INIT, pin_mask) == ZOUL_SENSORS_ERROR) {
return ADC_WRAPPER_ERROR; return ADC_WRAPPER_ERROR;
} }

View file

@ -71,6 +71,8 @@
#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_PM10_SENSOR 0x05
/* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */
#define ADC_SENSORS "ADC sensors API" #define ADC_SENSORS "ADC sensors API"
/* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */

View file

@ -0,0 +1,73 @@
/*
* Copyright (c) 2015, 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.
*
*/
/*---------------------------------------------------------------------------*/
/**
*
* @{
*
* \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 "dev/pm10-sensor.h"
#include "lib/sensors.h"
/*---------------------------------------------------------------------------*/
static uint8_t enabled;
/*---------------------------------------------------------------------------*/
static int
configure(int value)
{
int error;
/* Use pin number not mask, for example if using the PA5 pin then use 5 */
error = adc_sensors.configure(ANALOG_PM10_SENSORS, value);
return error;
}
/*---------------------------------------------------------------------------*/
static int
value(void)
{
uint16_t val;
//TODO: Add here GPIO pulses before measuring
val = adc_sensors.value(ANALOG_PM10_SENSOR);
return val;
}
/*---------------------------------------------------------------------------*/
SENSORS_SENSOR(pm10, PM10_SENSOR, value, configure, NULL);
/*---------------------------------------------------------------------------*/
/** @} */

View file

@ -0,0 +1,60 @@
/*
* Copyright (c) 2015, 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.
*
*/
/*---------------------------------------------------------------------------*/
/**
*
*
*
* \file
* GP2Y1010AU0F PM-10 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_PORT ZOUL_SENSORS_ADC3
#define PM10_VAL 0x00
#define PM10_SENSOR "PM10 Sensor"
/* -------------------------------------------------------------------------- */
extern const struct sensors_sensor vac;
/* -------------------------------------------------------------------------- */
#endif /* ifndef VAC_SENSOR_H_ */
/**
* @}
* @}
*/