robótica

Siete días … 21 a 27 de octubre (reloj biológico y extinción)

Siete días … 21 a 27 de octubre (reloj biológico y extinción)

     Última actualizacón: 1 septiembre 2017 a las 07:46

GENÉTICA

Un estudio de la Universidad de California-Los Ángeles (UCLA), en Estados Unidos, revela un reloj biológico incrustado en nuestro genoma que puede arrojar luz sobre por qué nuestros cuerpos envejecen y cómo frenar el proceso. Los hallazgos podrían ofrecer información valiosa sobre el cáncer y la investigación con células madre.

Mientras que relojes anteriores se han relacionado con la saliva, las hormonas y los telómeros, la nueva investigación es la primera en identificar un reloj interno capaz de medir con precisión la edad de diversos órganos, tejidos y tipos de células.

Horvath analizó también las células madre pluripotentes, células adultas que han sido reprogramadas a un estado de célula madre embrionaria, lo que les permite formar cualquier tipo de célula en el cuerpo y continuar dividiéndose indefinidamente.

«Mi investigación muestra que todas las células madre son recién nacidas», sentenció, agregando que el proceso de transformación de células de una persona en células madre pluripotentes reajusta el reloj de las células a cero.

En principio, el descubrimiento prueba que los científicos pueden retroceder el reloj biológico del cuerpo y restaurarlo a cero, pero, a su juicio, la gran pregunta es si el reloj biológico controla un proceso que conduce al envejecimiento. «Si es así, el reloj se convertirá en un biomarcador importante para el estudio de nuevos enfoques terapéuticos para mantenernos jóvenes», auguró este investigador.

Por último, Horvath descubrió que el ritmo del reloj se acelera o ralentiza en función de la edad de una persona. «El tic-tac del reloj no es constante —explicó—. Es mucho más rápido cuando nacemos y durante el crecimiento de los niños a adolescentes y luego disminuye a un ritmo constante al llegar a los 20».

• Noticia El Mundo

• Artículo: DNA methylation age of human tissues and cell types (descarga directa en formato PDF)

___

Saber cómo el ADN construye los rostros y por qué la cara de las personas pueden ser tan diferentes entre ellas está un poco más cerca. La revista Science ha publicado un estudio del equipo de científicos del Laboratorio Nacional Lawrence Berkeley (California) que arroja luz sobre este ámbito de la genética. Después de trabajar con ratones, han conseguido identificar miles de minúsculas regiones de ADN que influyen en el modo en que los rasgos faciales se desarrollan.

Su objetivo ahora es descubrir dónde están estas instrucciones que definen las características de la cara. Aunque hasta la fecha sólo han trabajado con animales, los investigadores afirman que hay muchas probabilidades de que el rostro humano se desarrolle del mismo modo. Además, la investigación puede ayudar a evitar los defectos faciales de nacimiento, tales como el labio leporino o el paladar hendido.

El profesor Axel Visel, director del equipo científico ha dicho para la BBC que «en los embriones de los ratones podemos ver donde exactamente los ‘interruptores’ activan el gen que controlan». En el genoma de los ratones hay al menos 4000 ‘potenciadores’ que pueden intervenir en la apariencia facial. Estos ‘potenciadores’ son los encargados de activar o desactivar determinados genes responsables de la construcción de las caras.

• Noticia El Mundo

• Artículo: Fine tuning of craniofacial morphology by distant-acting enhancers

MEDICINA

Hace siete meses, científicos de EE.UU. ilusionaron al mundo al anunciar por primera vez en la historia la “cura funcional” de una niña nacida con el virus del sida, que ya ha infectado a casi 70 millones de personas en el mundo desde que se detectó la epidemia. Desde las 30 horas de vida, el bebé había recibido medicamentos antirretrovirales, capaces de reducir la cantidad del VIH en la sangre sin llegar a eliminarlo, en un hospital de Misisipi. A los 18 meses, sin embargo, la familia y el bebé se esfumaron y la niña dejó de recibir el tratamiento. Cuando regresó, cinco meses después, el virus era indetectable, pese a no haber sido medicada durante casi medio año.

Entonces, el esperanzador anuncio se hizo en un congreso médico, sin que los demás científicos tuvieran acceso a los detalles. Muchos sugirieron que el virus podría estar escondido en algún reservorio del cuerpo de la niña, como los ganglios. Otros expertos dudaban de que el bebé se hubiese llegado a infectar. Hoy, por fin, todos los datos de este insólito caso se ponen a disposición de la comunidad científica.

“Esta niña podría perfectamente estar en el camino hacia la cura definitiva, pero todavía no podemos asegurarlo, necesitamos más seguimiento”, explica la pediatra Deborah Persaud, primera firmante del estudio. “Todavía detectamos trazas del VIH en la niña, pero estos restos de VIH parecen incapaces de replicarse y por lo tanto incapaces de reiniciar la infección”, añade Persaud, de la Universidad Johns Hopkins. «Esta niña podría perfectamente estar en el camino hacia la cura definitiva, pero todavía no podemos asegurarlo»

La pediatra y su equipo creen que las trazas de virus “podrían ser falsos positivos o podrían indicar la existencia de una infección, pero no es una infección activa”. A diferencia de lo que ocurrió en el congreso de marzo, cuando hablaron de “cura funcional”, en el estudio publicado hoy la palabra “cura” no aparece por ninguna parte y se habla de “remisión”. “No consideramos que esta niña esté infectada en el sentido clínico de infección activa”, subraya Persaud.

A juicio de los autores, el caso del bebé de Misisipi sugiere que “un tratamiento muy temprano con terapia antirretroviral puede alterar el establecimiento y la persistencia a largo plazo de la infección por VIH”. Si están en lo cierto, es una esperanza para los 260.000 niños que cada año adquieren el virus de sus madres durante el parto, aunque los expertos insisten en que prevenir la transmisión mediante medicamentos antirretrovirales sigue siendo el primer objetivo.

• Noticia Materia

• Artículo: Absence of detectable HIV-1 viremia after treatment cessation in an infant

___

Hace cinco años, un trasplante de tráquea permitió respirar de nuevo a Claudia Castillo, una colombiana de 30 años. Una tuberculosis le había dañado las vías respiratorias y se ahogaba. Entonces, el ahora profesor de Medicina Regenerativa del Instituto Karolinska, Paolo Macchiarini, propuso una intervención que no se había hecho nunca. El investigador, que entonces era responsable del servicio de cirugía torácica del Hospital Clínico de Barcelona, dirigió una operación para trasplantarle la tráquea de un hombre de 51 fallecido por hemorragia cerebral. Y logró hacerlo sin necesidad de desconectar su sistema inmune para que el organismo, al entrar en contacto con un órgano extraño, lo rechazase. En lugar de optar por la inmunosupresión, que tiene consecuencias negativas para la salud, el equipo médico limpió la tráquea del donante de las células que pudiesen provocar problemas.

Después, en la Universidad de Milán, se cubrió esa estructura con células cultivadas a partir de tejidos de la propia paciente. Con estas técnicas de medicina regenerativa se logró un órgano híbrido capaz de resolver los problemas de Claudia pero que el organismo reconoció como propio.

• Noticia Materia

• Artículo: The first tissue-engineered airway transplantation: 5-year follow-up results

PALEONTOLOGÍA

Científicos de la Universidad de New Hampshire, en Durham, Estados Unidos, han documentado una extinción generalizada de abejas que se produjo hace 65 millones de años, coincidiendo con el evento masivo que acabó con los dinosaurios terrestres y muchas plantas con flores.

