Villalba2006

POST_35

Nov 25th, 2016
4,101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.86 KB | None | 0 0
  1. /*  TITULO: Medidor de rayos ultravioletas con sensor de rayos UV y LCD NOKIA 5110.
  2.  
  3.     AUTOR:
  4.    
  5.     MARIANO DEL CAMPO GARCÍA (@2016) --> INGENIERO TÉCNICO INDUSTRIAL ESPECIALIDAD ELECTRÓNICA
  6.     - FACEBOOK: https://www.facebook.com/mariano.delcampogarcia
  7.     - TWITTER: https://twitter.com/MarianoCampoGa
  8.     - CORREO: [email protected]
  9.    
  10.    
  11.     DESCRIPCIÓN DEL PROGRAMA
  12.    
  13.     Con este programa vamos a ser capaces de medir los rayos ultravioletas en una escala del 0 al 11.
  14.     Los resultados obtenidos se van a visualizar a través de un LCD de un NOKIA 5110.
  15.    
  16.    
  17.     ESQUEMA DE CONEXION
  18.    
  19.                                       +-----+
  20.          +----[PWR]-------------------| USB |--+
  21.          |                            +-----+  |
  22.          |         GND/RST2  [ ][ ]            |
  23.          |       MOSI2/SCK2  [ ][ ]  A5/SCL[ ] |  
  24.          |          5V/MISO2 [ ][ ]  A4/SDA[ ] |  
  25.          |                             AREF[ ] |
  26.          |                              GND[ ] |
  27.          | [ ]N/C                    SCK/13[ ] |  
  28.          | [ ]IOREF                 MISO/12[ ] |   RST del LCD NOKIA 5110 a través de R=10K ohms
  29.          | [ ]RST                   MOSI/11[ ]~|   CE del LCD NOKIA 5110 a través de R=10K ohms
  30.          | [ ]3V3    +---+               10[ ]~|   DC del LCD NOKIA 5110 a través de R=10K ohms
  31.          | [ ]5v    -| A |-               9[ ]~|   Din del LCD NOKIA 5110 a través de R=10K ohms
  32.          | [ ]GND   -| R |-               8[ ] |   Clk del LCD NOKIA 5110 a través de R=10K ohms
  33.          | [ ]GND   -| D |-                    |
  34.          | [ ]Vin   -| U |-               7[ ] |   PA
  35.          |          -| I |-               6[ ]~|   LED_UV(+)
  36.  OUT_UV  | [ ]A0    -| N |-               5[ ]~|  
  37.          | [ ]A1    -| O |-               4[ ] |    
  38.          | [ ]A2     +---+           INT1/3[ ]~|    
  39.          | [ ]A3                     INT0/2[ ] |  
  40.          | [ ]A4/SDA  RST SCK MISO     TX>1[ ] |  
  41.          | [ ]A5/SCL  [ ] [ ] [ ]      RX<0[ ] |  
  42.          |            [ ] [ ] [ ]              |
  43.          |  UNO_R3    GND MOSI 5V  ____________/
  44.           \_______________________/
  45.  
  46.  
  47.   NOTAS:
  48.  
  49.    - Cátodo(-) del LED_UV (pata más corta) a GND (esta vez sin resistencia aunque se puede quemar rápidamente).
  50.    - Los pulsadores suelen tener dos pines, que vamos a denominar PA y PB (si es de 4 sólo usamos 2 de ellos)
  51.    - Conexión PULL-DOWN del pulsador.
  52.        - PB conectado a VCC.
  53.        - PA conectado a GND a través de una R=10K ohms.
  54.    - Conexión de la alimentación del LCD NOKIA 5110:
  55.        - VCC --> +3.3V
  56.        - GND --> GND
  57.        - BL (BackLight) --> +3.3V.
  58.    - Conexión del sensor UV:
  59.        - VCC --> +5V
  60.        - GND --> GND
  61.        - OUT_UV --> Salida del sensor UV conectado al pin analógico A0.
  62. */
  63.  
  64.  
  65.   #include <LCD5110_Graph.h>
  66.  
  67.   int pulsador = 7; // Pin digital para el pulsador
  68.   int LED_UV = 6; // Pin digital para el LED UV
  69.  
  70.   // En cada uno de estos pines tenemos que meter una R=10K para limitar el voltaje a 3.3V.
  71.   LCD5110 lcd(8,9,10,12,11);
  72.  
  73.   // Variables para el LCD NOKIA 5110
  74.   extern unsigned char BigNumbers[];
  75.   extern uint8_t splash[];
  76.   extern uint8_t ui[];
  77.  
  78.   String UV = "0";
  79.  
  80.   void setup()
  81.   {
  82.    pinMode(pulsador, INPUT); // Pin digital 7 como entrada;
  83.    pinMode(LED_UV, OUTPUT); // Pin digital 6 como salida;
  84.    
  85.    // Mostramos el Logo de Inicio
  86.    lcd.InitLCD();
  87.    lcd.setFont(BigNumbers);
  88.    lcd.clrScr();
  89.    lcd.drawBitmap(0, 0, splash, 84, 48);
  90.    lcd.update();  
  91.    delay(3000);
  92.   }
  93.  
  94.   void loop()
  95.   {
  96.    // Almacenamos el valor del pulsador
  97.    int valor = digitalRead(pulsador);
  98.    
  99.    // El LED_UV se enciende solamente cuando estamos presionando el pulsador
  100.    if(valor == HIGH)
  101.    {
  102.      digitalWrite(LED_UV, HIGH);
  103.    }
  104.    else
  105.    {
  106.      digitalWrite(LED_UV, LOW);
  107.    }
  108.    
  109.    // Inicializa la longitud del índice UV
  110.    int longitud = 0;
  111.    // Valor del índice UV
  112.    UV = readSensor();
  113.    // Imprime la interfaz por pantalla
  114.    lcd.clrScr();
  115.    lcd.drawBitmap(0, 0, ui, 84, 48);
  116.    // Calcula la longitud del índice UV (1 o 2 dígitos)
  117.    longitud = UV.length();
  118.    // Imprime por pantalla el valor del índice UV
  119.    imprimeUV(longitud);
  120.    lcd.update();
  121.    delay(150);
  122.   }
  123.  
  124.   // Función que imprime por pantalla los valores del índice UV
  125.   void imprimeUV(int length)
  126.   {
  127.     switch(length)
  128.     {
  129.       case 1:  lcd.print(UV,38,19); break;
  130.       case 2:  lcd.print(UV,24,19); break;
  131.       default:  lcd.print(UV,0,19); break;
  132.     }
  133.   }
  134.  
  135.   // Función que lee y transforma el valor del sensor a un índice UV válido
  136.   String readSensor()
  137.   {
  138.     String UVIndex = "0";
  139.     int sensorValue = 0;
  140.    
  141.     sensorValue = analogRead(0);  // Leemos el valor del sensro UV
  142.     int voltage = (sensorValue * (5.0 / 1023.0))*1000;  // Voltaje en milivóltios
  143.    
  144.     // Escala UV del 0 al 11, según los valores del sensor en milivóltios
  145.     if(voltage<50)
  146.     {
  147.       UVIndex = "0";
  148.     }
  149.     else if (voltage>50 && voltage<=227)
  150.     {
  151.       UVIndex = "1";
  152.     }
  153.     else if (voltage>227 && voltage<=318)
  154.     {
  155.       UVIndex = "2";
  156.     }
  157.     else if (voltage>318 && voltage<=408)
  158.     {
  159.       UVIndex = "3";
  160.     }
  161.     else if (voltage>408 && voltage<=503)
  162.     {
  163.       UVIndex = "4";
  164.     }
  165.     else if (voltage>503 && voltage<=606)
  166.     {
  167.       UVIndex = "5";
  168.     }
  169.     else if (voltage>606 && voltage<=696)
  170.     {
  171.       UVIndex = "6";
  172.     }
  173.     else if (voltage>696 && voltage<=795)
  174.     {
  175.       UVIndex = "7";
  176.     }
  177.     else if (voltage>795 && voltage<=881)
  178.     {
  179.       UVIndex = "8";
  180.     }
  181.     else if (voltage>881 && voltage<=976)
  182.     {
  183.       UVIndex = "9";
  184.     }
  185.     else if (voltage>976 && voltage<=1079)
  186.     {
  187.       UVIndex = "10";
  188.     }
  189.     else if (voltage>1079)
  190.     {
  191.       UVIndex = "11";
  192.     }
  193.     return UVIndex;
  194.   }
Advertisement
Add Comment
Please, Sign In to add comment