Escudo de Ethernet W5100 – II

Esta entrada es una evolución de la anterior “Escudo de Ethernet W5100 – I” . Esta vez nos centraremos en representar los valores de las seis entradas analógicas de las que cuenta el Arduino UNO, además puliremos un poco el interface de la página para darle un aspecto uno poco más profesional (solo un poco).

Programamos el aspecto de un botón y lo sustituimos por el del enlace anterior.

boton

Otro de los aspecto que debemos programar es la visualización de las entradas analógicas.

escribir_entradas-analogicas

Esquema de los LED

semaforo_ethernet

Circuito teórico

semaforo_ethernert_bb

 

Circuito Práctico.

vista_general_02

Otra Foto

Programa Arduino

Página Web

paguina_web_led_e_analogicas

Códigos Fuente  Arduino

Ethetnet_Entradas_Salidas.ino

Vídeo resumen:

Escudo de Ethernet W5100 – I

Vamos a conectar un arduino duemilanove con un escudo Ethernet W5100 y realizaremos un servidor Web.

Cuando conectamos un Arduino Ethernet Shield en un Router, éste le asigna una dirección IP dentro de tu propia Red que se encuentre libre, es decir, una identificación que le permite diferenciar a tu Arduino del resto de ordenadores y demás elementos que tengas conectados a la red local de tu casa. Si no conocemos esa IP, el sistema dejará de funcionar. Para solucionar esto, lo que realizamos es asignarle mediante programación un IP conocida que se encuentre libre en nuestra Red Local con los siguientes pasos:

  1. Pulsa el botón de inicio.
  2. En la barra de búsquedas, escribe “cmd” y ejecuta el programa encontrado.
  3. Te habrá salido otra ventana de fondo negro.
  4. Escribe en ella “ipconfig”.
  5. Vamos a mirar si la dirección IP 192.168.1.177 se encuentra libre
  6. Escribe ping 192.168.1.177

ip_sin_ocupada

IP Libre

ip_ocupada

IP Ocupada

Todas los dispositivos que conectas a tu red poseen un número identificativo “MAC”, de cara a la red, es como su DNI. Al igual que la IP, no debe haber otro dispositivo con el mismo MAC. El MAC de tu Arduino puede ser fijado por ti, por defecto puede ser: byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }, salvo que tengas especial interés por utilizar otra.

Vamos a crear un página Web con seis enlaces, tres enlaces encenderán un LED, o otros tres lo apagarán de la siguiente forma:

  1. Cargamos las librerías y realizamos la asignaciones de la dirección IP, MAC y puerto del servidor.codigo_libreria_ip_mac
  2. Establecemos los pines de Salida para los LED
  3. Inicializamos la conexión Ethernet
  4. Creamos una conexión Cliente
  5. Creamos la página Web
  6. Y por último evaluamos si ha sido pulsado algún enlace

Esquema de los LED

semaforo_ethernet

Circuito teórico

semaforo_ethernert_bb

 

Circuito Práctico.

vista_general_02

Programa Arduino

codigo_ethernet

Página Web

pagina_web_led

Códigos Fuente  Arduino

ConexionEthernet.ino

Vídeo resumen:

 

Polímetro 2

Basándome en la entrada anterior, he construido una simulación de lo que podría ser un polímetro.

Las características son la siguientes:

Intensidad entro 0 y 5 A

Tensión entre 0 y 5 V

Resistencia, lo he dejado para un posterior cálculo, aunque basándose en la ley de Ohm la implementación es muy sencilla.

Desarrollo en Arduino.

Está basado en la entrada anterior (https://ardubasic.wordpress.com/2016/10/01/midiendo-intensidad/) y lo que hace es sacar la media de las medidas que realiza el sensor. Anteriormente el sensor debe estar calibrado.

codigo_medida

Desarrollo en Visual Basic

Está basado en la entrada (https://ardubasic.wordpress.com/2013/11/04/comunicacion-con-visual-basic/) . Lo que he realizado es una mejora del diseño y la introducción de un sensor medidor de intensidad. He aumentado a tres las lecturas y el registro de los datos utilizando lo explicado en la entrada ( https://ardubasic.wordpress.com/2015/11/01/exportando-a-excel-los-valores/ ).

Obtener datos

obtener_datos_arduino

Se realiza una escritura del carácter ASCII 10 para que el Arduino mande los datos. Leyéndolos la aplicación a continuación.

Representar en la Pantalla de Medida

representar_en_pantalla

Dependiendo de la escala y el parámetro que hemos seleccionado, realiza la representación en pantalla.

Representación Gráfica.

representar_graficamente

Se realizan los cálculos para que la representación se realice entre unos puntos definidos.

Configuración del SerialPort.

serialport

En el cuadro verde, señalo el puerto de comunicación de la aplicación con Arduino.

En el cuadro azul, señalo el parámetro “DtrEnable” que debe ser True para el Arduino Leonardo, si no se realiza así, hay problemas en la comunicación, envía datos pero no recibe. Si es otra placa distinta esta última consideración, no se tiene que tener en cuenta.

Código Arduino

codigo_arduino

Circuito Teórico

polimetro_2_bb

Fotos

tension

Midiendo tensión y registrando los datos

intensidad

Midiendo Intensidad y registrando los datos

Código Fuente  Arduino Completo

Polímetro_2.ino

Proyecto VB 2015

Polímetro_Arduino.zip

Vídeo resumen:

 

 

 

Midiendo Intensidad

En esta entrada realizaremos medidas de intensidad a través del sensor  ACS712 – 5A, dicho sensor internamente trabaja con un sensor de “Efecto Hall” que detecta el campo magnético que se produce por inducción de la corriente que circula por la línea que se está midiendo y nos entrega un voltaje proporcional a la corriente.

Edwin Hall(1855-1938) descubrió que si por una fina lámina de oro circula una corriente y se le aplica un campo magnético elevado perpendicular al movimiento de las cargas, aparece una separación de cargas que da lugar a un campo eléctrico en el interior de la lámina, perpendicular al movimiento de las cargas y al campo magnético aplicado, a este campo eléctrico se le denomina “Voltaje Hall”

   voltaje_hall

En el mercado podemos encontrar el ACS712 para diferentes rangos de intensidad:

rango_asc712

El sensor necesita alimentación de +5v y este nos entrega un valor de +2.5 voltios más una tensión proporcional a la intensidad que circula por él, con una relación lineal entre la salida de voltaje del sensor y la corriente. Dicha relación es una línea recta donde la pendiente es la sensibilidad y la intersección en el eje Y es 2.5 voltios. La ecuación de la recta seria la siguiente:

Tensión de Salida del Sensor = Sensibilidad * Intensidad que Circula + 2.5

de donde se despeja que:

Intensidad=(Tensión de Salida del Sensor -2.5)/Sensibilida

Circuito ACS712

esquema_acs712

Sensor

sensor_acs712-5a

Calibración del punto intensidad cero sin carga.

Para realizar el calibrado inicial del punto cero (sin carga) realizaremos un programa que en ausencia de intensidad debería de dar una salida de 2.5 v.

Para evitar ruido, realiza 1.000 medidas y luego realizo la media.

codigo_calibrando

 

Pero como se puede observar el valor es ligeramente superior 2.503 v

calibrado_sensor

Calibrando la sensibilidad del Sensor.

Como hemos dicho anteriormente el sensor responde a una ecuación de la resta con una pendiente que es el valor de la sensibilidad, pues bien calculando dos valores, seremos capaces de calcular la pendiente de la recta con la formula siguiente:

Sensibilidad del sensor = (V1-V0)/(I1-I0)

Para realizar el ensayo coloco una carga de aproximadamente 230 mA y realiza una nueva medida con el programa anterior, obteniendo los siguientes resultados:

calibrado_sensor_carga_230ma

Con estos valores calculamos la pendiente.

Sensibilidad del sensor = (2.530-2.503)/(230-0)=0.117

Sensibilidad=0.117 V/A

Realizando Mediciones

Circuito teórico

medir-intensidad_bb

Circuito Práctico.

vista_general

Medida del Polímetro

polimetro

Medida del Sensor

midiendo_sensor

No se varia mucho de lo que hemos medido con el polímetro, aunque para ser sinceros, para obtener unos resultados aceptables hay que realizar una calibración cada vez que realicemos la medida.

Código del Programa de Medida

codigo_midiendo

Códigos Fuente  Arduino Completo

Calibrando_sensor.ino

Midiendo_Intensidad.ino

Vídeo resumen:

 

 

 

Movimiento de Brazos

He tardado un poco en publicar esta entrada pero por problemas de recepción de los servos y el periodo vacacional no ha sido posible antes.

Por fin el ArduRobot ya mueve los brazos pero al hacerlo tiene problemas de estabilidad, por lo que he tenido que ponerle unos zapatos un poco más grandes y el problema se ha solucionado.

Como la calidad de los servos es la que es, he diseñado una rutina para mover los brazos que realiza el movimiento en diez submovimientos, con lo que mejora la respuesta y los servos sufren meno.

Rutina de Movimientos de los brazos.

Rutina_SubMovimientos

 

Fotos

Frente

Frontal

Perfil

Perfil

DSC_2193

Zapatos Nuevos

Video:

 

 

Brazos para ArduRobot

Quería que la próxima entrada fuese con los brazos del ArduRobot en movimiento, pero he recibido dos de los seis servo SG 090 que solicité en mal estado. No es que me costaran mucho (menos de 10 euros) pero es el tiempo que tardan en venir lo que me fastidia.

Como adelanto publicaré el robot con brazos, aunque no hay movimiento hasta que lleguen los servos que he vuelto a pedir.

Fotos

Vista_3_D

Modelado 3D

ArduRobot_Frente_Brazos_Abajo

Vista Frontal Brazos Caídos

ArduRobot_Frente_Brazos_Cruz

Vista Frontal Brazos en Cruz

ArduRobot_Frente_Brazos_Adelate

Vista Frontal Brazos al Frente

ArduRobot_Frente_Brazos_Flamenco

También Puede Bailar Sevillanas

ArduRobot_Perfil_Brazos_Abajo

Vista Perfil Derecho

ArduRobot_Perfil_Trasero_Brazos_Abajo

Vista Trasera Derecha

ArduRobot_Frente_Rodillas

Semi de Rodillas

ArduRobot_Sentado_Brazos_Abajo

Sentadito como un niño Bueno

Video:

Midiendo Sensores

He decidido dotar al ArduRover de tres entradas analógicas para poder medir y representar sensores externo que se conecten a él.

Es una evolución de la anterior entrada. En esta ocasión, doto al programa de un panel de configuración, para que se pueda personalizar las medidas que se realicen.

Configuración

Como podemos ver se puede configurar el nombre del sensor a representar, el valor de aviso(por si queremos que al llegar a un valor dado nos avise), si se representa o no, el valor máximo en la escala y un último valor que ajustará los valores recibidos a una escala real de medición.

Si conectásemos el sensor siguiente, el valor de conversión sería -> 0.4882

lm35.png

Continuamos con la posibilidad de almacenar los valores en una hoja de Excel, para su posterior análisis.

La programación con VB es casi idéntica al realizado en la entrada “Conociendo el Estado de los Sensores” y el posterior “ Exportando a Excel los valores”  con unos pequeños ajustes para parametrizar las medidas.

Una mejora que puede dar muy buen resultado es realizar una media de diez mediciones antes de enviar el valor desde Arduino a la aplicación, con esta minimizamos parte de los errores por ruido.

Esquema Práctico del Sensor LM35:

Medir_Temperaturas_Sensor

Esquema Práctico de las Entradas Analógicas:

Esquema_Practico

Lista de Piezas

Dibujo de la Pieza Nombre Nº Piezas
Hembra Soporte Hembra 1
Macho Soporte Macho 1
Pasamuros Porta Soporte 2

 

Extracto del Programa Arduino:

codigo_Arduino

 

 

Fotos:

Arriba_01

Vista SuperiorArriba_02

Detalle con sensores

frontal_01

Primer plano

VB_01

Visión General del Programa

Configuración

Detalle del Panel de Configuración

Código Fuente  Arduino Completo

Midiendo.ino

Proyecto VB 2015

Sensores de Entrada.zip

Vídeo resumen:

 

 

 

 

 

 

Memoria EEPROM

Arduino posee una memoria donde se almacena el código, a este tipo de memoria se le denomina memoria volátil, cuyo contenido se borra cuando se interrumpe el flujo eléctrico. Sin embargo, Arduino al igual que muchos otros microcontroladores posee una memoria no volátil, con un espacio de almacenamiento más reducido que la memoria volátil, pero aún así muy útil para nuestros propósitos. Esta memoria se denomina “Memoria EEPROM”, y dependiendo del modelo pose una capacidad.

Capacidades_EEPROM

 La información que se guarde en esta memoria podrá ser recuperada aún después de reiniciarse.

Consta básicamente de dos métodos.

Método read(): Lee los valores que se hayan guardado en determinada posición de memoria.

Método write(): Guarda la información en las posiciones de memoria.

Las posiciones de memoria son como cajas donde se guarda el contenido de un byte

La utilización de la EEPROM es muy interesante para recuperar las configuraciones de nuestro Arduino, calibraciones de sensores, contadores, datos de las entradas analógicas, etc. de modo si Arduino se desconecta, no pierde dicha información.

 Procedimiento de Añadir Datos

Codigo_EEPROM_Añadir

Procedimiento de Modificar el Dato del Último Registro

Codigo_EEPROM_Modificar

Procedimiento Leer los datos Almacenados

Codigo_EEPROM_Modificar

Procedimiento Borrar los datos Almacenador

Codigo_EEPROM_Borrar

Código del Programa Completo

Codigo_EEPROM

Fotos

Salida_EEPROM_01

Captura del Monitor Serie COM 3 _ 01

 

Salida_EEPROM_02

Captura del Monitor Serie COM 3

Código fuente

Guardar_EEPROM.ino

Vídeo resumen:

ArduRobot – Equilibrios

Esta entrada es continuación de la anterior (Arduino – Primeros Pasos).

He aumentado la superficie de apoyo, y le he puesto unos zapatos para dar mayor estabilidad.

He creado un cuerpo y en su interior he alojado el paquete de pilar y el “Arduino”; es una versión preliminar para ver la posible configuración final. Cuando sea definitivo publicare las piezas en 3D para poder reproducirlo.

Como se puede observar lleva dos servos laterales que serán utilizados para los brazos y un servo superior que será para la cabeza.

Procedimiento del movimiento 90º Pierna

Procedimiento_Cadera_Tobillos_90

Fotos

Modelado_3D

Modelado 3D

Frontal

ArduRobot de Frente

Perfil_01

ArduRobot de Perfil

Perfil_trasero

Perfil Trasero

Sentado

Sentado

Código Fuente  Arduino Completo

Equilibrios.ino

Vídeo resumen:

 

 

ArduRobot – Primeros Pasos

Voy a comenzar con un nuevo proyecto sin dejar el anterior y de manera simultanea iré publicando entradas de ambos.

Se trata de intentar realizar un humanoide controlado con un “Arduino Duemilanove”.

En un alarde de imaginación le he llamado ArduRobot

Lo primero que haré será diseñar las extremidades inferiores. He decidido que tendrán tres grados de libertad cada una (seis en total).

He utilizado servos pequeños del tipo SG90 para disminuir el consumo total.

Sevo

 El primer reto que me he planteado, es la estabilidad o equilibrio.

Otro reto, es que los movimientos sean progresivos y acompasados, de tal manera que los servos no se mueva secuencialmente el total de su recorrido, sino que sigan una secuencia de mini movimientos que de la sensación que se mueven a la vez.

Procedimiento de movimiento de 2 Servos a la vez

Codigo_Posicion2Servos

Procedimiento del movimiento de Puntillas

Codigo_Posicion_Puntillas

Procedimiento del movimiento de Talones

Codigo_Posicion_Talon

Procedimiento del movimiento de la Posición Reposo

Codigo_Posicion_Reposo

Procedimiento del movimiento sobre el Pie Derecho

Codigo_Posicion_Pie_Derecho

Procedimiento del movimiento sobre el Pie Izquierdo

Codigo_Posicion_Pie_Izquierdo

Procedimiento del movimiento Balancear

Codigo_Posicion_Balancear

Fotos

Piernas_2

Modelado 3D

ArduRobot_Pie_I

Sobre el pie derecho

ArduRobot_Pie_D

Sobre el pie Izquierdo

ArduRobot_Frente_02

De Frente

ArduRobot_Frente

Vista trasera

Código Fuente  Arduino Completo

Primeros_Pasos.ino

Vídeo resumen: