Proyectos

Arduino Genuino 101

El Arduino Genuino 101 una placa que combina el atractivo universal de la placa de Arduino pero tiene incorporado lo último en tecnología, como el módulo Intel Curie, Bluetooth LE y un acelerómetro / giroscopio de 6 ejes. El módulo Intel que es el componente principal de esta placa contiene dos núcleos, un núcleo x86 (Quark) y un núcleo de arquitectura ARC de 32 bits, ambos con una frecuencia de 32MHz y Arduino compila todos los sketches y librerías de forma óptima para permitir que ambos núcleos puedan realizar las tareas más exigentes.

 

01 Ard Genuino

Figura 01: Arduino Genuino 101

ESPECIFICACIONES TÉCNICAS

 Microcontrolador Intel Curie
Voltaje de Operación                    3.3V (5V I/O)
Voltaje de entrada (recomendado)   7-12V
Voltage Maximo 17V
Pines Digitales I/O 14 ( 4 son PWM )
Pines PWM I/O 4
Pines Analógicos 6
Corriente DC por pin I/O 20 mA
Memoria Flash 196 kB
SRAM 24 kB
Velocidad Clock 32MHz
Caracteristicas Bluetooth LE
Caracteristicas Acelerometro /giroscopio de 6 ejes 

 

CURIE INTEL

Curie Intel es un módulo que tiene el tamaño de un botón, pero en él cabe mucha tecnología el mismo que ha sido realizado para poder posicionarse mejor en la carrera de los wearables, los mismo que son el conjunto de aparatos y dispositivos electrónicos vestibles que se incorporan en alguna parte de nuestro cuerpo interactuando de forma continua con el usuario y con otros dispositivos con la finalidad de realizar alguna función concreta, relojes inteligentes o smartwatchs, zapatillas de deportes, etc.
 02 Curie Intel

Figura 02: Intel CURIE

El consumo de energía es muy importante en este tipo de desarrollos, por lo que es prioridad en el sistema de funcionamiento de Curie. La conectividad elegida es Bluetooth LE, pero también el resto de sensores implementados - acelerómetros y giroscopios - han sido creados pensando en el consumo.

Siguiendo con el asunto de la energía, Curie está ideado para funcionar tanto con baterías convencionales, como con unas recargables.

ACELEROMETRO Y GIROSCOPIO

Tanto el acelerómetro o el giroscopio actualmente se los encuentra en la mayoría de los teléfonos inteligentes y gracias a los mismos es posible rotar la pantalla, visualizar vídeos que actualmente permiten ser visualizados a 360 grados, etc, en si estos componentes si trabajan e conjunto con aplicaciones en Android,  podrían permitir sincronizar los movimientos del teléfono inteligente junto con el de una placa de Arduino Genuino 101 que permitan realizar diversos giros y movimientos de los dispositivos, la idea es solo utilizar la imaginación y ponerse a desarrollar diversos proyectos, pero para esto necesitamos conocer los principios de funcionamiento de cada componente, los mismos que explico a continuación.

GIROSCOPIO

Un giroscopio es un dispositivo que se usa para medir o mantener una orientación, utilizando los principios de momento angular.

El giroscopio da una indicación de la velocidad angular.

03 Gyro

Figura 03: Gyro

 ACELEROMETRO

Un acelerómetro es un dispositivo compacto diseñado para medir la aceleración gravitatoria, cuando el objeto que está integrado va de un punto muerto a cualquier velocidad, el acelerómetro es el encargado de responder a las vibraciones asociadas con tal movimiento, un acelerómetro mide la aceleración lineal.

07 Acelerometro

Figura 04: Acelerometro

MONITOR DE PULSO CARDIACO

04 Genuino101

Figura 05: Monitor Pulso Cardiaco

Instrucciones:

  1. Descargue la nRF Toolbox para la aplicación BLE para Android o para iOS de forma gratuita.
  2. Conecte el potenciómetro (u otro sensor analógico) al Arduino 101 como se muestra en "el circuito" anterior.
  3. Conecte el Arduino 101 a su computadora.
  4. Inicie el software Arduino y seleccione Arduino 101 en el menú Herramientas.
  5. Cargue el ejemplo CurieBLEHeartRateMonitor (encontrado en Archivo> Ejemplos> CurieIMU).
  6. Inicie la aplicación. Debe presentarse con la pantalla de inicio como se muestra a continuación.

05 homeNRF

Figura 06: Aplicación Movil

  • Haga clic en el icono del corazón en el centro de la pantalla, después de lo cual verá una gráfica que muestra los latidos por minuto en el tiempo. Esto no mostrará ningún dato hasta que esté conectado con su Arduino.
  • Pulse el botón de conexión debajo del gráfico que debe ver el dispositivo "HeartRateSketch" (o cualquier nombre que establezca).
  • Haga clic en el nombre de su dispositivo y los datos del potenciómetro deben comenzar inmediatamente a ser visualizados como se muestra a continuación. Por supuesto, el potenciómetro sólo emula una frecuencia cardíaca para demostrar el uso del servicio.

06 graphNRF

 

Figura 07: Aplicación Movil

CODIGO

/*
   Copyright (c) 2015 Intel Corporation.  All rights reserved.
   This library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
   License as published by the Free Software Foundation; either
   version 2.1 of the License, or (at your option) any later version.
   This library 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
   Lesser General Public License for more details.
   You should have received a copy of the GNU Lesser General Public
   License along with this library; if not, write to the Free Software
   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/

 /*
   This sketch example partially implements the standard Bluetooth Low-Energy Heart Rate service.
   For more information: https://developer.bluetooth.org/gatt/services/Pages/ServicesHome.aspx
*/

#include <CurieBLE.h>

BLEPeripheral blePeripheral;       // BLE Peripheral Device (the board you're programming)
BLEService heartRateService("180D"); // BLE Heart Rate Service

// BLE Heart Rate Measurement Characteristic"
BLECharacteristic heartRateChar("2A37",  // standard 16-bit characteristic UUID
    BLERead | BLENotify, 2);  // remote clients will be able to get notifications if this characteristic changes
                              // the characteristic is 2 bytes long as the first field needs to be "Flags" as per BLE specifications
                              // https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.heart_rate_measurement.xml

int oldHeartRate = 0;  // last heart rate reading from analog input
long previousMillis = 0;  // last time the heart rate was checked, in ms

void setup() {
  Serial.begin(9600);    // initialize serial communication
  pinMode(13, OUTPUT);   // initialize the LED on pin 13 to indicate when a central is connected

  /* Set a local name for the BLE device
     This name will appear in advertising packets
     and can be used by remote devices to identify this BLE device
     The name can be changed but maybe be truncated based on space left in advertisement packet */

  blePeripheral.setLocalName("HeartRateSketch");
  blePeripheral.setAdvertisedServiceUuid(heartRateService.uuid());  // add the service UUID
  blePeripheral.addAttribute(heartRateService);   // Add the BLE Heart Rate service
  blePeripheral.addAttribute(heartRateChar); // add the Heart Rate Measurement characteristic


  /* Now activate the BLE device.  It will start continuously transmitting BLE
     advertising packets and will be visible to remote BLE central devices
     until it receives a new connection */

  blePeripheral.begin();
  Serial.println("Bluetooth device active, waiting for connections...");
}

void loop() {
  // listen for BLE peripherals to connect:
  BLECentral central = blePeripheral.central();

  // if a central is connected to peripheral:
  if (central) {
    Serial.print("Connected to central: ");
    // print the central's MAC address:
    Serial.println(central.address());
    // turn on the LED to indicate the connection:
    digitalWrite(13, HIGH);

    // check the heart rate measurement every 200ms
    // as long as the central is still connected:
    while (central.connected()) {
      long currentMillis = millis();
      // if 200ms have passed, check the heart rate measurement:
      if (currentMillis - previousMillis >= 200) {
        previousMillis = currentMillis;
        updateHeartRate();
      }
    }
    // when the central disconnects, turn off the LED:
    digitalWrite(13, LOW);
    Serial.print("Disconnected from central: ");
    Serial.println(central.address());
  }
}
void updateHeartRate() {
  /* Read the current voltage level on the A0 analog input pin.
     This is used here to simulate the heart rate's measurement.
  */

  int heartRateMeasurement = analogRead(A0);
  int heartRate = map(heartRateMeasurement, 0, 1023, 0, 100);
  if (heartRate != oldHeartRate) {      // if the heart rate has changed
    Serial.print("Heart Rate is now: "); // print it
    Serial.println(heartRate);
    const unsigned char heartRateCharArray[2] = { 0, (char)heartRate };
    heartRateChar.setValue(heartRateCharArray, 2);  // and update the heart rate measurement characteristic
    oldHeartRate = heartRate;           // save the level for next comparison
  }
}

REFERENCIA WEB

© 2017 Innova Domotics - Todos los derechos reservados