Cientificosaficionados.com

Los foros de los científicos aficionados de la red.
Fecha actual Sab May 30, 2020 1:39 pm

Todos los horarios son UTC [ DST ]




Nuevo tema Responder al tema  [ 405 mensajes ]  Ir a página Anterior  1, 2, 3, 4, 5, 6, 7 ... 41  Siguiente
Autor Mensaje
NotaPublicado: Dom Jul 03, 2016 3:47 pm 
Desconectado
Avatar de Usuario

Registrado: Dom Feb 11, 2007 10:16 pm
Mensajes: 4905
Ubicación: Islas Baleares, España
Una vez visto el sistema para enviar fácilmente datos desde el Arduino al PC, pasemos a la función inversa que también puede realizar este mismo programa.

Observemos que en el montaje efectuado sobre la Protoboard además de la placa del Arduino y dos botones, hay también dos LED's, uno verde, que llamaremos LED-1, y otro rojo que llamaremos LED-2. Pues estos dos LED's los encenderemos y apagaremos desde el ordenador.

Imagen


El monitor serie del programa IDE de Arduino es capaz de recibir datos de éste vía USB e imprimirlos, esto ya lo hemos visto, pero si introducimos un carácter en la línea superior y damos Enter, también es capaz de enviarlo al Arduino, el cual, para recibirlo debe disponer de las órdenes correspondientes...

En este caso las órdenes son las siguientes:

=================================
int dato=Serial.read(); // mientras tanto lee un byte enviado desde el ordenador
if (dato!=-1) // -1 indica que no hay datos que leer
{} // aquí se puede intercalar una monitorización del valor ASCII de los caracteres entrados "Serial.println(dato);"

if (dato==49) // valor ASCII que corresponde al carácter "1"
{
digitalWrite(2, HIGH); // enciende el LED-1 conectado al pin 2
}

if (dato==50) // valor ASCII que corresponde al carácter "2"
{
digitalWrite(2, LOW); // apaga el LED-1 conectado al pin 2
}
..............
..............
=================================

La orden "Serial.read()" lee, esto es evidente, pero a diferencia de la "Serial.print()" que es capaz de enviar una cadena completa, sólo lee un carácter cada vez, con lo cual, si deseamos leer una secuencia de ellos (como una frase), la orden deberá estar metida en un bucle que repita una y otra vez la lectura y sume cada carácter al anterior. En este caso, sólo debemos leer el carácter único que hemos escrito y asignar su valor ASCII (que puede encontrarse en cualquier tabla ASCII), a la variable llamada "dato". Seguidamente, una serie de órdenes condicionales if() seleccionarán la función a efectuar dependiendo del carácter enviado.

Imagen


...En este caso, vamos a encender el LED-1 verde al pulsar la tecla "1" del ordenador y lo apagaremos con la tecla "2". En la tabla ASCII encontramos que a dichos caracteres corresponden valores de 49 para el "1", y de 50 para el "2".

...Pues bien, cuando el programa no recibe nada del ordenador, el valor de "dato" es siempre -1, pero al nosotros pulsar la tecla "1" se recibirá el valor 49, y en consecuencia, a través de su if() selectivo se activará la orden "digital.Write(2, HIGH)", que pondrá a valor alto la pata 2 de la placa Arduino y por tanto encenderá el LED-1 verde conectado a ella a través de una resistencia delimitadora.

Imagen


...De igual forma, al pulsar la tecla "2" y recibir el valor 50, se activará la orden "digital.Write(2, LOW)", que pondrá a valor bajo el mismo pin y por tanto apagará el LED

En el programa publicado en mensajes anteriores, también hay las órdenes para hacer lo mismo con el LED-2 rojo, pulsando respectivamente las teclas 3 (encender) y 4 (apagar), pero no las he repetido en este resumen porque son de idéntica estructura que las anteriores.

Imagen


Mediante este procedimiento, desde el ordenador podríamos encender y apagar luces de la casa, controlar la calefacción, motores, robots, alarmas y demás, así como enviar órdenes para leer valores de temperatura, presión o cualquier otra variable y enviarlas de vuelta al ordenador para su almacenamiento.

Un saludo a todos

_________________
La VIDA sólo es energía que ha aprendido a defenderse... (Anilandro)

*** La Web de Anilandro *** http://sites.google.com/site/anilandro


Arriba
 Perfil  
 
NotaPublicado: Lun Jul 04, 2016 10:08 am 
Desconectado
Avatar de Usuario

Registrado: Dom Feb 11, 2007 10:16 pm
Mensajes: 4905
Ubicación: Islas Baleares, España
Acabo de encargar algunos gadchets más para el Arduino. He comprado un módulo GPS (8,95$), un WiFi (9,31$) y un GSM (6,89$)... ahora a esperar entre 15 días y un mes a que lleguen de China...

http://www.ebay.com/itm/161103685445?_t ... EBIDX%3AIT

Módulo GPS
Imagen

http://www.ebay.com/itm/171981792137?_t ... EBIDX%3AIT

Módulo WiFi
Imagen

http://www.ebay.com/itm/201587102706?_t ... EBIDX%3AIT

Módulo GSM-GPRS
Imagen


Saludos

_________________
La VIDA sólo es energía que ha aprendido a defenderse... (Anilandro)

*** La Web de Anilandro *** http://sites.google.com/site/anilandro


Arriba
 Perfil  
 
NotaPublicado: Lun Jul 04, 2016 10:01 pm 
Desconectado
Avatar de Usuario

Registrado: Dom Feb 11, 2007 10:16 pm
Mensajes: 4905
Ubicación: Islas Baleares, España
Y del tema de lo básico de las comunicaciones serie con el Arduino sólo faltaba citar que el programa monitor que viene integrado con el IDE (cuyo significado en castellano es "Entorno de Desarrollo Integrado"), no es el único que podemos usar, porque Windows dispone de un "accesorio" que cumple a la perfección la misma misión. Se trata del HyperTerminal, que se encuentra en Programas>Accesorios>Comunicaciones del Menú de Inicio.

1) - Cuando lo arranquemos nos pedirá un nombre para la conexión.
2) - Una vez se lo demos, cambia de pantalla y en el apartado "Conectar usando" elegiremos el puerto COM en donde esté conectado nuestro Arduino.
3) - Una nueva pantalla nos permitirá ajustar las características de comunicación, como "Bits por segundo", que deberá ser la misma velocidad que le hemos dado a la orden "Serial.begin(pin, velocidad)" en la programación de la placa, y que la mayoría de las veces es de 9600. Y el "Control de Flujo" en que deberemos elegir "Ninguno".
4) - Dando "Aplicar" y "Aceptar", el HyperTerminal queda listo para recibir y enviar caracteres...

Imagen

En cuanto a enviar caracteres, el HyperTerminal no tiene una ventana aparte, sino que al pulsar directamente una tecla ya se envía su código ASCII, de forma que al apretar la tecla "1", sin dar Enter, ya se nos encenderá el LED verde, de la misma forma que se apagará en el momento de pulsar "2".

Naturalmente, el HyperTerminal no es la única posibilidad fuera del IDE de recibir o enviar caracteres o datos al Arduino, porque hay otros muchos programas que puede hacerlo, así como hay librerías específicas para incorporar funciones de comunicación a códigos escritos en "C", en Java o en Visual Basic. Posibilidad que sin duda en algún momento experimentaré. Sobre el HyperTerminal sólo añadir que este programa es del entorno de Windows, pero tanto el Mac como el Linux disponen de utilidades semejantes.

En todas estas experiencias de comunicación serie hemos utilizado la entrada USB, pero podríamos prescindir de ella uniendo el Arduino con el ordenador a través del antiguo puerto RS-232, o bien enlazar entre sí dos placas Arduino mediante sus pines 0 (RX) y 1 (TX), cruzados entre las dos.

...Por otra parte, estas placas tienen otras posibilidades de comunicación, como la llamada SPI (Serial Peripheral Interface), que también más adelante pienso investigar...

En el siguiente enlace puede verse un vídeo del funcionamiento del Arduino con el HyperTerminal:
https://www.youtube.com/watch?v=8KXzrIA13ng


Saludos a todos

_________________
La VIDA sólo es energía que ha aprendido a defenderse... (Anilandro)

*** La Web de Anilandro *** http://sites.google.com/site/anilandro


Arriba
 Perfil  
 
NotaPublicado: Mar Jul 05, 2016 1:36 pm 
Desconectado
Avatar de Usuario

Registrado: Dom Feb 11, 2007 10:16 pm
Mensajes: 4905
Ubicación: Islas Baleares, España
Cuando montas circuitos experimentales con una protoboard y especialmente cuando sin gafas te cuesta distinguir dos pines muy próximos, es fácil a veces confundirse y liarla. Y eso me pasó ayer con un nuevo circuito que necesita dos tensiones, 6 y 9 volts, que me suministran un pack de 6 pilas normales de 1,5 V con toma intermedia entre la 4ª y 5ª.

...El caso es que conecté los 6 volts a la línea de alimentación de un servo analógico tipo radiocontrol, y los 9 al resto del circuito del Arduino ...sin pensar (error de principiante, a estas alturas... :? ), que no era la entrada, si no la salida regulada a 5 V, y por tanto les "chuté" a los componentes 4 Volts de regalo que no les hicieron ninguna gracia.

El caso es que me di cuenta en seguida de que algo no iba bien y desconecté. Y luego, alimentado a través del USB, al parecer el microcontrolador continuaba funcionando sin problemas, así como la comunicación serie con el ordenador, pero en cambio, al pretender alimentar el circuito de forma autónoma a través del conector de entrada, la cosa estaba muerta. Naturalmente pensé en el integrado regulador, un pequeño SMD del tipo AMS-1117-5.0, un circuito al parecer bastante utilizado en placas digitales...

Imagen

El integrado no lo encontré en la única tienda de electrónica de la isla, pero sí en internet, donde te envían 20 unidades por 1,5€ desde China, con portes pagados. El problema es que no podía estar entre quince días y un mes sin hacer nada con la placa. Pensé instalarle un 7805 provisional, aunque este circuito necesita más margen de tensión entre la entrada y la salida para funcionar... Al final encontré un 1117 a secas en una vieja placa NVidia que dejó de funcionar hace un tiempo, pero no era del tipo de tensión fija (del 1117 hay fijos de 1.8, 2.5, 3.3, 5 Volts), si no del tipo regulable mediante un simple divisor de tensión.

Imagen

Los valores totales del divisor R1+R2 no son críticos y en algunos circuitos vi que oscilaban entre 1K y 2 K. Realicé un pequeño montaje para comprobar valores estandar de resistencia que pudieran combinar, ya que sobre la placa Arduino una resistencia de ajuste habría quedado muy aparatosa, y me encontré que R1 de 330 Ohms y R2 de 1K daban una tensión de salida de 5.04 Volts, es decir, más que buena, y que además dicha tensión se mantenía hasta que la entrada llegaba a los 6 Volts (un 7805 necesita más de 1 Volt de diferencia para regular).

Así que lo monté en el circuito y ya funciona de nuevo. Además, para no cometer de nuevo el mismo error, me he fijado que la conexión de una tensión no estabilizada de entrada, además del conector principal tipo Aiwa, se puede conectar al pin de la placa denominado "Vin".

Un saludo

_________________
La VIDA sólo es energía que ha aprendido a defenderse... (Anilandro)

*** La Web de Anilandro *** http://sites.google.com/site/anilandro


Arriba
 Perfil  
 
NotaPublicado: Mar Jul 05, 2016 6:11 pm 
Desconectado
Avatar de Usuario

Registrado: Dom Feb 11, 2007 10:16 pm
Mensajes: 4905
Ubicación: Islas Baleares, España
...Bueno, un nuevo paso conseguido. Ya tengo funcionando un sencillo programita en Visual Basic que recoge e imprime en una ventana de texto los datos enviados por la placa Arduino a través del puerto serie...

Frases que corresponden a cada tecla pulsada en un mando IR
Imagen


Las órdenes para que aparezcan estas líneas la doy desde un mando a distancia por infrarrojos que capta un sensor IR conectado a la placa Arduino, que mediante programa decodifica el código NEC binario de cada tecla y envía por el canal serie la frase correspondiente que tiene especificada en su orden Serial.println("frase...");

El mando a distancia por infrarrojos
Imagen


En este caso, la equivalencia de los códigos NEC, teclas y mensajes en el Visual Basic, es:

111111111010001001011101 // CH- // CANAL MINIMO
111111110110001010011101 // CH // CANAL CENTRAL
111111111110001000011101 // CH+ // CANAL MAXIMO
111111110010001011011101 // << // BAJA VALOR
111111110000001011111101 // >> // SUBE VALOR
111111111100001000111101 // > // **añade una línea en blanco**

El sensor IR
Imagen


Continuará...

Saludos

_________________
La VIDA sólo es energía que ha aprendido a defenderse... (Anilandro)

*** La Web de Anilandro *** http://sites.google.com/site/anilandro


Arriba
 Perfil  
 
NotaPublicado: Mié Jul 06, 2016 7:06 pm 
Desconectado
Avatar de Usuario

Registrado: Dom Feb 11, 2007 10:16 pm
Mensajes: 4905
Ubicación: Islas Baleares, España
Esta tarde me ha llegado más material del que pedí, en concreto un segundo Arduino-Starter-Kit como el que compré hace un mes. Ha costado 29€ desde China y ha venido en 10 dias, naturalmente sin coste de envío... sigue siendo alucinante...

El caso es que este kit lo pedí al mismo sitio que el anterior, pero mientras aquel vino de Inglaterra, éste, como ya he dicho, a venido de China y es algo distinto, con la caja un poco más pequeña pero conteniendo exactamente el mismo material

Imagen

Así que ahora dispongo de 2 Arduinos UNO, y también de doble de material que antes. Algunas cosas no las utilizaré, pero el otro servo, el otro motor paso-a-paso, los displays de cuatro tipos distintos, la protoboard, etc, seguro que me servirán...
Imagen

En el listado gráfico podemos ver todo lo que hay, así como en la foto de material fuera de la caja
Imagen

Por otra parte, estoy aprovechando mis vacaciones para seguir con el tema, hoy he acabado un circuito experimental que mueve un servo a posiciones predefinidas o de modo continuo, y el control puede efectuarse a través del pequeño mando a distancia por infrarrojos y de forma simultánea a través del puerto serie del ordenador mediante un programita de Visual Basic que he acabado esta mañana, que sirve además como listado de todos lo movimientos efectuados, guardando el origen del comando, el tipo de movimiento y el ángulo actual... Pero no quiero correr, como este tema ha sido algo más complejo, ya lo iré exponiendo por partes.

Imagen


Un saludo a todos

_________________
La VIDA sólo es energía que ha aprendido a defenderse... (Anilandro)

*** La Web de Anilandro *** http://sites.google.com/site/anilandro


Arriba
 Perfil  
 
NotaPublicado: Jue Jul 07, 2016 11:08 pm 
Desconectado
Avatar de Usuario

Registrado: Mié Ene 15, 2014 8:44 pm
Mensajes: 97
País: España
Ciudad: Asturias
Una alternativa a a visual Basic en Linux es Gambas, tiene una estructura de programación muy parecida a Visual Basic pero pienso que tiene controles mas atractivos.

Y tiene un control de la comunicación serie muy buena.

Muy interesante tus posts Anilandro, justo acabo de recibir hoy mismo un modulo GSM tambien

http://es.aliexpress.com/item/Free-shipping-1PCS-LOT-New-SIM900A-SIM900-MINI-V4-0-Wireless-Data-Transmission-Module-GSM-GPRS/32493189683.html?spm=2114.13010608.0.125.0qu7fy

Con el que quiero controlar algun tipo de automata o por ejemplo un Arduino a distancia.

Saludos.


Arriba
 Perfil  
 
NotaPublicado: Jue Jul 07, 2016 11:57 pm 
Desconectado
Avatar de Usuario

Registrado: Dom Feb 11, 2007 10:16 pm
Mensajes: 4905
Ubicación: Islas Baleares, España
Interesante, Mister_electronico, conocía el Gambas de oídas, pero como hace muchos años que no trabajo en Linux nunca lo he usado. De hecho sigo con el VB 6.0, que es de la época del W98, pero me va bien y tampoco he pillado ningún VB.NET, con el que además tendría que ponerme al día.

Ayer recibí otro Arduino Starter Kit, pero me faltan por llegar 8 "gatchets" más, entre ellos el GSM, con el que también quiero intentar el enlace de la placa para verter datos en un ordenador.
En otro foro hay un compañero que maneja con el Arduino una plaquita de reloj en tiempo real que sincroniza al segundo con la hora bajada de los satélites del sistema GPS... realmente, antes de meterme con el Arduino no me imaginaba las enormes posibilidades de un entorno tan desarrollado, con tantos usuarios y tantos materiales disponibles...

Ahora estoy documentando la última experiencia del control doble de servo mediante infrarrojos y mi programa de VB, al que hoy le he corregido algunos errores que me daba a veces con los puertos COM y le he mejorado algo la estética...

Imagen

Saludos

_________________
La VIDA sólo es energía que ha aprendido a defenderse... (Anilandro)

*** La Web de Anilandro *** http://sites.google.com/site/anilandro


Arriba
 Perfil  
 
NotaPublicado: Vie Jul 08, 2016 11:50 am 
Desconectado
Avatar de Usuario

Registrado: Mié Ene 15, 2014 8:44 pm
Mensajes: 97
País: España
Ciudad: Asturias
Lo entiendo, yo también el único windows que manejo realmente es el windows Xp, me acostumbre al Linux y bueno como que me da mas control sobre todo.

Al igual que Linux Arduino son legiones de gente programando por simple afición, y ante esto nadie puede competir con ello.

La verdad es que tienes ahí un inmenso campo de aplicaciones para realizar.


Aqui te muestro algunas aplicaciones realizadas con gambas.

https://misterelectronico.wordpress.com/2016/01/22/contro-saa1064-con-arduino/

https://misterelectronico.wordpress.com/2015/12/27/sensor-temperatura-humedad-arduino-con-progama-gambas/

https://misterelectronico.wordpress.com/2016/01/06/medidor-de-distancias-arduino-con-el-hc-sr04/


Un saludo Anilandro


Arriba
 Perfil  
 
NotaPublicado: Vie Jul 08, 2016 9:45 pm 
Desconectado
Avatar de Usuario

Registrado: Dom Feb 11, 2007 10:16 pm
Mensajes: 4905
Ubicación: Islas Baleares, España
Interesantes proyectos, Mister_electronico, anoto los enlaces para montarlos en algún momento, aunque con el control VB... Gracias...

Saludos

_________________
La VIDA sólo es energía que ha aprendido a defenderse... (Anilandro)

*** La Web de Anilandro *** http://sites.google.com/site/anilandro


Arriba
 Perfil  
 
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 405 mensajes ]  Ir a página Anterior  1, 2, 3, 4, 5, 6, 7 ... 41  Siguiente

Todos los horarios son UTC [ DST ]


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados


No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro

Buscar:
Desarrollado por phpBB® Forum Software © phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com