¿Qué tipo de programación se usa en los sensores?

De hecho, los sensores son transductores capaces de transformar cantidades físicas o químicas en alguna forma de señal eléctrica que de alguna manera puede ser medida por una CPU.

Por ejemplo, un sensor de luz normalmente es un dispositivo de detección de luz, por ejemplo, un fotodiodo, que genera una señal de voltaje que puede leerse desde un microprocesador utilizando alguna forma de convertidor analógico a digital. (ANUNCIO).

Otro ejemplo son los sensores de temperatura que, por ejemplo, en el tipo PT100, transforman el cambio de temperatura en un cambio de resistencia eléctrica que se puede medir usando un puente que termina en una señal de voltaje, como antes.

Un ejemplo más son los tubos Geiger que miden la radiación ionizante. En este caso, la medición se realiza contando los pulsos, por lo que el sensor genera directamente una señal digital que, hasta cierto punto, se puede contar utilizando un contador de hardware o software.


Como puede ver, la interfaz del sensor con los microprocesadores es un tema amplio, pero supongo que puede ver los siguientes problemas relacionados con la programación

  1. Detección de bajo nivel de la señal sin procesar
  2. Calibración para escalar la señal bruta medida en alguna medida significativa física
  3. Postprocesamiento, para encontrar señales significativas fuera del ruido o de algunas señales interferentes. Esto es típico cuando se deben medir algunas señales oscilantes. Las frecuencias no relacionadas con la cantidad a medir deben filtrarse con algún tipo de algoritmo de filtrado.

El punto 1 se implementa con técnicas de programación integradas : un programa de bajo nivel, típicamente escrito en C o ensamblado, lee la señal sin formato utilizando alguna interfaz de bajo nivel para el hardware disponible, por ejemplo, el convertidor A / D. Normalmente, la conversión debe realizarse utilizando algunos bits en los registros del convertidor y el resultado debe leerse en algunos otros registros utilizados por el convertidor, pero podrían aplicarse otras técnicas: si se utiliza un convertidor externo que utiliza algún protocolo en serie como I2C o SPI , entonces el protocolo debe ser implementado o dirigido.

El punto 2 se implementa con técnicas generales de programación matemática. En el ejemplo de los sensores de temperatura, si la precisión requerida es alta, entonces se debe implementar un procedimiento de calibración: cada año, por ejemplo, el voltaje bruto del sensor debe medirse cuando el sensor mismo está expuesto a la temperatura conocida, por ejemplo derretir hielo. Luego, usando algoritmos matemáticos, los datos brutos medidos se escalan o calibran linealmente usando algoritmos no lineales usando las mediciones almacenadas durante la fase de calibración.

El punto 3 se implementa con técnicas de programación DSP (procesamiento de señal digital), que requieren conocimientos de matemáticas más altas y algoritmos bien conocidos como FFT (Fast Furier Transfor), filtros FIR (respuesta de impulso finito) y docenas de algoritmos similares.


Este es un análisis muy introductorio y con frecuencia partes de las técnicas descritas ya están integradas en sensores inteligentes. Por ejemplo, muchos sensores de presión se venden calibrados y la señal que generan ya está en unidades físicas. Lo mismo sucede con algunos sensores de humedad.

Los sensores de pH y otros sensores químicos son normalmente para investigación o aplicaciones de laboratorio y requieren calibración.


La interfaz del sensor es un vasto dominio de aplicación y las técnicas de programación requeridas abarcan desde el procesamiento integrado de bajo nivel hasta el procesamiento de señales digitales y los algoritmos matemáticos, incluso la GUI, ya que la mayoría de estos procesos (calibración, por ejemplo) deben ser realizados por humanos y esto puede ser un problema proceso, simplificado por la GUI adecuada.

Los sensores, o más generalmente, los transductores (incluidos los dispositivos de ‘salida’), generalmente tienen algún tipo de interfaz analógica, interfaz de comunicaciones u otra interfaz digital. El dispositivo informático accede a estas interfaces mediante el acceso directo a registros o mediante el acceso a chips periféricos. En cualquier caso, el software lee y escribe registros en los periféricos de acuerdo con el tipo de chip periférico y / o transductor. Se accede a ellos como si fueran direcciones de memoria específicas (de hecho, en su mayoría, lo son). Comprender los detalles de cómo acceder a estos registros es el conjunto de habilidades básicas del programador del sistema integrado. Los factores que entran en juego son cosas como la sincronización de los accesos, el uso del acceso directamente programado frente al acceso impulsado por interrupción y la interacción potencial con otras partes del sistema. Los tipos de aprendizaje que tendrá que hacer incluirán la interpretación de hojas de datos de componentes, lógica booleana y digital, codificación de bajo nivel, que a veces incluye una comprensión exacta de los ciclos del bus de la CPU, el tiempo de instrucción y algunos conocimientos de ensamblador / conjunto de instrucciones. Aprender algo de electrónica es un activo definitivo, si no un requisito absoluto. Tener acceso a algunas herramientas básicas de prueba y medición y saber cómo usarlas también es un activo importante y una habilidad útil.

