14 de junio de 2020

Programas simuladores del movimiento de los planetas con PROCESSING

En esta época de confinamiento, a mi clase de TIC 1º BAC D le había propuesto el aprendizaje del programa PROCESSING, un entorno de programación orientado al desarrollo de animaciones y gráficos.

Entre los programas propuestos se me ocurrió un simulador del movimiento de traslación de la Tierra en torno al Sol, y, como complicación, además la Luna en torno a la Tierra.

Estos programas no son relativamente difíciles de llevar a cabo. Simplemente se hace que un objeto (un círculo o una imagen) sigan una trayectoria circular respecto de un punto central (que sería el Sol, moviéndose la Tierra) o respecto a un punto móvil (la Luna respecto de la Tierra).

Mis alumnos se han decantado por otro tipo de programas, alguno de los cuales también proponía, pero yo, entre otras cosas, me he dedicado a hacerlos por si tenía que enseñárselos a ellos o a otras clases otros años.

Lo cierto es que tenía una espina clavada en este tema. En la carrera estudié, en la asignatura de Mecánica (rama de la Física), el problema de los dos cuerpos. Este problema calcula la trayectoria de dos masas en el espacio conocidas sus velocidades y posiciones iniciales, siguiendo la ecuación de la fuerza gravitatoria de Newton, y demostrando las leyes de Kepler del movimiento planetario. En su momento, aparte de la teoría y un montón de problemas, recuerdo como un fracaso una práctica de laboratorio que consistía en medir parámetros de una órbita simulada con un programa que creo recordar estaba en BASIC o PASCAL corriendo en un Conmmodore 64 o parecido.

Así que me he propuesto hacer un programa que reproduzca, fielmente, el problema de los dos cuerpos. Y que lo resuelva para el caso del Sol con los planetas interiores (Mercurio, Venus, Tierra y Marte). Para hacerlo, no sólo he tenido que repasar dicho problema, sino también algunos conceptos matemáticos que tenía oxidados, como el teorema del coseno aplicado a la geometría esférica.

Para lograrlo, hay que conocer los parámetros orbitales de cada planeta, que son básicamente posiciones angulares respecto del plano de la eclíptica (el plano que forman el Sol y la Tierra) y datos referente a su órbita. En concreto, semieje mayor de la elipse (a), excentricidad (e), inclinación de la órbita (i), longitud del nodo ascendente (Omega), argumento del perihelio (w) y época de paso por el perihelio (Tau).

El resultado son dos simulaciones que podéis encontrar en la web del IES Seritium: https://www.seritium.es/sissolar/ y https://www.seritium.es/sisTierraLuna/

Podéis encontrar los programas y más información en: https://github.com/agrgal/sistemaSolar

Además, os dejo unos enlaces a contenidos teóricos del problema.
  1. http://www.sc.ehu.es/sbweb/fisica3/celeste/ecuacion/ecuacion.html 
  2. http://www.sc.ehu.es/sbweb/fisica3/celeste/orbitas/orbitas.html 
  3. http://www.sc.ehu.es/sbweb/fisica/dinamica/con_mlineal/m_lineal/mlineal.htm#Sistema%20formado%20por%20dos%20estrellas%20en%20%C3%B3rbita%20circular.



22 de mayo de 2020

Tutoriales de Tinkercad

Tutoriales del propio Tinkercad

Lo mejor es empezar por los tutoriales del mismo TINKERCAD (www.tinkercad.com). Entras en tu cuenta de tinkercad, y, una vez dentro si pulsas en Aprendizaje...



Encontrarás varios tutoriales divididos en STARTERS, LECCIONES y PROYECTOS. Te recomiendo que te veas todos los starters, y algunas de las lecciones para empezar.




Tutoriales en Youtube






En inglés, pero paso a paso






4 de mayo de 2020

NodeMCU 13: intentando el uso de micropython en un v1.0 Lolin



Ya que no puedo terminar las placas, y ahora mismo con el estado de alarma no sé muy cómo continuar sin brocas adecuadas (no me atrevo a pedirlas a China), continuaré practicando algo más con los NodeMCU.

