¿Meadow es el sucesor de Netduino?


La compañia Wildernesss Labs tras comprar  en 2016   Netduino y trabajar en secreto dos años  en  2018,  sacaron vía crowfounding  (en Kickstarter)  su proyecto estrella: Meadow , una  plataforma IoT estándar de .NET de pila completa   que  intenta combinar lo mejor de todos los mundos,  pues tiene el poder de RaspberryPi,  el factor de computación de un Arduino y la capacidad de administración de una aplicación móvil. ¿Y la mejor parte? funciona con .NET Standard completo en hardware de IoT real

Existe una brecha cada vez mayor entre los desarrolladores y las empresas que desean construir hardware conectado y la capacidad de hacerlo. Meadow intenta  cerrar esa brecha y permite a los diez millones de desarrolladores de .NET crear experiencias de hardware realmente interesantes con la misma facilidad con la que crean aplicaciones web o móviles en la actualidad.

Meadow  permite a los desarrolladores ejecutar aplicaciones completas de .NET Standard 2.x en un microcontrolador e incluye un conjunto de controladores de hardware y API en la parte superior que hace que el desarrollo de hardware sea plug and play.   Sin embargo, Meadow no se limita a los desarrolladores .Net, intentando  abrir el desarrollo de hardware a desarrolladores de todo tipo, poniendo especialmente foco en el ambiente empresarial .

Meadow IoT Kickstarter

 

Microordenador vs Microcontrolador: las Raspberry Pis son ordenadores completos  y los Ardunios son pequeños dispositivos (en su mayoría) de una sola tarea.  Es quizás  una exageración tener Ubuntu en un ordenador solo para encender un dispositivo así que por lo general, es deseable  que los dispositivos de IoT ocupen desde el punto de vista del  hardware como del sw  lo menos posible a si que  puede ser una buena  idea que  nuestro core de IoT corra  un sistema  operativo mas estable en cuanto a cortes o interrupciones  ( como lo haría en un microcontrolador pero con muchísima mas potencia del calculo).

Meadow  en principio  ha sido diseñado para ejecutarse en una variedad de microcontroladores, y la primera placa se basa en la MCU STM32F7 (insignia de STMicroelectronics) con coprocesador ESP-32 e   implementando. WiFi, BLE, 32 MB de RAM, 32 MB de Flash. 25 puertos GPIO, PWM, I2C, SPI, CAN, UART y cargador de batería LiPo integrado, todo ello en el factor de forma Adafruit Feather.

Lo interesante pues es que el factor de forma Feather sirva  como placa de desarrollo o incrustarlo. Es realmente un gran diseño   basada en  MCU STM32F7 en un bajísimo factor de forma  y con  casi tantos puertos GPIO (25) tanto  analógicos como digitales como estamos acostumbrados en Arduino o Netduino.

En el sitio de  Meadow Kickstarter dicen que se está ejecutando en Mono Runtime y admite la API .NET Standard 2.0 lo  cual  significa que probablemente ya sepa cómo programarlo  pues  la mayoría de las bibliotecas de NuGet son compatibles con .NET Standard, por lo que una gran cantidad de software de código abierto debería “simplemente funcionar” en cualquier solución que admita .NET Standard.

En términos de NanoFramework y TinyCLR; si bien esos son grandes esfuerzos, son significativamente diferentes a Meadow. Ambos esfuerzos se basan en .NET MicroFramework. Como tal, no son compatibles con .NET completo. No hay genéricos en ninguno de ellos, por ejemplo, ni hay soporte para las bibliotecas estándar .NET. 

 

Funciones empresariales

Meadow  incluye soporte para actualizaciones seguras por aire (OTA), lo que permite que las instalaciones de campo de IoT se gestionen de forma remota; una característica clave para las implementaciones empresariales de IoT.

Meadow abrirá todo un nuevo conjunto de posibilidades para el desarrollo de cosas conectadas. Y como funciona con un dispositivo de  ultrabaja energía, podrá colocarlo en todas partes. Las instalaciones de baterías, energía solar e incluso energía a través de Ethernet (POE) se convertirán en algo común, lo que significa que para muchos de estos dispositivos, el acceso físico será limitado, por lo que la administración centralizada es un requisito absoluto.

Además de las actualizaciones de OTA, Wilderness Labs tiene planes para el monitoreo de campo básico, informes de fallas y análisis para asegurarse de que los dispositivos Meadow funcionen in situ.

Y debido a que Meadow usa .NET, las empresas pueden usar equipos existentes e inversiones de código para construir IoT, en lugar de tener que contratar nuevos desarrolladores que se especialicen en hardware. Es una propuesta de valor similar a la que sus creadores hicieron en Xamarin; había desarrolladores existentes que querían hacer dispositivos móviles, así como muchas inversiones existentes en código empresarial los cuales fueron habilitados en una plataforma completamente nueva ( Microsoft adquirió Xamarin por más de 400 millones de dólares, en gran parte por su valor en el mercado empresarial).

Seguridad 

Otro aspecto importante del aspecto Meadow se intenta centrar en la seguridad. Meadow presenta consideraciones de seguridad básicas, desde la seguridad a nivel de hardware y las actualizaciones seguras, pero Wilderness Labs también se compromete a enviar componentes de software destinados a facilitar la seguridad desde una perspectiva de UX. No es suficiente tener actualizaciones seguras por aire (OTA ) , firmware firmado, revocación de certificados terciarios, etc., pueso la seguridad debe llegar hasta el final.

El pirateo del bot Mirai funcionó porque muchas de estas cámaras de seguridad conectadas tenían nombres de usuario y contraseñas predeterminados, asi  que no es una cuestión   banal.

En este nuevo enfoque enviaran componentes que puede ingresar y brindar una experiencia de usuario fantástica y fácil para cambiar esas cosas, así como orientación y educación para el desarrollador para ayudar a la gente a comprender cómo aprovechar las funciones de seguridad en la pila Meadow.

Inteligencia artificial en IoT

Recientemente, Pete Warden, director de TensorFlow en Google, escribió que la mayor parte de la inteligencia artificial se realizará en microcontroladores , y Meadow es la primera plataforma de desarrollo de microcontroladores que cumple con esa promesa, permitiendo ejecutar visión artificial a través de TensorFlow y otros paquetes de inteligencia artificial de alto nivel localmente en chip.

Se espera que la IA desempeñe un papel clave en IoT con la visión artificial y otros algoritmos de aprendizaje profundo que se ejecutan en imágenes y otros datos de sensores en la fuente para agilizar la recopilación de datos y permitir que los dispositivos tomen decisiones en el campo. Sin embargo, Meadow es la primera plataforma de microcontroladores de IoT que se enfoca específicamente en casos de uso de IA.

Mercado emergente

Se espera que el mercado global de IoT supere los USD $ 1 billón / año para 2025 , y se prevé que gran parte de ese dinero se gaste en herramientas, plataformas y servicios para desarrolladores. Y ese mercado está listo para la disrupción, mientras que los microcontroladores están preparados para convertirse en la forma dominante de computación , con un estimado de 75B de ellos in situ y conectados para 2025, casi todo el desarrollo de microcontroladores hoy en día se realiza en lenguajes de bajo nivel como C / C ++ , y las herramientas no han cambiado mucho desde la década de 1980.

Una de las cosas que ha frenado a IoT hasta ahora es la barrera de entrada; existe una variedad fantástica de nuevos dispositivos informáticos que pueden hacer todo lo que puede hacer una computadora en miniatura y más; sólo cuestan unos pocos dólares, pueden funcionar con una batería de tipo botón durante años y, sin embargo, programarlos es un trabajo duro durante los años 80 ”, comentó Bryan.

Diferencias con Neduino

Hardware

Si bien Meadow está diseñado para ejecutarse en una variedad de microcontroladores de 32 bits, su primera placa se basa en el chip STM32F7 de STMicroelectronic con 32 MB de almacenamiento flash y 16 MB de RAM , el sucesor del chip STM32F4 muy popular que se encuentra en varias placas de desarrollo de microcontroladores, incluido Netduino. La serie F7 es dos veces más poderosa pero usa la mitad de la energía de los chips F4 e incluye una serie de características interesantes, como un códec JPEG integrado para manejar transmisiones de video y cámara, así como un acelerador de gráficos 2D para proporcionar UX en un variedad de pantallas.

También están trabajando en una placa basada en ESP32 que traerá características y conectividad de alta gama a un mercado de bajo precio. Esperaremos con ansias el día en que pueda incorporar una placa Meadow basada en ESP32 en productos por menos de $ 10.

Una gran diferencia con Netduino es  que la placa Meadow F7 está diseñada para ser compatible con el factor de forma Adafruit Feather  ( claramente diferente  a Natduino que se diseño para tener el mismo factor de forma que Arduino ). Además incluye un conector de batería y un cargador integrado, por lo que puede funcionar fácilmente con una batería o conectarse a un panel solar para uso indefinido mediante recarga solar. Aisimismo por diseño, el F7 también está destinado a ser integrable por defecto.

Lo interesante pues es que el factor de forma Feather sirva  como placa de desarrollo o incrustarlo. Es realmente un gran diseño   basada en  MCU STM32F7 con coprocesador ESP-32 e   implementando. WiFi, BLE, 32 MB de RAM, 32 MB de Flash. 25 puertos GPIO, PWM, I2C, SPI, CAN, UART y cargador de batería LiPo integrado  en un bajísimo factor de forma  y con  casi tantos puertos GPIO (25) tanto  analógicos como digitales como estamos acostumbrados en Arduino o Netduino.

Software

Meadow ejecuta un puerto personalizado de Mono sobre un NuttX muy modificado (un µRTOS). De ahí proviene el  soporte estándar .NET. No se basa en Netduino de ninguna manera. Es una pieza de tecnología completamente nueva que han desarrollando desde cero durante los últimos dos años. Existe alguna relación con el  proyecto Netduino.Foundation  pues  han portado Netduino.Foundationa Meadow, y obteniendo todo el atractivo de la última versión de C # y .NET completo para crear una API aún mejor para todos esos controladores.

El proyecto se inició porque .NETMF había desaparecido y no había ningún progreso real allí ni la comunidad pudo participar realmente en él. Es cierto que se inició como un spin-off de .NETMF pero, aparte del motor de ejecución y una buena parte de mscorlib, todo el  código se escribió desde cero.

Han mejorado muchas cosas,  actualizándolo en lo que respecta al sistema de compilación, Wilderness Labs lo ha hecho verdaderamente portátil para los RTOS de CMSIS,  han reelaborado el motor de depuración y han agregado varios objetivos de referencia para MCU con diferentes conjuntos de funciones.

TODO el código es completamente de código abierto ( como el de Netduino ) . Desde el código nativo, a las bibliotecas de clases hasta la extensión de Visual Studio. Dos años de trabajo pueden parecer que el proyecto todavía está en él ‘Es una infancia, pero están orgullosos de que esto se ejecute en SoC SMT32 (de la serie L0 a H7) y, sí, también en ESP32. Hay NuGets funcionales y totalmente utilizables para GPIO, I2C, SPI, Serial, ADC, PWM, Wi-Fi, Networking (con soporte SSL / TLS) y otros.

Es cierto que no admiten bibliotecas .NET completas. En su lugar, han seguido prácticamente la API de .NET UWP para que se pueda reutilizar una gran cantidad de código sin demasiado trabajo pues en el   mundo del IOT cada línea de código importa, se debe considerar cada ciclo de CPU, cada mA que el sistema drena de la batería y así sucesivamente: es decir todo lo que podamos hacer más eficiente es importante.

Conclusión

Tras dos años en el mercado Meadow  es una plataforma  con mucho futuro  pero con mucho  recorrido  para crecer

Es como vemos bastante interesante, pero hay algunas cosas nos  impiden retroceder:

PROS

 

  • La  placa Meadow F7 está diseñada para ser compatible con el factor de forma Adafruit Feather e incluye un conector de batería y un cargador integrado, por lo que puede funcionar fácilmente con una batería o conectarse a un panel solar para uso indefinido mediante recarga solar .Ademas por diseño, el F7 también está destinado a ser integrable por defecto. Lo interesantes pues es que el factor de forma Feather sirva  como placa de desarrollo o incrustarlo.  .
  • Hay muchas variables en este sistema. Si podemos elegir entre tener genéricos o código en C # usando una herramienta increíble como Visual Studio, no lo deberíamos pensar dos veces y lo  ideal  seria optar por lo último. En general, es genial que haya más opciones disponibles que permitan a los desarrolladores de .NET codificar para IoT y sistemas integrados utilizando su lenguaje favorito;NET para codificar para IoT y sistemas integrados utilizando su lenguaje favorito;NET para codificar para IoT y sistemas integrados utilizando su lenguaje favorito
  • También hay cierta fragmentación en el espacio de .NET IoT, lo que significa que tenemos varias soluciones pequeñas, pero ninguna que sea utilizada por muchos desarrolladores. Un esfuerzo común, dirigido por .NET Foundation, habría sido un mejor enfoque.  Nano Framework está en el camino correcto, pero  todavía está en su infancia. Al final, el no compromiso de Microsoft con IoT / .NET Micro Framework es ahora un gran problema, ya que habría sido la plataforma perfecta y natural para el desarrollo de IoT basado en Azure ;

CONTRAS

  • Con 50$  al cambio , es extremadamente cara en comparación con Arduino, Raspberry Pi y otras ofertas similares.
  • Hay un esfuerzo para portar .NET a varios chips SDT y ESP32: https://nanoframework.net/ .  pues  no olvidemos  que se puede obtener una placa de desarrollo ESP32 por menos de 10 $ ( y menos) 
  • Es bueno recordar el fracaso del AGent smartwatch  también en quickstarter  patrocinada por Secret Labs ( los fundadores de Netduino). La idea era muy buena pues ya en 2013  este reloj  pretendía ser un reloj  inteligente con tinta electronica  y con el soporte .Net. Este  proyecto  desgraciadamente  precipito la caída de Secrets LAbs y con ello la de Netduino que fue comprado por Wilderness Labs. 

 

 

 

 

 

 

Fundada en 2016, Wilderness Labs es el fabricante de placas Netduino y el creador de Meadow. Para obtener más información, puede encontrar su blog en blog.wildernesslabs.co .

exit status 1 using typedef-name ‘fpos_t’ after ‘struct’


Si está viendo  este página probablemente se deba que esta intentando actualizar el firmware Marlin  de su impresora 3d  desde el IDE de Arduino  y no lo logra.

Marlin es un firmware de código abierto para la familia RepRap de replicar prototipos rápidos, popularmente conocidos como “impresoras 3D”. Se deriva de Sprinter y grbl,y se convirtió en un proyecto de código abierto independiente el 12 de agosto de 2011 con su lanzamiento de Github. Marlin tiene licencia bajo la GPLv3 y es gratis para todas las aplicaciones.

Desde el principio Marlin fue construido por y para los entusiastas de RepRap para ser un controlador de impresora sencillo, confiable y adaptable que “simplemente funciona”. Como testimonio de su calidad, Marlin es utilizado por varias impresoras 3D comerciales respetadas. Ultimaker, Printrbot, AlephObjects (Lulzbot) y Prusa Research son solo algunos de los vendedores que envían una variante de Marlin. Marlin también es capaz de conducir CNC y grabadores láser.

Una clave de la popularidad de Marlin es que se ejecuta en microcontroladores Atmel AVR de 8 bits de bajo costo – Marlin 2.x ha añadido soporte para placas de 32 bits. Estos chips están en el centro de la popular plataforma de código abierto Arduino/Genuino. Las plataformas de referencia para Marlin es un Arduino Mega2560 con RAMPS 1.4 y Re-Arm con rampas 1.4.

Como producto comunitario, Marlin tiene como objetivo ser adaptable a tantas placas y configuraciones como sea posible  intentando ser configurable, personalizable, extensible y económico tanto para aficionados como para proveedores. Una construcción Marlin puede ser muy pequeña, para su uso en una impresora sin cabeza con solo hardware modesto. Las características se habilitan según sea necesario para adaptar Marlin a los componentes añadidos.

 

Marlin Firmware se ejecuta en la placa principal de la impresora 3D, gestionando todas las actividades en tiempo real de la máquina. Coordina los calentadores, pasos, sensores, luces, pantalla LCD, botones y todo lo demás involucrado en el proceso de impresión 3D.

Marlin implementa un proceso de fabricación aditiva llamado Fused Deposition Modeling (FDM), también conocido como Fused Filament Fabrication (FFF). En este proceso, un motor empuja el filamento de plástico a través de una boquilla caliente que funde y extruye el material mientras la boquilla se mueve bajo control informático. Después de varios minutos (o muchas horas) de colocar finas capas de plástico, el resultado es un objeto físico.

El lenguaje de control para Marlin es un derivado del código G. Los comandos de código G le dicen a una máquina que haga cosas simples como “establecer el calentador de 1 a 180o” o “mover a XY a la velocidad F.” Para imprimir un modelo con Marlin, debe convertirse en código G utilizando un programa llamado “slicer”. Dado que cada impresora es diferente, no encontrará archivos de código G para descargar; tendrás que cortarlos tú mismo.

A medida que Marlin recibe comandos de movimiento, los agrega a una cola de movimiento para ser ejecutados en la orden recibida. La “interrupción paso a paso” procesa la cola, convirtiendo los movimientos lineales en pulsos electrónicos con precisión en los motores paso a paso. Incluso a velocidades modestas Marlin necesita generar miles de pulsos paso a paso cada segundo. (p. ej., 80 pasos por mm * 50 mm/s a 4000 pasos por segundo!) Dado que la velocidad de la CPU limita la velocidad con la que la máquina puede moverse, ¡siempre estamos buscando nuevas formas de optimizar la interrupción paso a paso!

Los calentadores y sensores se gestionan en una segunda interrupción que se ejecuta a una velocidad mucho más lenta, mientras que el bucle principal controla el procesamiento de comandos, la actualización de la pantalla y los eventos del controlador. Por razones de seguridad, Marlin realmente se reiniciará si la CPU se sobrecarga demasiado para leer los sensores.

What is Marlin?

 

Instalación de Marlin en su impresora

Normalmente todas las impresoras 3d ya llevan el firmware instalado ( incluso las que vienen en kit )   pero   conviene estar al tanto de las actualizaciones   de  este   ( en cuyo caso habar  que seguir el procedimiento siguiente)  o puede que sea  necesario cambiarlo para añadir alguna funcionalidad extra como por ejemplo la autonivelación o el cambio de idioma

En todos estos casos normalmente estos son los pasos que se siguen:  

1. Instale Arduino en su PC.
Si su impresora es A10/A10M/A20/A20M, utilice Arduino 1.8.5 para finalizar la  carga; Si es Prusa I3 Pro B/W/X/C, por favor vaya por Arduino 1.0.1!! De lo contrario, es posible que reciba algunos errores durante la verificación.

Descargue Arduino 1.0.1 o Arduino 1.8.5  aquí: https://www.arduino.cc/en/Main/OldSoftw … s-anterior

Arduino 1.0.1.jpg
Arduino 1.8.5.jpg
Arduino 1.8.5.jpg (27.86 KiB) Visto 60177 veces


2. Conecte la impresora al PC con el cable USB.
3. Descomprima el  firmware.  Aquí  tomaremos el firmware para el extrusor dual I3 pro C, por  ejemplo el proceso para la serie A10/A20 es bastante similar, excepto el Arduino en una versión diferente.   Puede descargar el de su impresora aquí:
http://www.geeetech.com/forum/viewtopic … 10&t-17046

02.jpg


4. Haga doble clic en el Marlin.ino, luego abrirá todo el firmware en el arduino.

03.jpg
04.jpg

5. Seleccione el puerto Com adecuado.

06.jpg
06.jpg (205.84 KiB) Viewed 189584 times


6. En Herramientas, en Board, seleccione Mega 2560 .

05.jpg


7. Finalmente haga clic en la flecha para compilar y cargar el firmware en su impresora.

07.jpg

 

Bien   es cierto que debería de compilar el sw  y nuestra impresora ya si estaría actualizada, pero lamentablemente  no siempre es así,  y desgraciadamente puede que  nos lance un error de que no se puede compilar  .

 

 

Por ejemplo en el caso de una Geetech Prusa i 3 W este es el mensaje que lanza el IDE de Arduino al intentar verificar el firmware: 

 

Arduino:1.8.10 (Windows 10), Tarjeta:”Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)”

In file included from sketch\Marlin.h:23:0, from sketch\ConfigurationStore.cpp:1:

sketch\pins.h:2956:0: warning: “X_MAX_PIN” redefined

#define X_MAX_PIN -1   sketch\pins.h:1363:0: note: this is the location of the previous definition

#define X_MAX_PIN 24 sketch\pins.h:2957:0: warning: “Y_MAX_PIN” redefined

#define Y_MAX_PIN 28  In file included from sketch\Marlin.h:23:0,  from sketch\BlinkM.cpp:5:

sketch\pins.h:2956:0: warning: “X_MAX_PIN” redefined

#define X_MAX_PIN -1 sketch\pins.h:1363:0: note: this is the location of the previous definition

#define X_MAX_PIN 24 sketch\pins.h:2957:0: warning: “Y_MAX_PIN” redefined

#define Y_MAX_PIN -1 sketch\pins.h:1369:0: note: this is the location of the previous definition

#define Y_MAX_PIN 28 In file included from sketch\Marlin.h:23:0, from sketch\thermistortables.h:4, from sketch\Configuration.h:792, from f:\Users\Carlos\Documents\Arduino\I3 ProW GT2560A+ with 3dtouch (1)\Marlin\Marlin.ino:33:sketch\pins.h:2956:0: warning: “X_MAX_PIN” redefined #define X_MAX_PIN -1 sketch\pins.h:1363:0: note: this is the location of the previous definition

#define X_MAX_PIN 24 sketch\pins.h:2957:0: warning: “Y_MAX_PIN” redefined

#define Y_MAX_PIN -1 sketch\pins.h:1369:0: note: this is the location of the previous definition

#define Y_MAX_PIN 28 In file included from sketch\Marlin.h:23:0,  from sketch\Marlin_main.cpp:30: sketch\pins.h:2956:0: warning: “X_MAX_PIN” redefined

#define X_MAX_PIN -1 sketch\pins.h:1363:0: note: this is the location of the previous definition

#define X_MAX_PIN 24 sketch\pins.h:2957:0: warning: “Y_MAX_PIN” redefined

#define Y_MAX_PIN -1 sketch\pins.h:1369:0: note: this is the location of the previous definition

#define Y_MAX_PIN 28 In file included from sketch\Marlin.h:23:0, from sketch\MarlinSerial.cpp:23:sketch\pins.h:2956:0: warning: “X_MAX_PIN” redefined

#define X_MAX_PIN -1 sketch\pins.h:1363:0: note: this is the location of the previous definition

#define X_MAX_PIN 24 sketch\pins.h:2957:0: warning: “Y_MAX_PIN” redefined

#define Y_MAX_PIN -1 sketch\pins.h:1369:0: note: this is the location of the previous definition

#define Y_MAX_PIN 28 In file included from sketch\Marlin.h:23:0, from sketch\Sd2Card.cpp:20:

sketch\pins.h:2956:0: warning: “X_MAX_PIN” redefined

#define X_MAX_PIN -1 sketch\pins.h:1363:0: note: this is the location of the previous definition

#define X_MAX_PIN 24 sketch\pins.h:2957:0: warning: “Y_MAX_PIN” redefined

#define Y_MAX_PIN -1 sketch\pins.h:1369:0: note: this is the location of the previous definition

#define Y_MAX_PIN 28 sketch\Marlin_main.cpp:2667:36: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix] LCD_MESSAGEPGM(MACHINE_NAME” “MSG_OFF”.”); ^In file included from sketch\Marlin.h:23:0,  from sketch\SdBaseFile.cpp:21:sketch\pins.h:2956:0: warning: “X_MAX_PIN” redefined

#define X_MAX_PIN -1 sketch\pins.h:1363:0: note: this is the location of the previous definition

