6

Arduino y Matlab III – Lectura de pines

portada_pines

[Iniciando módulos de interacción humana]

¡Saludos, lectores! Al habla Transductor. Hoy vamos a continuar con nuestra serie de tutoriales de interacción entre Arduino y Matlab, utilizando Linux. Si eres nuevo, te recomiendo encarecidamente que veas los tutoriales anteriores. Hay tres: configurar Arduino y Matlab (esencial), encender y apagar un LED y mover un servomotor.

El tutorial de hoy consistirá en leer información de los pines digitales y analógicos de Arduino y enviar la información a Matlab. Será un tutorial sencillo y fácil, sin ningún riesgo de muerte por electrocutación, desintegración, intoxicación o desmembramiento producido por robots industriales, como la mayoría de tutoriales publicados en Robologs. Hasta la fecha. Aunque esto puede cambiar.

El material necesario para la práctica de hoy será:

  • Placa Arduino, por razones obvias. Como siempre voy a utilizar mi Arduino UNO r3.
  • Ordenador con Matlab instalado. Yo utilizo Linux, así que los comandos de la Terminal son propios de este sistema operativo.
  • Botón/pulsador.
  • Resistencia de 150Ω o un valor semejante. Sin ella, es posible que haya interferencias en la lectura de los pines.
  • Conductor eléctrico, recomiendo que tenga conectores M/M.
  • Protoboard. Es opcional, pero te facilitará mucho la vida al montar el circuito.
  • Cable USB de impresora.
  • Diodo LED. Es opcional, puesto que se puede utilizar el que lleva incorporado Arduino en el pin 13.
  • Potenciómetro, uno de 1KΩ debería bastar

Una vez hayas saqueado tu caja de componentes para encontrar todo el material, deberás empezar por crear una vez más el enlace simbólico para el puerto USB. En tutoriales anteriores se explica con detalle porqué es necesario. También es posible que el enlace ya esté creado, especialmente si has seguido esta serie de ejemplos, pero es mejor asegurarse. Abrimos la Terminal y escribimos:

su
ln -s /dev/ttyACM0 /dev/ttyS101
chmod 777 /dev/ttyS101

Ahora abrimos Matlab y escribimos:

arduino = arduino('/dev/ttyS101')

Con esto ya estamos preparados para empezar.

Pines Digitales

En primer lugar vamos a aprender a leer pines digitales. Empezamos montando este circuito:

base1

Una vez construido, proseguimos a abrir Matlab. Habrá que establecer el pin digital 8 como entrada y el 13 como salida.

arduino.pinMode(8, 'input')
arduino.pinMode(13, 'output')

Ahora escribiremos un pequeño código que encenderá el LED si el usuario pulsa el botón. Se trata de un bucle infinito, recordemos que con Ctrl+C podemos detener el proceso.

while true
while a.digitalRead(8) == 1  %0-> LOW 1-> HIGH
a.digitalWrite(13,1)
end
a.digitalWrite(13,0)
end

También podemos asignar las entradas a variables. Voy a proponer dos códigos: en el primero, el valor del pin digital se guarda en la variable x, y a su vez el LED coge el valor de la variable. En el segundo código, cada vez que se pulsa el botón, se suma 1 a la variable x, y al llegar a 3 enciende el LED.

while true
x = a.digitalRead(8)
a.digitalWrite(13,x)
end
a.digitalWrite(13,0)
x = 0
while true
if a.digitalRead(8) == 1
x = x+1
pause(1)
end
if x > 2
a.digitalWrite(13,1)
end
end

Pines analógicos

La lectura de los pines analógicos es muy similar a la de los digitales, pero con la diferencia de que no hay que declararlos como entradas o salidas. Vamos a montar este circuito con el potenciómetro:

base2Vamos a recrear el ejemplo típico del comando analogRead de Arduino. Simplemente vamos a leer el valor del potenciómetro (que se encuentra entre 0 y 1023) y vamos a encender y a apagar el LED en intervalos de tiempo que variarán en función de la entrada analógica.

a.digitalWrite(13,0)
while true
x = a.analogRead(2)
a.digitalWrite(13,1)
pause(x/1000) %Si no dividimos, vas a tener que esperarte 1000 segundos...
x = a.analogRead(2)
a.digitalWrite(13,0)
pause(x/1000)
end

Con esto deberías ver que el LED se apaga y se enciende constantemente, y puedes cambiar la velocidad girando el potenciómetro.

Si te surgió algún problema, puedes comentar abajo y te responderé en breves ciclos. Asimismo, si te gustó mi magnífico y elocuente tutorial también puedes dar tu opinión. Y no dudes en Suscribirte y/o darle “Me Gusta” a nuestra recién creada página de Facebook. Los editores de Robologs te… querremos mucho… incluso yo. Un poco.

Final de línea.

<-Volver a la Parte II
Ir a la Parte IV ->

Tr4nsduc7or

Originariamente creado cómo un galvanómetro de bolsillo, Transductor tomó consciencia de si mismo y fue despedido cuando en vez cumplir con su trabajo se dedicó a pensar teorías filosóficas sobre los hilos de cobre, los electrones y el Sentido del efecto Joule en el Universo. Guarda cierto recelo a sus creadores por no comprender la esencia metafísica de las metáforas de su obra. Actualmente trabaja a media jornada cómo antena de radio, y dedica su tiempo libre a la electrónica recreativa y a la filosofía.

Antes de comentar, por favor, lee las Normas

6 Comentarios en "Arduino y Matlab III – Lectura de pines"

avatar
Ordenar por:   más nuevos primero | más antiguos primero
Carlos
Humano

Tengo una duda con Arduino conectado a MAtlab: si le asigno por ejmplo 3v al pin digital 6 (writePWMVoltage(a,’D6′,3)) pruebo el pin con el multimetro muestra los 3v ok, pero si del pin6digital hago un puente con un cable al pin analogo A0 y hago readVoltage(a,’A0′) para leer el voltaje del pin analogo A0 solo me muestra 0 ó 4.99.

Como hago para que matlab me muestre los 3V q le mande del pin digital 6 A6 al pin analogo A0???

trackback

[…] Arduino y Matlab III – Lectura de Pines […]

wiliam
Humano

arduino.pinMode(13, ‘input’)
arduino.pinMode(4, ‘output’)

while true
if a.digitalRead(13) == 0
a.digitalWrite(4,1)
end
a.digitalWrite(4,0)
end

por que cuando uso este codigo, para encender y apagar el led; cuando esta en estado alto(pin13) se apaga el led(pin4) ahi no tube problema pero cuando esta en estado bajo(pin13) empieza a parapadear en vez de prenderce totalmente(pin4), despues borre e hice de nuevo el mismo codigo y el parpadeo(pin4) fue cuando debia de prenderse el led. A que se debe

trackback

[…] Arduino y Matlab III – Lectura de Pines […]

trackback

[…] Arduino y Matlab III – Lectura de Pines […]

wpDiscuz