Arduino (IoT): Simple Tutorial GPS LS20031

GPS Arduino Santiapps

Arduino Honduras Santiapps Marcio Valenzuela

Tutorial GPS LS20031

En este tutorial recibiremos datos de un modulo GPS.

Requisitos:

  1. Computadora (mac)
  2. Arduino MEGA o UNO (el código cambia porque los Rx/Tx cambian)
  3. Modulo GPS LS20031
  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 LS20031

La conexión:

  • GPS Pin 5 (left-most when viewed from above) : No connection (or ground)
  • GPS Pin 4 : to Arduino ground (GND) pin
  • GPS Pin 3 : to Arduino pin 0
  • GPS Pin 2 : No connection
  • GPS Pin 1 (right-most when viewed from above) : to Arduino 3.3V pin

El código:

[code]
void setup() {
Serial.begin(9600);
Serial1.begin(9600);
}

void loop() {

if (Serial1.available()) {
int inByte = Serial1.read();
Serial.write(inByte);
}
}
[/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/).

Para ello usamos las siguientes conexiones:

  • GPS Pin 5 (left-most when viewed from above) : No connection (or ground)
  • GPS Pin 4 : to Arduino ground (GND) pin
  • GPS Pin 3 : to Arduino pin 2
  • GPS Pin 2 : No connection
  • GPS Pin 1 (right-most when viewed from above) : to Arduino 3.3V pin

Ahora abramos el sketchtest_with_gps_device de la TinyGPS library desde File > Examples > TinyGPS > Examples > test_with_ps_device :


nss.begin(9600);

Ahora vemos:

Testing TinyGPS library v. 9
by Mikal Hart
Sizeof(gpsobject) = 103
Acquired Data
-------------
Lat/Long(10^-5 deg): -4223579, 17344651 Fix age: 14ms.
Lat/Long(float): -42.23579, 173.44651 Fix age: 22ms.
Date(ddmmyy): 0 Time(hhmmsscc): 11210560 Fix age: 35ms.
Date: 0/0/2000  Time: 11:21:5.60  Fix age: 40ms.
Alt(cm): 13870 Course(10^-2 deg): 999999999 
 Speed(10^-2 knots): 999999999
Alt(float): 138.70 Course(float): 10000000.00
Speed(knots): 10000000.00 (mph): 11507795.00 (mps): 5144444.00
 (kmph): 18520000.00
Stats: characters: 156236 sentences: 10 failed checksum: 35
-------------

Pronto veremos otro modulo, el Titan 3 de GTOP.

 

Arduino (IoT): Proyecto de Iluminación Nocturna

Advanced Night Light Arduino Santiapps

Arduino Honduras Santiapps Marcio Valenzuela

Proyecto de Iluminación Nocturna

Nuestros robots ya pueden diferenciar entre noche y día.  Podemos usar esto a nuestra ventaja al combinarlo con detección de movimiento para controlar una luz.

