Ir al contenido

Buscar en La Comunidad

Mostrando resultados por etiquetas 'arduino'.

  • Buscar Por Etiquetas

    Añade etiquetas separadas por comas.
  • Buscar Por Autor

Tipo de Contenido


Foros

  • Contacto con el staff
    • Novedades / Anuncios del foro
    • Sugerencias
    • Problemas relacionados con el foro
  • Zona general de charla
    • Presentaciones
    • Charla
    • Zona de Humor, Curiosidades y Otros
    • Mascotas Vagos
    • Noticias del Mundo
    • Tecnología
    • Ayuda y consultas de carácter general
  • Zona GNU/Linux
    • Ayuda, consultas y soporte GNU/Linux
    • Distribuciones GNU/Linux
    • Repositorios. Software GNU/Linux
    • Personalización
    • Raspberry Pi
    • Arduino
    • Manuales / Tutoriales / Guías GNU/Linux
    • Programación
    • Noticias GNU/Linux
    • Hablando de GNU/Linux
  • Zona Gaming
    • Juegos GNU/Linux
    • Noticias Gamer
    • Charla Gamer
  • Zona Móvil
    • Ayuda y soporte para dispositivos móviles
    • Apps Móviles
    • Manuales / Tutoriales / Guías Móviles
    • Roms para dispositivos Móviles
    • Noticias sobre dispositivos Móviles
    • Hablando sobre dispositivos Móviles
  • Zona Mozilla
    • Ayuda, consultas y soporte Mozilla
    • Aplicaciones Mozilla
    • Roms Firefox OS
    • Manuales / Tutoriales / Guías Mozilla
    • Noticias Mozilla
    • Hablando de Mozilla
  • Microsoft
    • Papelera del Foro

Encontrar resultados en...

Encontrar resutados que...


Fecha de Creación

  • Start

    Fin


Última Actualización

  • Start

    Fin


Filtrar por numero de...

Joined

  • Start

    Fin


Grupo


Página Web


Diaspora


Pump


GNU Social


Google +


Twitter


Facebook


Xmpp


Skype


Steam


Desura


MediaGoblin


Youtube


Vimeo


Picasa


Flickr


Email


Lugar


Intereses

Encontramos 14 resultados

  1. Saludos. Si vamos a utilizar nuestro Arduino como un servidor de una página web tenemos que introducir el código de la página dentro del código de Arduino. Esto es, cada linea de código html debe ir dentro de: client.println("Aquí código html"); Esto se puede convertir en un trabajo muy cansado si la página es amplia y, además, si el código html tiene comillas doble tendremos que "escaparlas" con una barra invertida. Para los que trabajamos con linux he creado tres lineas de código bash que nos facilitan enormemente la tarea. Vamos a suponer que tenemos la siguiente página, la cual la llamamos 1.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Portal básico - aprenderaprogramar.com</title> </head> <body> <div id="page"> <div id="header"> Portal (Tutorial básico del programador web: HTML desde cero) - aprenderaprogramar.com </div> <!-- contenedor --> <br /> <br /> <br /> <div id="wrapper"> <!-- menu --> <div id="menu"> <div>Menú</div> <hr style="color:red; background-color:red; width:50%;" /> <ul> <li><a href="#">Portada</a></li> <li> <a href="http://www.aprenderaprogramar.com">aprenderaprogramar.com</a> </li> </ul> </div> <!-- fin menu --> <!-- cuerpo --> <div id="body"> <form method="get" action="accion.html"> Nombre: <input type="text" name="nombre" /><br /> Apellidos: <input type="text" name="apellidos" /><br /> Dirección: <input type="text" name="direccion" /><br /> Correo electrónico: <input type="text" name="correo" /><br /> Teléfono: <input type="text" name="telefono" /><br /> </form> </div> <!-- fin cuerpo --> </div> <!-- fin contenedor --> <br /> <br /> <br /> <div id="footer"> Copyright 2006-2012 aprenderaprogramar.com </div> </div> </body> </html> El script bash creará un archivo llamado 2.txt para nuestro código en Arduino. Las lineas bash a ejecutar una por una serían: sed -e 's/\"/\/"/g' 1.html > 2.txt sed -i "s|^|client.println(\"|g" 2.txt sed -i "s|$|\");|g" 2.txt y el resultado final listo para introducir en nuestro código para Arduino es: client.println("<!DOCTYPE html>"); client.println("<html>"); client.println("<head>"); client.println("<meta charset=/"utf-8/">"); client.println("<title>Portal básico - aprenderaprogramar.com</title>"); client.println("</head>"); client.println("<body>"); client.println("<div id=/"page/">"); client.println("<div id=/"header/">"); client.println("Portal (Tutorial básico del programador web: HTML desde cero) - aprenderaprogramar.com"); client.println("</div>"); client.println("<!-- contenedor -->"); client.println("<br />"); client.println("<br />"); client.println("<br />"); client.println("<div id=/"wrapper/">"); client.println("<!-- menu -->"); client.println("<div id=/"menu/">"); client.println("<div>Menú</div>"); client.println("<hr style=/"color:red; background-color:red; width:50%;/" />"); client.println("<ul>"); client.println("<li><a href=/"#/">Portada</a></li>"); client.println("<li>"); client.println("<a href=/"http://www.aprenderaprogramar.com/">aprenderaprogramar.com</a>"); client.println("</li>"); client.println("</ul>"); client.println("</div>"); client.println("<!-- fin menu -->"); client.println("<!-- cuerpo -->"); client.println("<div id=/"body/">"); client.println("<form method=/"get/" action=/"accion.html/">"); client.println("Nombre: <input type=/"text/" name=/"nombre/" /><br />"); client.println("Apellidos: <input type=/"text/" name=/"apellidos/" /><br />"); client.println("Dirección: <input type=/"text/" name=/"direccion/" /><br />"); client.println("Correo electrónico: <input type=/"text/" name=/"correo/" /><br />"); client.println("Teléfono: <input type=/"text/" name=/"telefono/" /><br />"); client.println("</form>"); client.println("</div>"); client.println("<!-- fin cuerpo -->"); client.println("</div>"); client.println("<!-- fin contenedor -->"); client.println("<br /> <br /> <br />"); client.println("<div id=/"footer/">"); client.println("Copyright 2006-2012 aprenderaprogramar.com"); client.println("</div>"); client.println("</div>"); client.println("</body>"); client.println("</html>"); Bueno, como veréis es fácil y puede ahorrarnos mucho trabajo. Saludos
  2. Saludos.... En esta ocasión vamos a realizar un sistema para medir la cantidad de gas (butano, natural, metano....) que hay en el ambiente, le asignamos un umbral y si la cantidad que capta el sensor es mayor que el umbral sonará un pitido (buzzer) y se encenderá un led rojo, que no se apagarán hasta que las lecturas den unas medidas por debajo del umbral. Materiales utilizados Una placa Arduino (yo he utilizado la Uno). 7 Cables dupont. Un sensor de gases MQ-5. Un buzzer. Un led de color rojo. Conexiones Pin Vcc del sensor MQ-5 al pin 5v de arduino. Pin AOUT del sensor MQ-5 al pin A0 de arduino. Pin GND del sensor MQ-5 al pin GND de arduino. Pin positivo del buzzer al pin 10 de arduino. Pin negativo del buzzer al pin GND de arduino. Pin positivo del led al pin 13 de arduino. Pin negativo del led al pin GND de arduino. Código Arduino: const int gasPin = A0; const int buzzerPin= 10; int ledPin = 13; void setup() { pinMode(gasPin, INPUT); pinMode(buzzerPin, OUTPUT); pinMode(ledPin, OUTPUT); Serial.begin(9600); } void loop() { int medida = analogRead(gasPin); if(medida > 200) { digitalWrite(ledPin, HIGH); playTone(1000, 500); } else { digitalWrite(ledPin, LOW); } Serial.println(medida); delay(1000); } void playTone(long duration, int freq) { duration *= 1000; int period = (1.0 / freq) * 1000000; long elapsed_time = 0; while (elapsed_time < duration) { digitalWrite(buzzerPin,HIGH); delayMicroseconds(period / 2); digitalWrite(buzzerPin, LOW); delayMicroseconds(period / 2); elapsed_time += (period); } } Básicamente el código lo que hace: Asigna los pines. Pone el sensor de gas como entrada y el buzzer y led de salida. Inicia la comunicación serial a 9600 baudios. Inicia una variable (medida) y le asigna el valor de la lectura del sensor. Como el sensor, en condiciones normales, da una lectura entre 120 y 160, creamos una condición, si el valor de la medida es mayor de 200 se encenderá el pin rojo y empezará a sonar el buzzer, que no se apagarán hasta que la lectura sea inferior a 200. Si tenemos la placa conectada al ordenador por el monitor serial nos imprimirá cada segundo las lecturas que hace el sensor. Bueno... ya está... espero que le pueda servir a alguien. Saludos.
  3. Saludos. En esta ocasión vamos a encender / apagar un led, o un relé, vía wifi desde una placa Nodemcu. La página web nos la proporcionará la propia placa. Materiales utilizados Una placa Nodemcu (yo he utilizado la V2) Un led o un relé 2 cables dupont (para el led) o 3 cables dupont (para el relé) Conexiones Si lo hacemos para el led: Pin D7 del Nodemcu al polo positivo del led. Pin GND del Nodemcu al polo negativo del led Si lo hacemos para el relé Pin D7 del Nodemcu al pin In del relé Pin GND del Nodemcu al pin Gnd del relé Pin 3v del Nodemcu al pin Vcc del relé Código Nodemcu: #include <ESP8266WiFi.h> const char* ssid = "Tu_red"; const char* password = "Tu_contraseña"; IPAddress ip(192,168,1,222); IPAddress gateway(192,168,1,1); IPAddress subnet(255,255,255,0); int ledPin = 13; //Lo conectamos a D7, que es el gpio13 WiFiServer server(80); void setup() { Serial.begin(115200); delay(10); pinMode(ledPin, OUTPUT); digitalWrite(ledPin, LOW); WiFi.begin(ssid, password); WiFi.config(ip, gateway, subnet); server.begin(); } void loop() { WiFiClient client = server.available(); if (!client) { return; } Serial.println("new client"); while(!client.available()){ delay(1); } String request = client.readStringUntil('\r'); client.flush(); int value = digitalRead(ledPin); if (request.indexOf("/LED=ON") != -1) { digitalWrite(ledPin, HIGH); value = HIGH; } if (request.indexOf("/LED=OFF") != -1) { digitalWrite(ledPin, LOW); value = LOW; } client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(""); client.println("<!DOCTYPE HTML>"); client.println("<html>"); client.print("El led esta ahora: "); if(value == HIGH) { client.print("Encendido"); client.println("<br><br>"); client.println("<a href=\"/LED=OFF\"\"><button>Apagar</button></a><br />"); } else { client.print("Apagado"); client.println("<br><br>"); client.println("<a href=\"/LED=ON\"\"><button>Encender</button></a>"); } client.println("</html>"); delay(1); } Básicamente el código lo que hace es: Carga la librería necesaria. Se auto-asigna una dirección ip de nuestro router (en esta ocasión la 192.168.1.222) pero se puede poner la que quiera, que no esté ocupada por otro dispositivo, por eso cuanto mas alta mejor. Al poner en nuestro navegador la dirección ip la placa nos enviará una página web donde nos indicará si el dispositivo está encendido o apagado, si está apagado nos mostrará un botón para encenderlo y si está encendido nos mostrará el botón para apagarlo. Bueno... ya está... espero que le pueda servir a alguien. Saludos.
  4. Saludos.... En esta ocasión vamos a realizar un sistema para medir distancias, le asignamos unas distancias y cuando estemos cada vez mas cerca del sistema la intermitencia del pitido será cada vez mas rápida.. Materiales utilizados Una placa Arduino (yo he utilizado la Uno). 6 Cables dupont. Un módulo para medir distancias por ultrasonidos HC-SR04. Un buzzer. Conexiones Pin Vcc del módulo HC-SR04 al pin 5v de arduino. Pin Trig del módulo HC-SR04 al pin 9 de arduino. Pin Echo del módulo HC-SR04 al pin 8 de arduino. Pin GND del módulo HC-SR04 al pin GND de arduino. Pin positivo del buzzer al pin 10 de arduino. Pin negativo del buzzer al pin GND de arduino. Código Arduino: long distancia; long tiempo; int pinSpeaker = 10; void setup(){ Serial.begin(9600); pinMode(9, OUTPUT); pinMode(8, INPUT); pinMode(pinSpeaker, OUTPUT); } void loop(){ digitalWrite(9,LOW); delayMicroseconds(5); digitalWrite(9, HIGH); delayMicroseconds(10); tiempo=pulseIn(8, HIGH); distancia= int(0.017*tiempo); Serial.print("Distancia "); Serial.print(distancia); Serial.println(" cm"); if (distancia <= 200 && distancia > 100) { playTone(500, 500); delay(500); } else if (distancia <= 100 && distancia > 50) { playTone(250, 500); delay(250); } else if (distancia <= 50 && distancia > 25) { playTone(200, 500); delay(100); } else if (distancia <= 25) { playTone(100, 500); delay(50); } delay(500); } void playTone(long duration, int freq) { duration *= 1000; int period = (1.0 / freq) * 1000000; long elapsed_time = 0; while (elapsed_time < duration) { digitalWrite(pinSpeaker,HIGH); delayMicroseconds(period / 2); digitalWrite(pinSpeaker, LOW); delayMicroseconds(period / 2); elapsed_time += (period); } } Con este script lo que conseguimos es que cuando estamos entre 2 y 1 metro del sensor el buzzer empieza a pitar pausadamente. Cuando estamos entre 1 metro y 50 cms. los pitidos serán mas cortos y rápidos que el anterior bloque de distancias. Cuando estamos entre y 50 cms. y 25 cms. los pitidos serán mas cortos y rápidos que el anterior bloque de distancias. Cuando la distancia sea menor de 25 cms. los pitidos serán muy cortos y rápidos. También por el monitor serial nos imprimirá la distancia exacta a la que el objeto se encuentra del módulo. Bueno... ya está... espero que le sirva a alguien. Saludos.
  5. Saludos.... En esta ocasión vamos a realizar un sistema para controlar desde una página web el color que mostrará un led rgb. Para ello necesitaremos dos tipos de código, el de la página web y el del Nodemcu (que al estar hecho para cargar con la Arduino IDE también sirve para Arduino). Materiales utilizados Una placa Nodemcu (yo he utilizado la V2). 4 Cables dupont. Un led rgb Keyes Conexiones Pin GND del Nodemcu al pin V/G del led rgb. Pin D1 del Nodemcu al pin R del led rgb. Pin D2 del Nodemcu al pin G del led rgb. Pin D3 del Nodemcu al pin B del led rgb. Código página Web: <!DOCTYPE html> <html lang="es"><head> <meta charset="utf-8"> <title>Tabla colores</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <style> table { width: 50%; height: 200px; text-align: left; margin-left: auto; margin-right: auto; } .link a{ display:block; height:100%; } </style> </head><body><br> <div style="text-align: center;"> <h4><big><big>TABLA DE COLORES</big></big></h4> <br> </div> <table border="1" cellpadding="0" cellspacing="0"> <tbody> <tr> <td style="vertical-align: top; background-color: rgb(255,255,255);" class="link"><a href="http://192.168.1.222/color=255255255"> </a><br> </td> <td style="vertical-align: top; background-color: rgb(153,153,153);" class="link"><a href="http://192.168.1.222/color=153153153"> </a><br> </td> <td style="vertical-align: top; background-color: rgb(0,0,0);" class="link"><a href="http://192.168.1.222/color=000000000"> </a><br> </td> <td style="vertical-align: top; background-color: rgb(255,0,0);" class="link"><a href="http://192.168.1.222/color=255000000"> </a><br> </td> <td style="vertical-align: top; background-color: rgb(102,0,0);" class="link"><a href="http://192.168.1.222/color=102000000"> </a><br> </td> </tr> <tr> <td style="vertical-align: top; background-color: rgb(255,153,0);" class="link"><a href="http://192.168.1.222/color=255153000"> </a><br> </td> <td style="vertical-align: top; background-color: rgb(153,51,0);" class="link"><a href="http://192.168.1.222/color=153051000"> </a><br> </td> <td style="vertical-align: top; background-color: rgb(255,204,102);" class="link"><a href="http://192.168.1.222/color=255204102"> </a><br> </td> <td style="vertical-align: top; background-color: rgb(153,102,51);" class="link"><a href="http://192.168.1.222/color=153102051"> </a><br> </td> <td style="vertical-align: top; background-color: rgb(255,255,0);" class="link"><a href="http://192.168.1.222/color=255255000"> </a><br> </td> </tr> <tr> <td style="vertical-align: top; background-color: rgb(102,102,0);" class="link"><a href="http://192.168.1.222/color=102102000"> </a><br> </td> <td style="vertical-align: top; background-color: rgb(51,255,51);" class="link"><a href="http://192.168.1.222/color=051255051"> </a><br> </td> <td style="vertical-align: top; background-color: rgb(0,102,0);" class="link"><a href="http://192.168.1.222/color=000102000"> </a><br> </td> <td style="vertical-align: top; background-color: rgb(102,204,204);" class="link"><a href="http://192.168.1.222/color=102204204"> </a><br> </td> <td style="vertical-align: top; background-color: rgb(51,102,102);" class="link"><a href="http://192.168.1.222/color=051102102"> </a><br> </td> </tr> <tr> <td style="vertical-align: top; background-color: rgb(51,102,255);" class="link"><a href="http://192.168.1.222/color=051102255"> </a><br> </td> <td style="vertical-align: top; background-color: rgb(0,0,153);" class="link"><a href="http://192.168.1.222/color=000000153"> </a><br> </td> <td style="vertical-align: top; background-color: rgb(255,153,255);" class="link"><a href="http://192.168.1.222/color=255153255"> </a><br> </td> <td style="vertical-align: top; background-color: rgb(204,51,204);" class="link"><a href="http://192.168.1.222/color=204051204"> </a><br> </td> <td style="vertical-align: top; background-color: rgb(102,51,102);" class="link"><a href="http://192.168.1.222/color=102051102"> </a><br> </td> </tr> </tbody> </table> <br> <br> </body></html> Este código lo que nos muestra es una página web sencilla con una tabla de unos cuantos colores, que enlaza con la dirección ip que le daremos al Nodemcu. Código Arduino: #include <ESP8266WiFi.h> const char* ssid = "Tu_red"; const char* password = "Tu_Contraseña"; IPAddress ip(192,168,1,222); IPAddress gateway(192,168,1,1); IPAddress subnet(255,255,255,0); int pinLedR = D1; int pinLedV = D2; int pinLedA = D3; WiFiServer server(80); void setup() { Serial.begin(115200); delay(10); pinMode(pinLedR, OUTPUT); pinMode(pinLedV, OUTPUT); pinMode(pinLedA, OUTPUT); WiFi.begin(ssid, password); WiFi.config(ip, gateway, subnet); server.begin(); } String f = ""; void loop() { WiFiClient client = server.available(); if (!client) { return; } Serial.println("new client"); while(!client.available()){ delay(1); } String request = client.readStringUntil('\r'); client.flush(); char i1 = request.indexOf("GET /color="), i2; if (i1 != -1) i2 = request.indexOf(" ", i1+11); f = request.substring(i1+11, i2); String pepe = f.substring(0,2); String juan = f.substring(3,5); String pedro = f.substring(6,8); analogWrite(pinLedR, pepe.toInt()); analogWrite(pinLedV, juan.toInt()); analogWrite(pinLedA, pedro.toInt()); client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(""); client.println("<!DOCTYPE HTML>"); client.println("<html>"); client.print("<body onload='history.back();'>\n"); client.println("</body>"); client.println("</html>"); delay(1); } El código lo que hace en primer lugar es recibir todos los datos de red y asignarle una ip fija al Nodemcu (en este caso la 192.168.1.222). Luego le asignamos los pines al led y los iniciamos como salida. Luego inicia la comunicación wifi y recibe los datos del enlace que pulsemos en la página, esos datos son los valores para que muestre un color u otro. Por último desde el Nodemcu enviamos una pequeña página con un javascript para que el navegador vuelva a mostrar la tabla de colores. Bueno... espero que le sirva a alguien..... Saludos
  6. Saludos... Os voy a mostrar como encender y apagar un led vía wifi desde una página web en un navegador (desde el pc, tablet o móvil) Materiales utilizados Una placa Arduino (yo he utilizado la Uno). 4 Cables dupont. Un led color rojo. Un módulo wifi HLK-RM04. Conexiones Pin Rx del módulo al pin Tx de arduino Pin Tx del módulo al pin Rx de arduino Pin 5V del módulo al pin 5V de arduino Pin GND del módulo al pin GND de arduino Polo positivo del led al pin 13 de arduino Polo negativo del led a GND de arduino Lo que vamos a necesitar son dos clases de código. Por una parte una página web que estará en internet en la que tendremos la orden de encender o apagar el led y el código para la placa arduino que recibirá la orden de encender o apagar el led y le mandará unas instrucciones al navegador. Código página web: <!DOCTYPE html> <html> <head> <title>jQuery Mobile Form</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="http://code.jquery.com/mobile/1.4.2/jquery.mobile-1.4.2.min.css"> <script src="http://code.jquery.com/jquery-1.10.2.min.js"></script> <script src="http://code.jquery.com/mobile/1.4.2/jquery.mobile-1.4.2.min.js"></script> </head> <body> <div data-role="page"> <div data-role="main" class="ui-content"> <form onsubmit="return enviar(this)" method="get" action="http://192.168.1.254:8080/blink" data-ajax="false"> <fieldset data-role="controlgroup"> <legend>Interruptor:</legend> <label for="encender">Encender</label> <input type="radio" name="f" id="encender" value="1"> <label for="apagar">Apagar</label> <input type="radio" name="f" id="apagar" value="2"> </fieldset> <input type="submit" data-inline="true" value="Ejecutar" data-theme="b"> </form> </div> </div> </body> </html> Este código lo que hace es crear un formulario con dos opciones, encendido o apagado y lo envía, por el método get, a la dirección de nuestro módulo HLK-RM04. Código para la placa Arduino: const int ledPin = 13; void setup() { Serial.begin(57600); pinMode(ledPin, OUTPUT); } int f = 0; void loop() { boolean has_request = false; String in = ""; if (Serial.available()) { in = ""; while (true) { // should add time out here while (Serial.available() == false) {} in += (char)(Serial.read()); if (in.endsWith("\r\n\r\n")) { has_request = true; break; } } } if (has_request) { int i1 = in.indexOf("GET /blink?f="), i2; if (i1 != -1) { i2 = in.indexOf(" ", i1+13); f = in.substring(i1+13, i2).toInt(); } Serial.println("HTTP/1.1 200 OK"); Serial.println("Content-Type: text/html"); Serial.println("Connection: close"); // the connection will be closed after completion of the response String sr = "<!DOCTYPE HTML>\n"; sr += "<html>\n"; sr += "<body onload='history.back();'>\n"; sr += "</body>"; sr += "</html>"; Serial.print("Content-Length: "); Serial.print(sr.length()); Serial.print("\r\n\r\n"); Serial.print(sr); has_request = false; } switch (f){ case 1: digitalWrite(ledPin, HIGH); break; case 2: digitalWrite(ledPin, LOW); break; f=0; } } Este script lo que hace,entre otras cosas, es inicializar una variable, cuyo valor lo recibe vía wifi, si el valor es 1 enciende el led, si el valor el 2 lo apaga. Además envía una instrucción javascript al navegador para que vuelva a mostrar el interruptor. Como veréis, cambiando sólo un poco el código se puede hacer para que en vez de encender un led active un relé, por ejemplo, y de esta manera activar cualquier dispositivo que esté conectado a la red eléctrica y todo ello desde un móvil o tablet y cualquier parte del mundo porque funciona vía web.
  7. Saludos. Os voy a mostrar como mandar mensajes (strings) a una placa arduino vía wifi desde un PC, tablet o smartphone. Materiales utilizados: Una placa Arduino (yo he utilizado la Uno) Un módulo wifi HLK-RM04 Una pantalla lcd I2C 16X2 8 cables dupont Conexiones: Pin RX del módulo HLK-RM04 a pin TX de Arduino. Pin TX del módulo HLK-RM04 a pin RX de Arduino. Pin 5V del módulo HLK-RM04 a pin 5V de Arduino. Pin GND del módulo HLK-RM04 a pin GND de Arduino. Pin SDA del lcd a pin A4 de Arduino. Pin CSL del lcd a pin A5 de Arduino. Pin VCC del lcd a pin 5V de Arduino. Pin GND del lcd a pin GND de Aruino. Software necesario: Una página web para mandar el mensaje. El código para la placa Arduino. Código para página web: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>mandar Mensaje</title> </head> <body> <p align="center"> <font size="8"> </p> <form name="input" action="http://192.168.1.254:8080/mensaje" method="get"> Introduce texto: <input type="text" name="f"> <input type="submit" value="Submit"> </form> </body> </html> Como veis el código es muy simple, tiene sólo lo indispensable para que funcione. Lo importante es el action del formulario, que apunta a la dirección ip del módulo HLK-RM04 por el puerto 8080 y a una página llamada mensaje, que en realidad no existe pero lo recogerá nuestra placa Arduino y el method, que tiene que ser get, esto es que mandará el mensaje a través de la url. También en el campo de texto, que lo llamamos f para que recoja la variable y envíe el mensaje a través de ésta a nuestra placa. Código para la Arduino: #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); void setup() { Serial.begin(57600); lcd.begin(16,2); lcd.backlight(); } String f = ""; void loop() { boolean has_request = false; String in = ""; if (Serial.available()) { in = ""; while (true) { while (Serial.available() == false) {} in += (char)(Serial.read()); if (in.endsWith("\r\n\r\n")) { has_request = true; break; } } } if (has_request) { char i1 = in.indexOf("GET /mensaje?f="), i2; if (i1 != -1) { i2 = in.indexOf(" ", i1+15); f = in.substring(i1+15, i2); } Serial.println("HTTP/1.1 200 OK"); Serial.println("Content-Type: text/html"); Serial.println("Connection: close"); String sr = "<!DOCTYPE HTML>\n"; sr += "<html>\n"; sr += "<body onload='history.back();'>\n"; sr += "</body>"; sr += "</html>"; Serial.print("Content-Length: "); Serial.print(sr.length()); Serial.print("\r\n\r\n"); Serial.print(sr); has_request = false; lcd.clear(); f.replace("+", " "); lcd.print(f); } } Este código básicamente lo que hacer es, primero cargar las librerías necesarias, iniciar la comunicación de arduino con el módulo wifi e iniciar la pantalla lcd, recoger el valor de la variable (mensaje) que le hemos enviado, enviar una página web muy básica para que el navegador vuelva a la página de enviar mensajes, imprimir el mensaje en la pantalla lcd. Cabe destacar que las url no admiten los espacios en blanco, por lo que nuestro navegador, si el mensaje los contiene los sustituirá por el signo +, si nuestro mensaje es "Hola Juan" en la pantalla del lcd imprimirá "Hola+Juan", el código también sustituye los signos + por espacios en blanco para que nos imprima "Hola Juan". Bueno, espero que le sirva a alguien
  8. Saludos.... En esta ocasión vamos a establecer el giro de un servo vía wifi desde una página web, por lo que podremos controlarlo desde un PC, tableta, smartphone, etc. Materiales utilizados Una placa Arduino (yo he utilizado la Uno). 7 Cables dupont. Un servo, yo he utilizado el de la imagen de mas abajo. Un módulo wifi HLK-RM04. Conexiones Pin Rx del módulo HLK-RM04 al pin Tx de arduino. Pin Tx del módulo HLK-RM04 al pin Rx de arduino. Pin 5V del módulo HLK-RM04 al pin 5V de arduino. Pin GND del módulo HLK-RM04 al pin GND de arduino. Cable naranja del servo (datos) al pin 9 de arduino Cable marrón del servo a pin GND de arduino. Cable rojo del servo a pin 5v de arduino Lo que vamos a necesitar son dos clases de código. Por una parte una página web que estará en nuestro servidor web en la que tendremos el formulario con los grados (de 0 a 180) que queremos que gire el servo y el código para la placa arduino que recibirá la los grados de giro del servo. Código página web, index.html: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//ES" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type"> <title>Control servo</title> <style type="text/css"> #juan { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); -webkit-transform: translate(-50%, -50%); } </style> </head> <body> <div id="juan"> <form action="http://192.168.1.254:8080/servo" method="get"> <input type="submit" name="l" value="000"> <input type="submit" name="l" value="005"> <input type="submit" name="l" value="010"> <input type="submit" name="l" value="015"> <input type="submit" name="l" value="020"> <input type="submit" name="l" value="025"></br> <input type="submit" name="l" value="030"> <input type="submit" name="l" value="035"> <input type="submit" name="l" value="040"> <input type="submit" name="l" value="045"> <input type="submit" name="l" value="050"> <input type="submit" name="l" value="055"></br> <input type="submit" name="l" value="060"> <input type="submit" name="l" value="065"> <input type="submit" name="l" value="070"> <input type="submit" name="l" value="075"> <input type="submit" name="l" value="080"> <input type="submit" name="l" value="085"></br> <input type="submit" name="l" value="090"> <input type="submit" name="l" value="095"> <input type="submit" name="l" value="100"> <input type="submit" name="l" value="105"> <input type="submit" name="l" value="110"> <input type="submit" name="l" value="115"></br> <input type="submit" name="l" value="120"> <input type="submit" name="l" value="125"> <input type="submit" name="l" value="130"> <input type="submit" name="l" value="135"> <input type="submit" name="l" value="140"> <input type="submit" name="l" value="145"></br> <input type="submit" name="l" value="150"> <input type="submit" name="l" value="155"> <input type="submit" name="l" value="160"> <input type="submit" name="l" value="165"> <input type="submit" name="l" value="170"> <input type="submit" name="l" value="175"></br> <input type="submit" name="l" value="180"> </form> </div> </body> </html> Este código lo que hace básicamente es crear un formulario con los grados que queremos que gire el servo y lo envía, por el método get, a la dirección ip de nuestro arduino. Código para la placa arduino: #include <Servo.h> const int servo_pin = 9; Servo myservo; unsigned int old_value; void setup() { Serial.begin(57600); myservo.attach(servo_pin); old_value = 90; } int f = 0; void loop() { boolean has_request = false; String in = ""; if (Serial.available()) { in = ""; while (true) { while (Serial.available() == false) {} in += (char)(Serial.read()); if (in.endsWith("\r\n")) { has_request = true; break; } } } if (has_request) { char i1 = in.indexOf("GET /servo?l="), i2; if (i1 != -1) { i2 = in.indexOf(" ", i1+13); f = in.substring(i1+13, i2).toInt(); } Serial.println("HTTP/1.1 200 OK"); Serial.println("Content-Type: text/html"); Serial.println("Connection: close"); String sr = "<!DOCTYPE HTML>\n"; sr += "<html>\n"; sr += "<body onload='history.back();'>\n"; sr += "</body>"; sr += "</html>"; Serial.print("Content-Length: "); Serial.print(sr.length()); Serial.print("\r\n\r\n"); Serial.print(sr); has_request = false; if ((0 <= f) && (f <= 180)) { if (f < old_value) { for(int i = old_value ; i > f ; i -= 1) { myservo.write(i); delay(15); } old_value = f; } if (f > old_value) { for(int i = old_value ; i < f ; i += 1) { myservo.write(i); delay(15); } old_value = f; } } } delay(100); } El código lo que que hace es cargar la librería necesaria, recoger en una variable el valor que le enviamos desde la página web, que será el valor de giro del servo. También crea una página web que lo que hace es volver al index.html desde el que le enviamos los datos. Mencionar que el script está preparado para que el giro del servo sea un poco mas lento de lo normal, que no gire muy rápido.
  9. Saludos. Os voy a mostrar como desde un sensor de humedad y temperatura DHT11 conectado a la placa Arduino se puede enviar vía wifi a un servidor web los datos de humedad y temperatura y almacenarlos en una base de datos en los intervalos de tiempos que deseemos. Materiales utilizados: Una placa Arduino (yo he utilizado la Uno). Un módulo wifi HLK-RM04. Un sensor de temperatura DHT11. 7 cables Dupont. Conexiones: Pin RX del módulo HLK-RM04 a pin TX de Arduino. Pin TX del módulo HLK-RM04 a pin RX de Arduino. Pin 5V del módulo HLK-RM04 a pin 5V de Arduino. Pin GND del módulo HLK-RM04 a pin GND de Arduino. Pin datos del DHT11 a pin 2 de Arduino. Pin VCC del DHT11 a pin 3,5V de Arduino. Pin GND del DHT11 a pin GND de Arduino. Software necesario: El código para la placa Arduino. Dos páginas web php, una para conectar a la base de datos y otra para introducir los datos en ésta. Una base de datos Mysql. Código para Arduino: #include "DHT.h" #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(57600); dht.begin(); } void loop() { boolean has_request = false; int h = dht.readHumidity(); int t = dht.readTemperature(); if (Serial.available()) { while(Serial.available()) {char c = Serial.read();} has_request = true; } if (has_request) { Serial.println("HTTP/1.1 200 OK"); Serial.println("Content-Type: text/html"); Serial.println("Connection: close"); String sr = "<!DOCTYPE HTML>\n"; sr += "<html>\n"; sr += "Humedad: "; sr += h; sr += (" %\t"); sr += "<br />\n"; sr += "Temperatura: "; sr += t; sr += (" ºC "); sr += "<br />\n"; sr += "<form name=\"formulario\" action=\"http://localhost/arduino/wifi/temperatura/intro.php\" method=\"post\">"; sr += " <input type=\"hidden\" name=\"humedad\" value=\""; sr += h; sr += "\" />"; sr += " <br/>"; sr += " <input type=\"hidden\" name=\"temperatura\" value=\""; sr += t; sr += "\" />"; sr += " <br/>"; sr += "</form>"; sr += "<script>"; sr += "document.formulario.submit();"; sr += "</script>"; sr += "</html>"; Serial.print("Content-Length: "); Serial.print(sr.length()); Serial.print("\r\n\r\n"); Serial.print(sr); has_request = false; } } intro.php: <!DOCTYPE html> <html> <head> <meta content="text/html; charset=UTF-8" http-equiv="content-type"> <title></title> <script language="JavaScript"> var totalTiempo=60; var url="http://192.168.1.254:8080"; function updateReloj() { document.getElementById('CuentaAtras').innerHTML = "Se volverán a tomar datos en "+totalTiempo+" segundos"; if(totalTiempo==0) { window.location=url; }else{ totalTiempo-=1; setTimeout("updateReloj()",1000); } } window.onload=updateReloj; </script> </head> <body> <? $humedad = $_POST['humedad']; $temperatura = $_POST['temperatura']; if (!isset($humedad)){ echo "Datos no recibidos. Error"; } else { include("conex.php"); if(mysql_query("INSERT INTO datos (humedad, temperatura) VALUES ('$humedad', '$temperatura')")) { echo "<p align='center'><b><font color='#000000' face='Arial, Helvetica, sans-serif' size='3'>Los datos han sido introducidos correctamente:<br> Humedad: $humedad<br> Temperatura: $temperatura<br> </p>"; echo "<h2 id='CuentaAtras' align='center'></h2>"; } else { echo "<p align='center'><b><font color='#000000' face='Arial, Helvetica, sans-serif' size='5'>Ha habido problemas. Vuelva a intentarlo</b></p>"; } } ?> </body> </html> conex.php: <? $link = mysql_connect("localhost" ,"usuario","contraseña") or die("no se da conectado"); mysql_select_db("hutem",$link) or die("no se da seleccionado"); ?> Base de datos Mysql: Nombre base de datos: hutem Nombre de tabla: datos 4 campos: id, humedad, temperatura, fecha (con la propiedad timestamp, para saber cuando se introdujeron los datos) Consideraciones previas: Al módulo Wifi HLK-RM04 le he asignado una ip fija en mi red, la 192.168.1.254 y el puerto 8080. Explicación cómo funciona: La placa Arduino recoge los datos de humedad y temperatura que le proporciona el sensor y crea una sencilla página html con un formulario con estos datos que mediante javascript se autoejecuta. En el navegador de nuestro PC ponemos la dirección 192.168.1.254:8080, entonces se inicia la comunicación con el módulo wifi y nos es enviada la página web mencionada anteriormente. Como el formulario enviado se autoejecuta, nos envía a la página intro.php, donde se introducen los datos recibidos en la base de datos y comienza una cuenta atrás de 60 segundos y volver a la dirección 192.168.1.254:8080 y así tener un bucle e ir almacenando los datos cada 60 segundos. Por supuesto esta cantidad de segundos se pueden variar y poner el tiempo que queramos. Bueno, espero que le sirva a alguien. Saludos.
  10. Saludos.... Os voy a mostrar como hacer un control de acceso vía Wifi utilizando la placa arduino, mas un poco de código php, javascript y base de datos Mysql. De esta manera podemos loguearnos desde cualquier dispositivo que este conectado a internet, un pc, una tablet, un teléfono, etc, sin necesidad de que nuestra placa Arduino este conectada por cable a nuestro PC. Materiales utilizados: Una Placa Arduino (yo he utilizado la nano) Un módulo wifi HLK-RM04 12 cables dupont Una pantalla lcd I2C 16X2 Un módulo led rgb Conexiones: Pin SCL del lcd --> Pin A5 de Arduino Pin SDA del lcd --> Pin A4 de Arduino Pin VCC del lcd --> Pin 5 voltios de Arduino Pin GND del lcd --> Pin GND de Arduino Pin V-G del led -->Pin GND de Arduino Pin R del led --> Pin 11 de Arduino Pin G del led --> Pin 10 de arduino Pin B del led --> Pin 9 de Arduino Pin Rx del módulo HLK-RM04 --> Pin Tx de Arduino Pin Tx del módulo HLK-RM04 --> Pin Rx de Arduino Pin GND del módulo HLK-RM04 --> Pin GND de Arduino Pin 5v del módulo HLK-RM04 --> Pin 5v de Arduino Software necesario: El código para Arduino (se mostrará mas abajo). Una página php para introducir el código y verificarlo (se mostrará mas abajo). Una página php para conectar con la base de datos donde están los usuarios y los códigos de acceso (se mostrará mas abajo). Una base de datos Mysql donde se guardarán los usuarios y los códigos de acceso (se explicará mas abajo). El sistema lo que hace es mostrar en la pantalla del lcd la frase "ESPERANDO DATOS" mientras el led está en color azul parpadeante. Cuando ponemos desde la página web el código, si éste es correcto la pantalla lcd muestra "Saludos + nombre de usuario" y el led se pone de color verde. Si el código es incorrecto, no existe, la pantalla muestra "Sin acceso. Código erróneo" y muestra el led de color rojo. A los 5 segundos se resetea y vuelve a mostrar "ESPERANDO DATOS" con led azul parpadeante. Cabe decir que se puede ampliar para que, por ejemplo, accione un relé para abrir una puerta o lo que se os ocurra. Código para la placa arduino: #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); int redPin = 11; int greenPin = 10; int bluePin = 9; void setup() { Serial.begin(57600); pinMode(redPin, OUTPUT); pinMode(greenPin, OUTPUT); pinMode(bluePin, OUTPUT); lcd.begin(16,2); lcd.backlight(); lcd.setCursor(4,0); lcd.print("ESPERANDO"); lcd.setCursor(6,1); lcd.print("DATOS"); while(!Serial.available()) { digitalWrite(bluePin, HIGH); delay(500); digitalWrite(bluePin, LOW); delay(500); } } String f = ""; void loop() { boolean has_request = false; String in = ""; if (Serial.available()) { in = ""; while (true) { while (Serial.available() == false) {} in += (char)(Serial.read()); if (in.endsWith("\r\n")) { has_request = true; break; } } } if (has_request) { char i1 = in.indexOf("GET /mensaje?f="), i2; if (i1 != -1) { i2 = in.indexOf(" ", i1+15); f = in.substring(i1+15, i2); } if (f == "aaa") { lcd.clear(); lcd.setCursor(3,0); lcd.print("SIN ACCESO"); lcd.setCursor(1,1); lcd.write("CODIGO ERRONEO"); digitalWrite(bluePin, LOW); digitalWrite(greenPin, LOW); digitalWrite(redPin, HIGH); pagina(); } else { lcd.clear(); lcd.setCursor(4,0); lcd.print("SALUDOS"); lcd.setCursor(1,1); f.replace("+", " "); lcd.print(f); digitalWrite(bluePin, LOW); digitalWrite(greenPin, HIGH); digitalWrite(redPin, LOW); pagina(); } has_request = false; } delay(5000); digitalWrite(greenPin, LOW); digitalWrite(redPin, LOW); software_Reset() ; } void pagina() { Serial.println("HTTP/1.1 200 OK"); Serial.println("Content-Type: text/html"); String sr = "<!DOCTYPE HTML>\n"; sr += "<html>\n"; sr += "<head>\n"; sr += "<meta http-equiv='Refresh' content='0;url=http://192.168.1.11/arduino/wifi/acceso/index.php'>\n"; sr += "</head>\n"; sr += "<body>\n"; sr += "</body>"; sr += "</html>"; Serial.print("Content-Length: "); Serial.print(sr.length()); Serial.print("\r\n\r\n"); Serial.print(sr); } void software_Reset() { asm volatile (" jmp 0"); } Comentario del código: Incluimos las librerías necesarias para que todo funcione correctamente. Indicamos todos los pines necesarios. Iniciamos la comunicación a 57600 baudios. Apagamos todos los colores del led y encendemos el lcd. Le decimos al lcd que muestre en pantalla "ESPERANDO DATOS" y que el led parpadee en color azul cada medio segundo. Si se inicia la comunicación serial y ésta envía "aaa" (previamente enviada por la página php) el lcd imprime "Sin acceso. Código erroneo" y el led se pone en rojo fijo. Si la página php no envía ese carácter y envía otra cadena, ésta sera el nombre de usuario, que previamente ha sido confirmada desde la base de datos al meter el código, entonces la pantalla de lcd mostrará "Saludos (nombre del usuario)" y el led se pondrá en color verde fijo. Una vez recibida la información la placa Arduino mando unos comandos (página web) para que se vuelva a mostrar el teclado (mas abajo imagen). Tanto como si el código es bueno o erróneo, a los 5 segundos se resetea y vuelve a mostrar en pantalla "ESPERANDO DATOS" y el led de color azul parpadeante. Código pagina principal php: <html> <head> <title>teclado en pantalla</title> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <META name="robots" content="NOINDEX,NOFOLLOW"> <script language="JavaScript" type="text/javascript"> // Comprueba Navegador y Plataforma del pc var clientPC = navigator.userAgent.toLowerCase(); // Coge info cliente var clientVer = parseInt(navigator.appVersion); // Coge versión navegador var is_ie = ((clientPC.indexOf("msie") != -1) && (clientPC.indexOf("opera") == -1)); var is_nav = ((clientPC.indexOf('mozilla')!=-1) && (clientPC.indexOf('spoofer')==-1) && (clientPC.indexOf('compatible') == -1) && (clientPC.indexOf('opera')==-1) && (clientPC.indexOf('webtv')==-1) && (clientPC.indexOf('hotjava')==-1)); var is_moz = 0; var is_win = ((clientPC.indexOf("win")!=-1) || (clientPC.indexOf("16bit") != -1)); var is_mac = (clientPC.indexOf("mac")!=-1); function imprm(bot) { var txtarea = document.getElementById('ta'); var tecla = new Array('1','2','3','4','5','6','7','8','9','0'); txtarea.value+=tecla[bot]; txtarea.focus(); return; } function imprM(bot) { var txtarea = document.getElementById('ta'); var teclaM = new Array txtarea.value+=teclaM[bot]; txtarea.focus(); return; } var capa1 var capa2 var ns4 = (document.layers)? true:false var ie4 = (document.all)? true:false var ns6 = (document.getElementById)? true:false function teclado() { if (ns4) { capa1 = document.c1 capa2 = document.c2 } if (ie4) { capa1 = c1.style capa2 = c2.style } if (ns6) { capa1 = document.getElementById('c1').style capa2 = document.getElementById('c2').style } } function muestra(obj) { if (ns4) obj.visibility = "show" else if (ie4) obj.visibility = "visible" else if (ns6) obj.visibility = "visible" } function oculta(obj) { if (ns4) obj.visibility = "hide" else if (ie4) obj.visibility = "hidden" else if (ns6) obj.visibility = "hidden" } function borrar() { var txtarea = document.getElementById('ta'); if ((clientVer >= 4) && is_ie && is_win) { var txtSeleccion = document.selection.createRange().text; if (document.selection) { if (!txtSeleccion) { txtarea.focus(); var Sel = document.selection.createRange(); Sel.moveStart ('character', -txtarea.value.length); curPos = Sel.text.length; txtarea.value=txtarea.value.substr(0,txtarea.value.length-1); return(curPos); } txtarea.focus(); var Sel = document.selection.createRange(); document.selection.createRange().text = ""; Sel.moveStart ('character', -txtarea.value.length); curPos = Sel.text.length; return(curPos); } } else if (txtarea.selectionEnd && (txtarea.selectionEnd - txtarea.selectionStart > 0)) { var selLargo = txtarea.textLength; var selEmpz = txtarea.selectionStart; var selFin = txtarea.selectionEnd; var s1 = (txtarea.value).substring(0,selEmpz); var s2 = (txtarea.value).substring(selFin, selLargo); txtarea.value = s1 + s2; return(selEmpz); } else { var selLargo = txtarea.textLength; txtarea.value = txtarea.value.substr(0,txtarea.value.length-1); var Cursor = txtarea.textLength; return(Cursor); } almznaCursor(txtarea); } function almznaCursor(textEl) { if (textEl.createTextRange) textEl.caretPos = document.selection.createRange().duplicate(); } function PosicionCursor(pos) { var txtarea = document.getElementById('ta'); //Firefox if (txtarea .setSelectionRange) { txtarea .focus(); txtarea .setSelectionRange(pos,pos); } else if (txtarea .createTextRange) { var rango = txtarea .createTextRange(); rango.collapse(true); rango.moveEnd('character', pos); rango.moveStart('character', pos); rango.select(); } } function EliminarCaracter() { PosicionCursor(borrar()); } </script> <style type="text/css"> #juan { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); -webkit-transform: translate(-50%, -50%); } #andres { position: absolute; left: 50%; top: 70%; transform: translate(-50%, -70%); -webkit-transform: translate(-50%, -70%); } </style> </head> <body onLoad="teclado();"> <div id="juan"> <form method="POST" action=""> <input type="password" id="ta" name="pepe" size="9"><br><br> <div id="c1"> <input type="button" id="1" value="1" onclick="imprm(0);" /> <input type="button" id="2" value="2" onclick="imprm(1);" /> <input type="button" id="3" value="3" onclick="imprm(2);" /><br> <input type="button" id="4" value="4" onclick="imprm(3);" /> <input type="button" id="5" value="5" onclick="imprm(4);" /> <input type="button" id="6" value="6" onclick="imprm(5);" /><br> <input type="button" id="7" value="7" onclick="imprm(6);" /> <input type="button" id="8" value="8" onclick="imprm(7);" /> <input type="button" id="9" value="9" onclick="imprm(8);" /><br> <input type="button" id="10" value="0" onclick="imprm(9);" /> <input type="button" id="eliminar_caracter" value="Borrar" onclick="EliminarCaracter()" style="width:58px; height:20px; text-align:center; font-size:10px;" /> <br><br><input type="submit" id="60" value="ENVIAR" style="width:90px; height:20px; text-align:center; font-size:10px;"/> </div> </form> </div> <div id="andres"> <? $password = $_POST['pepe']; if(!isset($password)) { echo ""; } else { include("conex.php"); $cons = "select * from usuarios where contraseña='$password'"; $datos = mysql_query($cons,$link); if ($row = mysql_fetch_array($datos,1)) { ?> <SCRIPT LANGUAGE="JavaScript"> window.onload = function() { alert("Enhorabuena <? echo $row["usuario"]; ?>. Tu código es correcto"); }; </SCRIPT> <form name='acceso' action='http://192.168.1.254:8080/mensaje' method='GET'> <input type='hidden' name='f' value= '<? echo $row["usuario"]; ?>'> </form> <SCRIPT LANGUAGE="JavaScript">window.setTimeout(function() { document.acceso.submit(); });</SCRIPT> <? } else { ?> <SCRIPT LANGUAGE="JavaScript"> window.onload = function() { alert("El código de acceso no es correcto."); }; </SCRIPT> <form name='acceso' action='http://192.168.1.254:8080/mensaje' method='GET'> <input type='hidden' name='f' value='aaa'> </form> <SCRIPT LANGUAGE="JavaScript">window.setTimeout(function() { document.acceso.submit(); });</SCRIPT> <? } } ?> </div> </body> </html> Comentario del código: Se crea un teclado numérico para introducir el código de acceso. Compara ese código en la base de datos. Si existe ese código envía a la placa Arduino el usuario asociado a ese código, mostrando en un alert "Enhorabuena (usuario) tu código es correcto" Si no existe ese código envía a la placa Arduino la cadena aaa , mostrando en un alert "El código de acceso no es correcto". Código pagina conex.php: <? $link = mysql_connect("localhost" ,"usuario","contraseña") or die("no se da conectado"); mysql_select_db("acceso",$link) or die("no se da seleccionado"); ?> Este código no necesita comentario. En relación a la base de datos... se deberá crear una con el nombre "acceso", con una única tabla llamada "usuarios" compuesta por tres campos "id" "usuario" y "contraseña". Bueno ya está... espero que le sirva a alguien.... Saludos
  11. Saludos... Os voy a mostrar como encender una luz, o conjunto de ellas, cuando se detecta que hay movimiento. Por supuesto también se puede hacer que se active cualquier dispositivo que esté conectado a la red eléctrica. Materiales utilizados: Una Placa Arduino (yo he utilizado la nano) 6 cables dupont Un sensor de movimiento PIR Un relé Conexiones: Pin VCC rele --> Pin 5v de Arduino Pin GND rele --> Pin GND de Arduino Pin IN rele --> Pin 8 de Arduino Pin VCC sensor --> Pin 5v de Arduino Pin GND sensor --> Pin GND de Arduino Pin OUT sensor --> Pin 4 de Arduino El sistema lo que hace es que cuando el sensor detecta movimiento activa el relé y deja pasar la corriente del dispositivo que tengamos conectado. Transcurridos 15 segundos el relé se desactivará y cortará el paso de corriente. Código para la placa Arduino: const int buttonPin = 4; int rele=8; int buttonState = 0; void setup() { pinMode(buttonPin, INPUT); pinMode(rele, OUTPUT); digitalWrite(rele, LOW); } void loop(){ buttonState = digitalRead(buttonPin); if (buttonState == HIGH) { digitalWrite(rele, LOW); delay(15000); } else { digitalWrite(rele, HIGH); } } El código no tiene mucho que explicar, se indican los pines necesarios, se inicializan y activan. Si queremos cambiar los 15 segundos que el el relé está activado iremos a la línea delay(15000); y lo sustituimos por el valor que queramos. Si el sensor sigue detectando movimiento el relé no se desactivará, los 15 segundos de espera es a partir de que el sensor deje de detectar movimiento. Bueno, es un código sencillo pero efectivo... espero que le sirva a alguien.
  12. Saludos.... Os voy a mostrar como hacer un control de acceso utilizando la placa arduino, mas un poco de código php y base de datos Mysql. De esta manera podemos loguearnos desde cualquier dispositivo que este conectado a internet, un pc, una tablet, un teléfono, etc. Materiales utilizados: Una Placa Arduino (yo he utilizado la nano) 8 cables dupont Una pantalla lcd I2C 16X2 Un módulo led rgb Conexiones: Pin SCL del lcd --> Pin A5 de Arduino Pin SDA del lcd --> Pin A4 de Arduino Pin VCC del lcd --> Pin 5 voltios de Arduino Pin GND del lcd --> Pin GND de Arduino Pin V-G del led -->Pin GND de Arduino Pin R del led --> Pin 11 de Arduino Pin G del led --> Pin 10 de arduino Pin B del led --> Pin 9 de Arduino Software necesario: El código para Arduino (se mostrará mas abajo). Una página php para introducir el código y verificarlo (se mostrará mas abajo). Una página php para conectar con la base de datos donde están los usuarios y los códigos de acceso (se mostrará mas abajo). Una archivo php que conecta nuestro ordenador con arduino. Para descargar AQUI Una base de datos Mysql donde se guardarán los usuarios y los códigos de acceso (se explicará mas abajo). El sistema lo que hace es mostrar en la pantalla del lcd la frase "ESPERANDO DATOS" mientras el led está en color azul parpadeante. Cuando ponemos desde la página web el código, si éste es correcto la pantalla lcd muestra "Saludos + nombre de usuario" y el led se pone de color verde. Si el código es incorrecto, no existe, la pantalla muestra "Sin acceso. Código erroneo" y muestra el led de color rojo. Cabe decir que se puede ampliar para que, por ejemplo, accione un relé para abrir una puerta o lo que se os ocurra. Código para la placa arduino: #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); int redPin = 11; int greenPin = 10; int bluePin = 9; void setup() { Serial.begin(9600); pinMode(redPin, OUTPUT); pinMode(greenPin, OUTPUT); pinMode(bluePin, OUTPUT); lcd.begin(16,2); lcd.backlight(); lcd.setCursor(4,0); lcd.print("ESPERANDO"); lcd.setCursor(6,1); lcd.print("DATOS"); while(!Serial.available()) { digitalWrite(bluePin, HIGH); delay(500); digitalWrite(bluePin, LOW); delay(500); } } void loop() { if (Serial.available()) { delay(100); lcd.clear(); lcd.setCursor(4,0); lcd.print("SALUDOS"); lcd.setCursor(1,1); while (Serial.available() > 0) { char pepe = Serial.read(); char juan[] = "^"; if (pepe == juan[0]) { lcd.clear(); lcd.setCursor(3,0); lcd.print("SIN ACCESO"); lcd.setCursor(1,1); lcd.write("CODIGO ERRONEO"); digitalWrite(bluePin, LOW); digitalWrite(greenPin, LOW); digitalWrite(redPin, HIGH); } else { lcd.write(pepe); digitalWrite(bluePin, LOW); digitalWrite(greenPin, HIGH); digitalWrite(redPin, LOW); } } delay(5000); digitalWrite(greenPin, LOW); digitalWrite(redPin, LOW); software_Reset() ; } } void software_Reset() { asm volatile (" jmp 0"); } Comentario del código: Incluimos las librerías necesarias para que todo funcione correctamente. Indicamos todos los pines necesarios. Iniciamos la comunicación a 9600 baudios. Apagamos todos los colores del led y encendemos el lcd. Le decimos al lcd que muestre en pantalla "ESPERANDO DATOS" y que el led parpadee en color azul cada medio segundo. Si se inicia la comunicación serial y ésta envía el carácter "^" (previamente enviada por la página php) el lcd imprime "Sin acceso. Código erroneo" y el led se pone en rojo fijo. Si la página php no envía ese carácter y envía otra cadena, ésta sera el nombre de usuario, que previamente ha sido confirmada desde la base de datos al meter el código, entonces la pantalla de lcd mostrará "Saludos (nombre del usuario)" y el led se pondrá en color verde fijo. Tanto como si el código es bueno o erróneo, a los 5 segundos se resetea y vuelve a mostrar en pantalla "ESPERANDO DATOS" y el led de color azul parpadeante. Código pagina principal php: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>CONTROL DE ACCESO</title> <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" > <META name="robots" content="NOINDEX,NOFOLLOW"> </head> <body> <form action="" method="post"><p align="center"> <font size="5" color="#A04848">Introducir código de acceso:</font> <input type="text" name="action" size="15" maxlength="25" /> <input type="submit" value="Validar"></p> </form> <? $password = $_POST['action']; if(!isset($password)) { echo ""; } else { include("conex.php"); $cons = "select * from usuarios where contraseña='$password'"; $datos = mysql_query($cons,$link); if ($row = mysql_fetch_array($datos,1)) { echo "<p align='center'><font color='#00CC00' size='4' face='Arial'>Enhorabuena ".$row["usuario"].". Tu código es correcto</font></p>"; include "php_serial.class.php"; $serial = new phpSerial(); $serial->deviceSet("/dev/ttyUSB0"); $serial->confBaudRate(9600); //$serial->confParity("none"); //$serial->confCharacterLength(8); //$serial->confStopBits(1); $serial->deviceOpen(); // $serial->sendMessage('1'); $serial->sendMessage($row["usuario"]); $serial->deviceClose(); } else { echo "<p align='center'><font color='#FF0000' size='4' face='Arial'>El código de acceso no es correcto.</font></p>"; include "php_serial.class.php"; $serial = new phpSerial(); $serial->deviceSet("/dev/ttyUSB0"); $serial->confBaudRate(9600); //$serial->confParity("none"); //$serial->confCharacterLength(8); //$serial->confStopBits(1); $serial->deviceOpen(); // $serial->sendMessage('1'); $serial->sendMessage('^'); $serial->deviceClose(); } } ?> </body> </html> Comentario del código: Se crea un formulario para introducir el código de acceso. Compara ese código en la base de datos. Incluye la clase antes bajada php_serial.class.php Si existe ese código envía a la placa Arduino el usuario asociado a ese código, mostrando en pantalla "Enhorabuena (usuario) tu código es correcto" Si no existe ese código envía a la placa Arduino el símbolo ^ , mostrando en pantalla "El código de acceso no es correcto". Código pagina conex.php: <? $link = mysql_connect("localhost" ,"usuario","contraseña") or die("no se da conectado"); mysql_select_db("acceso",$link) or die("no se da seleccionado"); ?> Este código no necesita comentario. En relación a la base de datos... se deberá crear una con el nombre "acceso", con una única tabla llamada "usuarios" compuesta por tres campos "id" "usuario" y "contraseña". Por último, y para que todo funcione correctamente, al conectar la placa al pc, debemos darle permisos al usb, abrimos un terminal y escribimos sudo chmod 666 /dev/ttyUSB0 Y tenemos que abrir la ventana de la comunicación serial de Arduino IDE o abrir un Serial Port Terminal (en linux, en win Putty) y abrir la comunicación con el USB (ttyUSB0). Bueno ya está... espero que le sirva a alguien.... Saludos
  13. Saludos Os voy a mostrar el código que he hecho para mostrar unos mensajes ya predefinidos (y que se muestran según la tecla que pulses en un teclado) en una pantalla lcd I2C 16X2 (16 caracteres y 2 líneas) Materiales utilizados: Una placa arduino Uno o nano (yo he utilizado la nano, pero también vale para la Uno) 4 cables dupont Una pantalla lcd I2C 16X2 Conexiones: Pin SCL del lcd --> Pin A5 de Arduino Pin SDA del lcd --> Pin A4 de Arduino Pin VCC del lcd --> Pin 5 voltios de Arduino Pin GND del lcd --> Pin GND de Arduino El código es el siguiente, después de él pasaré a comentarlo: #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); void setup() { Serial.begin(9600); lcd.begin(16,2); lcd.backlight(); } void loop() { lcd.setCursor(0, 0); lcd.write("Esperando datos"); lcd.blink(); delay(1000); if (Serial.available()) { delay(100); lcd.setCursor (0,1); while (Serial.available() > 0) { char pepe = Serial.read(); if (pepe == '1') { lcd.clear(); lcd.setCursor(0, 0); lcd.write("Mensaje recibido"); delay(100); lcd.setCursor (0,1); lcd.write("Hola"); lcd.noBlink(); } else if (pepe == '2') { lcd.clear(); lcd.setCursor(0, 0); lcd.write("Mensaje recibido"); delay(100); lcd.setCursor (0,1); lcd.write("Adios"); lcd.noBlink(); } else { lcd.clear(); lcd.write("Mensaje erroneo"); lcd.noBlink(); } Comentario del código: Incluimos las librerías necesarias para que todo funcione correctamente. Indicamos todos los pines necesarios Iniciamos la comunicación a 9600 baudios Encendemos el lcd Situamos el cursor del lcd en la primera linea e imprimimos la frase "Esperando datos" con un blink después del último carácter que se enciende y se apaga. Si se inicia la comunicación serial (enviamos algo a la placa arduino) creamos unas variable tipo char (la he llamado pepe) para almacenar los valores de ese envío. Limpiamos la pantalla del lcd En la primera linea mostramos "Mensaje recibido" La segunda linea mostrará, si hemos tecleado un 1 "Hola", si hemos pulsado un 2 "Adios", si pulsamos cualquier otra cosa "Mensaje erroneo" Espera 5 segundos para que podamos leer el mensaje, limpia la pantalla del lcd y vuelve a poner "Esperando datos" Está claro que podemos poner todos los "else if" que queramos para esperar unas pulsaciones de teclado y su correspondiente mensaje a mostrar. Bueno, espero que os sirve de algo y que el código podríais ir adaptándolo como vosotros queráis.
  14. No se si conoceis arduino. En la wikipedia lo definen asi: (Os dejo el enlace de la wiki http://es.wikipedia.org/wiki/Arduino,para que lo leais completo) El caso he encontrado una web http://123d.circuits.io/ donde se pueden simular los circuitos, y ejecutar los programas. Algo que para mi es fundamental para hacer pruebas y no gastarte dinero, porque como dicen en la Nasa: "la cosa no esta para tirar cohetes" Os dejo un video que hecho para que veais como funciona el invento: https://youtu.be/qAA6tbcD8Z0 Para más detalles: http://jsbsan.blogspot.com.es/2015/03/simulador-online-de-arduino-monta-y.html Saludos Julio
×
×
  • Crear Nuevo...