Arduino (IoT): Simple Tutorial WiFi

Wifi Communication Arduino Santiapps

Arduino Honduras Santiapps Marcio Valenzuela

Tutorial WiFi

Es muy común querer conectar nuestros proyectos Arduino a la nube.  WiFi es una de las maneras en que podemos hacer esto.  Claro también podemos usar GPRS y lo haremos mas adelante.  Por ahora veamos como conectar nuestra Arduino a una WiFi shield y lograr conectividad a la web.

Requisitos:

  1. Computadora (mac)
  2. Arduino MEGA (u otra variante Arduino) o incluso Arduino clone, Edison, Raspberry…  Este tutorial en particular usa una Arduino MEGA.
  3. Wifi Shield & WiFi Library
  4. Arduino IDE (https://www.arduino.cc/en/Main/Software)

Estaremos usando el modulo WiFi de Roving Networks basado en la WiFly.

Ardiuno - WiFiBee Module Santiapps Marcio Valenzuela
Arduino – WiFiBee Modulo

Aquí podemos ver la WiFi shield (en azul) con su modulo WiFi Bee (en rojo). En este caso, dado que es una shield como la Grove Shield para sensores, hay Shields específicos para un tipo de board.  Aquí vemos que ya esta montada sobre la UNO.  Esto es importante a la hora de comprar porque hay Shields para distintas boards ya que el pinout (la configuración de pines) puede variar por milímetros de distancia en algunos casos.  Esto no quiere decir que no podrás usar una WiFi Shield para MEGA en una UNO, aunque las distancias sean distintas entre pines.  Si la tienes o la has comprado por error, simplemente sera necesario usar cables para llegar de un pin a otro.

El código lo pueden descargar aquí…Arduino WiFi Tutorial

Es necesario modificar los parámetros:

-mySSID

-myPassword

-site (aquí pueden poner google.com por ejemplo)

Para configurar el modulo es necesario conectarlo a la UNO, ajustar los pines a Normal, PC, SoftSerial y subir el sketch Blink.  Luego ajustamos los pines a Normal, PC, UART y abrimos el Serial Monitor en 9600 bps y No Line Ending.  Aqui ingresamos $$$ y recibimos el mensaje “CMD” sin los “”.  Ahora cambiamos a Carriage Return and el Serial Monitor y podemos enviar los siguientes comandos:

set ip dhcp 1

set wlan ssid nuestrowifi

set wlan key nuestra clave wep

set wlan channel 6

save

reboot

Podemos ahora ver nuestros parámetros desde el Serial Monitor con el comando get ip y debería darnos algo así:

AOK
<4.00> get ip
IF=DOWN
DHCP=ON
IP=192.168.1.185:2000
NM=255.255.255.0
GW=192.168.1.1
HOST=192.168.1.1:2000
PROTO=TCP,
MTU=1524
FLAGS=0x7
TCPMODE=0x0
BACKUP=0.0.0.0

y ahora tratamos de unirnos a la red manualmente:

join nuestrowifi
Auto-Assoc nuestrowifi chan=6 mode=WEP SCAN OK
Joining nuestrowifi now..
<4.00> Associated!
DHCP: Start
DHCP in 1090ms, lease=86400s
IF=UP
DHCP=ON
IP=192.168.1.59:2000
NM=255.255.255.0
GW=192.168.1.1
Listen on 2000

Estamos listos para el sketch!

Al montar el código a la UNO (con la WiFi montada encima) podemos enviar el request al servidor y ver la data.

La conexión en sí no es complicada.  Simplemente se monta la WiFi shield sobre la UNO.  Una vez ensamblada se puede conectar la UNO a la pc y subir el código.  Al correrlo se pueden ver las LEDs funcionando en la WiFi shield de la siguiente manera:

La data que aparece en el Monitor Serial se puede ver aquí:

Arduino WiFi Tutorial Santiapps Marcio Valenzuela
Arduino WiFi Tutorial

Excelente!  Ya podemos conectarnos al internet.  Esto abre nuestro abanico de proyectos:

  • Podríamos crear un robot que tome muestras de aire, agua o cualquier fenómeno y postear data al internet.
  • El internet puede ser un servidor, una aplicación web, twitter, Facebook, etc.
  • Podríamos también controlar nuestro robot, su movimiento o decisiones via la nube!

Ahora vamos a combinar la recolección de datos de sensores con la transmisión de esos datos a la web.  Así iniciará el nacimiento de nuestro robot!

EXTRA: Si queremos usar el NTP necesitamos hacer:

wifly.setTimeAddress(“129.6.15.30″);//ntp-nist.ldsbc.net”); //28, 29 or 64.113.32.5 or 216.229.0.179

wifly.setTimePort(123);

wifly.setTimezone(7);

wifly.setTimeEnable(5); //maybe because we dont want it to set time on powerup

wifly.time();

wifly.save();

delay(1000);

// there must have been a line with MyTime that I erased

uptime = wifly.getUptime();

timezone = wifly.getTimezone();

rtc = wifly.getRTC();

Serial.print(“uptime: “);

Serial.println(uptime);

Serial.print(“timezone: “);

Serial.println(timezone);

Serial.print(“rtc: “);

Serial.println(rtc);

Serial.print(“MyTime from wifly getTime: “);

Serial.println(MyTime);

 

//Get time from wifi module

if (wifly.time()) {                              // My testing of rtc

//print time

delay(1000);                                  // My testing of rtc below

//char *something = wifly.getTime(dataBufferToReceive,sizeof(dataBufferToReceive));

int something = wifly.getRTC();

Serial.print(“RTC from wifly getRTC: “);

Serial.println(something);

Serial.print(“Time of buf: “);

Serial.println(wifly.getTime(dataBufferToReceive, sizeof(dataBufferToReceive)));

} else {

Serial.println(“Failed to get time”);

}

Arduino (IoT): Simple Tutorial Ultrasonic Piezo Parte II

Ultrasonic Sonar Arduino Santiapps

Arduino Honduras Santiapps Marcio Valenzuela

Tutorial Ultrasonic Piezo II

Ahora vamos a querer medir la distancia entre nuestro sensor y el objeto ademas de hacer sonar el buzzer.  Esto es mas util y parecido a un radar/sonar.

Requisitos:

  1. Computadora (mac)
  2. Arduino MEGA (u otra variante Arduino) o incluso Arduino clone, Edison, Raspberry…  Este tutorial en particular usa una Arduino MEGA.
  3. LED
  4. Breadboard
  5. Sensor Ultrasonico
  6. Piezo Buzzer
  7. Arduino IDE (https://www.arduino.cc/en/Main/Software)

Ahora si tenemos todos los componentes necesarios y conectados de la siguiente forma:

Arduino Tutorial Piezo Buzzer Santiapps Marcio Valenzuela
Arduino Tutorial Piezo Buzzer

El Piezo Buzzer (cilindro negro en la esquina superior izquierda) se conecta asi:

Piezo (+) > Resistor de 220 Ohm – Color Fuchsia Fila 15

Piezo (-) > GND – Color Azul

Resistor > Pin 9 de MEGA – Color Naranja Fila 25

Mientras que el Sensor Ultrasonico se conecta asi:

VCC > 5V MEGA

GND > GND MEGA

Echo > Pin 12 MEGA

Trig > Pin 13 MEGA

Veamos el código:

#define trigPin 13
#define echoPin 12
#define buzzer 9
void setup() {
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(buzzer, OUTPUT);
}
void loop() {
long duracion, distancia;
digitalWrite(trigPin, LOW); // Enviamos corriente LOW
delayMicroseconds(2); // Esperamos
digitalWrite(trigPin, HIGH); //Enviamos corriente HIGH
delayMicroseconds(10); // Esperamos
digitalWrite(trigPin, LOW); // Nuevamente corriente LOW
duracion = pulseIn(echoPin, HIGH); // Escuchamos el echo
distancia = (duration/2) / 29.1; // Calculamos la distancia
if (distancia < 4) { // Si distancia es corta
tone(buzzer, 1000); //send 1khz sound signal
} else {
noTone(buzzer);
}
if (distancia >= 200 || distancia <= 0){ // Si distancia larga
Serial.println("Out of range");
} else {
Serial.print(distancia); //Escribirla
Serial.println(" cm");
}
delay(500);
}

Al correr este código y abrir el Monitor Serial, deberíamos ver una pantalla con las mediciones del objeto mas cercano que encuentra el sensor.  En mi caso se mira así:

Arduino Tutorial Sensor Ultrasonico Santiapps Marcio Valenzuela
Arduino Tutorial Sensor Ultrasonico

Como pueden ver el objeto mas cercano esta a 25cm.  Al acercar un objeto frente al sensor, la distancia se va reduciendo hasta llegar al limite determinado de 4cm.  En este momento el código instruye a la MEGA a enviar voltaje al Piezo Buzzer para hacerlo sonar.

Ahora veamos el resultado final se puede ver aquí:

Excelente!  Ahora podemos comenzar a trabajar en un robot que se mueva de forma autónoma y no se estrelle contra obstáculos.  Ahora falta agregarle movilidad con motores.