Requisitos:

  1. Computadora (mac)
  2. Arduino UNO o equivalente.
  3. Foto-transistor
  4. Detector de Movimiento PIR
  5. LED
  6. Resistor de 1kOhm
  7. Breadboard
  8. Arduino IDE (https://www.arduino.cc/en/Main/Software)

Ya aprendimos a usar el detector de movimiento PIR.  Ahora combinemos el PIR con el sensor de iluminación para controlar una LED.  Hagamos las conexiones así:

Arduino IoT: Simple Tutorial Luz Nocturna Detección de Movimiento Santiapps Marcio Valenzuela
Arduino IoT: Simple Tutorial Luz Nocturna Detección de Movimiento

Ahora estudiemos el código, el cual es bastante sencillo por cierto.  Lo importante es la lógica:

[code] //PIR
int ledPin = 10;
int pirPin = 9;
int pirVal = 0;
int photoTr = 0;
//Timing parameters
boolean motionDetectedFlag;
unsigned long initialiseSensorTimestamp;
long previousMillis = 0;
long interval = 1000;
void setup() {
Serial.begin(9600);
pinMode (pirPin, INPUT);
pinMode (ledPin, OUTPUT);
}
void loop() {
//if PIR motion is detected && illum is below x value
pirVal = digitalRead(pirPin);
Serial.print(“PIR: “);
Serial.println(pirVal);
photoTr = analogRead(A0);
Serial.print(“Illum: “);
Serial.println(photoTr);
if (pirVal == 1) { //if pirPin is 1…
//Test Illum
if (photoTr < 5) { //if photoTr is larger than 100…
Serial.println(“Illum is also low”);
digitalWrite(ledPin,HIGH); //light up the LED!
delay(15000); //leave it on for 15 seconds
digitalWrite(ledPin,LOW); //light up the LED!
} //end of photoTr
} //end of pir if
delay(1000); //delay loop for 1 whole second
}[/code]

Lo que hacemos es probar si se combinan las factores iluminación baja (<5) y detección de movimiento por parte del PIR (valor==1).  Si esto sucede, queremos escribir un voltaje alto a nuestra LED y dejarla así durante 15 segundos para hacer lo que tenemos que hacer.  Luego de 15 segundos la LED se apaga y la detección reincia con el loop().

Arduino IoT: Simple Tutorial Luz Nocturna Detección de Movimiento Santiapps Marcio Valenzuela
Arduino IoT: Simple Tutorial Luz Nocturna Detección de Movimiento

Como podemos ver, es fácil que cada vez nuestros robots se hacen mas habilidosos, inteligentes!

Arduino (IoT): Simple Tutorial iOS App

iPhone App Arduino Santiapps

Arduino Honduras Santiapps Marcio Valenzuela

Arduino iOS App

Ya vimos como conectarnos a dispositivos BT via Android.  No podríamos dejar por fuera al iOS.

Requisitos:

  1. Computadora (mac)
  2. iPhone con iOS 7+ (BLE)
  3. Xcode
  4. Arduino UNO
  5. Arduino IDE
  6. HM10/11
  7. LED & Resistor 220O
  8. Android Studio (http://developer.android.com/sdk/installing/index.html?pkg=studio)
iOS ObjC Swift iPhone iPad App Design Programming
iOS BLE + Arduino

Ahora vamos a crear una aplicación para iOS y un sketch para Arduino y hacer que se comuniquen de forma sencilla para controlar una LED.

Iniciemos con la Arduino Sketch para leer los datos:

[code]//#include <SoftwareSerial.h>

//SoftwareSerial mySerial(19,18); // RX, TX
// Connect HM10 Arduino MEGA
void setup() {
Serial.begin(9600);
// If the baudrate of the HM-10 module has been updated,
// you may need to change 9600 by another value
// Once you have found the correct baudrate,
// you can update it using AT+BAUDx command
// e.g. AT+BAUD0 for 9600 bauds
Serial1.begin(9600);
}
void loop() {
char c;
if (Serial.available()) {
c = Serial.read();
Serial1.print(c);
}
if (Serial1.available()) {
c = Serial1.read();
Serial.print(c);
}
}
[/code]

Ahora podemos enviar datos mas complejos y recibirlos en Arduino.

Veamos la iOS App.  Debemos entender que datos vamos a recibir primero para poder enviarlos desde nuestro dispositivo iOS.

En este caso estamos usando un modulo BT HM10, que es mas avanzado porque soporta BT4.0 o Smart BT.  Para conectarse a un dispositivo de estos es un poco mas complicado porque utiliza un protocolo GATT para asegurar las conexiones y hacerlas mas eficientes.  La aplicación iOS se puede ver en este tutorial:

http://www.instructables.com/id/IPhone-to-Arduino-using-Bluetooth-40-/

Corremos la app en el celular y podremos buscar dispositivos con BT y conectarnos a ellos y controlar una LED o mas!