Estudios anteriores han sugerido una extinción generalizada entre las plantas con flores en el límite KT y, durante mucho tiempo, se ha asumido que las abejas que dependían de esas plantas habrían corrido la misma suerte. Sin embargo, a diferencia de los dinosaurios, «hay un registro fósil relativamente pobre de las abejas», explica Rehan, lo que dificulta la confirmación de dicha extinción.

Rehan y sus colegas superaron la falta de evidencia fósil de abejas con una técnica llamada filogenética molecular. Mediante el análisis de secuencias de ADN de cuatro «tribus» de 230 especies de abejas carpinteras de todos los continentes excepto la Antártida para conocer a fondo las relaciones evolutivas, los investigadores comenzaron a ver patrones consistentes con una extinción masiva.

Combinando los registros fósiles con el análisis de ADN, los investigadores pudieron introducir el tiempo en la ecuación, aprendiendo no sólo cómo se relacionaban las abejas, sino también la edad que tenían. «Los datos nos dijeron que algo importante sucedió en cuatro grupos diferentes de abejas al mismo tiempo. Y que ocurrió al mismo tiempo que los dinosaurios se extinguieron».

• Noticia Europa Press

• Artículo: First evidence for a massive extinction event affecting bees close to the K-T boundary (descarga directa en formato PDF)

CIENCIAS PLANETARIAS

Un equipo de astrónomos estadounidenses ha descubierto la galaxia más lejana conocida, cuya luz fue emitida cuando el Universo sólo tenía un 5 por ciento de su edad actual de 13.800 millones de años.

La galaxia, bautizada z8-GND-5296, data de cuando el Universo resultante del Big Bang tenía sólo 700 millones de años, «y lo que la hace única comparada con otros descubrimientos similares es que su distancia ha podido ser confirmada por un espectrógrafo«, afirma el astrónomo Bahram Mobasher de la Universidad de California

La galaxia fue detectada entre 43 candidatas, mediante imágenes infrarrojas tomadas por el Telescopio Espacial Hubble, y su distancia fue confirmada por las observaciones realizadas con el sofisticado espectrógrafo MOSFIRE del Telescopio Keck en Hawai.

Estudiar las primeras galaxias resulta difícil porque cuando su luz llega a la Tierra se ha desplazado hacia la parte infrarroja del espectro debido a la expansión del Universo, en un fenómeno llamado desplazamiento al rojo (redshift).

Por ello, los astrónomos recurren a espectrógrafos cada vez más sensibles situados en telescopios en la Tierra, capaces de medir el desplazamiento al rojo de la luz de la galaxia, que es proporcional a su distancia.

• Noticia Emol

• Artículo: A galaxy rapidly forming stars 700 million years after the Big Bang at redshift 7.51 (descarga directa en formato PDF)

INGENIERÍA

En una finca a las afueras de Madrid, un tractor sin conductor y dotado de lanzallamas cruza un maizal quemando las malas hierbas. Mientras, dos vehículos aéreos no tripulados sobrevuelan el terreno para mostrarle a otro tractor robótico dónde exactamente hay que echar el herbicida.

“Aplicamos la robótica para conseguir una agricultura de precisión”, explica el físico Pablo González de Santos, coordinador de un proyecto europeo para desarrollar flotas de tractores sin conductor guiadas por hexacópteros, pequeños helicópteros de seis hélices. Su objetivo es recortar un 75% el uso de herbicidas y pesticidas, para reducir su efecto sobre el medio ambiente y disminuir los gastos. “Ahora los agricultores echan herbicida de forma homogénea, pero las malas hierbas no aparecen de manera uniforme”, explica González, investigador del CSIC en el Centro de Automática y Robótica, en Arganda del Rey (Comunidad de Madrid).

En EEUU, empresas como Kinze ya han desarrollado tractores sin conductor, pero la innovación del equipo europeo ha sido concebir una flota de pequeños robots, tanto terrestres como aéreos, en lugar de una sola máquina de gran tamaño. “Es mejor tener muchos robots pequeños en lugar de uno grande, porque compactan menos el terreno y porque si se estropea uno puedes seguir trabajando”, sostiene González, padre hace más de dos décadas del primer robot caminante elaborado en España.

La idea de los científicos es que un propietario agrícola pueda contratar en un futuro los servicios de estos robots a empresas especializadas. Un tráiler transportaría la flota hasta la finca y teóricamente un solo operario bastaría para controlar tres tractores y dos hexacópteros.

• Noticia Materia

• Artículo: Fleets of robots for precision agriculture: a simulation environment

ARQUEOLOGÍA

Hace más de 3.200 años, la vida bullía en los alrededores de lo que hoy es esta metrópoli israelí de Tel Aviv, en la brillante costa mediterránea.

Al norte se situaba el poderoso imperio Hitita. Al sur, Egipto estaba en pleno apogeo bajo el reinado del gran faraón Ramsés II. Chipre era un emporio de cobre. Grecia disfrutaba la opulencia de la elitista cultura micénica, y Ugarit era una bulliciosa ciudad portuaria en la costa de Siria. En la tierra de Canaán, ciudades-estado como Hazor y Meggido florecían bajo la hegemonía egipcia. El vibrante comercio a lo largo de la costa del Mediterráneo oriental lo conectaba todo. Sin embargo, después de 150 años, según los expertos, el viejo mundo estaba en ruinas.

Los historiadores se han preguntado durante mucho tiempo cuál fue la causa de esta crisis que llevó al colapso de la civilización en la Edad del Bronce tardío, y ahora creen que mediante el estudio de los granos de polen fosilizados la han descubierto.

En este estudio, los investigadores dicen que fue la sequía la que provocó el colapso en el antiguo Levante meridional.

Las teorías al respecto habían incluido modelos como la guerra, las plagas y los terremotos. Y aunque el cambio climático se había considerado como un factor primordial, sólo recientemente los avances en la ciencia han proporcionado a los investigadores la oportunidad de determinar la causa y retomar el caso.

El trabajo de investigación informa que un análisis inusual de alta resolución sobre granos de polen tomados en los sedimentos del mar de Galilea y en la orilla occidental del Mar Muerto, y respaldado por una cronología robusta de datación mediante radiocarbono, ha identificado un período de crisis entre los años 1.250 a 1.100 a.C.

A diferencia de los estudios que examinan procesos a más largo plazo, los cuales pueden requerir un análisis del polen en capas de 500 años, la cantidad de polen analizada en esta región se realizó a intervalos de 40 años a la más alta resolución.

La singularidad del estudio radica también en la combinación de las ciencias exactas y el análisis arqueológico e histórico, al ofrecer la imagen más completa hasta el momento del colapso de la civilización en esta zona del Mediterráneo a finales de la Edad del Bronce.

• Noticia New York Times

• Artículo: Climate and the Late Bronze collapse: new evidence from the Southern Levant (descarga directa en formato PDF)

Publicado por José Luis Moreno en SIETE DÍAS, 1 comentario
Siete días … 23 a 29 de septiembre (origen Homo sapiens)

Siete días … 23 a 29 de septiembre (origen Homo sapiens)

     Última actualizacón: 31 agosto 2017 a las 19:04

ANTROPOLOGÍA

Ahora puede parecer algo normal, pero hasta hace muy poco, nadie dejaba decisiones fundamentales para su vida en manos de desconocidos que vivían en ciudades lejanas. La cercanía del jefe de la tribu y la familiaridad con todos los miembros de una sociedad pequeña tiene valores que no se abandonarían sin un buen motivo. Esa fuerza que impulsó a los pequeños grupos humanos a fundirse en sociedades descomunales y anónimas fue, según un nuevo estudio, la guerra.

Esta conclusión es parte de un análisis realizado a partir de un modelo matemático con el que, introduciendo factores sobre la geografía, la ecología o las innovaciones militares de las diversas sociedades, y añadiendo un mecanismo de evolución cultural, recrearon un periodo de 3.000 años, entre el 1500 a.C y 1500 d.C., que después se cotejó con el registro histórico. El modelo fue capaz de predecir cuándo y dónde surgirían las civilizaciones con sociedades complejas y de gran tamaño con un 65% de acierto.

Cuando a ese mismo modelo se le quitaba el efecto de la difusión de tecnología militar, su coincidencia con lo sucedido en realidad se reducía al 16%. Según los autores, esta es una muestra de que la aparición y el mantenimiento de instituciones y mecanismos que sirvan para cooperar con individuos con los que no se tiene parentesco se ve influida por la competencia entre sociedades, una competición que los autores recogen, fundamentalmente, como enfrentamiento bélico. Como si fuesen organismos que compiten entre ellos, afirma el estudio, las sociedades con rasgos que permitan un mayor control del grupo y sean capaces de coordinar a un mayor número de sus miembros, se impondrán a otras sociedades que no cuentan con esos rasgos.

• Noticia Materia

• Artículo: War, space, and the evolution of Old World complex societies (descarga directa en formato PDF)

EVOLUCIÓN HUMANA

Expertos españoles comienzan a investigar los hasta ahora desconocidos yacimientos chinos y sostienen que sus fósiles “reabren la cuestión sobre el origen del Homo sapiens.

Los fósiles chinos empiezan a aparecer en las principales revistas científicas del mundo y pueden poner patas arriba lo que se sabe sobre el origen y la evolución del ser humano. Nuestra especie, el Homo sapiens, o sus ancestros inmediatos pudieron surgir en algún punto de Asia y no en África, según sugieren con mucha cautela algunos investigadores. Y en China pueden esconderse las pruebas.

La paleoantropóloga María Martinón-Torres forma parte del equipo español que ya estudia los fósiles chinos, a los que han tenido acceso muy pocos investigadores en el mundo. Confiesa que los ha explorado “con los ojos como platos”.

A su juicio, unos dientes humanos fósiles hallados en el sur del país, en el yacimiento de Panxian Dadong, “reabren la cuestión sobre el origen del Homo sapiens”, pese a que las evidencias genéticas y fósiles apuntan mayoritariamente a África. Hasta la fecha, los restos más antiguos de Homo sapiens se han encontrado en Etiopía y tienen unos 200.000 años, una edad que concuerda con los estudios genéticos de poblaciones modernas.

Sin embargo, el origen africano del Homo sapiens “no deja de ser una hipótesis sujeta a revisión”

• Noticia Materia

• Artículo: Late Middle Pleistocene hominin teeth from Panxian Dadong

PALEONTOLOGÍA

Un equipo científico internacional ha descubierto en China el fósil de un pez excepcionalmente conservado de 419 millones de años de edad que desafía el escenario clásico descrito hasta ahora sobre la evolución de los vertebrados terrestres. Se trata del vertebrado con mandíbula moderna más primitivo descubierto hasta ahora.

La evolución de la mandíbula es uno de los episodios clave en la evolución de los vertebrados. Entelognathus primordialis, que es como se ha denominado a esta especie de pez fósil, tiene una mandíbula con funciones hasta ahora restringidas a los peces óseos (osteichthyans), por lo que podría ofrecer una nueva perspectiva sobre la evolución temprana de estas criaturas.

Asimismo, los científicos lo han clasificado como un placodermo, un grupo extinto de peces acorazados que son generalmente considerados como el más primitivo de los gnatóstomos (vertebrados con mandíbulas articuladas). Se estima que habría alcanzado alrededor de los 20 cm de largo.

• Artículo: A Silurian placoderm with osteichthyan-like marginal jaw bones

FÍSICA

En 1958, se descubrió que nuestro planeta estaba rodeado por una especie de “anillos” formados por grandes cantidades de protones y electrones que se mueven en espiral, los llamados “cinturones de radiación de Van Allen”. El año pasado, los científicos descubrieron un tercer cinturón de este tipo. Ahora, investigadores de la Universidad de California en Los Ángeles han detallado su origen y sus características únicas.

El pasado mes de febrero, un equipo de investigadores informó en la revista Science del sorprendente descubrimiento de un tercer anillo de radiación desconocido —hasta entonces se pensaba que sólo había dos—, que demostró la naturaleza dinámica y variable de dichos cinturones y mejoró la comprensión de cómo responden éstos a la actividad solar. Este conocimiento resulta importante para nuestra sociedad moderna, que depende de muchas tecnologías instaladas en el espacio: cuando los cinturones de Van Allen se ven afectados por las tormentas solares y el clima espacial, las comunicaciones y los satélites GPS, así como los seres humanos que están en el espacio, pueden correr riesgos.

Ahora, una nueva investigación realizada por especialistas de la Universidad de California en Los Ángeles (UCLA), arroja nueva luz sobre el último cinturón de radiación de Van Allen detectado. Han demostrado en concreto que las partículas extremadamente energéticas que lo componen, conocidas como electrones ultrarrelativistas, se rigen por una física muy distinta a la de las partículas del cinturón de Van Allen ya observado.

• Noticia Tendencias21

• Artículo: Unusual stable trapping of the ultrarelativistic electrons in the Van Allen radiation belts

CIENCIAS PLANETARIAS

Un reciente estudio le ha quitado unos cuantos años a nuestro satélite, concretamente la nada despreciable cifra de 100 millones de años. Hasta ahora se pensaba que la Luna se creó cuando un planeta misterioso —que tenía más o menos el tamaño de Marte— se estrelló contra la Tierra hace unos 4560 millones años, justo tras la formación del sistema solar. Pero los nuevos análisis de las rocas lunares sugieren que la Luna “sólo” tiene entre 4400 millones y 4450 millones de años.

Este hallazgo podría cambiar la forma en la que los científicos han comprendido hasta ahora la Tierra primitiva así como su satélite natural. “Hay varias implicaciones importantes de esta nueva datación más tardía de la formación de la Luna que aún no se han resuelto”, comenta Richard Carlson, uno de los autores del estudio y miembro del Instituto Carnegie para la Ciencia de Washington. “Por ejemplo, si la Tierra ya existía bastante antes del impacto, sería el propio impacto el detonante de la creación de la atmósfera primordial que se formó en esta primera época de la historia de la Tierra?

Los científicos consiguen estimaciones cada vez mejores a medida que perfeccionan sus técnicas y mejora la tecnología. Y esas estimaciones están presionando la fecha de formación de la Luna más hacia adelante en el tiempo. Se cree que la Luna albergaba un océano global de roca fundida poco después de su dramática formación y, actualmente, el análisis más preciso de las rocas lunares que surgieron de este océano lo fijan en un lugar en el tiempo hace 4.360 millones de años.

• Noticia EFE

• Coloquio en The Royal Society (próxima publicación)

INGENIERÍA

Por unas horas, el hall de la Universidad Carlos III (campus Leganés) se trasladó al futuro. En este espacio, robots humanoides y brazos mecánicos, entre otros sofisticados artefactos, se vistieron de gala para recibir a un público expectante por conocer sus habilidades. Se trataba del Día de la Robótica, un evento que reunió varios proyectos de RoboCity, «un consorcio de grupos de investigación que agrupa a cinco universidades madrileñas y al Consejo Superior de Investigaciones Científicas (CSIC)»

• Noticia El Mundo

HISTORIA

Proporcionar la ubicación exacta de ciertos lugares históricos es una tarea difícil, incluso para los arqueólogos. Sin embargo, una herramienta desarrollada por investigadores de la Universidad de Southampton realizó un índice de mapas, fotografías y documentos para proporcionar una sencilla herramienta de búsqueda que conecta lugares y archivos históricos de la antigüedad.

El proyecto encabezado por el arqueólogo Leif Isaksen, llamado “Pelagios 3″ quien trabajó en conjunto con la Universidad Abierta y el Instituto Austriaco de Tecnología y fue financiado a su vez por la Fundación Andrew W. Mellon.

El proyecto llamado “Pelagios 3″ toma los datos de fuentes antiguas en latín y griego, que formaron la base de dos proyectos Pelagio hechos con anterioridad, y se basa en documentos y mapas de las fuentes árabes, mapas europeos y chinos medievales y cartas de navegación del siglo XIII, vinculándolos en una sola base de datos.

La herramienta está abierta al público y a los investigadores. Así, la búsqueda de una ciudad o un pueblo devuelve información con los términos coincidentes hasta 1492, que proviene de los documentos de la época, así como mapas e imágenes. De esta manera se juntan datos, historias y mapas de lugares que normalmente no se podrían encontrar o bien figuraban en diferentes documentos y archivos.

• Noticia Informador

• Proyecto Pelagios 3

Publicado por José Luis Moreno en SIETE DÍAS, 1 comentario
Paso 4. Los motores del robot

Paso 4. Los motores del robot

     Última actualizacón: 30 mayo 2017 a las 18:37

Poco a poco vamos entrando en materia.  En este paso vamos a conectar, ajustar y probar los motores del robot.  Para ello necesitaremos comprender ciertos comandos del lenguaje PBASIC y unas técnicas de programación que determinarán la dirección, velocidad y duración del movimiento de los servomotores (llamados también servos).

Los motores del Boe-Bot

Los servos de rotación continua que vamos a emplear son los que aparecen en las siguientes imágenes:

Los servomotores estándar se diferencian de los de giro continuo en que éstos últimos pueden girar de forma continua en los dos sentidos, mientras que los primeros sólo giran 270o.  Los servos estándar se han diseñado para recibir señales electrónicas que les dicen qué posición concreta mantener.  En cambio, las señales que reciben los servos de rotación continua les dicen qué velocidad y dirección deben seguir, lo que los convierten en ideales para controlar ruedas y poleas (aquí dejo un tutorial para convertir un servo estándar en uno de rotación continua como una buena manera de conocer mejor el funcionamiento de ambos).

Primera tarea: medición del tiempo y control de repeticiones

Para controlar la velocidad de un servo y su dirección se requiere un programa que haga que el microcontrolador envíe el mismo mensaje de forma continua (las señales deben repetirse unas 50 veces por segundo para que el servo mantenga su velocidad y dirección).  Para lograrlo, vamos a escribir varios programas de ejemplo en PBASIC que muestran cómo repetir la misma señal una y otra vez y controlar la duración de la misma.

En el paso 2, y con más detalle en el paso 3, aprendimos el funcionamiento del comando PAUSE que indica al microcontrolador que debe esperar un tiempo determinado antes de ejecutar el siguiente comando.  Como recordarán, el formato es:

PAUSE duración

El valor del parámetro duración establece el tiempo de espera en milisegundos (por lo tanto, si queremos que el microcontrolador espere un segundo deberemos utilizar como valor 1000).

Vamos a utilizar un sencillo programa para comprobar otras funciones de este comando:

  1. ‘ Tercer programa de prácticas del robot Boe-Bot.  Tercerprograma.bs2
  2. ‘ Mostrar cómo el comando PAUSE permite visualizar mensajes
  3. ‘ controlando el tiempo transcurrido
  4. ‘ {$STAMP BS2}
  5. ‘ {$PBASIC 2.5}
  6. DEBUG «Inicio…»
  7. PAUSE 1000
  8. DEBUG CR, “Ha transcurrido un segundo”
  9. PAUSE 2000
  10. DEBUG CR, “Han transcurrido tres segundos”
  11. DEBUG CR, “Fin”
  12. END

Es conveniente que tengamos en cuenta que el valor máximo de duración para el comando PAUSE es 65535 (poco más de un minuto y cinco segundos).

Uno de los motivos por los que son tan útiles un ordenador y un microcontrolador es que pueden hacer una y otra vez las mismas cosas aburridas sin quejarse.  Vamos a ver el ejemplo de un programa que hace que se repita la misma operación constantemente. Para ello emplearemos los comandos DO y LOOP:

  1. ‘ Cuarto programa de prácticas del robot Boe-Bot.  Cuartoprograma.bs2
  2. ‘ Visualizar un mensaje por segundo
  3. ‘ {$STAMP BS2}
  4. ‘ {$PBASIC 2.5}
  5. DO
  6.                 DEBUG “Hola!”, CR
  7.                 PAUSE 1000
  8. LOOP

Con la estructura del lenguaje PBASIC formada por DO … LOOP se puede repetir de forma indefinida la secuencia de instrucciones que se encuentra entre dichos comandos.

También se puede modificar el programa de forma que parte de él se ejecute una sola vez y otra parte se ejecute varias veces:

  1. DEBUG “Hola!”
  2. DO
  3.                 DEBUG “!”
  4.                 PAUSE 1000
  5. LOOP

Segunda tarea: comando de control del servo

Antes de explicar los comandos que controlan los servos, necesitamos saber qué es un diagrama de tiempos porque lo emplearemos a menudo para representar la relación entre los niveles alto (HIGH — Vdd) y bajo (LOW — Vss) y el tiempo de duración de cada uno de esos estados (ya vimos la utilidad de los comandos HIGH y LOW en el paso anterior).

En el diagrama, el tiempo se representa de forma creciente de izquierda a derecha:

Este diagrama muestra un tren de pulsos de un segundo de duración en el que se envía un nivel alto durante medio segundo, y uno bajo durante otro medio segundo.  Esto puede representar, por ejemplo, el encendido de un led durante medio segundo y su apagado durante otro medio segundo de forma reiterada (la línea de puntos de la derecha indica que la señal se repite continuamente).

Los niveles lógicos altos y bajos que genere el programa de control de giro de los servos deben durar una cantidad muy concreta de tiempo.  Esto es así porque el circuito electrónico que gobierna los servos mide la cantidad de tiempo que una señal permanece alta y la usa como si se tratase de una instrucción para girar.  Para controlar con precisión el giro, el tiempo que esas señales permanecen altas tiene que ser mucho más exacto de lo que se puede conseguir utilizando los comandos HIGH y PAUSE.  En el caso del comando PAUSE, como hemos visto, sólo se puede controlar su parámetro duración con pasos de 1 ms.

Sin embargo, para una mayor precisión hay un comando diferente: PULSOUT, que proporciona señales de nivel alto durante periodos de tiempo muy pequeños (en este caso, su parámetro duración se expresa en valores de unidades de 2 millonésimas de segundo). Se escribe:

PULSOUT pin, duración

Tercera tarea: conexión de los servos

Vamos a montar los servos y los conectaremos a unas baterías de alimentación así como a la tarjeta. Emplearemos circuitos LED para controlar las señales que el microcontrolador envíe a los servos para determinar su movimiento ya que de esta forma las señales también iluminarán los LED.

En primer lugar, debemos asegurarnos que el interruptor de energía de la tarjeta está en la posición “0” de apagado.

La siguiente imagen muestra el lugar donde se conectan los servos. Pueden observar como entre los conectores X4 y X5 hay tres pines con una leyenda en la parte superior (Vdd) y otra en la inferior (Vin). Dos de estos pines aparecen conectados por un puente. En la imagen vemos cómo el puente está colocado en la posición superior (Vdd) así que tendremos que cambiarlo a la posición (Vin) ya que vamos a utilizar un bloque de 4 pilas como fuente de energía (los servos consumen bastante intensidad por lo que es recomendable utilizar pilas potentes y recargables):

Extraerlo es muy sencillo, basta utilizar unas pinzas para sacar el puente de su lugar. Luego lo insertaremos de nuevo a presión en la posición inferior:

Bien, una vez solucionado el tema de la alimentación, ya podemos conectar los servos como se muestra en las siguientes imágenes:

Importante: tengamos en cuenta que de los servos parten tres cables: el blanco se conecta a cualquiera de los conectores P12 o P13, el rojo a la toma Vin y el negro a la toma de tierra (Vss).

Como hemos indicado al inicio, montaremos el siguiente circuito LED para visualizar las señales que se envíen a los servos y comprobar que todo funciona correctamente:

Cuarta tarea: ajustando los servos

Vamos a ejecutar un programa que enviará una señal a los servos que les obligará a permanecer parados. Como los servos, por lo general, no vienen ajustados de fábrica, cuando se aplica la señal de “paro” es posible que mantengan un ligero movimiento que hay que eliminar (esta operación recibe el nombre de “centrar” los servos). Para realizar el ajuste emplearemos un destornillador con punta de estrella.

El siguiente diagrama muestra la señal que se enviará para calibrar los servos. Es la señal de centrado y consiste en una serie de pulsos de 1,5 ms de duración, con una pausa entre cada uno de ellos de 20 ms, que generaremos con el comando PULSOUT que ya hemos visto:

Los servos están preparados para permanecer detenidos cuando se les envía un pulso de 1,5 ms, así que daremos al comando PULSOUT un parámetro duración con valor 750 (recordemos que 1,5 milisegundos son 0,0015 segundos, por lo que al expresarse el valor del parámetro duración en unidades de 2 millonésimas de segundo, la cifra que tendremos que darle tendrá que ser el cociente entre ambas:

Es conveniente ajustar los servos de uno en uno ya que así podremos escuchar si el que estamos probando se está moviendo ligeramente. El siguiente programa va a ajustar el servo conectado a P12, cuando terminemos la operación, bastará cambiar a P13 para repetir el procedimiento con el otro servo:

  1. ‘ Programa de centrado de servo. Centradoservo.bs2
  2. ‘ Este programa envía un pulso de 1,5 ms al servo conectado a
  3. ‘ P12 para el centrado manual
  4. ‘ {$STAMP BS2}
  5. ‘ {$PBASIC 2.5}
  6. DO
  7. PULSOUT 12, 750
  8. PAUSE 20
  9. LOOP

Antes de cargar y ejecutar el programa deberemos encender la placa colocando el interruptor en la posición “2”, que es la que entrega energía a los servos. Una vez ejecutado el programa comprobaremos que el LED de monitorización conectado a P12 se enciende, lo que indica que se están transmitiendo pulsos al servo. Si el servo no está bien ajustado (lo más probable), su aspa comenzará a girar y oiremos el motor interno haciendo ruido.

Es posible que el servo no gire en absoluto. Esto puede significar que, o bien está ajustado de fábrica, o que está dañado o defectuoso. Más tarde realizaremos una comprobación antes de que instalemos los servos en el chasis del robot para verificar que el servo funciona correctamente.

Bien, esto es lo que debemos hacer:

Acto seguido repetiremos el proceso con el servo conectado a P13.

Quinta tarea: registrando valores y contando

Vamos a aprender qué son las variables y a utilizarlas en los programas para almacenar valores. Todos los programas que vamos a necesitar a partir de ahora utilizarán en gran medida las variables. La utilidad más importante cuando se guardan variables es que permite que el programa las use para contar. De esta forma podremos controlar el número de veces que se repiten las cosas.

Antes de que podamos usar una variable en lenguaje PBASIC, debemos nombrarla y establecer su tamaño, esto es lo que se llama “declarar” la variable:

Nombrevariable VAR tamaño

Podemos declarar cuatro tamaños diferentes:

Bit ― 0 a 1

Nib ― 0 a 15

Byte ― 0 a 255

Word ― 0 a 65535

Una vez declarada una variable, podemos inicializarla, es decir, podemos asignarle un valor inicial (si no lo hacemos el programa comenzará automáticamente almacenando el número 0 que es el valor por defecto):

valor = 500

otro_valor = 2000

El símblo «=» es un operador. Podemos utilizar distintos para realizar operaciones matemáticas y como por ejemplo, multiplicar «*»:

valor = 10 * valor

Programa de ejemplo: variablesymatemáticassimples.bs2

Este programa muestra la forma de declarar variables, inicializarlas y realizar algunas operaciones con ellas:

  1. ‘ Programa de declaración de variables. Variablesymatemáticassimples.bs2
  2. ‘ Declara variables que se emplean en diversos cálculos matemáticos
  3. ‘ {$STAMP BS2}
  4. ‘ {$PBASIC 2.5}
  5. valor VAR Word ‘Declaración de variables
  6. otrovalor VAR Word
  7. valor = 500 ‘Inicialización de variables
  8. otrovalor = 2000
  9. DEBUG ? valor ‘Visualiza valores
  10. DEBUG ? otrovalor
  11. valor = 10 * otrovalor ‘Cálculo matemático
  12. DEBUG ? valor ‘Visualiza resultados
  13. DEBUG ? otrovalor
  14. END

Conteo y control de repeticiones

La manera más adecuada de controlar el número de veces que se ejecuta un fragmento de código de programa es utilizando el bucle FOR…NEXT. Su sintaxis es la que sigue:

FOR contador = valorinicial TO valorfinal {STEP valorincremento}…NEXT

Los puntos suspensivos se sustituyen por el comando o comandos que deseamos repetir. Debemos declarar previamente las variables «contador» (esta variable la podemos llamar como queramos), «valorinicial» y «valorfinal» que pueden ser tanto números como variables o, incluso, una expresión (que veremos más adelante). Cuando veamos algo entre llaves { } en una descripción de la sintaxis de una instrucción, significa que es un parámetro opcional.

Programa de ejemplo: contarhastadiez.bs2

  1. ‘ Programa de cuenta. contarhastadiez.bs2
  2. ‘ Empleo de una variable en un bucle FOR…NEXT
  3. ‘ {$STAMP BS2}
  4. ‘ {$PBASIC 2.5}
  5. contador VAR Word
  6. FOR contador = 1 TO 10
  7. DEBUG ? contador
  8. PAUSE 500
  9. NEXT
  10. DEBUG CR, «He acabado!»
  11. END

Como vemos, lo que hace el programa es contar hasta diez. Si modificamos los valores inicial y final, por ejemplo, colocando como valor inicial un 9 y valor final un 1, lo que veremos será una cuenta atrás ya que el valor inicial es mayor que el final.

Del mismo modo, el parámetro STEP hace que el bucle cuente por pasos: en vez de números seguidos, podemos hacer que cuente de dos en dos, o de cien en cien según el valor que le demos:

  1. FOR contador = 100 TO 1 STEP 10
  2. DEBUG ? contador
  3. PAUSE 500
  4. NEXT

Sexta tarea: comprobando los servos

Antes de montar los servos en el robot debemos comprobar que responden correctamente. Para ello vamos a ejecutar un programa que enviará señales de giro a los servos en diferentes direcciones y a diferentes velocidades.

Control de la velocidad y la dirección

El circuito electrónico que gobierna el servo está preparado para que cuando reciba impulsos de 1,3 ms de duración cada 20 ms haga girar el eje del motor en el sentido de las agujas del reloj y a la máxima velocidad (oscila entre 50 y 60 revoluciones por minuto, RPM). Cuando se aumenta la duración del impulso de 1,3 ms a 1,5 ms la velocidad de giro decrece hasta que se para el motor. Cuando se aplica al servo un impulso de 1,7 ms de duración cada 20 ms, el eje del motor gira en sentido antihorario y a máxima velocidad. Cuando se reduce la duración del impulso a 1,5 ms decrece la velocidad de giro hasta detenerse.

Un esquema general de los impulsos necesarios para el movimiento del servo sería el siguiente:

Veamos los programas que controlan el giro:

Programa de ejemplo: servoP12sentidohorario.bs2

  1. ‘ Programa de control de servo. ServoP12sentidohorario.bs2
  2. ‘ Activa el servo P12 a velocidad máxima en sentido horario
  3. ‘ {$STAMP BS2}
  4. ‘ {$PBASIC 2.5}
  5. DO
  6. PULSOUT 12, 650
  7. PAUSE 20
  8. LOOP

Basta con realizar cambios en los parámetros de duración para hacer que los servos giren en un sentido o en el otro, o hacer que uno de ellos lo haga en sentido horario y el otro en el sentido antihorario. El que cada servo gire en diferente dirección es de gran importancia ya que una vez montados, ambos servos se encuentran enfrentados, por lo que si giran en el mismo sentido el robot no dejará de dar vueltas sobre su propio eje. Para que el robot avance en la misma dirección, cada uno de los servos deberá girar en un sentido distinto y a la misma velocidad:

Programa de ejemplo: P12horarioP13antihorario.bs2

  1. ‘ Programa de control de los servos. P12horarioP13antihorario.bs2
  2. ‘ Mueve el servo P12 a velocidad máxima en sentido horario
  3. ‘ Mueve el servo P13 a velocidad máxima en sentido antihorario
  4. ‘ {$STAMP BS2}
  5. ‘ {$PBASIC 2.5}
  6. DO
  7. PULSOUT 12, 650
  8. PULSOUT 13, 850
  9. PAUSE 20
  10. LOOP

Control del tiempo que gira el servo

Ya conocemos la forma de controlar la velocidad de giro y la dirección del servo, lo único que nos falta es determinar el tiempo que permanece girando. Para ello emplearemos el bucle FOR…NEXT:

  1. FOR contador = 1 TO 100
  2. PULSOUT 13, 850
  3. PAUSE 20
  4. NEXT

Para calcular el tiempo de forma adecuada necesitamos saber la cantidad exacta de tiempo que tarda el código en hacer que el servo gire. Cada vez que se recorre el bucle, el comando PULSOUT tarda 1,7 ms en ejecutarse, el comando PAUSE tarda 20 ms y el bucle en sí mismo tarda unos 1,3 ms en ejecutarse. Por lo tanto, un ciclo completo se completa en 23 ms o, lo que es lo mismo, en 0,023 segundos.

Ya que según el ejemplo anterior el bucle se ejecuta 100 veces, tardará 2,3 segundos en llevarse a cabo.

Programa de ejemplo: Controltiempofuncionamientoservo.bs2

  1. ‘ Programa de control de los servos. Controltiempofuncionamientoservo.bs2
  2. ‘ Mueve el servo P13 durante 2,3 s a velocidad máxima en sentido
  3. ‘ antihorario. A continuación, mueve el servo P12 el doble de tiempo
  4. ‘ {$STAMP BS2}
  5. ‘ {$PBASIC 2.5}
  6. contador VAR Byte
  7. FOR contador = 1 TO 100
  8. PULSOUT 13, 850
  9. PAUSE 20
  10. NEXT
  11. FOR contador = 1 TO 100
  12. PULSOUT 12, 850
  13. PAUSE 20
  14. NEXT
  15. END

Veamos un vídeo que resume lo hecho hasta ahora:

Publicado por José Luis Moreno en ROBÓTICA, 2 comentarios
Paso 3. Circuitos LED

Paso 3. Circuitos LED

     Última actualizacón: 25 mayo 2017 a las 11:09

Hasta ahora hemos utilizado la tarjeta Home Work y la pantalla del ordenador para enviar mensajes a través de los programas y realizar un control del tiempo.  Ha llegado el momento de estudiar el funcionamiento y la programación de diferentes dispositivos físicos conectándolos a las clavijas de entrada y salida (I/O Imput/Output, o Entrada/Salida) de forma que el microcontrolador establezca sus funciones.

Como primer paso sencillo, vamos a probar un circuito LED (diodo emisor de luz o Light-Emitting Diode), es decir, construiremos circuitos que emitan luz para poder “comprobar” el tipo de señales electrónicas que se usan, entre otras cosas, para controlar los motores del robot.  Este es uno de los tipos de LEDES que vamos a emplear:

Estos dispositivos LED, que podemos ver en la gran parte de los aparatos electrónicos que tenemos en nuestras casas son dispositivos diodos semiconductores de silicio y otros materiales, que disponen de dos patitas o terminales.  Cuando se les aplica una diferencia de tensión (o voltaje) entre ambos con la polaridad correcta se encienden y emiten una luz que puede ser de diversos colores.  Un terminal se denomina ánodo (con polaridad positiva y que se corresponde con el más largo) y el otro, el cátodo (y polaridad negativa), es el más corto.

Para que se ilumine el LED hay que aplicar entre unos 2 a 4 V entre sus terminales (dependiendo de su color).  Dado que a través de la tarjeta Home Work obtenemos 5 V de tensión, deberemos colocar delante del LED una resistencia (resistor) que se encargue de absorber la tensión sobrante.

La resistencia es un dispositivo que no tiene polaridad, por lo que es indiferente la posición en la que se coloquen sus dos terminales.  Veamos a continuación una imagen de las resistencias que vamos a utilizar:

El efecto de absorción de tensión de las resistencias depende del valor que tengan, que se mide en ohmios (Ω).  Una buena iluminación LED puede conseguirse con una resistencia de 220 Ω, aunque también se puede conseguir que se encienda débilmente con una resistencia de 470 Ω.  Dado que las resistencias suelen ser muy pequeñas y cilíndricas no se puede grabar fácilmente su valor por lo que se utiliza un código de colores para indicarlo.  A continuación se muestra la tabla con el código de colores:

Además de los nueve primeros colores (que sirven para determinar el valor) se utilizan otros dos encargados de informar sobre la tolerancia o exactitud del valor indicado por los mismos.  Así, si la última franja tiene color ORO, significa que el valor real que tiene la resistencia no se desvía más de ±5% del que indican sus colores.  En el caso de ser plata, la tolerancia es de ±10% (si no hay ninguna de estas dos bandas, la tolerancia es de ±20%).

Para hacer la lectura correcta, deberemos colocar la resistencia de forma que la última franja, la de la derecha, sea la que indique la tolerancia: el color de la primera franja corresponde al primer número del valor; el color de la segunda franja al segundo; mientras que el de la tercera franja indica el número de ceros que hay que añadir a los dos anteriores para obtener el resultado en ohmios (esto es, un multiplicador):

Como un ±5% de 470 Ω son ±23,5 Ω, el valor real de la resistencia estará comprendido entre 470 ± 23,5 Ω, o sea, entre 493,5 y 446,5 Ω.

Encendido del LED

Una vez comprendidos los aspectos básicos, para encender un LED basta conectarle en serie una resistencia y aplicarle una tensión de 5 V, de forma que el polo positivo se conecte al ánodo, y el negativo al cátodo como podemos ver en el esquema representado más abajo:

En nuestro banco de pruebas, la “board of education”, el polo negativo de la alimentación se conecta a un terminal común que se denomina “tierra” y se representa con la tensión Vss.  El esquema quedaría de la siguiente forma:

Montaje de componentes

Como hemos dicho, la tarjeta Home Work posee una superficie destinada al montaje de los componentes de los circuitos (“board of education”) compuesta de numerosos orificios interconectados que permiten realizar la conexión entre los componentes sin usar soldadura ni estropearlos, únicamente aplicando presión.

La placa de pruebas tiene dos zonas blancas de 17 filas con cinco orificios en cada una.  Los orificios de cada fila están conectados entre sí de forma que si, por ejemplo, colocamos el cátodo del LED en uno de los orificios de la primera fila y en cualquiera de los cuatro restantes el terminal de una resistencia, ambos quedarán conectados.

Como vemos en la imagen, tanto en la parte superior como en el lado izquierdo de la placa de pruebas existen dos líneas negras de conectores (rotuladas como X2 la vertical, y X3 la horizontal).  La línea vertical tiene 16 orificios denominados P0 a P15 y están conectados a las 16 líneas de entrada o salida del microcontrolador.  A través de la programación del microcontrolador podremos establecer que cada una de estas líneas sea entrada o salida y, en caso de ser salida, podremos sacar un nivel alto o +5 V (o Vdd), o bien un nivel bajo o 0 V (o Vss).  Si la línea es de entrada, el microcontrolador leerá en ella la tensión exterior aplicada y reconocerá nivel alto o bajo.  El nivel alto puede estar comprendido entre 2 y 5 V, mientras que el bajo siempre será inferior a 1,4 V.

Haciendo parpadear un LED

El primer experimento consistirá en encender un LED durante tres segundos, luego volver a apagarlo otros 3 segundos y repetir estas dos acciones tres veces (es decir, el LED parpadeará tres veces cada tres segundos).

Elegiremos una de las clavijas de entrada/salida de la placa de pruebas (por ejemplo la P15), que actuará como salida generando por ella un nivel alto durante tres segundos y un nivel bajo durante otros tres segundos.  Para hacerlo será necesario conectar, como explicamos más arriba, una resistencia de absorción según el siguiente esquema:

En primer lugar, introducimos el ánodo (polo +) del LED en uno de los orificios de la placa de pruebas.  Por su parte, el cátodo se introduce en uno de los orificios de la fila de conectores X3 rotulada como Vss (es nuestra toma de tierra).  Ya tenemos conectado el LED.  Acto seguido tomamos una resistencia de 470 Ω e insertamos uno de sus extremos en un orificio junto al ánodo del LED (lo que hace que estén conectados entre sí), mientras que el otro extremo se introduce en el orificio P15 de la fila de conectores X2 (actuará como salida).  Las imágenes de abajo muestran la conexión:

Para encender el LED hay que sacar un nivel alto por la clavija P15 y, para apagarlo un nivel bajo.  Vamos a estudiar los comandos en lenguaje PBASIC que configuran cada clavija como E/S, y otras que sacan por ella un nivel alto o bien un nivel bajo.

El comando HIGH seguido por el número de la clavija que se quiera hará que salga por ella un nivel alto; por otro lado, el comando LOW sacará un nivel bajo (Vss).  Por ejemplo, HIGH 15 saca un nivel alto (Vdd) por la clavija P15, lo que hace que el LED conectado a ella se encienda; y LOW 15 saca un nivel bajo y hace que se apague.

Para mantener congelado el estado del microcontrolador un tiempo determinado se utiliza el comando PAUSE (que ya hemos estudiado) seguido del número de milisegundos que deseemos (por tanto, para controlar espacios de tiempo de 3 segundos emplearemos PAUSE 3000).

Veamos por tanto las líneas de código del programa de parpadeo del LED:

  1. ‘ Programa parpadeo LED.  ParpadeoLED.bs2
  2. ‘ {$STAMP BS2}
  3. ‘ {$PBASIC 2.5}
  4. DEBUG «Parpadeo tres veces durante tres segundos»
  5. HIGH 15‘Sale por P15 un nivel alto
  6. PAUSE 3000       ‘Pausa de tres segundos
  7. LOW 15               ‘Sale por P15 un nivel bajo
  8. PAUSE 3000
  9. HIGH 15               ‘Sale por P15 un nivel alto
  10. PAUSE 3000       ‘Pausa de tres segundos
  11. LOW 15               ‘Sale por P15 un nivel bajo
  12. PAUSE 3000
  13. HIGH 15               ‘Sale por P15 un nivel alto
  14. PAUSE 3000       ‘Pausa de tres segundos
  15. LOW 15               ‘Sale por P15 un nivel bajo
  16. PAUSE 3000
  17. END                     ‘Fin del programa

Como ya hemos hecho en otras ocasiones, escribimos el programa en el editor y lo ejecutamos para que quede grabado en la memoria del microcontrolador:

Como alguno de ustedes se habrá percatado, incluir la linea de comando DEBUG únicamente se ha hecho para comprobar que el programa se ha cargado adecuadamente.

Veamos una demostración en vídeo del funcionamiento:

Con estas instrucciones es muy sencillo cambiar el tiempo de parpadeo o las veces de repetición del mismo pero, ¿qué debemos hacer para que el LED parpadee de forma indefinida?, es una función que muy necesaria más adelante.  Existe una forma cómoda y fácil de repetir de forma ininterrumpida una secuencia de instrucciones evitando tener que reproducir hasta el infinito las líneas de código: con un comando PBASIC llamado GOTO.  Con él se pasa a ejecutar la instrucción que se desee, previamente identificada, y cuando el programa regrese a la línea de código que contiene el comando GOTO, todo vuelve a comenzar.  Es parecido a un bucle aunque esto lo explicaremos más detenidamente en siguientes entradas.  Veamos un ejemplo:

  1. ‘ Programa parpadeo infinito.  Parpadeoinfinito.bs2
  2. ‘ {$STAMP BS2}
  3. ‘ {$PBASIC 2.5}
  4.  DEBUG «Parpadeo infinito del LED»
  5.  INICIO:      HIGH 15             ‘Sale por P15 un nivel alto
  6.                       PAUSE 1000      ‘Pausa de un segundo
  7.                       LOW 15               ‘Sale por P15 un nivel bajo
  8.                       PAUSE 1000
  9. GOTO INICIO     ‘Salta a la instrucción con etiqueta INICIO

Al ejecutar este programa, el LED permanece parpadeando durante tres segundos de forma indefinida:

Publicado por José Luis Moreno en ROBÓTICA, 3 comentarios
Paso 2: Primeros pasos en la programación

Paso 2: Primeros pasos en la programación

     Última actualizacón: 24 mayo 2017 a las 14:04

En el paso anterior descargamos el software y conectamos la tarjeta al PC.  Repasemos los pasos del procedimiento de Ayuda que habíamos comenzado:

  1. Identificación de la tarjeta que estamos utilizando.
  2. Conexión de la tarjeta al ordenador.
  3. Realizar una prueba de la conexión.
  4. Resolver los problemas con la conexión si es necesario.
  5. Escribir nuestro primer programa en lenguaje PBASIC.
  6. Desconectar el hardware cuando hayamos finalizado.

Una vez realizadas las tareas 1 a 4 (y la 6 para la desconexión), vamos a centrarnos en la tarea 5 y escribir el primer programa en lenguaje de programación PBASIC, conectando para ello la tarjeta Home Work al PC como ya hicimos.

Este sencillo programa va a consistir en decirle a la tarjeta Home Work que transmita un mensaje al PC.  Para escribir el código utilizaremos el programa BASIC Stamp Editor (en adelante programa de edición) que hemos instalado en el paso anterior.

Es importante señalar que cada línea de código tiene una función determinada que iremos explicando a medida que avancemos y que contiene una serie de comandos.  Un comando o instrucción es una palabra que el usuario proporciona a un sistema informático y que describe una acción a realizar por el microcontrolador.

Estas son las líneas de código del primer programa:

  1. ‘ Primer programa de prácticas del robot Boe-Bot.  Primerprograma.bs2
  2. ‘ El microcontrolador envía un mensaje de texto al PC.
  3. ‘ {$STAMP BS2}
  4. ‘ {$PBASIC 2.5}
  5. DEBUG «Hola, este es un mensaje enviado desde el robot!»
  6. END

Los números al principio de cada línea NO DEBEN INCLUIRSE EN EL PROGRAMA, están ahí únicamente para facilitar esta explicación.

Vemos que las cuatro primeras líneas, llamadas comentarios, vienen precedidas de un apóstrofe ( ‘ ) ―el apóstrofe se obtiene pulsando la tecla de cierre de interrogación situada a continuación del número cero―.  Estos comentarios que se escriben al principio del código no son interpretados por el programa de edición ya que su función es servir de información a nosotros, seres humanos, que lo estamos leyendo.  En nuestro caso, las lineas 1 y 2 informan del nombre del programa y de qué es lo que hace exactamente.

Las dos siguientes líneas (la 3 y 4) también son comentarios pero se trata de mensajes especiales.  Son las llamadas “directivas del compilador” cuya misión es informar al programa de edición de ciertas condiciones.  Todos los programas tienen como mínimo dos de tales directivas, en nuestro caso:

‘ {$STAMP BS2}

‘ {$PBASIC 2.5}

La primera le indica al programa de edición en qué clase de microcontrolador se va a descargar el programa (el Basic Stamp 2); mientras que la segunda le informa que el lenguaje de programación que vamos a emplear es la versión 2.5 de PBASIC.

En nuestro programa de edición, la primera directiva de compilación la podemos introducir automáticamente pulsando el botón que se indica en la imagen.  En cualquier caso, es más recomendable hacerlo manualmente para acostumbrarnos a introducir los comandos.  Lo mismo sucede con la segunda:

Aunque hemos recomendado escribir estas directivas manualmente, hay que tener cuidado y no poner signos diferentes: si no se emplean las llaves { } y se colocan paréntesis por ejemplo, el programa no funcionará.  En cualquier caso, si las introducimos manualmente, deberemos cerciorarnos que el programa de edición las destaca en colores diferentes.  Al aparecer los comandos destacados en colores nos cercioramos de que el programa de edición los ha codificado correctamente al tiempo que facilita una lectura rápida de la línea de comandos en busca de posibles errores.

Bien, ahora terminamos escribiendo las dos últimas líneas de comandos:

DEBUG «Hola, este es un mensaje enviado desde el robot!»

END

El primer comando del programa es DEBUG, que sirve para mandar un mensaje al PC a través del puerto USB.  El mensaje que queramos que aparezca debe introducirse entrecomillado (las comillas son importantes, si falta alguna de ellas, el programa no funcionará).  El segundo es el comando END que indica la finalización del programa.  Una vez leído este comando, el microcontrolador permanece en modo de bajo consumo de energía en espera de que se pulse el botón de reinicio, o bien se introduzca un nuevo programa.  Es importante resaltar que cuando se introduce un nuevo programa, el anterior se borra automáticamente.

Bien, ya tenemos nuestro primer programa así que lo guardamos en nuestro disco duro (pulsando en la pestaña File y acto seguido en Save).  Ya estamos preparados para enviarlo a la tarjeta Home Work.

Una vez grabado, solo nos queda abrir la pestaña RUN y de nuevo pulsar RUN para activar el programa (o bien, de forma directa pulsando el botón con un triángulo azul situado en la barra de tareas).  Tras pulsar el botón aparecerá una ventana de transferencia y, justo después, deberá aparecer la ventana de debug (Debug Terminal) en la que se visualiza el mensaje enviado desde la tarjeta Home Work:

Una vez editado y ejecutado el programa, desde la tarjeta Home Work se habrá enviado el mensaje para su visualización en la pantalla del PC.  Esto asegura tanto el correcto funcionamiento de la tarjeta como la comunicación con el PC y su software.  Pueden comprobar que el mensaje proviene de la tarjeta Home Work pulsando varias veces el botón de reinicio de la misma (etiquetado con el número 10 como vimos en el paso 1) y aparecerá lo siguiente:

Comprobamos que el programa se reinicia cada vez y envía de nuevo el mensaje.

En conclusión, el primer programa ha tenido como objetivo enviar un mensaje a la pantalla del PC con la misión de comprobar el correcto funcionamiento de los sistemas.

Comando PAUSE

Una vez que hemos aprendido a escribir un sencillo programa, vamos a conocer nuevos comandos.

El primero de ellos es PAUSE.  Como habrán adivinado, el comando retarda la ejecución del programa un tiempo determinado en milisegundos (1000 milisegundos corresponden a 1 segundo).  Veamos cómo funciona:

Modifiquemos el programa anterior añadiendo la siguiente línea de comandos encima de la primera línea DEBUG:

PAUSE 1000

El programa quedará así:

Ejecutemos el programa y comprobaremos que el mensaje tarda en aparecer 1 segundo.

Formatos del comando DEBUG y caracteres de control

El comando DEBUG dispone de diversos formatos para enviar un texto con ciertas características a la ventana de debug.  DEC es un ejemplo que sirve para mostrar un valor en decimal.  Otro ejemplo de formato para un carácter de control es CR, que sirve para enviar un retorno de carro (escribirá el siguiente texto en una línea diferente).

Probemos el siguiente programa y lo guardamos:

  1. ‘ Segundo programa de prácticas del robot Boe-Bot.  Segundoprograma.bs2
  2. ‘ El microcontrolador realiza un cálculo y envía el resultado
  3. ‘ al PC.
  4. ‘ {$STAMP BS2}
  5. ‘ {$PBASIC 2.5}
  6. DEBUG «Hola, este es un mensaje enviado desde el robot!»
  7. DEBUG CR, “¿Cuánto es 7×11?”
  8. DEBUG CR, “El resultado es: ”
  9. DEBUG DEC 7 * 11
  10. END

Al ejecutarlo visualizaremos lo siguiente:

Si expresamos operaciones como 7 * 11 el microprocesador las calcula y genera el resultado.  El símbolo % detrás del comando DEBUG generará los resultados en binario (empleando únicamente 0 y 1).  Por otro lado, si utilizamos el comando DEBUG sin ningún símbolo se presentarán los caracteres en código ASCII.

En este ejemplo hemos cambiado el último comando DEBUG para que muestre la letra A (el número 65 en código ASCII).

Publicado por José Luis Moreno en ROBÓTICA, 1 comentario