miércoles, 29 de febrero de 2012

Comunicación Servomotor-Amarino

Intro.
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
  • Servomotor Futaba S3010
  • Cable USB
  • Arduino Uno
  • Modulo Bluethood

Desarrollo
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.

Video


Bibliografia:
Para esta entrada convine una entrada de un compañero y la entrada anterior que habia hecho para mover el arduino.
http://computointegrado.blogspot.com/2012/02/python-arduino-con-modulo-de-bluetooth.html
http://technolifeandmore.blogspot.com/2012/02/mover-servo-con-arduino.html

jueves, 23 de febrero de 2012

Mover servomotor con arduino ethernet

Intro
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[] =
"
" "Izquierda
" //Input de izquierda y que mandara el parametro 6 "Derecha
" //Input de la derecha que mandara el paramtro 7 "
"; 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.

Video



Bibliografia
http://arduino.cc/es/Reference/Ethernet
http://gkaindl.com/software/arduino-ethernet/dhcp
http://www.cosasdemecatronica.com/tutoriales/arduino/262

Hacer post con android en una pagina con php

Intro
Para esta entrada, la intecion fue tratar de hacer la comunicacion entre el arduino y un dispositivo android, pero antes tendria que hacer pruebas de comunicacion de android con el servidor, ya que este seria el intermediario: android-servidor-arduino.
El resultado fue, una aplicacion que mandara un mensaje al servidor y este la interpretara mostrando en una pagina.

Desarrollo
Para el desarrollo de la siguiente aplicacion se utilizaron las siguientes librerias, en las que empleamos para la coneccion de http, el cliente, en la cual el servidor tomara que nosotros estamos haciendo request y la informacion que enviaremos.
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

Tambien emplearemos un codigo en php, que tomara el valor enviado y este lo interpretara.

Codigo
En el codigo puse algunos comentarios que identifican acciones importantes,
Codigo php
$msg=$_POST["mensaje"];//Recibimos el mensaje

$archivo="mensajePOSTandroid.html"; //Damos el nombre del archivo donde se guardaran los mensajes

file_put_contents($archivo, $msg."
");//colocamos el mensaje recibido al archivo

$androidmsg=file_get_contents($archivo);//Cargamos el contenido

echo $androidmsg; //Imprimimos lo contenido en androidmsg
?>


post.java
package ab.Post.namespace;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class PostActivity extends Activity {
    Button sendButton;
    EditText msgText;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    
        // Declaramos las id
        msgText = (EditText) findViewById(R.id.msg);
        sendButton = (Button) findViewById(R.id.sendT);
    }
    public void send(View v)
    {
        // Tomamos el mensaje a enviar
        String msg = msgText.getText().toString();  

        // Declaramos que el mensaje a enviar no este vacio, de lo contrario no mandamos nada
        if (msg.length()>0)
        {
        HttpClient httpclient = new DefaultHttpClient(); //Objeto Cliente
         HttpPost httppost = new HttpPost("http://abimage.comli.com/android/post.php");//Direccion a donde la enviaremos
      try {
        List nameValuePairs = new ArrayList(2);PArametros que enviaremos
        nameValuePairs.add(new BasicNameValuePair("id", "12345")); 
        nameValuePairs.add(new BasicNameValuePair("mensaje", msg));
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); //Cargamos los valores
        httpclient.execute(httppost);
        msgText.setText(""); // Una vez enviado borramos
      } catch (ClientProtocolException e) {
          // TODO Auto-generated catch block
      } catch (IOException e) {
          // TODO Auto-generated catch block
      }

        }
        else
        {
            Toast.makeText(getBaseContext(),"Pon un comentario",Toast.LENGTH_SHORT).show();
        }

    }
}

main.xml


     

    
    

A continuacion les dejo la aplicacion del programa.

Notas:
Hay que mensionar, al igual que en la entrada del acelerometro, hay que dar permiso en el android manifest.xml de coneccion a internet, ya que sin esto, no mandara nada.
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.INTERNET" />

Resultado




Bibliografia
http://www.helloandroid.com/tutorials/connecting-mysql-database
http://blog.sptechnolab.com/2011/02/10/android/android-connecting-to-mysql-using-php/