#define X_MAX_PIN 24 sketch\pins.h:2957:0: warning: “Y_MAX_PIN” redefined

#define Y_MAX_PIN -1 sketch\pins.h:1369:0: note: this is the location of the previous definition

#define Y_MAX_PIN 28 In file included from sketch\SdFile.h:27:0, from sketch\cardreader.h:8, from sketch\Marlin_main.cpp:44:SdBaseFile.h:38:8: error: using typedef-name ‘fpos_t’ after ‘struct’ struct fpos_t { ^~~~~~  In file included from sketch\Marlin.h:10:0,  from sketch\Marlin_main.cpp:30:c:\program files (x86)\arduino\hardware\tools\avr\avr\include\stdio.h:950:33: note: ‘fpos_t’ has a previous declaration here extension typedef long long fpos_t; ^~~~~~ sketch\Marlin_main.cpp: In function ‘void set_bed_level_equation_lsq(double*)’:

sketch\Marlin_main.cpp:998:36: warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]  planeNormal.debug(“planeNormal”); ^

In file included from sketch\SdBaseFile.cpp:24:0:SdBaseFile.h:38:8: error: using typedef-name ‘fpos_t’ after ‘struct’ struct fpos_t {  ^~~~~~

In file included from sketch\Marlin.h:10:0,  from sketch\SdBaseFile.cpp:21:c:\program files (x86)\arduino\hardware\tools\avr\avr\include\stdio.h:950:33: note: ‘fpos_t’ has a previous declaration here extension typedef long long fpos_t; ^~~~~~

sketch\SdBaseFile.cpp: In member function ‘void SdBaseFile::getpos(fpos_t*)’:SdBaseFile.cpp:298:8: error: request for member ‘position’ in ‘* pos’, which is of non-class type ‘fpos_t {aka long long int}’ pos->position = curPosition_; ^~~~~~~~

SdBaseFile.cpp:299:8: error: request for member ‘cluster’ in ‘* pos’, which is of non-class type ‘fpos_t {aka long long int}’ pos->cluster = curCluster_; ^~~~~~~

sketch\SdBaseFile.cpp: In member function ‘void SdBaseFile::setpos(fpos_t*)‘:

SdBaseFile.cpp:1496:23: error: request for member ‘position’ in ‘* pos’, which is of non-class type ‘fpos_t {aka long long int}’  curPosition_ = pos->position; ^~~~~~~~

SdBaseFile.cpp:1497:22: error: request for member ‘cluster’ in ‘* pos’, which is of non-class type ‘fpos_t {aka long long int}’ curCluster_ = pos->cluster; ^~~~~~~

In file included from sketch\Marlin.h:23:0, from sketch\SdFatUtil.cpp:20:

sketch\pins.h:2956:0: warning: “X_MAX_PIN” redefined

#define X_MAX_PIN -1 sketch\pins.h:1363:0: note: this is the location of the previous definition

#define X_MAX_PIN 24 sketch\pins.h:2957:0: warning: “Y_MAX_PIN” redefined

#define Y_MAX_PIN -1 sketch\pins.h:1369:0: note: this is the location of the previous definition

#define Y_MAX_PIN 28 Se encontraron varias bibliotecas para “LiquidCrystal.h”


Usado: C:\Program
exit status 1
using typedef-name ‘fpos_t’ after ‘struct’

Este informe podría contener más información con “Mostrar salida detallada durante la compilación” opción habilitada en Archivo -> Preferencias.

Bueno   , este error nos impide  actualizar el firmarware Marlin de nuestra impresora, pero  en las siguientes líneas veremos que lograr que compile el sw Marlin para nuestra impresora en particular puede ser un juego de niños

 

 

Tip1 : todo lo que necesita hacer es cambiar   todas las ocurrencias fpos_t a filepos_t

 

Para solucionar el problema  de  compilación, anterior sólo tiene que abrir ide Arduino con el firmware y hacer una búsqueda global y reemplazar.

Esto se hace haciendo Ctrl-F y selecciona la casilla de búsqueda de todas las pestañas. A continuación, buscar y reemplazar  fpos_t  por  filepos_t. Volver a compilar y estará todo listo. 

Se trata de un cambio en las nuevas versiones del software de Arduino IDE que está haciendo esto. Las versiones más recientes del firmware del Marlin tienen que la estructura  filepos_t   se llama así ,lo  que  no tendrá ningún efecto negativo en el firmware

sí que la raíz del problema con las nuevas versiones de Arduino es que ya definen un objeto denominado fpos_t en uno de los archivos globales instaladas con Arduino llamado stdio.h. Destacar en el el fichero stdio.h  ha sido un problema con muchos usuarios en línea de cambiar al nuevo Arduino y la compilación de los firmwares más antiguas basadas Marlin. Es por ello que las nuevas versiones de Marlin han pasado a utilizar filepos_t para el nombre de estructura en su lugar. Si se realiza  ese cambio a sus versiones de firmware publicadas, a continuación nadie más tendría los problemas que tenía con cargar el firmware original pero bueno sabiéndolo podemos poner el remedio.  

 

 

 

Tip 2

Si la solución  anterior  no le fue suficiente   alguien informó recientemente el mismo problema con Marlin y así  ha  solucionado el  problema

  • Herramientas > Tablero > Administrador de placas… > Arduino AVR Boards(haga clic en él) > seleccione 1.6.11 en el menú “Seleccionar versión” > Instalar
  • Una vez completada la instalación, haga clic en el botón “Cerrar”



El problema es causado por la nueva versión del compilador incluida con Arduino AVR Boards 1.6.12 y más tarde, es más exigente con el código malo que alguien escribió. Tendrá sin necesidad de actualizar a cualquier versión de Arduino AVR Boards por encima de 1.6.11 hasta que alguien solucione el problema en el código Marlin.
¿Está utilizando la última versión del firmware real de Marlin o es alguna versión anterior o una versión modificada no  estándar?

Cámara trasera inteligente con Raspberry Pi. Parte 1


El término “Coche inteligente” puede tener miles de significados diferentes dependiendo a quién le preguntemos., así que empecemos con una definición   modesta  de algunos componentes que podemos añadir :

  • Información básica sobre el coche, como la marcha engranada, eficiencia de combustible, horas de conducción ,etc.
  • Ayudas a la conducción de tipo ADAS , siendo   los mas comunes la puesta en marcha del  coche delantero, acceso involuntario a línea de separación de carril o aviso de colisión por vehículo delantero que circula  muy próximo
  • Cámara trasera inteligente que avise si un objeto está demasiado cercano
  • etc

Del primer punto lo hemos comentado en diferentes post , explicando que para automóviles de unos 10 años, es decir que cuentan con interfaz ODB2,  es relativamente simple añadir un HUD con toda esta información  con  un HUD conectado por ODB2

Resumidamente los sistemas ADAS  de ayuda  a  la conducción  mas usuales son las siguientes:

  • FCWS   del ingles  Forward Colission Warning Sytem (advertencia de colisión delantera) ayuda al conductor a mantenerse a una distancia segura del vehículo delantero y alerta a los conductores de una colisión inminente con advertencias visuales y audibles.Este sistema permite al dispositivo detectar cuando no se mantiene una distancia segura entre su vehículo y el vehículo delante de usted. El dispositivo determinará la velocidad de su vehículo calculando una distancia estimada de siguiente segura basada en su velocidad.Normalmente para que esta  función pueda estar habilitada se  debe estar  viajando a más de 48KM/H ( a una velocidad de menos de 32 KM/H, se suele  desactivar la función). Precisamente por esta limitacion el FCWS no puede detectar los vehículos que están  alejados más de 40m  o más cerca de 5m.

fcw.png

  • LDWS  del inglés Lane Departure Warning  System  ( SISTEMA DE  ADVERTENCIA DE SALIDA DE CARRIL) monitorea las marcas del carril y avisa al conductor con advertencias visuales y audibles cuando ocurre una salida involuntaria del carril sin la notificación de la señal de giro.Es un mecanismo diseñado para advertir al conductor cuando el vehículo empieza a moverse fuera de su carril (salvo que una señal de la vuelta en esa dirección) en las autopistas y carreteras de la zona. Este sistema está diseñado para minimizar los accidentes por abordar las principales causas de colisiones: error del conductor , distracción y somnolencia.

ldw

  • HMW( VIGILANCIA Y ADVERTENCIA DEL AVANCE DE PISTA)- Mide la distancia al vehículo que está por delante (“headway”) en segundos. Ayuda al conductor a mantener una distancia segura de conducción. Alerta al conductor al entrar en una zona predefinida de “avance peligroso”

.hmw.png

  • FVSA (ALARMA DE INICIO DEL VEHÍCULO DELANTERO ) Notifica al conductor si el vehículo delantero comienza a avanzar en el estado parado completo y el coche del conductor no se mueve en 2 segundos.

fvsa

Casi todas estas ayudas ADAS  están implementadas  en  numerosas cámaras  disponibles en el mercado como vismo en este post destacando por voz propia  el modelo Dash de Garmin

Respecto al ultimo punto de cámaras traseras  , hay muchos kits para  añadir una cámara  trasera a  nuestro vehículos usando una conexión analógica de video compuesto , lo cual se traduce en  que la mayoría de ellas requieren hacer modificaciones al coche  ,por  ejemplo para ubicar la cámara en el porta-matriculas  , o fijar la pantalla especifica   de modo que no siempre en sencilla su instalación .Además las cámaras traseras comentadas requieren una  fuente de alimentación externa alimentándose con los  cables de las luces de atrás de su coche para que automáticamente se enciendan cuando el coche está en marcha lo cual tampoco le  gusta a muchas personas .

Dado que el mercado no ofrece por  el momento soluciones mas avanzadas una idea es usar la Raspberry Pi pues es la plataforma perfecta  porque básicamente es un mini ordenador con un montón de entradas y salidas.

Al conectar una cámara a la Pi, se puede utilizar prácticamente cualquier webcam USB genérica, o  por supuesto  mejor puede usar una  Cámara Pi conectada al conector DSI pues estas ofrecen una mayor calidad , versatilidad y  no  requiere una fuente de alimentación separada (pero asegúrese de tener un montón de cable para ir a la parte posterior del coche)

Solución con Raspberry Pi

Gracias a una Raspberry Pi  por medio del procesamiento de imágenes en efecto  podemos  hacer más inteligente nuestro vehículo y añadir  nuevas funcionalidades

Para esta idea  podemos  usar  los siguientes componentes:

 

Conexión del módulo de cámara

El modulo de cámara de Pi  tiene un mayor rendimiento que una cámara USB  por lo que lo ideal es usar una cámara del tipo compatibles con Raspberry Pi  (se puede comprar por unos 15€ en Amazon) 

No es  problema  la distancia pues con un cable plano  de 200 cm suele ser suficiente para llevar la cámara  hasta la  posición de conducción (puede comprarlo   aqui en Amazon por unos 7,29€ )

Se puede pues llevar el cable plano al l frente del coche y luego conectado a una pantalla de táctil de 7″ de modo que  la Pi y la pantalla táctil pueden ser alimentados por el adaptador USB en el coche.

Estos  son los pasos para instalar la cámara especifica para su uso , con la Raspberry Pi 

    • Localice el puerto de la cámara y conecte la cámara:Connect the camera
    • Poner en marcha la Raspberry Pi 
    • Abra la Herramienta de configuración de frambuesa Pi desde el menú principal:Raspberry Pi Configuration Tool
    • Asegúrese de que está activado el software de la cámara:Camera software enabled
    • Si no está activado, habilítelo y reinicie su Pi para comenzar. Asimismo si va utilizar una pantalla táctil también necesitara activar I2C  y SPI

Es decir resumidamente;  con la Raspberry Pi apagada, debe conectar el módulo de la cámara al puerto de la cámara de la Raspberry Pi,ahora encienda el Pi  y asegúrese de que se activa el software.

Conexión de un pantalla táctil(opcional)

Existen pantallas TFT para Raspberry Pi con  resolución de 320×240 (16-bits) que además son táctiles con una pantalla resistiva. Se entregan montadas y suelen ser  compatible con los modelos Raspberry Pi Model A+, B+ y Pi 2  disponiendo  además de de un conector de 40 pines para los GPIO.

La pantalla y el digitalizador   utilizan los pines I2C (SDA y SCL), SPI (SCK, MOSI, MISO, CE0) y los pines GPIO #24 y #25. Todos los demás pines GPIO no se utilizan así que podrá conectar más cosas como sensores, LEDs etc. Algunos modelos disponen deposiciones para pulsadores miniatura (no incluidos) por si quiere hacer algún otro tipo de interfaz de usuario.

Puede utilizarla utilizar la librería PyGame u otra librería SDL para dibujar directamente en el frame buffer y hacer interfaces propios.

Tenga en cuenta que para que funcione debe tener activado el I2C en tu Pi o se quedará en blanco. Si utiliza la imagen de Adafruit funcionará sin problema, sino puedes ver su tutorial para ver cómo hacerla funcionar.

La conexión de este tipo de pantallas suele ser por el  propio conector de 25 pines  y por hdmi con un adaptador

Respecto al sw, estos son los pasos  que puede  seguir;

!Ojo el conector plano de la pantalla pues es MUY frágil y debe manejarse con cuidado.!

Montaje final

Una vez montada  la pantalla y la cámara , encender el coche, la Pi y la pantalla . Para ver la camara   de la Pi, abra el terminal y ejecute simplemente  el  siguiente  script:

raspivid -t 0

o

raspivid -t 0 --mode 7

Después de entrar esto ,   la imagen captada por la cámara debería aparecer  en pantalla  completa , pero  !ojo !  no lo veremos  si estamos conectado via VNC!, es decir ,solo si estamos conectados a la propia  Raspberry Pi .

Lo bueno de a Raspberry Pi  es que se puede mejorar  esta forma básica , y tal vez incluso establecer un sistema de alerta si un objeto esta   demasiado cerca , así que, ! vamos a trabajar en ese lado!

 

DETECCIÓN DE OBJETOS

Cuando se trata de aplicaciones de  cámaras de seguridad comerciales, generalmente hay al menos dos versiones  .La primera utiliza una superposición de una imagen estática con gamas de color para que visualmente puede determinarse cuánto de  cerca está un objeto. El segundo método utilizara una cámara junto con sw  que puede detectar un objeto qué tan cerca esta al coche y luego avisa cuando algo está demasiado cerca
Veamos en este post en primer lugar le método de overlay, el cual por cierto es el mas usado en los implementaciones de cámaras traseras de coches actuales.

 

 

A %d blogueros les gusta esto: