Arduino (IoT): Simple Tutorial Medición de Corriente Sleep Mode AVR

AVR Sleep Mode Arduino Santiapps

Arduino Honduras Santiapps Marcio Valenzuela

Tutorial Medición de Corriente Sleep Mode AVR

En  un tutorial anterior vimos como medir la corriente consumida por la MCU.  El mismo método puede ser utilizado para medir el consumo de corriente de un proyecto completo, al insertar el medidor entre la fuente de poder.  Antes de llegar a ese ejemplo, el cual nos ayudara a medir el consumo energético de un proyecto para poder hacer cálculos de autonomía (por ejemplo cuanta energía tendríamos que producir y almacenar para un proyecto solar por ejemplo), vamos a ver como podemos ahorrar energía poniendo nuestra Arduino a dormir.

Requisitos:

  1. Computadora (mac)
  2. Arduino UNO
  3. Medidor de Voltaje/Corriente
  4. Battery Pack
  5. Breadboard
  6. Arduino IDE (https://www.arduino.cc/en/Main/Software)

El proyecto de nuestra Arduino es asi:


Esta vez cargaremos un sketch asi:


#include <avr/sleep.h>
int wakePin = 2; // pin used for waking up
int sleepStatus = 0; // variable to store a request for sleep
int count = 0; // counter
void wakeUpNow() // here the interrupt is handled after wakeup{
}
void setup(){
pinMode(wakePin, INPUT);
Serial.begin(9600);
attachInterrupt(0, wakeUpNow, LOW); // use interrupt 0 (pin 2) and run function
}
void sleepNow() // here we put the arduino to sleep{
set_sleep_mode(SLEEP_MODE_PWR_DOWN); // sleep mode is set here
sleep_enable(); // enables the sleep bit in the mcucr register
// so sleep is possible. just a safety pin
attachInterrupt(0,wakeUpNow, LOW); // use interrupt 0 (pin 2) and run function
// wakeUpNow when pin 2 gets LOW
sleep_mode(); // here the device is actually put to sleep!!
// THE PROGRAM CONTINUES FROM HERE AFTER WAKING UP
sleep_disable(); // first thing after waking from sleep:
// disable sleep...
detachInterrupt(0); // disables interrupt 0 on pin 2 so the
// wakeUpNow code will not be executed
// during normal running time.
}
void loop(){
// display information about the counter
Serial.print("Awake for ");
Serial.print(count);
Serial.println("sec");
count++;
delay(1000); // waits for a second
// compute the serial input
if (Serial.available()) {
int val = Serial.read();
if (val == 'S') {
Serial.println("Serial: Entering Sleep mode");
delay(100); // this delay is needed, the sleep
//function will provoke a Serial error otherwise!!
count = 0;
sleepNow(); // sleep function called here
}
if (val == 'A') {
Serial.println("Hola Caracola"); // classic dummy message
}
}
// check if it should go to sleep because of time
if (count >= 10) {
Serial.println("Timer: Entering Sleep mode");
delay(100); // this delay is needed, the sleep
//function will provoke a Serial error otherwise!!
count = 0;
sleepNow(); // sleep function called here
}
}

El código produce este resultado en el Serial Monitor:

Arduino IoT Simple Tutorial Medicion de Corriente AVR Sleep Mode by Santiapps Marcio Valenzuela
Arduino IoT Simple Tutorial Medicion de Corriente AVR Sleep Mode

Como podemos ver el codigo hace que la Arduino duerma luego de 10 segundos.  Es importante entender esto para que a la hora de medir la corriente sepamos que el consumo deberá bajar luego de 10 segundos para ver el ahorro.

Este código esta tomado del sitio Arduino.cc y es importante usar el Resistor 220Ohms entre el pin2 y el pin0(Rx). Subamos el código a la Arduino y luego hagamos las conexiones como hicimos anteriormente para medir la corriente.  La idea es medir la corriente mientras la Arduino esta despierta vs cuando esta dormida.

El resultado final esta aqui, sin embargo es igual a la anterior:


Pero luego de 10 segundos:


Como vemos el consumo baja de 46.5mA a 33.3mA.  Esto representa un ahorro del 28%.

Ahora veámoslos en la Nano:

Arduino (IoT): Simple Tutorial GPS Top Titan 3 Glonass: Parte 1

GPS Arduino Santiapps

 

Arduino Honduras Santiapps Marcio Valenzuela

Tutorial GPS Top Titan 3: Parte 1

En este tutorial recibiremos datos de un modulo GPS.

