SISTEMA DE NAVEGACIÓN AUTÓNOMA
MEDIANTE VISIÓN ARTIFICIAL
AUTONOMOUS NAVIGATION SYSTEM
USING ARTIFICIAL VISION
Osvaldo Lira Díaz
Tecnológico Nacional de México, México
Ramón Mejía Rivera
Tecnológico Nacional de México, México
Cristian Axel Barrientos Villanueva
Tecnológico Nacional de México, México
pág. 875
DOI: https://doi.org/10.37811/cl_rcm.v8i3.11293
Sistema de Navegación Autónoma Mediante Visión Artificial
Osvaldo Lira Díaz1
osvaldo.lira@lcardenas.tecnm.mx
https://orcid.org/0009-0000-2322-403X
Tecnológico Nacional de México
Instituto Tecnológico de Lázaro Cárdenas
México
Ramón Mejía Rivera
ramon.mejia@lcardenas.tecnm.mx
https://orcid.org/0009-0007-5738-0816
Tecnológico Nacional de México
Instituto Tecnológico de Lázaro Cárdenas
México
Cristian Axel Barrientos Villanueva
cristianaxelbarrientos@lcardenas.tecnm.mx
https://orcid.org/0009-0006-1890-6806
Tecnológico Nacional de México
Instituto Tecnológico de Lázaro Cárdenas
México
RESUMEN
Se propone un sistema de detección de obstáculos para vehículos de superficie no tripulados, orientado
a la detección de obstáculos en tiempo real, mediante el uso de métodos de visión monocular y estéreo,
así como la recopilación de información adicional con la ayuda de sensores externos incluidos en el
sistema carrocería del vehículo. Para la segmentación de imágenes se utilizará una tarjeta Raspberry Pi
en la que se implementarán los algoritmos de enrutamiento pertinentes y la información obtenida se
registrará en bases de datos con ayuda de la tecnología IoT.
Palabras clave: raspberry pi, navegación autónoma, visión artificial
1
Autor principal.
Correspondencia: osvaldo.lira@lcardenas.tecnm.mx
pág. 876
Autonomous Navigation System Using Artificial Vision
ABSTRACT
An obstacle detection system for unmanned surface vehicles is proposed, oriented towards the detection
of obstacles in real time, through the use of monocular and stereo vision methods, as well as the
collection of additional information with the help of external sensors included in the system. vehicle
body. For image segmentation, a Raspberry Pi card will be used in which the relevant routing algorithms
will be implemented and the information obtained will be recorded in databases with the help of IoT
technology.
Keywords: raspberry pi, autonomous navigation, computer vision
Artículo recibido 10 abril 2024
Aceptado para publicación: 05 mayo 2024
pág. 877
INTRODUCCIÓN
Durante la última década la evolución de los robots móviles se ha visto impulsada por el trabajo de
personas que van desde investigadores independientes hasta grandes corporativos de renombre como
Google, Tesla, General Motors, entre otros. Acercándose cada vez más a la perfección de estos sistemas,
los vehículos autónomos se convierten en otra generación de máquinas que cuentan con un mejor
desempeño que el de cualquier persona ya que tienen menores tendencias a fallar y no cuentan con las
necesidades humanas (Barrientos, et al, 2007).
Debido a ello, la robótica ha sufrido una profunda transformación, muchos investigadores en robótica
que comenzaron sus trabajos en manipuladores industriales han emigrado hacia la investigación de más
avanzados sistemas robóticos, particularmente hacia los robots móviles, los que generalmente son
destinados a trabajar fuera de las áreas de manufactura (Serrano A., 1996).
La elaboración de semejantes sistemas inteligentes requiere de un trabajo preciso y que convoque la
ayuda de áreas como la mecánica, la electrónica y las ciencias computacionales. Con la ayuda de la
electrónica y en conjunto con programación computacional, pueden ser abordados problemas a partir
de la adquisición de datos del entorno donde se encuentre trabajando el sistema, por medio de lecturas
como sensores y visión robótica (Carrillo, 2019).
En este artículo se propone un sistema de navegación autónoma que adquiere información contextual
de manera continua mediante el uso de diferentes sensores, así como la implementación de visión
robótica para caracterizar su contexto y pueda determinar la ruta óptima para trasladarse de un punto a
otro.
METODOLOGÍA
Principales Objetivos del Proyecto
Desarrollar e implementar un sistema de navegación autónoma que adquiera información de su entorno
de manera continua mediante el uso de diferentes sensores, así como la implementación de visión
robótica para caracterizar su contexto y pueda determinar la ruta óptima para trasladarse de un punto a
otro.
pág. 878
Obtención de la imagen
La programación de la cámara Raspberry Pi permite realizar diferentes acciones, como tomar
fotografías, grabar videos y ajustarse a configuraciones específicas [Rasp.org].
Figura 1. Cámara Raspberry Pi 1.3V
Durante el procesamiento de imágenes, el programa implementa una técnica de segmentación para
analizar y detectar líneas en la imagen capturada, enfocándose en identificar el camino de manera
precisa y confiable. Este enfoque permite una detección efectiva de las líneas que delimitan el camino
y brinda información crucial para el sistema.
Al emplear algoritmos y métodos avanzados de segmentación, el programa maximiza la capacidad de
reconocer y seguir las líneas con precisión, asegurando una navegación segura y confiable en diversos
entornos y condiciones.
Sensor de gas
Se implementaron sensores para la detección de gases inflamables o nocivos para la salud. Se consideró
mantener estos sensores en una zona del vehículo que estuvieran expuestos al medio explorado. Con
esto evitando la retención o estancamiento de gases, permitiendo el flujo de aire con el fin de evitar
lecturas imprecisas.
A. Calibración de los Sensores de Gas
La calibración de los sensores de gas es un paso fundamental en el sistema de navegación autónoma,
ya que garantiza mediciones confiables de los gases presentes en el entorno del vehículo [Winsen,
2015].
pág. 879
Figura 2. Diagrama de sensores MQ2 y MQ135 en vista frontal
VCC
GND
D0
A0
VCC
GND
D0
A0
MQ-02 MQ-135
Estos sensores pasaron por un proceso de calibración, para esto fue necesario contar con un entorno de
referencia. Este entorno debe ser considerado adecuado para la operación del personal y garantizar
condiciones óptimas de salud y seguridad. Es decir, debe cumplir con ciertos requisitos de temperatura
y humedad para asegurar una calibración fiable [Hanwei. s. f.].
Convertidor ADC
El ADS1115 es un convertidor analógico a digital de alta resolución y bajo consumo de energía. Se
utiliza ampliamente en diversos proyectos para convertir señales analógicas en formato digital [Del
Valle,2019].
Este convertidor fue implementado para realizar la lectura de los valores análogos proporcionados por
los sensores de gas MQ2 y MQ135, de modo que mediante un fragmento de código es posible interpretar
estos valores por la raspberry y posteriormente efectuar las funciones matemáticas necesarias para la
interpretar los datos como una concentración de gas en ppm (partes por millón).
Figura 3. Convertidor ADC ADS1115
Vista inferior
Vista superior
A3
A2
A1
A0
ALRT
ADDR
SDA
SCL
GND
VDD
Servomotor FT6336M para la dirección
Se trata de un servomotor digital con un rango de voltaje de suministro de 6 V a 7.4 V. Tiene una
posición de parada de 1500 µs y puede girar en sentido contrario a las agujas del reloj en el rango de
1500 µs a 2000 µs. Su rango máximo de pulso es de 500 a 2500 µs, lo que permite un control de
pág. 880
dirección de a 360° [TechnoMart. org]. Este elemento adjunto al sistema de dirección permitirá
controlar la trayectoria del vehículo.
Figura 4. Servomotor FT6335M
La señal PWM es un tipo de señal utilizado para diversas tareas en la electrónica, principalmente
encontrada en circuitos de control. El PWM son las siglas en inglés “Pulse Width Modulation”.
Como se puede observar en la Figura 7 la señal en alto se presenta cuando la onda cuadrada tiene una
tensión de 5 V y por otro lado el tiempo en bajo se presentará cuando la señal del PWM tenga una
tensión de 0 V.
Figura 5. Señal de PWM a 50 Hz con ciclo de trabajo al 80%.
Dicho lo anterior el ciclo de trabajo corresponde al tiempo que dura en alto la señal de PWM, es decir,
de un periodo de 20 ms, la señal de PWM tiene un tiempo en alto de 16 ms lo que significa un ciclo de
trabajo del 80%, como se puede calcular en la formula siguiente.
 
 
En el caso del FETCH este muestra un comportamiento en base al ancho de pulso de 500 a 2500 µs,
esto es el rango en el que este servomotor realiza su posicionamiento. En cuestión del ciclo de trabajo
este rango de acción va desde el 2.5 % hasta 12.5 %, como se puede observar en las siguientes figuras:
pág. 881
Figura 6. Señal PWM con frecuencia de 50 Hz con ciclo de trabajo 2.5%.
Figura 7. Señal PWM con frecuencia de 50 Hz con ciclo de trabajo 12.5%
Motor brushless
En el contexto de este artículo, se ha incluido el motor brushless Queen Hobby como un componente
esencial para lograr la navegación autónoma en el vehículo RC. El Brushless Queen Hobby se destaca
por su diseño avanzado sin escobillas, que elimina el desgaste mecánico y ofrece una mayor eficiencia
energética en comparación con los motores tradicionales. Este tipo de motor ha demostrado ser
altamente eficiente y confiable en diversas aplicaciones de modelismo y robótica [Granada, 2023].
PWM de control para motor brushless
Por otro lado, tenemos las señales PWM que serán las encargadas de hacer que el servomotor Brushless
gire en sentido horario o antihorario, dicho de otra forma, hacia adelante o en reversa.
La señal necesaria para controlar este servomotor, que es el encargado de la tracción del vehículo, es
de un ciclo de trabajo del 5% al 10% de una señal de 50 Hz. En las siguientes figuras se podrá observar
el tamaño del ancho del pulso de la señal PWM requerida para alcanzar ambos estados.
pág. 882
Figura 8. Señal PWM con frecuencia de 50 Hz con ciclo de trabajo 5%.
Figura 9. Señal PWM con frecuencia de 50 Hz con ciclo de trabajo 10%.
Cabe recordar que este servomotor puede girar tanto en sentido horario y antihorario. Pero a diferencia
del servomotor FETCH, este tiene un punto neutral o un punto estático. Este punto medio está presente
el 7.5% del ciclo de trabajo, el cual equivaldría a un periodo de 1.5 ms. Mientras el servomotor reciba
esa señal de PWM, este no se moverá.
Figura 10. Señal PWM con frecuencia de 50 Hz con ciclo de trabajo 7.5%.
Uso de la comunicación SPI en Raspberry Pi
La comunicación SPI (Serial Peripheral Interface) o Interfaz Periférica en Serie si lo traducimos al
español, es un protocolo de comunicación que se utiliza para transferir datos entre microcomputadoras
como la Raspberry Pi y otros dispositivos periféricos como sensores o actuadores.
pág. 883
En la Figura 10 se muestra un ejemplo sobre la comunicación SPI entre 2 microcontroladores.
Se observa cómo se toman los datos del bus durante los flancos ascendentes de la señal de reloj:
Figura 11. Señales modelo del protocolo SPI.
La Raspberry Pi cuenta con tres interfaces maestro SPI: SPI0, SPI1 y SPI2. De ellas SPI0 es más
evolucionada, puesto que permite DMA (Direct Acces to Memory) o acceso directo a memoria en
español. Además, la interfaz SPI0 está diseñada para transferencias de alta velocidad (usando un reloj
de hasta 125Mhz) sin producir una carga significativa para el procesador [Rasp.org].
Módulo de Radiofrecuencia NRF24L01
El módulo NRF24L01 es un dispositivo de radiofrecuencia de bajo consumo de energía y corto alcance.
Opera con el protocolo SPI y permite la comunicación inalámbrica entre dispositivos a través de la
tecnología de modulación de desplazamiento de frecuencia (FSK) o modulación de amplitud de pulso
(PAM) [Naylampmechatronics, 2016].
La disposición de los pines en el módulo NRF24L01 se puede observar en la figura siguiente:
Figura 12. Módulo de RadioFrecuencia NRF24L01.
Modulo de Radio
frecuencia
NRF24L01
MISO
SCK
CE
GND
IRQ
MOSI
CSN
3.3 V
El modúlo NRF24L01 utilizado cuenta además con una antena que aumenta su radio de transmisión
efectivo.
pág. 884
Transmisión de datos con NRF24L01 y Raspberry Pi
Antes de enviar datos, se deben configurar los parámetros de comunicación en ambos módulos. Esto
incluye la dirección de red, el canal de frecuencia utilizado y la velocidad de transmisión de datos
(250Kbps en este caso).
Para enviar datos desde el módulo transmisor, se deben cargar los datos en un búfer interno y luego
transmitirlos. Se pueden enviar paquetes de datos de hasta 32 bytes de longitud. Después de recibir un
paquete de datos, el módulo receptor puede enviar una confirmación de recepción al transmisor. Esto
garantiza una comunicación confiable entre los dispositivos y permite la retransmisión de datos en caso
de errores [Naylampmechatronics, 2016].
Figura 13. Raspberry Pi 4 Modelo B.
Cabe mencionar que se puede desactivar la señal de reloj brevemente después de enviar un dato, esto
se realiza considerando el tiempo que le tomará al esclavo retornar información y optimizando así el
consumo de energía. De igual forma, se puede realizar una transmisión de datos del esclavo hacia al
maestro y del maestro hacia el esclavo de manera continua si el proceso así lo requiriera.
Sensor de Proximidad Ultrasónico HC-SR04
Un sensor ultrasónico HC-SR04 es un transductor que mide la distancia del propio sensor hacia un
objeto por medio del rebote de una onda sonora ultrasónica. Posee dos transductores: un emisor y un
receptor piezoeléctricos, además de la electrónica necesaria para su operación.
Para el desarrollo de este artículo, se utilizan 2 sensores ultrasónicos, puesto que el vehículo requiere
conocer si se encuentra un objeto que dificulte su movimiento al menos en el frente y en la retaguardia
de este, dicha conexión requiere del uso de un divisor de voltaje con resistores, pues los niveles lógicos
que maneja este sensor son de 5V, mientras que los niveles lógicos que soporta la Raspberry son 3.3V.
pág. 885
Dicha conexión se muestra en la siguiente figura:
Figura 14. Diagrama de conexión del sensor ultrasónico HC-SR04.
El sensor HC-SR04 genera un pulso en el pin marcado como “echo” cuya duración es proporcional a la
distancia medida por el sensor. Para obtener la distancia en centímetros se debe aplicar la siguiente
fórmula:
Ec.
(3.8.1)
Donde:
D: Distancia en cm del objeto hacia el sensor ultrasónico
TECO: Tiempo transcurrido entre el pulso de Trigger y el retorno de la señal ultrasónica al sensor
Vaire: Velocidad del sonido a través del aire (Valor constante de 340 m⁄s)
El funcionamiento del sensor no se ve afectado por la luz solar o material de color negro (aunque los
materiales blandos acústicamente como tela o lana pueden llegar a ser difíciles de detectar).
Comunicaciones I2C
I2C es un bus de comunicaciones entre circuitos integrados desarrollado por Phillips Semiconductors
(ahora NXP Semiconductors). Se trata de un bus muy sencillo con solo dos hilos, una línea de datos
(SDA) y una línea de reloj (SCL). Se pueden realizar transmisiones serie bidireccionales de hasta 100
kbit/s en modo estándar y 400 kbit/s en modo rápido. Las versiones más modernas de I2C incorporan
modos con mayores tasas de transferencia (hasta 5Mbit/s) pero el procesador de la Raspberry Pi no los
implementa [Rasp.org]..
pág. 886
La Raspberry Pi dispone de dos periféricos para implementar el protocolo I2C, el BSI (Broadcom Serial
Interface) que implementa el modo esclavo y el BSC (Broadcom Serial Controller) que implementa el
modo maestro [Rasp.org].
El BSC implementa tres maestros independientes que tienen que estar en buses I2C separados (no
permite multimaestro). Sin embargo, BSC0 se reserva para la identificación de las placas de expansión
especificación HAT, pines 27 y 28) y BSC2 es de uso exclusivo para la interfaz HDMI. Usaremos por
tanto habitualmente BSC1, mediante los pines 3 y 5 del conector J8 [Rasp.org].
La interfaz de programación es, como en todos los periféricos de la Raspberry Pi, un conjunto de
registros mapeados en memoria. Sin embargo, en este caso se dispone de un driver del kernel del sistema
operativo que nos simplifica significativamente el trabajo [Rasp.org].
Sensor MPU6050
El MPU6050 es un sensor de movimiento, que tiene un conversor ADC de 16 bits que convierte los
datos a un valor digital, el módulo de giroscopio se comunica con la Raspberry Pi a través de la
comunicación serie I2C a mediante el reloj serial (SCL) y el canal de datos (SDA) [hetpro, 2014].
Cuenta con un procesador interno que es capaz de realizar cálculos precisos de los valores que miden
sus sensores internos como aceleraciones lineales y angulares, para informarnos de valores útiles como
los ángulos de inclinación con respecto a los 3 ejes principales, siendo así que ni la aceleración ni la
velocidad lineal afectan la medición de giro [hetpro, 2014].
Al manejar este dispositivo es importante considerar la posición del sensor, ya que la dirección en que
se mueva o rote será censada respecto a la referencia mostrada a continuación:
Figura 15. Ejes de referencia para el sensor MPU6050.
pág. 887
Programación de la Raspberry
Para la programación de la Raspberry se recurrió al cómputo virtual por medio de internet. El software
VNC (Virtual Network Computing), nos brinda esta importante herramienta, ya que con ella podemos
manipular la Raspberry mediante conexión wi-fi [REALVNC.org].
Figura 16. VNC (Virtual Network Computing).
Cabe mencionar que este software es libre por lo cual está a la disposición de cualquier usuario y además
es compatible con varios sistemas operativos, siendo estos Pi OS, Windows, Linux, Android, entre otros
[REALVNC.org].
RESULTADOS Y DISCUSIÓN
Durante las pruebas de campo, se detectó que el diseño original de los paragolpes delantero y trasero
presentaba fragilidad. Para abordar este problema, se realizaron ajustes y refuerzos en el diseño de los
paragolpes con el objetivo de mejorar su resistencia y durabilidad.
Se identificaron las áreas más vulnerables y se implementaron refuerzos internos y externos según las
necesidades específicas de cada paragolpes. Además, se evaluaron diferentes materiales y técnicas de
fabricación para asegurar la integridad de los paragolpes. Se optó por utilizar ABS con una construcción
concéntrica en estructura de panal, lo cual ofrece mayor resistencia a los impactos.
Figura 17. Diseño final del vehículo.
La base final del vehículo y su parachoques, permiten al mismo vehículo soportar grandes impactos a
una velocidad estimada de 15 Km/h. De la misma manera, la Raspberry también se encuentra bien sujeta
pág. 888
al chasis del auto, al igual todas las conexiones que se manejaron para los diferentes módulos. En la
figura 18, se puede apreciar la estructura del automóvil.
Figura 18. Estructura del sistema N.A.V.I.
Uso del vehículo en campo
Los sensores del vehículo proveen información constante, lo que permite al usuario y al vehículo estar
al tanto de lo que sucede en su entorno. El sensor de proximidad o sensor ultrasónico se encarga de
mostrar la distancia que se presente ante un objeto, ya sea frontal o posterior, por lo que resulta crucial
para encontrar obstáculos. Por otro lado, el sensor de velocidad y giroscopio permite conocer la
velocidad con la que el vehículo se desplaza. Mientras que el giroscopio permite saber si el vehículo se
encuentra sobre un lugar inclinado. Por último, los sensores de gas, envía una alarma cuando se
encuentre un gas nocivo para la salud en sus cercanías.
La visión robótica del vehículo se ve limitada debido a que la estructura de la cámara no es móvil, esto
significa que al no poder girar sobre su propio eje esta solo puede mostrar una vista de 130° de vista
horizontal y un aproximado de 80° de vista vertical.
La estructura del vehículo resultó ser susceptible a lugares muy rocosos, que presenten hierba alta o
charcos, debido a que pueden volcar al mismo o dañar la integridad de sus componentes internos.
El vehículo cuenta con una interfaz muy didáctica realizada en Kivy. Dicha interfaz actualiza los
cambios obtenidos por los sensores, además de mostrar en tiempo real la imagen captada por la cámara.
También contiene botones que muestran gráficas sobre el comportamiento de los sensores, botones que
permiten tomar fotos y video del entorno en el que se esté desempeñando el sistema NAVI, y botones
que permitan enviar comandos al vehículo.
pág. 889
En la parte superior de la misma se muestran los datos, mientras que el resto de los comandos se
despliegan al presionar el resto de botones.
Figura 19. Interfaz gráfica del sistema N.A.V.I.
CONCLUSIONES
El desarrollo del vehículo se presenta como una alternativa para el funcionamiento que presentaría un
vehículo que cuenta con redes neuronales, el cual busca constantemente identificar patrones
predeterminados dentro de un ambiente dinámico.
Esta labor resultó complicada para un vehículo que tan solo cuenta con una cámara, incluso cuando fue
asistida con sensores de proximidad y de velocidad. Además, el uso de tantos sensores a la par que se
reciben comandos externos pueden representar un problema para la lógica del programa del vehículo.
Así mismo, la estructura del mismo resulta muy cómoda para moverse rápidamente a través de asfalto
y terracería, ya que difícilmente va a volcarse, sin embargo, remplazar el motor por servomotores de
giro continuo cambiaría la velocidad de desplazamiento por fuerza en el giro, lo que puede o no resultar
más conveniente que la estructura presente.
Por ello, se recomienda mejorar la lógica del programa, añadiendo quizás el uso de múltiples hilos e
incluso interrupciones, así como la inclusión de otros sensores para asistir la navegación, como el GPS,
sensores de mejor calidad que remplacen a los usados, como los sensores infrarrojos de proximidad, y
sensores de uso más específico según la tarea que se precisa como los sensores de temperatura.
pág. 890
REFERENCIAS BIBLIOGRAFICAS
[Barrientos, et al, 2007]
Barrientos Sotelo Víctor Ricardo, García Sánchez José Rafael, Silva Ortigoza Ramón. “Robots
Móviles: Evolución y Estado del Arte”. Instituto Politécnico Nacional. 2007.
[Beegle, 2021]
Beegle. (2021). Regulador de Voltaje LM2596 ¿Cómo funciona? [ Archivo de Video].
https://www.youtube.com/watch?v=c_OROvf-tCk.
[Carrillo, 2019]
Carrillo, D. M. “Diseño de un Sistema de Visión Artificial para la Navegación de un Dron Terrestre
Aplicado a la Agricultura de Precisión.”. 2019.
[Del Valle,2019]
Luis, Del Valle. (2019). ADS1115 convertidor analógico digital ADC para Arduino y ESP8266.
https://programarfacil.com/blog/arduino-blog/ads1115-convertidor-analogico-digital-adc-
arduino-esp8266/
[Granada, 2023]
RC Pro Granada. (2023). Funcionamiento, programación Combo Brushless y Electrónica Competición
Radiocontrol Hobbywing. [ Archivo de Video]. Youtube.
https://www.youtube.com/watch?v=O5vV1HayDgI.
[Hanwei. s. f.]
Hanwei. (s. f.). TECHNICAL DATA MQ-2 GAS SENSOR. China, Hanwei Electronics Co., Ltd.
Recuperado de MQ-2.doc (mouser.com)
[hetpro, 2014]
hetpro. (2016). MPU6050 Arduino, Acelerómetro y Giroscopio.
https://hetpro-store.com/TUTORIALES/modulo-acelerometro-y-giroscopio-mpu6050-i2c-twi/).
[Naylampmechatronics, 2016]
Naylampmechatronics. (2016). TUTORIAL BÁSICO NRF24L01 CON ARDUINO.
https://naylampmechatronics.com/blog/16_tutorial-basico-nrf24l01-con-arduino.html
pág. 891
[Rasp.org]
De la página oficial de Raspberry Pi fueron rescatados ejemplos, librerías, reportes de error, diagramas,
comandos. https://www.raspberrypi.com/
[REALVNC.org]
REALVNC. (2023). Descargas. Viewer. https://www.realvnc.com/es/connect/download/viewer/.
[Serrano, 1996]
Ramírez Serrano, A. “Navegación Autónoma De Robots Móviles Mediante Lógica Difusa”. 1996.
[TechnoMart.org]
TechnoMart.. (2023). Servo-Motors.
https://technomart.ca/servomotors?gclid=Cj0KCQiAj_CrBhRIsAIiMxT98s0Fzy3BXKSg0PZZ
9JCGwiQUfk54xSHL2Dkdli0BiVgjCFQ0KysYaAr4MEALw_wcB
[Winsen, 2015].
Winsen, 2015. -Air Quality Gas Sensor. (Número de la publicación). Zhengzhou China. Zhengzhou
Winsen Electronics Technology Co., Ltd. Recuperado de mq135.pdf (winsen-sensor.com)