En esta entrada, hablaremos sobre el sensor de flujo de agua, este tipo de sensor nos ayudará a determinar la cantidad de agua que esta pasando en determinada tubería.
Para esta entrada, busque hacer la implementación del sensor de aproximidad en la puerta, en la cual buscaría que al momento de pasar el usuario esta se abriera y al momento de salir del rango del sensor se cerrara (la idea es trollearlo un rato y que no pueda pasar).
Material:
El material a utilizar ya lo hemos utilizado en entradas anteriores así que no hay algo diferente.
En ocasiones no podremos disponer de un ethernet shield de arduino en la cual ocuparemos hacer la comunicación con un servidor o que el usuario de manera externa conosca los parametros producidos.
En entradas anteriores se ha hablado sobre el arduino ethernet, pero este poniendolo en forma de servidor, en esta ocasión, interactuaremos con el arduino ethernet en forma de cliente.
¿Diferencia?
La diferencia si ponemos nuestro arduino en forma de cliente o servidor, en Servidor, como se vió en entradas anteriores, nos derá la oportunidad de hacerlo un servidor web y un cliente, lo que hará, será leer paramatros o pedir de determinada url.
Intro.
Anterior mente me había estado quebrando la cabeza en hacer la comunicación de mi arduino ethernet shield con android y por un tiempo lo deje pendiende, pero hace hace poco decidí retomarlo y lograr hacer la comunicación teniendo exito (me la pelo).
Error
Antes de poner el código y meterle mas rollo, mi problema estaba cuando mandaba los datos, ya que mi código en android cumplía con su función de mandar y mi código de arduino cumplía su función de recibir, ya que al momento de la interacción, el foquito del arduino que indica que recibió un paquete, parpadeaba, entonces ¿Cuál es el problema o error? El error estaba en que mi código de android lo que hacía era postear la variable (algo asi para mandar parametros en un formulario) y mi código de arduino interpretaría los valores recibidos por la url y no por un ¡POST..!!
Siguiendo mi intento por hacer la comunicacion entre el arduino y android, busque otra forma que no sea por medio de internet, asi que lo logre por medio de bluetooth y la aplicacion amarino.
Material
El material usado, sera casi el mismo que el empleado para mover el servomotor la unica diferencia es el empleo de un dispositivo android y un modulo bluetooth
Para la conexion de los cables es igual que el la entrada anterior, la diferencia es que le agregaremos el modulo bluetooth, pero antes de hacer la conexion del modulo bluetooth al arduino tenemos que hacer unas conexiones con el, para esto, segui este tutorial.
Una vez teniendo esto proseguimos a hacer la coenxion con el arduino colocando las salidas mensionadas en el tutorial.
Codigo
char val; // declaramos las variables a usar
Servo myservo;
int pos = 90;
void setup(){
myservo.attach(6); //Salida del servo
myservo.write(pos); //Damos la posicion inicial, en este caso sera 90 grados
serial.begin(115200); //Indicamos la frecuencia
}
void lop(){
val = Serial.read(); //Leemos el valor recibido
if(val == '0'){ //Al recibir 0
if( pos > 0)
pos = 10;
myservo.write(pos); //Mueve el servo a la izquierda
}
if(val == '1'){ //Al recibir 1
if( pos < 180)
pos = 170;
myservo.write(pos); //Mueve el servo a la derecha
}
}
Notas
Es muy importante que al momento de cargar el codigo a nuestro arduino quitar la conexion RX de nuestro modulo bluetooth, de lo contrario nos producira error y el codigo no cargara.
Para esta entrada, veremos como controlar el servomotor, poniendo nuestro arduino ehternet como servidor en red local y controlarla desde un navegador de cualquier computadora que este dentro de la red local.
Material
La mayor parte del material a emplear es igual a la entrada anterior, solo incluimos el arduino ethernet.
Cable de conexion
Servomotor Futaba S3010
Cable Ethernet
Cable USB
Arduino UNO
Arduino Ethernet
Desarrollo
Para la conexion de los cables es lo mismo que en el tutorial anterior, si acaso la diferenciar es que pondremos la salida de senal del servomotor(blanco) en el pin 6. El cable ethernet, lo colocamos en nuestro modem y en el arduino ethernet. El arduino ethernet se pone sobre el arduino uno, de tal forma que las patitas salientes de este, entren en los pines del arduino uno.
Codigo
#include
#include
#include
#include
#include
#include
#include
#include
//mac, IP
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168,1,6 };
EthernetServer server(80);//ethernet server port 80
boolean reading = false;
//HTML creacion de formulario
const char html[] =
"
";
void setup(){
Serial.begin(9600); //Frecuencia con la cual se manejara
//iniciar conexion
Ethernet.begin(mac, ip);
server.begin();
}
void loop()
{
// Escuchar a los clientes que entran
EthernetClient client = server.available();
if (client) {
// una peticion http termina con una linea en blanco
boolean currentLineIsBlank = true;
boolean sentHeader = false;
server.print(html);//puesta HTML en servidor
while (client.connected()) {//coneccion con el cleinte
if (client.available()) { //Si el cliente es disponible
if(!sentHeader){
sentHeader = true;
}
char c = client.read();
if(reading && c == ' ') reading = false; //Si no recive nada es false
if(c == '?') reading = true; //encuentra ? donde inicia la informacion
if(reading){
Serial.print(c);//imprime lo que recibe del cliente
//control del LED
if(c == '6'){ //Si le llega el parametro 6
if(pos > 0){
pos = 10;
myservo.write(pos); //Mueve la posicion del servo a 10
}
break;
}
if(c == '7'){ //Si lelga le parametro 7
if(pos < 180){
pos = 180;
myservo.write(pos); //Cambiamos la posicion del servo
break;
}
}
if (c == '\n' && currentLineIsBlank) break;
if (c == '\n') {
currentLineIsBlank = true;
}else if (c != '\r') {
currentLineIsBlank = false;
}
}
}
delay(1); // tiempo de espera del navegador
client.stop(); // cerramos la coneccion
}
}
Notas:
Una de las cosas importantes a tomar en cuenta son las salidas que le daremos a nuestro arduino ethernet, ya que haciendo pruebas con una compañera de clase para prender unos leds, se ocupaban las salidas de señal(los que tienen un asterisco), asi que la salida del servomotor fue 10, pero al momento de correrlo, no cumplia su funcion, pero investigando me di cuenta que las salidas 9, 10 y 11 se usan para hacer otro tipo de conecciones, asi que declare la salida 6 teniendo exito.