Requisitos:

  1. Computadora (mac)
  2. Arduino UNO o MEGA
  3. Modulo Top Titan 3 GPS/Glonass
  4. Breadboard
  5. Arduino IDE (https://www.arduino.cc/en/Main/Software)
Arduino IoT: Simple Tutorial GPS Titan3 Santiapps Marcio Valenzuela
Arduino IoT: Simple Tutorial GPS Titan3

La conexión:

  • GPS Pin 4 : Rx de la UNO (o 11 en la MEGA)
  • GPS Pin 2 : GROUND de la UNO o MEGA
  • GPS Pin 1 : 3.3V de la UNO o MEGA

NOTA: La MEGA puede usar 19/18 como Rx/Tx para hardware serial o 11/10 para software serial como en la Parte 2 de este tutorial.

Ya conectado se mira asi:

Arduino IoT: Simple Tutorial GPS Titan3 Santiapps Marcio Valenzuela
Arduino IoT: Simple Tutorial GPS Titan3

El código:

[code]
void setup() {
Serial.begin(9600);
pinMode(9,OUTPUT);
}

void loop() {
delay(2000);
digitalWrite(9,HIGH);
delay(2000);
digitalWrite(9,LOW);
delay(3000);
Serial.println(&amp;quot;Cool&amp;quot;);
}
[/code]

En el monitor serial saldrá algo así:

$GPGGA,105317.709,8960.0000,N,00000.0000,E,0,0,,137.0,M,13.0,M,,*4C
$GPGLL,8960.0000,N,00000.0000,E,105317.709,V,N*49
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPGSV,1,1,00*79
$GPRMC,105317.709,V,8960.0000,N,00000.0000,E,0.00,0.00,010610,,,N*78
$GPVTG,0.00,T,,M,0.00,N,0.00,K,N*32

Estas son NMEA sentences o datos NMEA (http://en.wikipedia.org/wiki/NMEA_0183) los cuales deben ser parsed a datos de ubicación, velocidad etc.  Esto lo logramos usando la TinyGPS library (http://arduiniana.org/libraries/tinygps/) que veremos en la Parte 2.

Wow con esto podemos rastrear ubicación, velocidad y rumbo de nuestros robots!

Arduino (IoT): Simple Tutorial Arduino Android App: Parte III

Android Arduino App

Arduino Honduras Santiapps Marcio Valenzuela

Arduino Android App: Parte III

Una pequeña distracción de nuestra serie Android App para Arduino para explorar appInventor2!

Requisitos:

  1. Computadora (mac)
  2. Arduino UNO
  3. Arduino IDE
  4. HC05
  5. LED & Resistor 220O
  6. Cuenta gratis en ai2.appinventor.mit.edu
Arduino (IoT) Simpe Tutorial appInventor2 MIT EDU Santiapps Marcio Valenzuela
Arduino (IoT) Simpe Tutorial appInventor2 MIT EDU

Ahora vamos a crear una aplicación para Android pero usaremos una aplicación web llamada appinventor de MIT.

Visita ai2.appinventor.mit.edu y crea tu cuenta (anexala a tu cuenta de gmail) y podrás usar la app en linea.  Debes crear la aplicación en 2 formas:

1  Designer

2 Blocks

La primera etapa de Designer es para el diseño de la app, el User Interface o UI:

Arduino (IoT) Simple Tutorial appinventor2 Santiapps Marcio Valenzuela
Arduino (IoT) Simple Tutorial appinventor2

Aquí vemos un Palette (como el de Eclipse o Android Studio) con los componentes visuales a la izquierda.  Luego en la Derecha vemos sus propiedades.  En el centro podemos ver como se miran los componentes que agregamos en la pantalla y en la esquina superior izquierda están los dos botones para cambiar entre Designer y Blocks:

Arduino (IoT) Simple Tutorial appinventor2 Santiapps Marcio Valenzuela
Arduino (IoT) Simple Tutorial appinventor2

Aquí en Blocks podemos ver los bloques de código que cada componente utiliza.  Por ejemplo si en la izquierda seleccionamos el ListPicker1, nos aparece un listado de acciones particulares a un ListPicker como when.BeforPicking.do o when.AfterPicking.do.  Para un Boton tenemos when.Click.do y así para otros.  También podemos usar clock timers para correr comandos periódicamente y podemos agregar variables, constantes y usar operadores de lógica, control matemática etc.

Una vez terminada la app, bajamos la appInventorapp del Play Store en nuestro Android y en la web seleccionamos AI Companion del menu de Connect:

Arduino (IoT) Simple Tutorial appinventor2 Santiapps Marcio Valenzuela
Arduino (IoT) Simple Tutorial appinventor2

Esto presenta una QR Code en pantalla y en el Android abrimos la appinventor app para escalera el codigo y nuestra app puede correr en el android y conectarse a un dispositivo bluetooth.

Esto funciona para los modelos HC-05/06 pero no para los modulos HM10/11 y otros que usan Smart BT BLE 4.0.  Por eso en la siguiente parte de nuestra serie veremos una aplicación android completa usando Smart BLE 4 para conectarse a un modulo HM10 y controlar nuestra Arduino de una forma mas completa.