Instalación de WampServer 3

Esta presentación muestra la instalación de WampServer 3, el cual es un ambiente de desarrollo para Windows que permite crear aplicaciones web con Apache2, PHP y bases de datos MySQL. También se muestra con ejemplos el uso de WampServer. Este material es parte de los cursos “Programación Web” y “Diseño de Bases de Datos Relacionales” que el autor ha impartido a estudiantes de nivel licenciatura y maestría en varias ocasiones.

Presentation · October 2016
DOI: 10.13140/RG.2.2.30976.23042
La intención de esta entrada es tener un punto de referencia sobre la instalación de Apache, MySQL y PHP en Windows, lo que nos permitirá tener un ambiente de desarrollo de aplicaciones web y de bases de datos para proyectos y aplicaciones en robótica e internet de las cosas, entre otras.

Sensor de luz con Arduino UNO

En esta página se muestra el uso del sensor de luz (Light Sensor Brick) con Arduino UNO. Este sensor puede funcionar como sensor analógico o sensor digital. Aquí se ejemplifica el uso analógico, con valores entre 0 y 1023.

Material usadoLightSensorBrick

1 Arduino UNO
1 Sensor de luz (Ligth Sensor Brick)
3 Cables hembra-macho

El sensor tiene una fotorresistencia, la cual se usa para detectar la cantidad de luz en el ambiente. También tiene un interruptor, con el cual se configura el sensor para enviar valores digitales o analógicos. Para el programa siguiente debe estar en la posición A (analógico).

Programa LightSensorBrick.ino

/* LightSensorBrick.ino
* Julio C. Sandria Reynoso - 24-Mayo-2017
* Este programa monitorea un sensor de luz del tipo
* Light Sensor Brick
*/

int lightValue = 0; // Muy iluminado 0..1023 Muy obscuro
 
void setup() {
  pinMode(A0, INPUT);
  Serial.begin(9600);
  Serial.println("Iniciando programa...");
  Serial.println("Valor\tSituacion");
}

void loop() {
  lightValue = analogRead(A0);
  Serial.print(lightValue);
  Serial.print("\t");
  if( lightValue < 205 )
    Serial.println("Muy iluminado");
  else if( lightValue < 410 )
    Serial.println("Iluminado");
  else if( lightValue < 615 )
    Serial.println("Sombreado");
  else if( lightValue < 820 )
    Serial.println("Obscuro");
  else
    Serial.println("Muy obscuro");
  delay(1000);
}

 

Sensor de presión BMP180 con Arduino UNO

BMP180En esta página se muestra el uso del sensor de presión barométrica BMP180 con Arduino UNO. Con este sensor también se puede obtener la temperatura y altura sobre el nivel del mar.

Material usado

1 Arduino UNO
1 Sensor BMP180
4 Cables hembra-macho

Libería

SFE_BMP180.zip que se puede descargar de esta misma página. La página oficial de la librería está en la dirección https://github.com/sparkfun/BMP180_Breakout.

El programa que se muestra aquí está basado en el Tutorial sensor de presión barométrica, en el cual se hace una muy buena explicación de la librería.

Diagrama de conexión del sensor BMP180 con Arduino UNO:

UNO-and-BMP180

Programa SensorBMP180.ino

/* 
* SensorBMP180.ino
* Julio C. Sandria Reynoso - 23-Mayo-2017
* Este programa toma la Temperatura y Presión de un sensor
* BMP180 conectado a Arduino UNO
* Esta basado en el Tutorial sensor de presion barometrica
* http://www.naylampmechatronics.com/blog/43_Tutorial-sensor-de-presi%C3%B3n-barom%C3%A9trica-BMP180.html
*/

#include <SFE_BMP180.h>
#include <Wire.h>

SFE_BMP180 bmp180;
char statusBmp180;
double P,T,A,PNivelMar=1013.25; //presion sobre el nivel del mar en mbar

void setup() {
  Serial.begin(9600);
  Serial.println("Iniciando programa...");
  delay(1000);

  if (bmp180.begin()) {
    Serial.println("Sensor BMP180 iniciado correctamente");
    Serial.println();
    Serial.println("  P mbar = Presion barometrica en milibares");
    Serial.println("  T *C = Temperatura en grados Celcius");
    Serial.println("  A msnm = Altura en metros sobre el nivel del mar");
    Serial.println();
  } else {
    Serial.println("Error al iniciar sensor BMP180");
  }
  Serial.println("P mbar\tT *C\tA msnm");
}

