Advertisement
Yilltronics

Servo/dht

Jun 2nd, 2023 (edited)
1,281
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <DHT.h>
  2. #include <LiquidCrystal_I2C.h>
  3. #include <Wire.h>
  4. #include <Keypad.h>
  5. #include <Servo.h>  
  6.  
  7. // Constants
  8. #define DHTPIN 7     // Pin to which the DHT11 sensor is connected
  9. #define DHTTYPE DHT11    // DHT 11 type sensor
  10.  
  11. // Variables
  12. DHT dht(DHTPIN, DHTTYPE); // Initialize DHT sensor
  13. int h;  // Stores humidity value
  14. int t;  // Stores temperature value
  15.  
  16. LiquidCrystal_I2C lcd(0x27, 16, 2);
  17.  
  18. int estado=0;                  // 0=cerrado 1=abierto
  19. Servo servo11;                 // Crea el objeto servo11 con las caracteristicas de Servo
  20. const byte FILAS = 4;          // define numero de filas
  21. const byte COLUMNAS = 4;       // define numero de columnas
  22. char keys[FILAS][COLUMNAS] = {    // define la distribucion de teclas
  23.   {'1','2','3','A'},
  24.   {'4','5','6','B'},
  25.   {'7','8','9','C'},
  26.   {'*','0','#','D'}
  27. };
  28. byte pinesFilas[FILAS] = {13,12,11,10};         // pines correspondientes a las filas
  29. byte pinesColumnas[COLUMNAS] = {6,5,4,3};  // pines correspondientes a las columnas
  30. Keypad teclado = Keypad(makeKeymap(keys), pinesFilas, pinesColumnas, FILAS, COLUMNAS);  // crea objeto teclado
  31. char TECLA;                        // almacena la tecla presionada
  32. char CLAVE[5];                     // almacena en un array 4 digitos ingresados
  33. char CLAVE_MAESTRA[5] = "0000";    // almacena en un array la contraseña inicial
  34. byte INDICE = 0;                   // indice del array  
  35.  
  36. void handleSensorReadings();
  37.  
  38. void setup() {
  39.   Serial.begin(9600);
  40.   Serial.println("Temperature and Humedad Sensor Test");
  41.   dht.begin();
  42.   lcd.init();
  43.   lcd.backlight();
  44. }
  45.  
  46. void loop() {
  47.   handleSensorReadings();
  48.   delay(1000);
  49. }
  50.  
  51. void handleSensorReadings() {
  52.   h = dht.readHumidity();
  53.   t = dht.readTemperature();
  54.  
  55.   Serial.print("Humedad: ");
  56.   Serial.print(h);
  57.   Serial.print(" %, Temp: ");
  58.   Serial.print(t);
  59.   Serial.println(" ° Celsius");
  60.  
  61.   lcd.setCursor(0, 0);
  62.   lcd.print("Temp & Humedad");
  63.  
  64.   lcd.setCursor(0, 1);
  65.   lcd.print("T:");
  66.   lcd.print(t);
  67.   lcd.print("C");
  68.  
  69.   lcd.setCursor(6, 1);
  70.   lcd.print("2023 ");
  71.  
  72.   lcd.setCursor(11, 1);
  73.   lcd.print("H:");
  74.   lcd.print(h);
  75.   lcd.print("%");
  76. }
  77.  
  78.  
  79.  
  80.  
  81. ////////////Servo////////
  82.  
  83. void setup()
  84. {
  85.  lcd.init();                          // inicializa el LCD
  86.  lcd.backlight();
  87.  servo11.attach(11,660,1400);        // Asocia el servo1 al pin 11, define el min y max del ancho del pulso
  88.  servo11.write(150);                // Gira el servo a 150 grados Cierra la puerta
  89.  limpia();
  90. }
  91.  
  92. void loop(){
  93.   TECLA = teclado.getKey();   // obtiene tecla presionada y asigna a variable
  94.   if (TECLA)                  // comprueba que se haya presionado una tecla
  95.   {
  96.     CLAVE[INDICE] = TECLA;    // almacena en array la tecla presionada
  97.     INDICE++;                 // incrementa indice en uno
  98.     lcd.print(TECLA);         // envia al LCD la tecla presionada
  99.   }
  100.  
  101.   if(INDICE == 4)             // si ya se almacenaron los 4 digitos
  102.   {
  103.     if(!strcmp(CLAVE, CLAVE_MAESTRA))    // compara clave ingresada con clave maestra
  104.         abierto();              
  105.     else
  106.         error();
  107.    
  108.     INDICE = 0;
  109.   }
  110.   if(estado==1 && (analogRead(A3)==0))     // si esta abierta y se pulsa boton de Nueva Clave
  111.          nueva_clave();  
  112.  
  113. }
  114.  
  115. ///////////////////// Error //////////////////////////////
  116. void error(){  
  117.       lcd.setCursor(0,1);
  118.       lcd.print("ERROR DE CLAVE    ");
  119.       limpia();
  120. }
  121. /////////////////////abierto o cerrado //////////////////////////////
  122. void abierto(){  
  123.    if(estado==0){
  124.       estado=1;
  125.       lcd.setCursor(0,1);
  126.       lcd.print("Abierto            ");  // imprime en el LCD que esta abierta
  127.       servo11.write(30);                 // Gira el servo a 30 grados  abre la puerta
  128.    }
  129.    else{
  130.     estado=0;
  131.     lcd.setCursor(0,1);
  132.     lcd.print("Cerrado              ");  // imprime en el LCD que esta cerrada
  133.     servo11.write(150);                // Gira el servo a 150 grados  cierra la puerta
  134.    }
  135.  limpia();
  136. }
  137.  
  138. /////////////////////Nueva_Clave //////////////////////////////
  139. void nueva_clave(){  
  140.   lcd.setCursor(0,0);
  141.   lcd.print("NUEVA CLAVE:        ");
  142.   lcd.setCursor(12,0);
  143.   INDICE=0;
  144.   while (INDICE<=3) {
  145.    TECLA = teclado.getKey();   // obtiene tecla presionada y asigna a variable TECLA
  146.    if (TECLA)                 // comprueba que se haya presionado una tecla
  147.     {
  148.       CLAVE_MAESTRA[INDICE] = TECLA;    // almacena en array la tecla presionada
  149.       CLAVE[INDICE] = TECLA;
  150.       INDICE++;                 // incrementa indice en uno
  151.       lcd.print(TECLA);         // envia a monitor serial la tecla presionada
  152.     }  
  153.   }
  154.  estado=0;
  155.   lcd.setCursor(0,1);
  156.   lcd.print("CLAVE CAMBIADA");
  157.   delay(2000);
  158.   limpia();
  159. }
  160.  
  161. ///////////////////// limpia //////////////////////////////
  162. void limpia(){  
  163.  lcd.setCursor(0,0);
  164.  lcd.print("CLAVE :          ");
  165.  lcd.setCursor(9,0);
  166. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement