Comparte este artículo

Mi experiencia más reciente con Arduino ha consistido en activar y desactivar de forma automática un pequeño ventilador de escritorio. La idea es que el ventilador se mantenga en funcionamiento durante todo el tiempo que pase sentando frente al ordenador (o haciendo uso del escritorio) y se desactive cuando abandone mi lugar de trabajo. 

  

 Materiales

Esquema

Activar un relé mediante presencia con un sensor de ultrasonidos

 

El esquema es muy sencillo, el pin Trig del sensor de ultrasonidos HC-SR04 se conecta al pin 9 de arduino y el pin Echo al pin 10 de arduino. La entrada del relé (IN) se conecta al pin 2 de arduino. Además se ha añadido un LED que nos indica cuando se produce un cambio en el interruptor, dicho LED está conectado al pin 13 de arduino.

Las salidas del relé hacen de interruptor del ventilador por esa razón están conectadas al interruptor del ventilador directamente. Se puede apreciar en la imagen que aparece a continuación.

Detalle de la conexión del interruptor al relé

Código

A continuación se muestra el código fuente para Arduino. Está comentado para una fácil comprensión.

  1. /*
  2.  * Software: Controlling a fan with an ultrasonic sensor
  3.  * Date: 15/08/2014
  4.  * Author: Cristóbal Medina López
  5.  * Web: http://www.cristobalmedinalopez.es
  6.  * License:
  7.  * This program is free software: you can redistribute it and/or modify
  8.  * it under the terms of the GNU General Public License as published by
  9.  * the Free Software Foundation, either version 3 of the License, or
  10.  * (at your option) any later version.
  11.  *
  12.  * This program is distributed in the hope that it will be useful,
  13.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15.  * GNU General Public License for more details.
  16.  *
  17.  * You should have received a copy of the GNU General Public License
  18.  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  19.  *
  20. */
  21.  
  22. const int ON=1, OFF=0;
  23. const int RELAY=2, LED=13; //Relay PIN 2, LED PIN 13
  24. const int TRIG=9, ECHO=10; //Trig PIN 9, Echo PIN 10
  25.  
  26. long cm=0;
  27. int current_state=OFF, lap=0;
  28.  
  29. int error_margin=2;
  30. int distance=65; // Distancia máxima para activar el ventilador en cm.
  31. int frequency=500; //Frecuencia en milisegundos
  32.  
  33. void setup(){
  34. pinMode(RELAY, OUTPUT);
  35. pinMode(LED, OUTPUT);
  36. pinMode(TRIG, OUTPUT);
  37. pinMode(ECHO, INPUT);
  38. digitalWrite(RELAY, HIGH); //OFF
  39. Serial.begin(9600);
  40. }
  41.  
  42. // Hacer parpadear el LED
  43. void alert(){
  44. digitalWrite(LED, HIGH);
  45. delay(500);
  46. digitalWrite(LED, LOW);
  47. }
  48.  
  49. //Interruptor para el ventilador
  50. void setFan(int state){
  51. if (state==ON){
  52. if (current_state==OFF){
  53. digitalWrite(RELAY, LOW); //ON
  54. current_state=ON;
  55. alert();
  56. }
  57. }else{
  58. if (current_state==ON){
  59. digitalWrite(RELAY, HIGH); //OFF
  60. current_state=OFF;
  61. alert();
  62. }
  63. }
  64. }
  65.  
  66. long ranging(){
  67. long duration;
  68.  
  69. // Un pulso a nivel bajo asegura un pulso a nivel alto limpio.
  70. digitalWrite(TRIG, LOW);
  71. delayMicroseconds(2);
  72.  
  73. // Un pulso a nivel alto >=2 ms dispara un ping en el sensor.
  74. digitalWrite(TRIG, HIGH);
  75. delayMicroseconds(10);
  76. digitalWrite(TRIG, LOW);
  77.  
  78. duration = pulseIn(ECHO, HIGH);
  79.  
  80. // La velocidad del sonido 340 m/s (29 ms/cm).
  81. // La distancia del objeto es la mitad de la distancia total.
  82. return duration / 29 / 2;
  83. }
  84.  
  85.  
  86.  
  87. void loop(){
  88. //Obtener la distancia
  89. cm=ranging();
  90. Serial.println(cm);
  91.  
  92. if (cm<=distance){
  93. lap++;
  94. }else{
  95. lap--;
  96. }
  97.  
  98. if (lap>=error_margin){
  99. lap=error_margin;
  100. setFan(ON);
  101. }
  102.  
  103. if (lap<=-error_margin){
  104. lap=-error_margin;
  105. setFan(OFF);
  106. }
  107.  
  108. delay(frequency);
  109. }
  110.  

El código actualizado está disponible en mi cuenta de Launchpad GitHub en el siguiente enlace: Código Arduino: Activando un ventilador por presencia

Galería

Comparte este artículo