void loop() {
  delay(1000);
  if( leerBmp180() ) {
    Serial.print(P,2);
    Serial.print("\t");
    Serial.print(T,2);
    Serial.print("\t");
    Serial.println(A,2);
  } else
    Serial.println("pp.pp\ttt.tt\taa.aa?");
}

boolean leerBmp180() {
  //Inicio de lectura de temperatura
  statusBmp180 = bmp180.startTemperature(); 
  if (statusBmp180 != 0) {
    //Pausa para que finalice la lectura
    delay(statusBmp180); 
    //Obtener la temperatura
    statusBmp180 = bmp180.getTemperature(T); 
    if (statusBmp180 != 0) {
      // Inicio lectura de presión
      statusBmp180 = bmp180.startPressure(3); 
      if (statusBmp180 != 0) {
        //Pausa para que finalice la lectura
        delay(statusBmp180); 
        //Obtenemos la presión
        statusBmp180 = bmp180.getPressure(P,T); 
        if (statusBmp180 != 0) {
          A = bmp180.altitude(P,PNivelMar);
          return true; // Se tomo lectura de Temperatura, Presion y Altitud
        }      
      }      
    }   
  }
  return false; // No se tomo lectura de Temperatura, Presion y Altitud
} // leerBmp180

Ejemplo de corrida

Iniciando programa...
Sensor BMP180 iniciado correctamente
  T *C = Temperatura en grados Celcius
  P mbar = Presion barometrica en milibares
  A msnm = Altura en metros sobre el nivel del mar
T *C	P mbar	A msnm
26.11	866.66	1298.90
26.10	866.64	1299.06
26.10	866.61	1299.38
26.10	866.60	1299.45
26.08	866.61	1299.37
26.09	866.63	1299.15
26.09	866.64	1299.08
26.09	866.65	1298.94
26.10	866.65	1298.97
26.10	866.63	1299.17

 

Sensores de humedad y temperatura DHT11 y DHT22 con Arduino UNO

En este artículo se ejemplifica el uso de los sensores de humedad y temperatura DHT11 y DHT22 con Arduino UNO. El segundo sensor es más preciso en las mediciones, aunque, un poco más caro.

Material usado:

1 Arduino UNO
1 Sensor DHT11
1 Sensor DHT22
1 Protoboard
6 Cables hembra-macho
2 Cables macho-macho

Los ejemplos que se muestran aquí están basados en la libreria DHT de Mark Ruys disponible en https://github.com/markruys/arduino-DHT. Una característica de esta librería es que autodetecta el modelo de sensor, por lo que con el mismo programa se puede usar cualquiera de los dos sensores.

Conectores

En la siguiente imagen se muestran los cuatro conectores de ambos sensores.

DHT11-DHT22-v1-ch

En los programas mostrados a continuación los pines se conectan de la siguiente forma:

  1. VCC: al Pin 5V de Arduino.
  2. Data: al Pin 2 ó 3 de Arduino.
  3. NC: No conectado.
  4. Gnd: al Pin Gnd de Arduino.

Programa DHTxx_Ejemplo.ino

Programa ejemplo que obtiene la humedad y temperatura del sensor DHT11 o DHT22.

/*
* DHTxx_Ejemplo.ino
* Julio C. Sandria Reynoso - 22-Mayo-2017
* Ejemplo de uso de sensores de humedad y temperatura 
* DHT11 y DHT22
*
* Basado en la libreria DHT de Mark Ruys disponible en
* https://github.com/markruys/arduino-DHT
*/

#include "DHT.h"

DHT dht;

void setup() {
  dht.setup(2); // Pin data del DHT en Pin 2 de Arduino
  Serial.begin(9600);
  Serial.println("Iniciando DHTxx_Ejemplo...");
  Serial.println("Humedad\tTemperatura");
}

void loop() {
  delay(2000); // Pausa de 2 segundos
  Serial.print(dht.getHumidity());
  Serial.print("\t");
  Serial.println(dht.getTemperature());
}

Teniendo conectado a Arduino el sensor DHT11, este programa envió al Monitor Serie lo siguiente:

Iniciando DHTxx_Ejemplo...
Humedad Temperatura
57.00   29.00
57.00   30.00
57.00   30.00
57.00   30.00
57.00   29.00

Cuando se conectó el sensor DHT22 a Arduino, el resultado fue el siguiente:

Iniciando DHTxx_Ejemplo...
Humedad Temperatura
58.40   29.50
58.50   29.60
64.70   29.60
69.80   29.60
74.10   29.80
77.70   30.00
80.40   30.30
82.50   30.50

A diferencia del sensor DHT11, el DHT22 es más preciso, ya que también obtiene decimales para humedad y temperatura. A partir de la línea 7 empezaron a subir los valores de humedad y temperatura porque el sensor se sujetó dentro del puño cerrado.

Programa DHTxx_Ejemplo2.ino

En este ejemplo se usaron ambos sensores para comparar sus mediciones. El pin Data del DHT11 está conectado al pin 3 de Arduino, mientras que el pin Data del DHT22 está conectado al pin 2 de Arduino.

Arduino_UNO-DHT11-DHT22

Este programa toma la lectura de ambos sensores, DHT11 y DHT22 conectados a una tarjeta Arduino UNO.

/*
* DHTxx_Ejemplo2.ino
* Julio C. Sandria Reynoso - 22-Mayo-2017
* Ejemplo de uso de sensores de humedad y temperatura
* DHT11 y DHT22
*
* Basado en la libreria DHT de Mark Ruys disponible en
* https://github.com/markruys/arduino-DHT
*/
#include "DHT.h"
DHT dht11;
DHT dht22;

void setup() {
  dht22.setup(2); // Pin data del DHT22 en Pin 2 de Arduino
  dht11.setup(3); // Pin data del DHT11 en Pin 3 de Arduino
  Serial.begin(9600);
  Serial.println("Iniciando DHTxx_Ejemplo2...");
  Serial.println("DHT11\t\tDHT22\t");
  Serial.println("Hum\tTemp\tHum\tTemp");
}

void loop() {
  delay(2000); // Pausa de 2 segundos
  Serial.print(dht11.getHumidity());
  Serial.print("\t");
  Serial.print(dht11.getTemperature());
  Serial.print("\t");
  Serial.print(dht22.getHumidity());
  Serial.print("\t");
  Serial.println(dht22.getTemperature());
}

Para este programa, el Monitor Serie mostró los siguiente:

Iniciando DHTxx_Ejemplo2...
DHT11	     	DHT22	
Hum  	Temp 	Hum  	Temp
55.00	29.00	58.20	29.60
56.00	29.00	58.20	29.60
56.00	29.00	58.10	29.50
55.00	29.00	58.10	29.50
55.00	29.00	58.10	29.50
56.00	29.00	58.10	29.50
56.00	29.00	58.10	29.50
56.00	29.00	58.10	29.50
55.00	29.00	58.20	29.50
56.00	28.00	58.30	29.60

Referencias

  • Libreria DHT de Mark Ruys.
  • Ficha técnica del sensor DHT22.

Arduino Blink Monitor ejemplo – encender y apagar LEDs

¿Cómo encender y apagar LEDs externos a Arduino? ¿Y cómo monitorear (ver) qué está haciendo Arduino?

arduino-blink-demoEste programa hace que Arduino encienda y apague el LED conectado al PIN 13. Está basado en el ejemplo Blink de Arduino.

/* Programa: BlinkMonitor.ino
   Modificado por: Julio Sandria - 28-Sep-2016
   Enciende un LED dos segundos y lo apaga un segundo, repetidamente.
   También muestra un texto en el Monitor Serie.  
*/

// la función setup se ejecuta una vez cuando se oprime reset o 
// enciende la tarjeta Arduino
void setup() {
  // inicializar pin digital 13.
  pinMode(13, OUTPUT);
  Serial.begin(9600);
  Serial.println("Iniciando BlinkMonitor... por Julio Sandria...");
  delay(1000);
}

// la función loop se repite siempre que tenga energía la tarjeta
void loop() {
  digitalWrite(13, HIGH);   // Enciende el led
  Serial.print("LED 13 encendido... ");
  delay(2000);              // Espera dos segundos
  digitalWrite(13, LOW);    // Apaga el led
  Serial.println("apagado.");
  delay(1000);              // Espera un segundo
}

Monitor Serie

Arduino puede comunicarse mediante un puerto serial a otros dispositivos o computadora conectada con cable USB. La opción Herramientas | Monitor Serie abre la ventana donde se puede imprimir textos desde Arduino, usando comunicación serial.

arduino-monitor-serie-2

Esta funcionalidad es la que se demuestra en este ejercicio. Por ejemplo, en la función setup(), de las dos líneas:

Serial.begin(9600);
Serial.println("Iniciando BlinkMonitor... por Julio Sandria...");

la primera (Serial.begin) inicializa la comunicación serial entre Arduino y la computadora, a una velocidad de 9600 bps (bits por segundo), la segunda (Serial.println) imprime una línea con el texto «Iniciando BlinkMonitor… por Julio Sandria…». Para más información ver el sitio web de Arduino:  https://www.arduino.cc/en/Reference/Serial.

Conectar un led al pin 13 de Arduino

Además de encender el led que Arduino tiene integrado junto al pin 13, puedes conectar otro Led como se ilustra en la siguiente figura. Después de hacer las conexiones, conecta Arduino a la computadora para ejecutar el programa.

arduino-blink-demo

Conectar dos leds

Como segundo ejercicio, conecte un segundo led a Arduino, como se muestra en la figura siguiente, y cambie la programación para que el led rojo se encienda cuando el led verde se apague y viceversa.

arduino-2-leds-ejemplo

Bluetooth HC-06 para comunicación Android y Arduino

Mtro. Julio César Sandria Reynoso

Resumen

En este artículo mostramos cómo usar una tarjeta bluetooth HC-06 para establecer una comunicación inalámbrica entre un celular o tableta con Android y Arduino UNO. Se muestra el diagrama de conexión entre las tarjetas Arduino y HC-06. Se proporciona el programa que debe cargarse en Arduino para recibir la comunicación por bluetooth. Se indica qué programa debe descargarse del Play Store e instalarse en el dispositivo Android. Y finalmente se describe cómo realizar la conexión entre ambos dispositivos, y qué datos recibe Arduino para mostrarlos en un Monitor Serie.

Material

  • Tarjeta Arduino UNO
  • Tarjeta Bluetooth HC-06
  • 4 cables macho-hembra
  • Celular o tableta con Android
  • Computadora con software Arduino

Diagrama

Con los cables hembra-macho, conecta las tarjeta Arduino UNO y HC-06 como se muestra en el diagrama siguiente:

Arduino_UNO-HC-06 v2

Una vez conectadas entre si ambas tarjetas, conecta Arduino UNO a la computadora mediante el cable USB. De esta forma, la tarjeta bluetooth CH-06 recibe energía e inmediatamente está disponible para conectarse con un dispositivo bluetooth.

Aplicación en Android

En Android vamos a usar la aplicación Bluetooth RC Controller, la cual puedes descargar del Play Store de Google.

Bluetooth RC Controller Med

Una vez instalada la aplicación en tu dispositivo móvil, conéctala mediante bluetooth al HC-06, el cual se muestra con dicho nombre entre los dispositivos bluetooth. El password por default es 1234.

La tarjeta HC-06 tiene un led rojo que se enciende cuando recibe energía. Este led parpadea cuando la tarjeta aún no está conectada a otro dispositivo bluetooth. Cuando se conecta, el led queda encendido permanentemente.

Programa en Arduino

Copia el siguiente código y pégalo en el Software Arduino. Cárgalo a tu tarjeta Arduino UNO.

/*
 * Autor Julio Sandria // Feb 14, 2015 ver 1
 * Programa: bluetooth_sanduino_v1.ino
 * Proyecto: Bluetooth HC-06 para comunicación Android y Arduino
 * Mas información en: www.robotica.sandria.org
 *
 * Conexiones:
 * Arduino UNO pin 10 a pin TXD de HC-06
 * Arduino UNO pin 11 a pin RXD de HC-06
 * Arduino UNO pin 5V a pin VCC de HC-06
 * Arduino UNO pin GND a pin GND de HC-06
 */

// Incluimos librería para comunicación serial con Arduino
#include "SoftwareSerial.h"

// Declaramos objeto BT1 para comunicación serial por bluetooth
// usando pines 10 para recibir y 11 para transmitir
SoftwareSerial BT1(10,11); // RX, TX

int estado;

void setup() {
  // Iniciamos comunicación serial por USB
  Serial.begin(9600);
  // Iniciamos comunicación serial por bluetooth
  BT1.begin(9600);
  // Damos tiempo para iniciar comunicación
  delay(500); 
  Serial.println("Iniciando bluetooth_sanduino_v1.ino...");
  if(BT1.available())
    Serial.println("BT1 disponible");
}

void loop() {
  if (BT1.available()) {
    // Si hay disponible comunicación bluetooth...
    estado = BT1.read();
    if( estado != 83 ) // Default de Bluetooth RC Controller
      Serial.println(estado);
  } else {
    // Si no hay disponible comunicación bluetooth...
    Serial.println("BT1 NO disponible");
  }  
  delay(50);
}

Una vez cargado el programa en la tarjeta Arduino y con el cable USB conectando Arduino con la computadora, en el software Arduino abre el Monitor Serie, para ver lo que está pasando en la tarjeta Arduino.

Monitor_Serie_bluetooth_sanduino_v1

Si no se conectaron bien el móvil Android y el HC-06, en el Monitor Serie debe mostrarse el mensaje «BT1 NO disponible». Si se conectaron correctamente, se mostrará el mensaje «BT1 disponible».

Una vez conectados entre si Android y Arduino, oprime los botones de movimiento de carro de la aplicación Bluetooth RC controller. Al hacer esto, en el Monitor Serie se mostrarán números que corresponden a los botones oprimidos de la siguiente manera:

  • 70: Forward: Avanzar
  • 66: Backward: Retroceder
  • 76: Left: Izquierda
  • 82: Right: Derecha

De hecho, cada número corresponde al código ASCII de la primera letra de la palabra en inglés.

En el siguiente artículo, veremos cómo controlar por bluetooth el robot Sanduino con un dispositivo móvil Android.

Enlaces relacionados

Sensor infrarrojo (IR) TSOP1100

El sensor infrarrojo de la serie TSOP1100 tiene un receptor miniaturizado diseñado para sistemas de control remoto infrarrojo. Documentación técnica: Sensor-IR-TSOP1100.

Sensor-IR-TSOP1100

Jairo Herrera muestra el uso de este sensor con una tarjeta Arduino UNO y un control remoto en la página Arduino + Sensor IR + Ctrl Remoto.

En robótica, se puede usar este sensor para enviarle comandos a un robot mediante un control remoto o con cualquier otro dispositivo que emita una señal infrarroja, por ejemplo, la pelota IR usada con robots futbolistas en RoboCupJunior Soccer.

 

Robot Sanduino – Control con funciones

El uso de funciones en los lenguajes de programación es fundamental para escribir programas más compactos y legibles. Por ejemplo, para un robot Sanduino que hace lo siguiente de forma repetida:

  • Avanza 2 segundos
  • Retrocede 1 segundo
  • Avanza 1 segundo
  • Retrocede 2 segundos

Se puede tener el siguiente programa:

/* Programa: Sanduino_avretro.ino
   Autor: Julio Sandria (Enero 2015)
   Requiere: Robot Sanduino A01, con puente H
   y Arduino UNO conectados.
   Mueve el motor izquierdo con pines 6 y 7
   Mueve el motor derecho con pines 8 y 9
*/

void setup() {
  pinMode(6,OUTPUT);
  pinMode(7,OUTPUT);
  pinMode(8,OUTPUT);
  pinMode(9,OUTPUT);
}

void loop() {
  // Robot avanza 2 segundos
  digitalWrite(6,HIGH);
  digitalWrite(7,LOW);
  digitalWrite(8,HIGH);
  digitalWrite(9,LOW);
  delay(2000);
  
  // Robot retrocede 1 segundos
  digitalWrite(6,LOW);
  digitalWrite(7,HIGH);
  digitalWrite(8,LOW);
  digitalWrite(9,HIGH);
  delay(1000);

  // Robot avanza 1 segundos
  digitalWrite(6,HIGH);
  digitalWrite(7,LOW);
  digitalWrite(8,HIGH);
  digitalWrite(9,LOW);
  delay(2000);
  
  // Robot retrocede 2 segundos
  digitalWrite(6,LOW);
  digitalWrite(7,HIGH);
  digitalWrite(8,LOW);
  digitalWrite(9,HIGH);
  delay(2000);  
}

Se puede hacer un programa más compacto y que hace lo mismo usando las funciones avanza() y retrocede():

/* Programa: Sanduino_avretrof.ino
   Autor: Julio Sandria (Enero 2015)
   Requiere: Robot Sanduino A01, con puente H
   y Arduino UNO conectados.
   Mueve el motor izquierdo con pines 6 y 7
   Mueve el motor derecho con pines 8 y 9
*/

void setup() {
  pinMode(6,OUTPUT);
  pinMode(7,OUTPUT);
  pinMode(8,OUTPUT);
  pinMode(9,OUTPUT);
}

void loop() {
  avanza(2000);
  retrocede(1000);
  avanza(1000);
  retrocede(2000); 
}

void avanza(int tiempo) {
  digitalWrite(6,HIGH);
  digitalWrite(7,LOW);
  digitalWrite(8,HIGH);
  digitalWrite(9,LOW);
  delay(tiempo);
}

void retrocede(int tiempo) {  
  digitalWrite(6,LOW);
  digitalWrite(7,HIGH);
  digitalWrite(8,LOW);
  digitalWrite(9,HIGH);
  delay(tiempo);
}

En la función loop se hacen las llamadas siguientes:

  avanza(2000);
  retrocede(1000);
  avanza(1000);
  retrocede(2000);

Observa que esto prácticamente se puede leer así: avanza 2000, retrocede 1000, avanza 1000, retrocede 2000 (los tiempos en milisegundos). Esto es mucho más fácil de leer y entender que el contenido de loop() del primer programa.

Después de la función loop() están las definiciones de las funciones avanza() y retrocede().

Robot Sanduino – Busca negro

El programa siguiente, hace que el robot Sanduino avance mientras detecta el suelo blanco. Cuando en el suelo detecta el color negro se detiene.

/* Programa: SanduinoBuscaNegro.ino
   Autor:    Julio Sandria (Enero 2015)
             Taller de Robótica 2015
   Robot Sanduino usando un sensor de luz 
*/

int pinSensorLuz = 2;
int valorSensorLuz = 0;
int tAvanza = 50;
int tAlto = 40;

void setup() {
  pinMode(pinSensorLuz,INPUT);
  pinMode(6,OUTPUT);
  pinMode(7,OUTPUT);
  pinMode(8,OUTPUT);
  pinMode(9,OUTPUT);
  delay(3000);
}

void loop() {
  valorSensorLuz = digitalRead(pinSensorLuz);

  if( valorSensorLuz == 0 ) avanza(tAvanza);

  alto(tAlto);
}

/* Se define la función avanza()
   ms = tiempo en milisegundos */
void avanza(int ms) {
  digitalWrite(6,HIGH);
  digitalWrite(7,LOW);
  digitalWrite(8,HIGH);
  digitalWrite(9,LOW);
  delay(ms);
}

/* Se define la función alto()
   ms = tiempo en milisegundos */
void alto(int ms) {
  digitalWrite(6,LOW);
  digitalWrite(7,LOW);
  digitalWrite(8,LOW);
  digitalWrite(9,LOW);
  delay(ms);
}

Copia el programa en el software Adruino y cárgalo a la tarjeta Arduino del Robot Sanduino. El robot debe tener conectado el sensor de luz izquierdo al pin 2 de Arduino.

Prueba el robot colocándolo en una superficie blanca o clara y déjalo avanzar hacia un superficie negra u obscura.

Observa el uso de las funciones avanza() y alto(), las cuales permiten unir cierta funcionalidad que siempre se repite.

De este ejemplo se deriva el programa para el Robot Sanduino Seguidor de línea.