Es mostren els missatges amb l'etiqueta de comentaris Domòtica. Mostrar tots els missatges
Es mostren els missatges amb l'etiqueta de comentaris Domòtica. Mostrar tots els missatges

5 de maig 2015

Sensor de presència. PIR

PIR = Passive InfraRed sensor 
Aquests sensors detecten canvis de temperatura dins la zona que monitoritzen, provocats per la presència de persones o d'objectes en moviment. Són molt utilitzats en sistemes d'alarma o control d'accessos.
El seu angle de visió és de 90º, i el seu abast entre 6 i 9 m. La seva sensibilitat es pot regular amb els potenciòmetres que porta incorporats.

Connexió a Arduino
Es connecta a un pin digital (que s'ha de declarar com a entrada al programa). També es pot connectar a un pin d'entrada analògic.
Es connecta directament, sense resistències.

Quan s'activa envia un senyal durant un temps, que es pot regular amb un dels potenciòmetres que te al darrera, l'altre permet regular la distància de detecció.

Aquesta va ser la meva primera proba: encesa d'un LED durant el temps que dura aquest senyal


Altra aplicació: Llum d’encesa automàtica
En apropar-se algú a la porta del bany, és detectat pel sensor i el llum s’encén. Quan el sensor torna a detectar moviment és que l’usuari surt del bany, i el llum s’apaga.
La pausa de 3 segons es per deixar temps a que el sensor deixi d'enviar senyal 1.
int llum_bany = 5; 
int sensor_pir = 4;

void setup()
{
  pinMode(llum_bany,OUTPUT);
  pinMode(sensor_pir,INPUT);
}

void loop()
{
  int presencia = digitalRead(sensor_pir);
  if (presencia == 1)
  {
    digitalWrite(llum_bany,HIGH);
    delay(3000);
    while(presencia == 0)
    {
      if (presencia == 1)
      {
        digitalWrite(llum_bany,LOW);
        delay(3000);
      }
    }
  }
}
Per assegurar que quan algú surt del bany no queda ningú a dins i es pot tancar el llum, J Santiago en el seu TR va afegir una variable al programa que suma 1 cada cop que algú entra i resta 1 cada cop que algú surt. La llum només s'apaga quan aquesta variable = 0.

1 de maig 2015

Il·luminació analògica

El nivell d'il·luminació artificial (intensitat de sortida leds) ha de ser inversament proporcional al nivell de llum ambiental (lectura sensor).
És a dir: quanta més llum capti el sensor, menys intensitat de llum han de tenir els LEDs: la relació entre tots dos paràmetres ha de ser inversament proporcional.



Definició de valors al programa:
int bombetes = 9; // pin de connexió leds (ha de ser PWM)
int sensor_llum = A4 // pin de connexió sensor (ha de ser analògic)

Comprobem el funcionament dels LEDs:
Fem un blink al pin 9 per comprobar que aquest és el pin correcte i/o les connexions.

Comprobem els valors del sensor de llum per decidir els llindars:
void setup()
{
  Serial.begin(9600); // inici de la comunicació sèrie
}

void loop()
{
  int lectura=analogRead(sensor_llum);
  Serial.println(lectura); // monitorització de les dades del sensor
  delay(100); // petita pausa entre bucles (lectures)
}
Idea de programació:

El nivell d'il·luminació artificial (entre 0 i 255) ha de ser inversament proporcional al nivell de llum ambiental (entre 0 i 1023).
És a dir: analogWrite (bombetes) ha de ser inversament proporcional a analogRead (sensor_llum)

Al void loop cal crear dues variables:
int entradallum = analogRead (sensor_llum)  
// per guardar la lectura del sensor en cada execució
int sortidallum = analogWrite (bombetes) 
// per assignar el valor de la sortida pel pin dels leds
 
Programa bàsic
El valor de sortidallum ha de ser:
sortidallum = map (entradallum,0,1023,255,0);
al valor mínim del sensor (0) li ha de correspondre el valor màxim de l'actuador (255)
al valor màxim del sensor (1023) li ha de correspondre el valor mínim de l'actuador (0)

Programa millorat
Proposo el següent:

Cal definir dos llindars:
int dia = 800;  //valor sensor a partir del que es començaran a encendre els leds
int nit = 200;  // valor sensor per sota del qual la il·luminació dels leds serà màxima

Condició de funcionament:
if (entradallum < dia)
{ sortidallum = 0; }
else 
{ 
  if (entradallum > nit)
  { sortidallum = 255; }
  else 
  {
    sortidallum = map (entradallum,nit,dia,255,0); 
  }
}

20 d’abr. 2015

Indicador de climatització

Encesa digital de LED RGB en funció del valor analògic mesurat per sensor de temperatura fet amb resistència NTC (termistor): En funció dels llindars de calor i de fred establerts, s’activa un o altre dels pins de connexió del LED i s’encén de color vermell (indicador de calefacció en marxa), blau (indicador de refrigeració) o verd (indicador de standby, climatització no necessària per temperatura dins la zona de confort).



Definició de valors al programa:
int R = 10; // pin de connexió vermell led
int G = 11 ;  // pin de connexió verd led
int B = 12;  // pin de connexió llau led
int sensor_temperatura = A1;  // pin de connexió sensor
int llindar_fret = 670;  // valor sensor per sota del qual fa fret
int llindar_calor = 710;  // valor sensor per sobre del qual fa calor


Comprobem el funcionament dels LEDs:
Fem un blink encenent un color cada cop per comprobar que els pins són correctes i/o les connexions:
void setup() 
{                
  pinMode(R,OUTPUT);     
  pinMode(G,OUTPUT); 
  pinMode(B,OUTPUT); 
}

Comprobem els valors del sensor de temperatura per decidir els llindars:
void setup()
{
 Serial.begin (9600); //comunicació sèrie
}

void loop() 
{
  int temperatura = analogRead(sensor_temperatura);
  Serial.println(temperatura); 
  delay(100);
}

Idea de programació:

Si la temperatura està per sota del llindar_fret s'ha d'encendre la calefacció (led vermell), si està per sobre del llindar_calor s'ha d'encendre la refrigeració (led blau), si no s'ha d'encendre el led verd:
void loop() 
{
  int temperatura = analogRead(sensor_temperatura);
  //Serial.println(temperatura);
  if (temperatura < llindar_fret)
  {
    digitalWrite(R, HIGH); //led vermell encés (calefacció)
    digitalWrite(G, LOW);
    digitalWrite(B, LOW);
  }
  else
  {
    if (temperatura > llindar_calor)
    {
      digitalWrite(R, LOW); 
      digitalWrite(G, LOW); 
      digitalWrite(B, HIGH); // led blau encés (refrigeració)
    }
    else
    {
      digitalWrite(R, LOW); 
      digitalWrite(G, HIGH); // led verd encés (standby)
      digitalWrite(B, LOW); 
    }  
  //delay(100);
  }
}

19 d’abr. 2015

Domòtica. Pins i material

pin
tipus
nom
 descripció
0
comunicació RX connexió a TX  mòdul bluetooth
1
comunicació TX connexió a RX  mòdul bluetooth
2
s. moviment pir acivació llum bany
3


4



5
sortida-led
bany
led blau en funció de s.PIR
6
PWM-servo porta apertura porta (servo estàndard)
7


8



9
PWM-2leds
bombetes
 comportament analògic en funció nivell llum
10
sortida-RGB
R
led RGB indicador de calefacció (vermell)
11
sortida-RGB G
 led RGB indicador de standby (verd)
12
sortida-RGB B
 led RGB indicador de refrigeració (blau)
13
brunzidor? alarma alarma terra seca (?)
A0



A1
termistor s_temperatura lindar fred: 670 / llindar calor: 710
A2



A3
s. humitat humitat llindar humitat: 300 (actua sobre pin 10)
A4
s. llum sensor_llum llindar dia: 800 / llindar nit: 200
A5
s.infrarojos distancia llindar distancia: 300