UltraV:un medidor de índice UV portátil
Componentes y suministros
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Acerca de este proyecto
Al no poder exponerme al sol por un problema dermatológico, aproveché el tiempo que habría pasado en la playa para construir un medidor de rayos ultravioleta. UltraV.
Está construido sobre un Arduino Nano rev3, con un sensor UV, un convertidor DC / DC para aumentar el voltaje de la batería de 3v y una pequeña pantalla OLED. Mi objetivo principal era mantenerlo portátil, de modo que pudiera conocer fácilmente el índice UV en cualquier momento y en cualquier lugar.
Paso 1:piezas y componentes
- Microcontrolador Arduino Nano rev.3
- Sensor UV ML8511
- Pantalla OLED de 128 × 64 (SSD1306)
- MT3608 DC-DC step-up
- batería CR2
- Soporte de batería CR2
- Cambiar
- Caja de cierre
Paso 2:el sensor
El ML8511 (Lapis Semiconductors) es un sensor UV, que es adecuado para adquirir intensidad UV en interiores o exteriores. El ML8511 está equipado con un amplificador interno, que convierte la fotocorriente en voltaje según la intensidad de los rayos UV. Esta característica única ofrece una interfaz sencilla para circuitos externos como ADC. En el modo de apagado, la corriente de espera típica es de 0,1 µA, lo que permite una mayor duración de la batería.
Características:
- Fotodiodo sensible a UV-A y UV-B
- Amplificador operacional integrado
- Salida de voltaje analógico
- Baja corriente de suministro (300 µA típ.) y baja corriente de espera (0,1 µA típ.)
- Paquete de montaje en superficie pequeño y delgado (4.0 mm x 3.7 mm x 0.73 mm, QFN de cerámica de 12 pines)
Desafortunadamente, no tuve la oportunidad de encontrar ningún material transparente a los rayos UV para proteger el sensor. Cualquier tipo de cubierta transparente que probé (plástico, vidrio, etc.) atenuaba la medición de UV. La mejor opción parece ser el vidrio de sílice fundido con cuarzo, pero no he encontrado ninguno a un precio razonable, así que decidí dejar el sensor fuera de la caja, al aire libre.
Paso 3:operaciones
Para tomar una medida, simplemente encienda el dispositivo y apúntelo al sol durante varios segundos, manteniéndolo alineado con la dirección de los rayos solares. Luego mire en la pantalla:el índice de la izquierda siempre muestra la medida instantánea (una cada 200 ms), mientras que la lectura de la derecha es la lectura máxima tomada durante esta sesión:esa es la que necesita.
En la parte inferior izquierda de la pantalla se muestra también la nomenclatura equivalente de la OMS (BAJA, MODERADA, ALTA, MUY ALTA, EXTREMA) para el índice UV medido.
Paso 4:Lectura y voltaje de la batería
Elijo una batería CR2, por su tamaño y capacidad (800 mAh). Usé UltraV durante todo el verano y la batería todavía marca 2.8 v, así que estoy bastante satisfecho con la elección. Cuando funciona, el circuito drena alrededor de 100 mA, pero una medición de lectura no toma más de unos pocos segundos. Como el voltaje nominal de la batería es de 3v, agregué un convertidor elevador CC-CC para llevar el voltaje a 9 voltios y lo conecté al pin Vin.
Para tener la indicación del voltaje de la batería en la pantalla, utilicé una entrada analógica (A2). Las entradas analógicas de Arduino se pueden utilizar para medir el voltaje de CC entre 0 y 5 V, pero esta técnica requiere una calibración. Para realizar la calibración, necesitará un multímetro. Primero encienda el circuito con su batería final (la CR2) y no use la energía USB de la computadora; Mida los 5V en el Arduino desde el regulador (que se encuentra en el pin Arduino 5V):este voltaje se usa para el voltaje de referencia Arduino ADC por defecto. Ahora coloque el valor medido en el boceto de la siguiente manera (suponga que leo 5.023):
voltaje =((largo) suma / (largo) NUM_SAMPLES * 5023) / 1024.0;
En el boceto, tomo la medición de voltaje como un promedio de más de 10 muestras.
Paso 5:esquema y conexiones
Paso 6:software
Para la pantalla, utilicé el U8g2lib, que es muy flexible y potente para este tipo de pantallas OLED, lo que permite una amplia variedad de fuentes y buenas funciones de posicionamiento.
Con respecto a la lectura de voltaje del ML8511, utilicé el pin de referencia Arduino de 3.3v (con una precisión del 1%) como base para el convertidor ADC. Entonces, al hacer una conversión de analógico a digital en el pin de 3.3V (conectándolo a A1) y luego comparando esta lectura con la lectura del sensor, podemos extrapolar una lectura real, sin importar el VIN ( siempre que esté por encima de 3,4 V).
int uvLevel =averageAnalogRead (UVOUT); int refLevel =averageAnalogRead (REF_3V3); float outputVoltage =3.3 / refLevel * uvLevel;
Descargue el código completo desde el siguiente enlace.
UltraV_OLED.ino.zip
Paso 7:caja del cerramiento
Después de varias (malas) pruebas para cortar manualmente la ventana de visualización rectangular en una caja de plástico comercial, decidí diseñar la mía propia para ella. Entonces, con una aplicación CAD diseñé una caja y para mantenerla lo más pequeña posible, monté la batería CR2 externamente en la parte posterior (con un soporte de batería pegado en la caja).
Descargue el archivo STL para el caso del gabinete, desde el siguiente enlace.
UltraV.stl.zip
Paso 8:posibles mejoras futuras
- Utilice un espectrómetro UV para medir los valores reales del índice UV en tiempo real en diversas condiciones (los espectrómetros UV son muy costosos);
- Grabe simultáneamente la salida del ML8511 con el microcontrolador Arduino;
- Escriba un algoritmo para relacionar la salida ML8511 con el valor UVI real en tiempo real bajo una amplia gama de condiciones atmosféricas.
Paso 9:Galería de imágenes
Paso 10:Créditos
- Carlos Orts:https://create.arduino.cc/projecthub/McOrts/mobil ...
- Foro de Arduino:http://forum.arduino.cc/index.php?topic=3922.0
- Inicio de la electrónica:https://startingelectronics.org/articles/arduino / ...
- U8g2lib:https://github.com/olikraus/u8g2/wiki/u8g2referen ...
- Organización Mundial de la Salud, Índice UV:http://www.who.int/uv/intersunprogramme/activitie ...
Código
- UltraV
UltraV C / C ++
Código/ * Fabio Marzocca @ 2018 Las conversiones analógicas a digitales dependen completamente de VCC. Suponemos que esto es 5V, pero si la placa se alimenta desde USB, esto puede ser tan alto como 5.25V o tan bajo como 4.75V:http://en.wikipedia.org/wiki/USB#Power Debido a esta ventana desconocida, hace el ADC bastante inexacto en la mayoría de los casos. Para solucionar este problema, utilizamos la referencia integrada de 3,3 V muy precisa (con una precisión de 1%). Entonces, al hacer un ADC en el pin de 3.3V (A1) y luego comparar esto con la lectura del sensor, podemos extrapolar una lectura real sin importar el VIN (siempre que esté por encima de 3.4V) .v. 2.0.0 - julio de 2018:pasó de LCD de 16x2 a OLEDv. 2.0.1 - Septiembre de 2018 - función de batería de lectura modificada * / # include#include #include U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2 (U8G2_R0, / * clock =* / SCL, / * datos =* / SDA, / * reiniciar =* / U8X8_PIN_NONE); // Todas las placas sin reinicio de la pantalla # define FIRST_ROW_Y 16 # define FIRST_ROW_X 16 # define BOX_H 38 // Definiciones de pines de hardwareconst int UVOUT =A0; // Salida del sensorconst int REF_3V3 =A1; //3,3 V de potencia en la placa Arduinoconst int VBATT =A2; // Voltaje de la bateríafloat maxUV =0; // Configuración de vacío de lectura de índice UV máximo () {pinMode (UVOUT, INPUT); pinMode (REF_3V3, ENTRADA); pinMode (VBATT, ENTRADA); u8g2.begin ();} bucle vacío () {u8g2.firstPage (); hacer {int uvLevel =averageAnalogRead (UVOUT); int refLevel =averageAnalogRead (REF_3V3); // Utilice el pin de alimentación de 3.3V como referencia para obtener un valor de salida muy preciso del flotador del sensor outputVoltage =3.3 / refLevel * uvLevel; flotar uvIntensity =mapfloat (outputVoltage, 0.99, 2.6, 0.0, 15.0); // Convierta el voltaje a un nivel de intensidad UV readBattery (); if (maxUV =0) &&(categ <3)) {strcpy (strCat, "LOW"); } más si ((categ> =3) &&(categ <6)) {strcpy (strCat, "MODERADO"); } más si ((categ> =6) &&(categ <8)) {strcpy (strCat, "HIGH!"); } más si ((categ> =8) &&(categ <10)) {strcpy (strCat, "MUY HIGH!"); } más si (categ> =11) {strcpy (strCat, "¡EXTREMO!"); } u8g2.setCursor (0,64); u8g2.print (strCat); } // Toma un promedio de lecturas en un pin dado // Devuelve el promedioint averageAnalogRead (int pinToRead) {byte numberOfReadings =16; unsigned int runningValue =0; for (int x =0; x
Proceso de manufactura
- Divisor de voltaje
- Batería de patatas
- ¿Qué es un medidor?
- Multímetros
- Construcción de la batería
- Clasificaciones de la batería
- ¿Qué es una máquina de soldadura por puntos portátil?
- Máquina CMM portátil:¿fija o portátil?
- Comprender la batería utilizada en los automóviles
- Diferentes formas de probar un alternador
- 7 signos de alternador malo o defectuoso