Advertisement
Villalba2006

POST_55

Nov 28th, 2016
7,328
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.85 KB | None | 0 0
  1.  /*  TITULO: Detector de partículas de polvo en el aire con sensor GP2Y10
  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: marianodc83@gmail.com
  9.    
  10.    
  11.     DESCRIPCIÓN DEL PROGRAMA
  12.    
  13.     En este programa vamos a obtener el valor de densidad de partículas del polvo en mg/m³ y la
  14.     concentración de partículas de polvo en ppm, además de obtener el voltaje entre los terminales
  15.     de salida del sensor GP2Y10 de SHARP. Podremos visualizar dichos valores a través del LCD 1602
  16.     que tenemos conectado mediante comunicación I2C a nuestro Arduino.
  17.    
  18.  
  19.     ESQUEMA DE CONEXION
  20.    
  21.                                         +-----+
  22.            +----[PWR]-------------------| USB |--+
  23.            |                            +-----+  |
  24.            |         GND/RST2  [ ][ ]            |
  25.            |       MOSI2/SCK2  [ ][ ]  A5/SCL[ ] |  SCL del módulo I2C
  26.            |          5V/MISO2 [ ][ ]  A4/SDA[ ] |  SDA del módulo I2C
  27.            |                             AREF[ ] |
  28.            |                              GND[ ] |
  29.            | [ ]N/C                    SCK/13[ ] |  
  30.            | [ ]IOREF                 MISO/12[ ] |  
  31.            | [ ]RST                   MOSI/11[ ]~|  
  32.            | [ ]3V3    +---+               10[ ]~|  
  33.            | [ ]5v    -| A |-               9[ ]~|  
  34.            | [ ]GND   -| R |-               8[ ] |  
  35.            | [ ]GND   -| D |-                    |
  36.            | [ ]Vin   -| U |-               7[ ] |  
  37.            |          -| I |-               6[ ]~|  
  38. Pin 5 (Vo) | [ ]A0    -| N |-               5[ ]~|  
  39.            | [ ]A1    -| O |-               4[ ] |  
  40.            | [ ]A2     +---+           INT1/3[ ]~|  
  41.            | [ ]A3                     INT0/2[ ] |  Pin 3 (LED) del sensor GP2Y10
  42.            | [ ]A4/SDA  RST SCK MISO     TX>1[ ] |  
  43.            | [ ]A5/SCL  [ ] [ ] [ ]      RX<0[ ] |  
  44.            |            [ ] [ ] [ ]              |
  45.            |  UNO_R3    GND MOSI 5V  ____________/
  46.             \_______________________/
  47.  
  48.   NOTAS:
  49.  
  50.    - Conexiones del sensor GP2Y10:
  51.        - Pin 1 (V-LED) del sensor GP2Y10 --> +5V de Arduino a través de una resistencia de R=150 ohm.
  52.        - Pin 2 (LED-GND) del sensor GP2Y10 --> GND de Arduino.
  53.        - Pin 1 ((V-LED) del sensor GP2Y10 --> Pin 2 (LED-GND) del sensor a través de C=220uF.
  54.        - Pin 4 (S-GND) del sensor GP2Y10 --> GND de Arduino.
  55.        - Pin 6 (VCC) del sensor GP2Y10 --> +5V de Arduino
  56.    - La alimentación y la masa del módulo LCM 1602 I2C V1 van directamente conectadas a VCC (+5V) y GND
  57.      respectivamente.  
  58. */
  59.  
  60.   // Importar librerías
  61.   #include <Wire.h> // Librería comunicación I2C
  62.   #include <LiquidCrystal_I2C.h> // Librería LCD I2C
  63.  
  64.   // Declaración del objeto
  65.   // Poner la dirección del LCD a 0x27 para display 16x2, 20x2 y 20x4
  66.   // Terminales de conexión del LCD
  67.   //                    addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
  68.   LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
  69.  
  70.   int muestreo = 0; // Pin analógico para el pin Vo del sensor GP2Y10
  71.   int IRED = 2; // Pin digital para el IRED
  72.  
  73.   // Tiempos constantes para el pulso de control del IRED
  74.   int retardo_1 = 280;
  75.   int retardo_2 = 40;
  76.   int retardo_3 = 9680;
  77.  
  78.   // Variables auxiliares del programa
  79.   int valor = 0;
  80.   float ppm = 0;
  81.   float voltaje = 0;
  82.   float densidad_polvo = 0;
  83.   float ppm_real = 0;
  84.   int i=0;
  85.  
  86.   void setup()
  87.   {
  88.     lcd.begin(16,2);   // Inicializa el LCD para 16x2
  89.     pinMode(IRED,OUTPUT); // Pin digital 2 como salida
  90.    
  91.     // Mostramos un mensaje a través del LCD 1602
  92.     lcd.clear();
  93.     lcd.setCursor(0,0);
  94.     lcd.print("  DETECTOR  DE  ");
  95.     lcd.setCursor(0,1);
  96.     lcd.print("PARTICULAS POLVO");
  97.     delay(3000);
  98.   }
  99.  
  100.   void loop()
  101.   {
  102.     i=i+1; // Contador de pulsos de control
  103.     // El IRED se va a activar con LOW y se desactiva con HIGH según las conexiones internas del sensor
  104.     digitalWrite(IRED,LOW); // LED activado
  105.     delayMicroseconds(retardo_1); // Retardo de 0,28ms
  106.     valor = analogRead(muestreo); // Se muestrea el valor de Vo a través del pin analógico A0
  107.     ppm = ppm + valor; // Media ponderada de Vo
  108.     delayMicroseconds(retardo_2); // Retardo de 0,04ms
  109.     digitalWrite(IRED,HIGH); // LED desactivado
  110.     delayMicroseconds(retardo_3); // Retardo de 9,68ms
  111.     // retardo_1 + retardo_2 + retardo_3 = 10ms
  112.    
  113.     // Fórmulas matemáticas para el cálculo de los valores del sensor GP2Y10
  114.     voltaje = ppm/i*0.0049; // Voltaje en voltios (media de los valores ppm obtenidos)
  115.     densidad_polvo = 0.17*voltaje-0.1; // Densidad de partículas de polvo en mg/m³
  116.     ppm_real = (voltaje-0.0356)*120000; // Concentración de partículas de polvo en ppm
  117.     if (ppm_real < 0)
  118.       ppm_real = 0;
  119.     if (densidad_polvo < 0 )
  120.       densidad_polvo = 0;
  121.     if (densidad_polvo > 0.5)
  122.       densidad_polvo = 0.5;
  123.    
  124.     // Presentamos el voltaje a través del LCD 1602
  125.     lcd.clear();
  126.     lcd.setCursor(0,0);
  127.     lcd.print("-> VOLTAJE");
  128.     lcd.setCursor(0,1);
  129.     lcd.print(voltaje,3); // Tres decimales
  130.     lcd.print(" V");
  131.     delay(2000);
  132.    
  133.     // Presentamos la densidad de partículas de polvo a través del LCD 1602
  134.     lcd.clear();
  135.     lcd.setCursor(0,0);
  136.     lcd.print("-> DENSIDAD");
  137.     lcd.setCursor(0,1);
  138.     lcd.print(densidad_polvo,3); // Tres decimales
  139.     lcd.print(" mg x m3");
  140.     delay(2000);
  141.    
  142.     // Presentamos la concentración de partículas de polvo a través del LCD 1602
  143.     lcd.clear();
  144.     lcd.setCursor(0,0);
  145.     lcd.print("-> CONCENTRACION");
  146.     lcd.setCursor(0,1);
  147.     lcd.print(ppm_real,3); // Tres decimales
  148.     lcd.print(" ppm");
  149.     delay(2000);    
  150.   }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement