Servidor HTML con Arduino Uno

martes, 19 de junio de 2012



Para este proyecto necesitamos:

-Arduino Uno
-Shield Ethernet
-Placa protoboard
-8 diodos leds rojos pequeños
-8 resistencias de 10K

Arduino es capaz de recopilar la informacion de entorno a traves de pines de entrada con una gran cantidad de sensores,llegando a controlar motores,luces y otros actuadores.El sofware puede ser descargado de forma gratuita,los ficheros de diseño estan disponible bajo una licencia abierta y puedes adaptarlso a tus necesidades.Hasta las placas pueden ser echas a mano o comprarlas.

Arduino ofrece grandes posibilidades de trabajo desde a grandes industrias y empresas,hasta en el hogar.Arduino funciona mediante sofware y hardware libre,osea,podemos encontrar desde pequeños proyectos,hasta proyectos echos para empresas en internet con su correspondiente codigo.Lo mejor de este metodo es que si tienes en mente hacer algo casi seguro que estara en internet o si no esta hay algun codigo que puede hacer de referencia a lo que queramos hacer con arduino.El codigo en el que se basa es lenguaje C/C++.En este caso yo no he aprendido como leer ni escribir ese lenguaje me he limitado ha hacer pequeños proyectos antes de este e ir recopilando informacion de como se señalizaba cada diodo en el sofware de programacion,en que entrada estaba ect.Una de las ventajas de Arduino es que podemos encontralo por un modico precio de no mas de 30 euros,y dado las posibilidades que tiene merece mucho la pena.Puede hacer practicamente la funcion que nosotros queramos desde la robotica,incluso automatismos hay infinidad de posiblidades.

En este caso emos echo posible que se enciendan un diodos leds con un ordenador,movil,tablet ect,con solo una conexion a internet via wi-fi.La placa ethernet que trae arduino nos crea una pagina web donde podemos modificar si queremos que este encendido o apagado de tal diodo led.La capacidad de este proyecto no es solo encender estos diodos leds ,si no que tambien ,con un rele podemos hacer que se enciendan motores ect, a 230 voltios.Para este proyecto tuvimos que modificar un poco un codigo que encontramos y tuvimos que conectar la ethernet shield ,que esta puesta encima de la placa de arduino,a un router para que se pudiera manejar via wi-fi.A la placa Arduino le introducimos mediante el sofware de programacion su correspondiente codigo para que funcionara. Montamos los diodos leds y sus correspondientes resistencias en una protoboard,dichos leds van alimentados directamente desde el Arduino cada uno en su correspondiente PIN de entrada y todos van a un cable comun que lo lleva al polo negativo(GND).




Uno de mayores problemas que tuvimos a la hora de hacer el proyecto fué encontrar la manera de hacer que Arduino se comunicara correctamente con el router.Tuvimos que darle a Arduino una ip fija y redactar en el codigo su correspondiente referencia de la placa arduino en el codigo para despues introducirlo mediante el sofware de programacion ,aunque este no fue el unico problema que tuvimos que resolver.Una de las cosas que intentamos y no conseguimos fue conectar un rele y hacer las pruebas correspondientes ya a 230 voltios,no pudimos por el mal estado en el que estaba el rele.

Mi conclusion es que Arduino es una herramienta abierta a multiples posibilidades laborales y echa para aprender.Ademas puede ser la diferencia que marques entre tu y los demas a la hora de encontrar un empleo.



Este es el codigo para el proyecto:


Codigo Arduino





Practica 5 Arduino

Necesitamos:5 leds,5 resitencias de 10K,un regulador,un sensor de temperatura,una resistencia de 220 ohmios,la protoboard y arduino.conectamos como siempre las resistencias de 10k en serie con los leds y las resistencias a los pins.Los led irian conectados al sensor y a una de las salidas del regulador(la otra salida a negativo) y la entrada del regulador conectada a un pin.El sensor iria conectado por donde vienen los leds un cable hacia un pin, y la otra pestañaa la resistencia de 220 ohmios,pero antes de llegar a la resistencia saldria un cable hacia un pin.La resistencia se conectaria a otro pin.



Este es el codigo.

/*
Tutorial # 0005 Arduino Academy - Sensor NTC

Conectamos una NTC a una entrada
analógica para controlar cinco salidas
en función de la temperatrura.

Además utilizaremos un ponteciómetro para
controlar la temperatura a partir de la cual
se activarán las salidas

Este proyecto es de dominio público.
*/

//Añadimos la librería math.h
#include <math.h>

//Pines para los LED
int pinLed1 = 8;
int pinLed2 = 9;
int pinLed3 = 10;
int pinLed4 = 11;
int pinLed5 = 12;

//Pines para las entradas analógicas
int analogPin1 = 0;
int analogPin2 = 1;

//Escala de Avisos
int escala = 2;

//Variable para la temperatura de disparo
double tempMin = 0.0;

//Datos para las ecuaciones

float Vin = 5.0;     // [V]       Tensión alimentación del divisor
float Rfija = 1000;  // [ohm]     Resistencia fija del divisor
float R25 = 2800;    // [ohm]     Valor de NTC a 25ºC
float Beta = 3900.0; // [K]      Parámetro Beta de NTC
float T0 = 293.15;   // [K]       Temperatura de referencia en Kelvin

float Vout = 0.0;    // [V]       Variable para almacenar Vout
float Rntc = 0.0;    // [ohm]     Variable para NTC en ohmnios

float TempK = 0.0;   // [K]       Temperatura salida en Kelvin
float TempC = 0.0;   // [ºC]      Temperatura salida en Celsius

void setup() {

 //Comenzamos la comunicación puerto serie
 Serial.begin(9600);

 //Declaramos pines de salida
 pinMode(pinLed1, OUTPUT);
 pinMode(pinLed2, OUTPUT);
 pinMode(pinLed3, OUTPUT);
 pinMode(pinLed4, OUTPUT);
 pinMode(pinLed5, OUTPUT);

 //Y los pines de entrada
 pinMode(analogPin1, INPUT);
 pinMode(analogPin2, INPUT);

}

void loop()
{
 //Primero leemos el pootenciómetro
 tempMin = analogRead(analogPin2);
 //Lo mapeamos a valores de -100 a 800
 tempMin = map (tempMin, 0, 1023, -100, 800);
 //Y lo dividimos entre 10 para darle un decimal
 tempMin = tempMin/10;

 //Y lanzamos el ajuste establecido via serie
 Serial.println("-----------------------------------------------");
 Serial.println();
 Serial.print("AJUSTE DE TEMPERATURA MINIMA A ");
 Serial.print(tempMin);
 Serial.println(" GRADOS CELSIUS");
 Serial.println();
 Serial.println("-----------------------------------------------");

 //Y ahora calculamos la Temperatura

 //Primero la Vout del divisor
 Vout=(Vin/1024)*(analogRead(analogPin1));

 //Ahora la resistencia de la NTC
 Rntc=(Vout*Rfija)/(Vin-Vout);

 //Y por último la temperatura en Kelvin
 TempK = Beta/(log(Rntc/R25)+(Beta/T0));

 //Y ahora la pasamos a celsius
 TempC = TempK-273.15;

 //Y lo mostramos por puerto serie
 Serial.println();
 Serial.print("LA TEMPERATURA DE LA NTC ES DE ");
 Serial.print(TempC);
 Serial.println(" GRADOS CELSIUS");
 Serial.println();

 //Ahora las comparaciones para las salidas
 if(TempC < tempMin)
 {
 digitalWrite(pinLed1, HIGH);
 digitalWrite(pinLed2, LOW);
 digitalWrite(pinLed3, LOW);
 digitalWrite(pinLed4, LOW);
 digitalWrite(pinLed5, LOW);
 }
 else if (((TempC <= (tempMin + escala)) & (TempC > tempMin)))
 {
 digitalWrite(pinLed1, HIGH);
 digitalWrite(pinLed2, HIGH);
 digitalWrite(pinLed3, LOW);
 digitalWrite(pinLed4, LOW);
 digitalWrite(pinLed5, LOW);
 }
 else if (((TempC<=(tempMin+(escala*2)))&(TempC>tempMin+escala)))
 {
 digitalWrite(pinLed1, HIGH);
 digitalWrite(pinLed2, HIGH);
 digitalWrite(pinLed3, HIGH);
 digitalWrite(pinLed4, LOW);
 digitalWrite(pinLed5, LOW);
 }
 else if ((TempC<=(tempMin+(escala*3)))&(TempC>tempMin+(escala*2)))
 {
 digitalWrite(pinLed1, HIGH);
 digitalWrite(pinLed2, HIGH);
 digitalWrite(pinLed3, HIGH);
 digitalWrite(pinLed4, HIGH);
 digitalWrite(pinLed5, LOW);
 }
 else if (TempC > (tempMin + (escala*4)))
 {
 digitalWrite(pinLed1, HIGH);
 digitalWrite(pinLed2, HIGH);
 digitalWrite(pinLed3, HIGH);
 digitalWrite(pinLed4, HIGH);
 digitalWrite(pinLed5, HIGH);
 }

 //Un pequeño delay para no volver loco al puerto serie
 delay(500);
}

Practica 4 Arduino

Para esta practica necesitamos 5 leds, 5 resistencias de 10K,1 resistencia de 220 ohmios, un sensor LDR ,un regulador , la placa protoboard y arduino.Conectamos los led y las resistencias en serie y a la vez la resistencias a sus pins correspondiente en arduino,losled iran todos conectado al LDR que a su vez tiene en serie la resistencia de 220 ohmios.La resistencia de 220 la conectamos a una de las salidas del regulador (la otra salida esta directamente conectada a negativo) y el regulador conectado a su pin en arduino.




Este es el codigo.

/*
Tutorial # 0004 Arduino Academy - Sensor LDR

Conectamos una foto-resistencia a la entrada
analógica para controlar cinco salidas
en función de la luz ambiente.

Este proyecto es de dominio público.
*/

//Aquí almacenamos los datos recogidos del LDR:
int valorLDR = 0;  

//Decimos que pines vamos a utilizar para LED
int pinLed1 = 12;
int pinLed2 = 11;
int pinLed3 = 10;
int pinLed4 = 9;
int pinLed5 = 8;

//Y que pin para la LDR
int pinLDR = 0;

void setup()
{
 //Establecemos como salida los pines para LED
 pinMode(pinLed1, OUTPUT);
 pinMode(pinLed2, OUTPUT);
 pinMode(pinLed3, OUTPUT);
 pinMode(pinLed4, OUTPUT);
 pinMode(pinLed5, OUTPUT);

 //Le decimos que vamos a usar una referencia externa
 analogReference(EXTERNAL);

}

void loop()
{
 //Guardamos el valor leido en una variable
 valorLDR = analogRead(pinLDR);

 //Y comenzamos las comparaciones:
 if(valorLDR >= 1023)
 {
   digitalWrite(pinLed1, LOW);
   digitalWrite(pinLed2, LOW);
   digitalWrite(pinLed3, LOW);
   digitalWrite(pinLed4, LOW);
   digitalWrite(pinLed5, LOW);
 }
 else if((valorLDR >= 823) & (valorLDR < 1023))
 {
   digitalWrite(pinLed1, HIGH);
   digitalWrite(pinLed2, LOW);
   digitalWrite(pinLed3, LOW);
   digitalWrite(pinLed4, LOW);
   digitalWrite(pinLed5, LOW);
 }
 else if((valorLDR >= 623) & (valorLDR < 823))
 {
   digitalWrite(pinLed1, HIGH);
   digitalWrite(pinLed2, HIGH);
   digitalWrite(pinLed3, LOW);
   digitalWrite(pinLed4, LOW);
   digitalWrite(pinLed5, LOW);
 }
 else if((valorLDR >= 423) & (valorLDR < 623))
 {
   digitalWrite(pinLed1, HIGH);
   digitalWrite(pinLed2, HIGH);
   digitalWrite(pinLed3, HIGH);
   digitalWrite(pinLed4, LOW);
   digitalWrite(pinLed5, LOW);
 }
 else  if((valorLDR >= 223) & (valorLDR < 423))
 {
   digitalWrite(pinLed1, HIGH);
   digitalWrite(pinLed2, HIGH);
   digitalWrite(pinLed3, HIGH);
   digitalWrite(pinLed4, HIGH);
   digitalWrite(pinLed5, LOW);
 }
 else
 {
   digitalWrite(pinLed1, HIGH);
   digitalWrite(pinLed2, HIGH);
   digitalWrite(pinLed3, HIGH);
   digitalWrite(pinLed4, HIGH);
   digitalWrite(pinLed5, HIGH);
 }

}

Practica 3 Arduino

En esta practica necesitaremos 1 led una resistencia de 10K y un PWM que nos permitira variar la potencia que le llega al led.Pondremos el PWM y seguido de una de las pestañas de saida la resistencia seguida del led despues la otra pestaña que no emos utilizado del PWM y la salida del led se conectaran a negativo y seguido a GND en el arduino.




Este es el codigo.

/*
Tutorial # 0003 Arduino Academy - Entrada analógica

Funcionamiento de las entradas analógicas configurando
el pin analógico A0 para tomar datos de una señal.
Esta toma de datos es utilizada para variar la velocidad
de parpadeo de un diodo LED conectado a la salida digital 9.

Este proyecto es de dominio público.
*/

int pinSensor = A0;    // Entrada para el potenciómetro.
int pinLed = 9;        // Seleccionamos pin para el Led.
int valorSensor = 0;   // variable para el valor del sensor.

void setup() {
 // Declaramos el pin del Led como salida:
 pinMode(pinLed, OUTPUT);
}

void loop() {
 // Leemos el valor del sensor y lo almacenamos:
 valorSensor = analogRead(pinSensor);
 // encendemo el diodo LED:
 digitalWrite(pinLed, HIGH);
 // Detenemos el programa durante <valorSensor> milisegundos:
 delay(valorSensor);
 // Apagamos el diodo Led:
 digitalWrite(pinLed, LOW);
 // Detenemos el programa durante <valorSensor> milisegundos:
 delay(valorSensor);
}

Practica 2 Arduino

La practica 2 seria igual que la 1 con la diferencia que pondremos un pulsador para que cuando lo pulsemos se encienda el led.Tambien pondremos una resistencia de 220 ohmios ademas de la de 10K , para que cuando pulsemos el pulsador no se desperdicie la corriente.




Este es el codigo.

/*
Tutorial #0002 Arduino Academy - E/S DIGITALES

En este proyecto encenderemos un LED conectado
al pin digital 12 cuando presionemos el pulsador
asociado al pin digital 2.

Este proyecto es de dominio público
*/

// Variables estáticas
int pinBoton = 2;   // Declaramos la variable pin del Botón
int pinLed =  12;   // Declaramos la variable pin del Led

// Variables dinámicas
int estadoBoton = 0;  // Variable para estado del botón

void setup() {
// Inicializa el pin del LED como salida:
pinMode(pinLed, OUTPUT);
// Inicializa el pin del botón como entrada:
pinMode(pinBoton, INPUT);
}

void loop(){
// Lee el valor del pin del botón y lo almacena
// en la variable estadoBoton
estadoBoton = digitalRead(pinBoton);

// Chequea si el botón está pulsado:
if (estadoBoton == HIGH) {
// Si es así, enciende el LED:
digitalWrite(pinLed, HIGH);
}

else {
// Si no, lo mantiene apagado:
digitalWrite(pinLed, LOW);
}
}

Practicas 1 Arduino

Consiste en poner una resistencia seguida de un led en la protoboard y hacerlo funcionar correctamente.



Y el codigo para hacerlo seria el siguiente.

/*
 Blink
 Enciende y apaga un Led en intervalos
 de un segundo repetidamente.
 Este código de ejemplo es de uso público.
*/

//Configuración de nuestra salida.

void setup(){
pinMode(12, OUTPUT); // Pin 12 como Salida.
}

//Ahora le decimos que hacer con esa salida.

void loop(){
digitalWrite(12, HIGH); // Pone la salida 12 a ON
delay(1000);            // Espera un segundo
digitalWrite(12, LOW);  // Pone la salida 12 a OFF
delay(1000);            // Espera un segundo
}

En primer lugar debemos tener claro la estructura de nuestro Sketch o programa para que lo entienda nuestro Arduino.
Primera: La configuración de nuestra placa (setup), esta se ejecutará tan solo una vez, cuando iniciemos nuestro Arduino.
void setup() {
 Aquí vendrán las configuraciones de nuestro pines
 como entradas o salidas y la configuración del puerto serie
 si es necesaria.
 Como veis debe estar todo incluido entre llaves.
}

Segunda: Programa que ejecutará ciclicamente (loop).
void loop() {
 Aquí pondremos las instrucciones que ejecutará
 nuestro programa nuestro programa.
}

Hay que recordar siempre que pongamos una instrucción colocar ; de lo contrario nos dará error de compilación, ya que es lo que utiliza Arduino para separar una instrucción de otra.
También veréis en todos los programas una serie de anotaciones seguidas de //.
Estas anotaciones son comentarios sobre el programa para facilitar su comprensión, y todo aquello que vaya seguido de esas barritas en la misma línea no es interpretado por Arduino.
// Esto es un comentario de una línea
Existen otra forma de insertar comentarios, son los comentarios en bloque, que se estructuran de la siguiente manera:
/*
  Aquí podemos insertar cualquier descripción
  de nuestro programa de más de una línea o más
  sin que sea tenida en cuenta por Arduino.
  No debemos olvidar cerrar el bloque.
*/

Estos se utiliza normalmente al inicio del programa para insertar una breve descripción del programa, fecha, versión y autor.
En cuanto al setup realizado en este proyecto tenemos lo siguiente
pinMode(12, OUTPUT); // Pin 12 como Salida.
La instrucción pinMode nos sirve para configurar un pin como entrada (INPUT) o como salida (OUTPUT), para recordar la manera que se estructura podemos recordar el siguiente truco pinMode(pin, Mode)podemos observar que repetimos lo mismo que el nombre de la instrucción de manera que rellenaremos primero el pin y luego el Mode separados con una coma y entre paréntesis.
Luego tenemos en la sección de loop las siguientes instrucciones;
digitalWrite(12, HIGH); // Pone la salida 12 a ON
delay(1000);            // Espera un segundo
digitalWrite(12, LOW);  // Pone la salida 12 a OFF

La instrucción digitalWrite(entradadigital, Niveldesalida) nos sirve para poner un pin digital en HIGH (1 lógico = +5v) o LOW (0 lógico = 0v).



ARDUINO MEGA android.

lunes, 18 de junio de 2012

PROYECTO ARDUINO - SENSOR LDR.


       En este proyecto utilizaremos el sensor LDR, se trata de un sensor que detecta la luz.En este proyecto simularemos esta demostración mediante diodos LED, es decir, si el sensor capta la luz los diodos LED se encenderán, si dicho sensor no capta la luz, los diodos LED se apagaran o directamente no se encenderán.

  • En primer lugar para este proyecto necesitaremos:

  1. Arduino
  2. Cables Arduino
  3. Resistencias
  4. Potenciómetro
  5. Sensor LDR
  6. Diodos LED
  7. Cable de conexión de Arduino al PC.
  • En segundo lugar, tenemos que descargarnos el programa Arduino-0023 de la página oficial de Arduino, aquí os dejo la direccion:  http://arduino.cc/es/Guide/Windows A continuación tendreis que darle en la barra de opciones a Download y buscar el Arduino-0023. La descarga tardará entre 4 y 5 minutos, cuando os lo halláis descargado, abrid la carpeta y descomprimirla en el escritorio para que su uso sea correcto.

  • En tercer lugar, procederemos a la instalación de drivers. Al haber descomprimido la carpeta, directamente pasaremos a la instalacion de los drivers que se hara mediante su reconocimiento. Para ello, deberemos conectar nuestro arduino al ordenador mediante el cable USB para que el ordenador pueda reconocer el arduino para la instalacion de los drivers. A continuación se abrirá automaticamente   "Asistente para nuevo hardware encontrado", posteriormente tan solo debereis de seguir los pasos.

La carpeta qe debereis de elegir es en la que hallais descomprimido los drivers.

                    

  • En cuarto lugar, procederemos al desarrollo de nuestro proyecto, para ello necesitareis el esquema eléctrico del circuito entero.
           
           Antes de empezar a montar el proyecto, hay que pararse con detenimiento a estudiar este esquema ya que cualquier fallo podría provocar un cortocircuito en la placa de Arduino.


  • En quinto lugar, cuando hallais estudiado con detenimiento el esquema eléctrico procederemos al esquema en el cual, se distribuye el cableado que vais a realizar en vuestra protoboard.


       Tendréis que mirar con detenimiento a donde va colocado cada uno de los elementos, porque de no ser así el arduino no respondera.


  • En sexto lugar, cuando tengamos nuestro proyecto montado, procederemos a introducirle el código al programa arduino, el cual, lo tenemos que tener guardado y descomprimido en una carpeta ya que nos lo descargamos antes de empezar dicho proyecto. Para que el programa tenga su correcto funcionamiento, para ello, en la barra de herramientas que nos sale arriba escogeremos TOOLS, a continuacion nos iremos a MICROCONTROLLER y desde ahi señalaremos el Arduino que tengamos a nuestra disposición. A continuación también nos iremos a SERIAL PORT y señalaremos COM 3, tan solo nos falta copiar y pegar el código en el programa y asegurarnos mediante este, que el Arduino está bien montado y listo para ponerlo a prueba.


        CÓDIGO:




Tan solo tendreis que copiar y pegar siguiendo cada paso las instrucciones que he dado.
/*
 Tutorial # 0004 Arduino Academy - Sensor LDR

Conectamos una foto-resistencia a la entrada
analógica para controlar cinco salidas
en función de la luz ambiente.

 Este proyecto es de dominio público.
 */

//Aquí almacenamos los datos recogidos del LDR:
int valorLDR = 0;  

//Decimos que pines vamos a utilizar para LED
int pinLed1 = 12;
int pinLed2 = 11;
int pinLed3 = 10;
int pinLed4 = 9;
int pinLed5 = 8;

//Y que pin para la LDR
int pinLDR = 0;

void setup()
{
  //Establecemos como salida los pines para LED
  pinMode(pinLed1, OUTPUT);
  pinMode(pinLed2, OUTPUT);
  pinMode(pinLed3, OUTPUT);
  pinMode(pinLed4, OUTPUT);
  pinMode(pinLed5, OUTPUT);

  //Le decimos que vamos a usar una referencia externa
  analogReference(EXTERNAL); 

}

void loop()
{
  //Guardamos el valor leido en una variable
  valorLDR = analogRead(pinLDR);

  //Y comenzamos las comparaciones:
  if(valorLDR >= 1023)
  {
    digitalWrite(pinLed1, LOW);
    digitalWrite(pinLed2, LOW);
    digitalWrite(pinLed3, LOW);
    digitalWrite(pinLed4, LOW);
    digitalWrite(pinLed5, LOW);
  }
  else if((valorLDR >= 823) & (valorLDR < 1023))
  {
    digitalWrite(pinLed1, HIGH);
    digitalWrite(pinLed2, LOW);
    digitalWrite(pinLed3, LOW);
    digitalWrite(pinLed4, LOW);
    digitalWrite(pinLed5, LOW);
  }
  else if((valorLDR >= 623) & (valorLDR < 823))
  {
    digitalWrite(pinLed1, HIGH);
    digitalWrite(pinLed2, HIGH);
    digitalWrite(pinLed3, LOW);
    digitalWrite(pinLed4, LOW);
    digitalWrite(pinLed5, LOW);
  }
  else if((valorLDR >= 423) & (valorLDR < 623))
  {
    digitalWrite(pinLed1, HIGH);
    digitalWrite(pinLed2, HIGH);
    digitalWrite(pinLed3, HIGH);
    digitalWrite(pinLed4, LOW);
    digitalWrite(pinLed5, LOW);
  }
  else  if((valorLDR >= 223) & (valorLDR < 423))
  {
    digitalWrite(pinLed1, HIGH);
    digitalWrite(pinLed2, HIGH);
    digitalWrite(pinLed3, HIGH);
    digitalWrite(pinLed4, HIGH);
    digitalWrite(pinLed5, LOW);
  }
  else
  {
    digitalWrite(pinLed1, HIGH);
    digitalWrite(pinLed2, HIGH);
    digitalWrite(pinLed3, HIGH);
    digitalWrite(pinLed4, HIGH);
    digitalWrite(pinLed5, HIGH);
  }

}



  • Y por ultimo, os dejaré unas fotos sobre el proyecto, el cuál, lo he realizado yo mismo. Este será el aspecto que tendrá el proyecto cuando este terminado.