En este caso creo que intentaré usar micropython como lenguaje.

En primer lugar, estoy usando los apuntes de la página: https://randomnerdtutorials.com/getting-started-micropython-esp32-esp8266/

= = = = = = = = = = =

Lo primero es cargarle un firmware apropiado al NodeMCU. Tras unos intentos infructuosos, lo he conseguido. La lista de firmwares viene en la página https://micropython.org/download/esp8266/

  1. Me he descargado el primero estable, https://micropython.org/resources/firmware/esp8266-20191220-v1.12.bin
  2. He instalado con pip install esptool la herramienta esptool.py (version 2.8), tal como se describe en la web: https://github.com/espressif/esptool Nota importante: no me ha funcionado la herrramienta esptool directamente instalada desde comandos con apt (parece antigua).
  3. Comando que borra la memoria del NodeMCU:   esptool.py --port /dev/ttyUSB0 erase_flash
  4. Comando que flashea el NodeMCU: esptool.py --chip esp8266 --port /dev/ttyUSB0 write_flash --flash_mode dio --flash_size detect 0x0 ~/Escritorio/NodeMCU_micropython/esp8266-20191220-v1.12.bin
 = = = = = = = = = = 

Instalo el programa thonny, que es un IDE para Python, desde el terminal con la orden pip3 install thonny. Hay que ejecutarlo desde un terminal. Mediante ese procedimiento se descarga la última versión del programa.

En opciones, intérprete, elegir MycroPython (generic) y el puerto al que está conectado.

En shell, teclear help() para ver la salida y comprobar que todo funciona.

Y, por fin, escribir el primer programa en micropython.



Primeros pasos

Bueno, parece ser que los programas no se cargan directamente en memoria. Hay un programa llamado boot.py que arranca con el dispositivo.

Hay que hacer dos cosas:

  1. En el programa boot.py incorporar la linea import [nombre programa].py que queramos ejecutar.
  2. Guardar el programa [nombre programa].py al dispositivo. Click derecho en el nombre del programa y elegir "subir a".


25 de abril de 2020

Proyecto BOTPA (2): Obtención de los ficheros en GCODE a partir de los GERBER

Introducción


Con kicad obtenemos, como paso final, los ficheros GERBER. De los cuales, me interesan 3: La capa trasera o B_Cu, el fichero de taladros y la capa Edge-Cuts.

La primera es el dibujo de pistas en sí. La segunda los taladros de dicha capa, y, la tercera, cortaría de forma perfecta la baquelita.

La capa F-Cu, o de pistas delanteras, no se contempla en este proyecto. Se dibuja, pero son tan pocas las pistas que se harán puentes en ella. Además, voy a usar baquelita de una sola cara de cobre.

Conversión de los ficheros Gerber a B-Cu.


Usaré la aplicación online gratuita https://carbide3d.com/apps/rapidpcb/ . Intentaré seguir las escuetas instrucciones de su howto (https://carbide3d.com/apps/rapidpcb/community.html).

Primer paso: opciones iniciales.

  1.  Pongo las medidas de la placa (NodeMCU Botón del pánico CENTRAL): 53.34 x 48.26 y usaré baquelita de 3.8mm
  2. Marcaré "mill flat surface" con una broca de 3mm. Margen de 5 mm, profundidad de 1.5 mm (supongo que es la profundidad a la que ya quitará la capa de cobre) y 10mm/s de velocidad. Todos los datos por defecto.

Segundo paso: cargar placa de cobre B-Cu.gbr
  1.  Al cargarla, la placa aparece muy desplazada.
  2. Con los valores de offset en X e Y: -115.7 y 81, la centro en la placa.
  3. En el resto de parámetros escojo Count = 3. Si ampliáis la imagen, veréis que es el número de pasadas que da la broca. En el resto de parámetros: V-bit, 20º y 0.1 mm que se corresponde con unas brocas tipo lanza que he comprado (https://www.amazon.es/gp/product/B00SKFVP06/ref=ppx_yo_dt_b_asin_title_o05_s00?ie=UTF8&psc=1)


Tercer paso: ficheros de taladrado
  1. El offset el mismo, pero sale algo desplazado. rectificar la x a -115.7
  2. Elijo broca de 1 mm (¿tendré que cambiar de broca?). Profundidad pongo 4 mm. velocidad de penetración 1mm/s


Cuarto paso: generar línea de corte.
  1.  Ajusto la zona de corte con los parámetros que vienen de offset y tamaño de la placa.
  2. Profundidad de 4mm con broca de 2 mm

Quinto paso: no voy a generar hatches, que son como líneas en las pistas. No lo veo necesario.

Sexto paso: extensión *.nc, z seguridad (supongo que es la retroacción) 5 mm y movimiento de traslación 50 mm/s.

= = = = = =

Y por fin guardo los tres ficheros *.nc obtenidos. Los abriré con el programa UGS (Universal Gcode Sender). Este programa simplemente me sirve para visualizar el proceso de grabado y ver que todo está correcto.No lo usaré para mandar el fichero a la máquina; usaré en vez de ello la tarjeta en la unidad controladora.

Nota del 4-May-2020: tras intentos infructuosos con V-bit 20º 0.1mm de punta, creo que necesito brocas mejores o baquelitas de cobre menos duras. Parece marcar correctamente a 0.3mm, pero los trazos son muy poco definidos y no rectos. Creo que necesito brocas de 30º o 60º, quizás del tipo flute string o algo parecido.

Vídeos: https://youtu.be/zRdJrE80Vjk, https://youtu.be/nrW6Hq6V3VY






Proyecto BOTPA (1): Montaje de la CNC y primeras pruebas.

Bueno, ha tenido que pasar casi cuatro meses para animarme a montar la CNC (Vogvigo 3018 Pro CNC).

He de decir que el montaje no ha sido difícil, aunque el eje roscado X me ha dado un poco la lata. Entre las instrucciones y algunos vídeos como los de "GADGETBRO MINI ROUTER CNC 3018 PRO Armado y Prueba" se consigue sin muchos problemas.

Antes de lanzarme a la aventura de mecanizar las placas PCB, he decidido lanzarme a algo más sencillo: grabar un dibujo en una madera. Tras algunos fallos, lo he conseguido.

Me ha servido de guía este otro vídeo: "CNC Portátil 3018 - Puesta en marcha" , aunque no lo he seguido al pie de la letra. De hecho, la lista de los pasos que he dado es:
  1. Armado de la máquina.
  2. Descarga del programa Universal Gcode Sender. Me he descargado la versión 2.0 Platform Stable, que necesita Java 8+. 
  3. Descomprimirlo y ejecutarlo (sin instalar, solo se necesita tener java).
  4. Con el programa inkscape hacer un dibujo vectorial y guardarlo como SVG. Como elegí algo de texto, tuve que convertirlo a trazado, así como los dibujos de mapa de bits incrustados: en el menú Trayecto, escoger las opciones objeto a trayecto , borde a trayecto o vectorizar mapa de bits.
  5. Una vez tengo el objeto dibujado en SVG necesito su código en GCODE. Para ello hay una aplicación fácil online que es JSCUT. En esta aplicación:
    1. Marcar primero medidas en milímetros: "make all mm".
    2. En Thickness indicar el grosor de la madera a usar.
    3. En Clearance lo que se levantará la boca cuando se traslade.
    4. En Tool, a la izquierda. Indicar el diámetro de la broca, su ángulo, y la profundidad que marca en cada pasada. Yo tenía brocas de dos tipos que me habían venido con la máquina: planas (180º) y tipo lanza de 20º. La segunda es una auténtica pasada.
    5. Abrir el dibujo en OPEN SVG.
    6. Ir marcando las zonas de dibujo a las que quieres aplicar una operación. De un color gris se irán coloreando en azul.
    7. A la izquierda arriba pulsar en: CREATE OPERATION, y elegir entre grabado (engrave), vaciado (pocket), líneas internas o externas, o Vpocket (no lo he probado). A cada operación hay que indicar hasta qué profundidad llega. 
    8. Una vez la operación está aplicada, se puede continuar eligiendo otra zona del dibujo y aplicando más operaciones.
    9. En la pestaña "Simulate GCODE" podemos obtener una simulación del mecanizado.
    10. Por fin, exportar usando el menú de "Save GCODE".
  6. Una vez obtenido el fichero GCODE, abrimos el Universal Gcode Sender, y abrimos el fichero que acabamos de obtener con JSCUT.
  7. La aplicación viene bien explicada en el vídeo de puesta en marcha. Si conectamos el USB directamente a la placa controladora de la máquina, podemos desde el programa controlar la CNC. Teóricamente mandarle el fichero GCODE para que lo ejecute; sin embargo he tenido problemas con eso y no lo he realizado de esta manera (se paraba en el proceso y no continuaba dado un punto, y no sé por qué). Yo lo he utilizado de este modo para hacer pruebas con los motores "Jog_controller" y alguna macro como se describe en en vídeo.
  8. Se puede usar directamente la unidad offline controller que trae la máquina, de forma análoga a la que traen las impresoras 3D. Simplemente carga el fichero GCODE en la tarjeta y con la unidad lo ejecutas. Sin embargo, el fichero GCODE que descargo de JSCUT no puedo usarlo directamente; en el fichero no se activa el giro de la broca
  9. Así que he abierto el fichero GCODE con el UGS y lo he editado. En las primeras líneas de código, cuando baja por primera vez la broca, introduzco la orden M03 S1000, que activa el giro de la broca a 1000rpm y casi al final la desactivo con la orden M05. Me fijo también donde tiene el cero de coordenadas; en mi caso en la esquina superior izquierda. También es útil observar cómo va a hacer el trazado la máquina.
  10. Guardo el fichero de nuevo, y éste en la tarjeta, y la introduzco en la unidad offline controller. 
  11. Preparo la madera y la sujeto muy bien con los gatos que trae la máquina. Cuidado de no obstaculizar con los gatos el movimiento del cabezal y de la broca.
  12. Introduzco la broca en el cabezal. He visto que lo más fácil es sacarlo entero, colocar la broca (si es tipo lanza con la funda protectora puesta) y después enroscar en el taladro. Apretar bien con las dos llaves a contratuerca.
  13. Quitar la funda de la broca, si la tenía.
  14. Colocarla en el punto de inicio usando los controles X e Y de la unidad. Es buena idea elevarla unos centímetros y poner el programa en marcha, observando al menos los primeros movimientos de la máquina. Como está en el aire, no debe marcar nada. 
  15. Volverla al punto de inicio y colocar la broca, ahora sí, sobre la pieza intentando que la punta toque el material sin penetrarlo. Empezar el programa.
  16. Y si todo va bien, hasta que termine. 

22 de abril de 2020

NodeMCU 12_Desarrollo de placas para el Botón del pánico: versión 01. FASE 1

Inicio

Proyecto en github: https://github.com/agrgal/Bot-n_del_p-nico_NODEMCU 

Una vez llevado a cabo los programas y testeados los montajes en protoboard, habría que sacar una versión más robusta de los prototipos. Esto pasaría por soldar los componentes a una placa, que previamente, hay que diseñar.

El diseño del circuito impreso se lleva a cabo con el programa kicad. Hacía tiempo que no lo manejaba, así que la primera labor ha consistido en actualizarlo a la versión 5.1.5

= = = = = = = = =

Esquemático

El proceso empieza por diseñar el esquemático. Para ello, descargué la librería de símbolos (kicad-ESP8266 - a library for KiCAD) que contiene la biblioteca de símbolos ESP8266.lib para el esquemático y los footprints en la carpeta pretty correspondiente.


Empezamos el esquemático de la CENTRAL y de la ESTACIÓN. Es el primer paso. Hay que comprobar que no tienen errores ejecutando ERC (control de reglas eléctricas).

= = = = = = = = =

Asignación de footprints


Una vez realizados sin errores, continuamos asignando footprints a cada componente. Un footprint es el lugar de la placa donde irá soldado. Por ejemplo, una resistencia consistirá en dos contactos separados cierta distancia. Ese dibujo de "huella" en la placa está sistematizado y hay bibliotecas de las mismas; pero claro, tenemos que relacionar primero nuestro esquema con los footprints deseados:

Para el circuito CENTRAL:



Para el circuito EMISOR:



En algunos casos, como el conector de 4 pines para la pantalla OLED o el conector de 2 para el Buzzer se escogen componentes genéricos de conexión porque esos elementos no van a ir soldados en placa. Tampoco probablemente en el diseño definitivo el LED y el pulsador, pero esos componentes tienen claramente un footprint asignado.

Antes  de este proceso, la huella del componente NodeMCU V1.0 ESP-12E no está cargada; de la biblioteca correspondiente al mismo en el directorio pretty descargado se incorpora en el editor de huellas (footprint editor).

=======

Fichero netlists


Cuando todos estos procesos estén finalizados se genera un fichero netlist (extensión net) que contiene la información de las conexiones que se han creado. Este fichero formará parte de tu proyecto y conectará con un programa diferente de kicad llamado PCB Layout editor

=======

PCB Layout editor


En esta parte del programa se empieza el verdadero diseño del circuito impreso. Lo primero que tenemos que hacer es especificar las características de la placa (ARCHIVO>>BOARD SETUP).

Yo he elegido dos capas de cobre, e indicando que las pistas de cobre estarían en la parte de atrás (capa B.Cu) y la capa de delante "de cobre" será para hacer puentes soldando algunos cables si es necesario (capa F.Cu) ya que pienso aprovechar placas de baquelita de cobre de una sola capa. Añado en este paso también , aparte del diseño de vías y pistas por defecto, algunas más en Tracks & Vias.


Básicamente las pistas y vías por defecto son pequeños. Prefiero tener más zona de contacto, pistas más amplias siempre que pueda permitírmelo según los componentes. Usaré pistas más anchas y vías de 1,5mm.

= = = = = = = = =

Colocación de componentes


Realizado este paso, se carga el netlist "Load Netlist" accediendo al fichero que creamos anteriormente. Elige la zona del área de trabajo donde colocarás los componentes y haz click.

Haz click en cada componente. Muévelos pulsando "M" y rótalos con "R". Haz una distribución de los mismos.

Las conexiones entre componentes aparecerán como líneas blancas. Es el denominado "rastnest" o red de rastros. El objetivo será conectar todas las conexiones haciendo aparecer pistas y eliminando todos los rastros.

= = = = = = = = =

Ruteo


Para dibujar las pistas uso un procedimiento manual. Al parecer, kicad ha prescindido de sus procedimientos de autorouting. Aunque todavía puedes hacerlo con programas gratuitos. Por ejemplo, freeRouting.jar. A mí no me ha hecho falta.



Posteriormente debes trazar el contorno con la herramienta polígono de la placa, eligiendo la capa (paso 1) Edge.Cuts Ese dibujo delimitará la zona de impresión de pistas.

 = = = = = = = = =

 Zonas 


Es una buena práctica hacer zonas dentro de la placa. Esto evita tener que retirar demasiado material y, si lo hacemos por ejemplo de tensiones fijas a cero voltios (tierra) podremos minimizar las interferencias.

Bajo el símbolo de vías, encontramos el de zonas. Antes de dibujar el polígono de la zona (ver imagen) aparecerá un menú de selección en el que lo más importante es elegir la capa donde se dibujará la zona, la pista que servirá de relleno, y la distancia de la zona al resto de la pistas. Importante: en el menú de la izquierda, tener escogida la opción "Mostrar áreas rellenas en zonas"





Terminado el proceso, y dibujada la zona, podemos escribir textos en algún lugar donde no afecte a la conectividad.

= = = = = = = = = 

Hasta ahora, y con la placa diseñada, es conveniente ejecutar el control de diseño (DRC - símbolo del insecto) para comprobar que no existen errores de conexionado.

= = = = = = = = =

Ficheros Gerber

Aunque todavía no me he puesto a ello (Espero que con este proyecto sí) los ficheros Gerber son necesarios para las CNC, con los que estas máquinas consiguen el taladrado y recorte de las pistas en la placa de baquelita.

En Kicad se consigue con la opción PLOT (trazar), al lado de imprimir. Los valores por defecto se consiguen como en la imagen. Sobre todo, escoger las capas de cobre (B.Cu y F.Cu y la Edges.Cut) aunque es mejor dejar las opciones por defecto.


Pulsar en "Generar archivo de taladrado". Marcar la opción "PTH y NPTH in single file".


Al volver a la ventana, por fin, pulsar el botón de Trazar para generar los distintos ficheros Gerber  al proyecto. Al cerrar PCB LAyout Editor y volver a la ventana de proyecto, podremos comprobar como se han generado los ficheros de taladrado (*.drl) y un fichero Gerber por cada capa (*.gbr). Las capas importantes para una placa de una sola cara serán la B.Cu y Edges.Cut. La F.Cu hay que tenerla en cuenta para hacer puentes. las otras contienen las diferentes serigrafías. 

Todos estos ficheros pueden visualizarse con la herramienta "Gerber View".

= = = = = = = = =

Otros

Se pueden obtener otros ficheros, como los BOM (bills of materials - listados de materiales). También hay otras funcionalidades que me he saltado, básicamente porque las desconozco o se salen del propósito de este pequeño manual.

También se puede usar en PCB Layout Editor un visualizador en 3D de la placa. Hay que buscarse un fichero STEP o STL de la placa NodeMCU V1.0 y exportarlo al formato VRLM 2.0 (*.wrl). Seguramente tendrás que hacer ajustes de escalado y posición.

 = = = = = = = = =

Enlaces: 

  1.  https://github.com/jdunmire/kicad-ESP8266
  2. Fichero en 3D del NodeMCU V1.0: https://grabcad.com/library/nodemcu-2
  3. Ficheros en 3d para kicad: https://github.com/Obijuan/videoblog/wiki/Cap%C3%ADtulo-21:-Modelos-3D-en-Freecad-para-Kicad
  4. Freerouting with kicad: https://freerouting.org/freerouting/using-with-kicad
  5. Manual y documentación de kicad: https://docs.kicad-pcb.org/







19 de abril de 2020

NodeMCU: 11_ESPNOW: Botón del pánico: Central_y_estación. Versión 01

Introducción



Primera versión del proyecto (V01) terminada. Se hacen ciertas mejoras a ambas partes, CENTRAL y ESTACIÓN, sobre todo a la primera. Es el primer desarrollo funcional. En próximas versiones se podría ampliar a varias estaciones y una estación central.

Estación




En el caso de la estación, el programa básico no ha cambiado. Excepto que la estructura de datos en la recepción se ha cambiado y puesto como variable global y la rutina que apaga la alarma controlada desde la CENTRAL. 

Central




En este caso, el programa sufre varias ampliaciones
  1. Se dibuja un logo nuevo para el programa.
  2. Se modifica la salida del LED (pasa a D3) y en D5 ponemos un buzzer.
  3. Creamos tres variables: frecmin, frecmax y duracion, para poder modificar el sonido de la sirena. Dejo los valores en 2000, 4000 y 250, pero se puede jugar con ellos. 700 y 800 dan un sonido más de "cacharros de feria".
  4. La estructura de datos E2 pasa a ser variable global.
  5. Hay una rutina por la que cada seis segundos muestra el logo (función presentarLogo). Así sabremos que no se ha bloqueado.
  6. En otra rutina (presentarPantalla) presentamos en la pantalla la información de la estación. Se ha mejorado incluyendo el símbolo ASCII de la "ó".
  7. No he borrado la función de testeo. Hay memoria para ello y me parece útil si quiero buscar un símbolo (testdrawchar)
  8. En la línea 243, si tenemos estado de alarma, suena el buzzer.
  9. En la línea 252, si el estado que recibo es de apagado, fuerzo a que la alarma se desactive.
<