Recomiendo un Arduino. Conecta los sensores a los pines GPIO y escribe software para leer el valor de los sensores. En realidad es muy simple. Arduino usa C y tiene API que resumen todas las partes difíciles.

Si no te sientes cómodo con C y prefieres usar Python o NodeJS, te recomendaría un RaspberryPi. Puede hacer lo mismo. Sin embargo, Python en un RPi apenas está incrustado, pero es un lugar útil para comenzar si eres nuevo en esto.

La programación integrada (en términos de programación real) no es muy diferente a la programación para el escritorio. A diferencia de las máquinas de escritorio, está limitado por los recursos.

Escribo un controlador MIDI USB en un Teensy (en C). No tuve problemas y todavía tenía el 98% del espacio disponible. Esta fue una de las imágenes anteriores cuando estaba en desarrollo (planifique comenzar pronto):

Después de eso, puede ingresar a la electrónica y aprender a programar un PIC o algo similar. Esa es una programación real incorporada donde las limitaciones de recursos no son cosa de risa.

Los sensores realmente no tienen un tipo de programación por decir. Los sensores vienen con una hoja de datos y un conjunto de comandos que puede “enviar” para hablar con ellos. Por ejemplo: “Comando enviado 0x08” para leer desde un acelerómetro. El sensor devolverá “0x0A + acc datos”.

La CPU que interactúa y, por lo tanto, “habla” y “ordena” al sensor es la que usted programa. Puede ser cualquier cosa en estos días, desde un chip Raspberry Pi Broadcom hasta un ARM Cortex M4. Incluso podría ser su CPU Intel como en las placas Edison o Curie.

Estas CPU suelen hablar de ensamblaje y C como los idiomas inferiores (lenguajes integrados).

Sin embargo, si las CPU son lo suficientemente potentes, puede usar lenguajes de nivel superior como Java, C ++, JS, etc.

Trabajo mucho con MetaSensors de MbientLab. Estos son sensores diminutos realmente baratos con un Arm Cortex M0 o M4 en ellos. Puede programarlos usted mismo en C o puede comprarlos preprogramados. Si los compra preprogramados, es muy fácil porque puede obtener datos del sensor en unos segundos utilizando las aplicaciones gratuitas y el código de ejemplo, así como sus API en 6 idiomas diferentes (Python, Node, Swift, objC, C ++, C # y Java).

Entonces, la respuesta corta es: ¡Puedes hablar cualquier idioma para interactuar con un sensor en estos días!

Por lo general, los sensores funcionan con un rango de corriente de funcionamiento muy bajo de aproximadamente 4 a 20 ma. Los sensores que pueden proporcionarle una respuesta lineal en ese rango son buenos. ¡La linealidad es un criterio o característica imprescindible! Ahora puede crear una tabla de búsqueda que represente esos valores útiles de cualquier parámetro que se detecte.

En lo que respecta al lenguaje de programación, puede usar cualquier lenguaje con el que se sienta cómodo y competente … Lo importante en mi opinión es el dominio del idioma, que a su vez puede traducirse en una implementación efectiva y eficiente. Eficiente en todos los aspectos de la utilización, como los comandos de número ejecutable, la cantidad de memoria que utilizará el programa que no solo acelerará su ejecución sino que también ocupará menos espacio de memoria o espacio, especialmente si desea que se incruste.

La mayoría de los dispositivos de hardware (sin importar si se trata de un IC o sensor) se codificarán principalmente en C. Con los sensores, también tiene muchos componentes analógicos y necesita probar y perfilar el dispositivo. Esto requiere que se procesen muchos puntos de datos utilizando cosas como Matlab, Python y luego graficando estos resultados para encontrar anomalías / conclusiones / etc.

Básicamente, hará mucho código de bajo nivel en el dispositivo real, pero también código de alto nivel para comprender los datos que genera.

A2A

Admito que no entiendo la parte “qué tipo de programación”.

Por supuesto, tendrá que hacer una programación incrustada, principalmente con C, para un hardware que usa diferentes sensores. Lo que significa que necesitará algo de hardware cerca de la programación con quizás conjuntos de instrucciones reducidos, etc.

Parece que recién estás comenzando. Busque algunos microprocesadores y algunos sensores y comience a hacer cosas. Si obtienes un Arduino de arranque, sería genial. Utiliza C ++ para toda su programación, pero también puede agregar ensamblado. Incluso hay formas de usar Python y Java, creo.