diff --git a/examples/zolertia/zoul/Makefile b/examples/zolertia/zoul/Makefile index b60cf8ccf..fd9ca7b86 100644 --- a/examples/zolertia/zoul/Makefile +++ b/examples/zolertia/zoul/Makefile @@ -5,6 +5,7 @@ CONTIKI_PROJECT += test-bmp085-bmp180 test-motion test-rotation-sensor CONTIKI_PROJECT += test-grove-light-sensor test-grove-loudness-sensor 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 += adc-sensors.c weather-meter.c grove-gyro.c CONTIKI_TARGET_SOURCEFILES += rgb-bl-lcd.c diff --git a/examples/zolertia/zoul/test-aac-sensor.c b/examples/zolertia/zoul/test-aac-sensor.c new file mode 100644 index 000000000..243a835f8 --- /dev/null +++ b/examples/zolertia/zoul/test-aac-sensor.c @@ -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 & AAC sensor 0-5V 50Amps AC + */ +#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 +#include +/*---------------------------------------------------------------------------*/ +#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_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("ADC3 = %d raw\n", (adc_sensors.value(ANALOG_AAC_SENSOR)/1.76)); + + printf("AC Amps = %d mA\n", adc_sensors.value(ANALOG_AAC_SENSOR)); + + etimer_set(&et, LOOP_INTERVAL); + counter++; + } + } + + PROCESS_END(); +} +/*---------------------------------------------------------------------------*/ +/** + * @} + * @} + * @} + */ diff --git a/examples/zolertia/zoul/test-vac-sensor.c b/examples/zolertia/zoul/test-vac-sensor.c index 4ecfcf9a6..aa02fd83a 100644 --- a/examples/zolertia/zoul/test-vac-sensor.c +++ b/examples/zolertia/zoul/test-vac-sensor.c @@ -100,10 +100,10 @@ PROCESS_THREAD(zoul_demo_process, ev, data) 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)); + //Value in raw after voltage divisor + printf("ADC3 = %d V\n", (adc_sensors.value(ANALOG_VAC_SENSOR)/0.0088)); + //AC voltage value, with applied corresponding sensor algorithm + printf("AC voltage = %d V\n", adc_sensors.value(VAC_VAL)); etimer_set(&et, LOOP_INTERVAL); counter++; diff --git a/platform/zoul/dev/adc-sensors.c b/platform/zoul/dev/adc-sensors.c index a77958bdd..ecefbcff5 100644 --- a/platform/zoul/dev/adc-sensors.c +++ b/platform/zoul/dev/adc-sensors.c @@ -114,6 +114,11 @@ convert_to_value(uint8_t index) value /= 10000; return (uint16_t)value; + case ANALOG_AAC_SENSOR: + /* Linear sensor from 0 to 5 V;*/ + value *= 1.2; + return (uint16_t)value; + case ANALOG_PM10_SENSOR: /* PM10 sensor from 0 to 5 V; 0.0088 resolution*/ value *= 88; @@ -167,7 +172,7 @@ configure(int type, int value) if((type != ANALOG_GROVE_LIGHT) && (type != ANALOG_PHIDGET_ROTATION_1109) && (type != ANALOG_GROVE_LOUDNESS) && (type != ANALOG_PM10_SENSOR) && - (type != ANALOG_VAC_SENSOR) ) { + (type != ANALOG_VAC_SENSOR) && (type != ANALOG_AAC_SENSOR) ) { PRINTF("ADC sensors: sensor not supported, check adc_wrapper.h header\n"); return ADC_WRAPPER_ERROR; } @@ -192,7 +197,6 @@ configure(int type, int value) case ANALOG_GROVE_LIGHT: case ANALOG_GROVE_LOUDNESS: case ANALOG_PHIDGET_ROTATION_1109: - case ANALOG_VAC_SENSOR: if(adc_zoul.configure(SENSORS_HW_INIT, pin_mask) == ZOUL_SENSORS_ERROR) { return ADC_WRAPPER_ERROR; } @@ -201,6 +205,18 @@ configure(int type, int value) sensors.sensor[sensors.sensors_num].vdd3 = 1; break; + 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: return ADC_WRAPPER_ERROR; } diff --git a/platform/zoul/dev/adc-sensors.h b/platform/zoul/dev/adc-sensors.h index 44c859b22..8a3eb4047 100644 --- a/platform/zoul/dev/adc-sensors.h +++ b/platform/zoul/dev/adc-sensors.h @@ -72,7 +72,8 @@ #define ANALOG_PHIDGET_ROTATION_1109 0x02 #define ANALOG_GROVE_LOUDNESS 0x03 #define ANALOG_VAC_SENSOR 0x04 -#define ANALOG_PM10_SENSOR 0x05 +#define ANALOG_AAC_SENSOR 0x05 +#define ANALOG_PM10_SENSOR 0x06 /* -------------------------------------------------------------------------- */ #define ADC_SENSORS "ADC sensors API" /* -------------------------------------------------------------------------- */ diff --git a/platform/zoul/dev/pm10-sensot.h b/platform/zoul/dev/pm10-sensor.h similarity index 100% rename from platform/zoul/dev/pm10-sensot.h rename to platform/zoul/dev/pm10-sensor.h