====== Interface Capteur Arduino ====== ===== Auteur ===== * Vincent WU (wu.vincent10[at]gmail.com) ===== But du projet ===== Le but de ce projet est de réaliser une interface qui permet d'afficher les valeurs des capteurs (capteurs grove) présent dans le FABLAB. Nous avons à notre disposition dans le FABLAB différent capteur tel que des capteurs de température, d'humidité... ===== Matériels nécessaires ===== ^ - 1 Arduino Uno 9.64 € ^ - 1 Base Shield 9.70 € ^ - 1 Écran LCD Liquid Crystal ^ - 1 Breadboard ^ | {{http://upload.wikimedia.org/wikipedia/commons/3/38/Arduino_Uno_-_R3.jpg?direct&200}} | {{http://www.seeedstudio.com/document/pics/base%20shield.jpg?150x100&nocache}} | {{https://cdn.instructables.com/FUX/7IV0/IDK2K86Q/FUX7IV0IDK2K86Q.MEDIUM.jpg?150x100&nocache}}| {{http://boutique.semageek.com/61-340-thickbox_default/breadboard-400-contacts.jpg?150x100&nocache}} | ^ - 1 Capteur de Température et Humidité ^ - 1 Capteur de réflexion Infrarouge ^ - 1 Capteur de qualité ^ | {{http://www.thermovarroa.com/images/projet/version2/electronique/Temp_humi_pro.jpg?150x100&nocache}} | {{http://www.lextronic.fr/imageslib/seeeduino/WLS07061P.jpg?150x100&nocache}} | {{https://www.gotronic.fr/ori-capteur-de-qualite-d-air-grove-101020078-23838.jpg?150x100&nocache}}| ^ - 1 Capteur de Luminosité ^ - 1 Capteur de UV ^ - 1 Capteur de gaz de monoxyde carbone ^ | {{http://derb.io/image/cache/data/products/capteurLIGHT-400x400.jpg?150x100&nocache}} | {{https://www.gotronic.fr/ori-capteur-uv-grove-101020043-20632.jpg?150x100&nocache}} | {{https://www.gotronic.fr/ori-capteur-de-gaz-mq9-grove-101020045-22957.jpg?150x100&nocache}}| ^ - 1 Capteur de Gesture ^ ^ ^ | {{https://github.com/SeeedDocument/Grove_Gesture_V_1.0/raw/master/img/400px-Gesture_sensor_3.png?150x100&nocache}} | | | ===== Montage à réaliser pour l'écran LCD ===== Pour le montage à réaliser pour l'écran LCD, il vous faudra : - 1 potentiomètre de 100kΩ - 1 résistance de 2.2kΩ - Des câbles Le montage à réaliser et le suivant : {{https://s3-eu-west-1.amazonaws.com/sdz-upload/prod/upload/LCDF1.png}} ====== Code isolé pour chaque capteur ====== ===== Code pour le capteur de Température et d'Humidité ===== Ci-dessous, c'est le code pour afficher les valeurs de température et d'humidité sur l'écran LCD. #include "Arduino.h" #include #include #define DHTPIN A1 #define DHTTYPE DHT22 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); DHT dht(DHTPIN, DHTTYPE); void setup() { lcd.begin(16,2); Serial.begin(9600); dht.begin(); } void loop() { float h = dht.readHumidity(); float t = dht.readTemperature(); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Capt Temp Humid"); lcd.setCursor(0, 1); lcd.print("H="); lcd.print(h); // Affichage de la valeur de la de l'humidité en % lcd.print("%"); lcd.print("T="); lcd.print(t); // Affichage de la valeur de la température en °C lcd.print("C"); delay(5000); } Cliquez pour avoir la librairie {{:wiki:projets:interfacecapteurarduino:dth.zip}}. ===== Code pour le capteur de réflexion Infrarouge ===== Ci-dessous, c'est le code pour afficher si il y a présence ou non d'un objet. Il y a le potentiomètre sur le module (à régler pour détecter plus ou moins une distance). #include "Arduino.h" #include #define IR_DIST_DIGIT_PIN 6 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { lcd.begin(16,2); Serial.begin(9600); pinMode(IR_DIST_DIGIT_PIN,INPUT); } void loop() { lcd.clear(); lcd.setCursor(0, 0); if(digitalRead(IR_DIST_DIGIT_PIN)==LOW) { lcd.print("Somebody is here."); } else { lcd.print("Nobody."); } delay(500); } ===== Code pour le capteur de Qualité de l'Air ===== Ci-dessous, c'est le code pour afficher la qualité de l'air. #include "Arduino.h" #include #define AIR_QUAL_PIN A0 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); int lect_air_qual_1 = 0; int lect_air_qual_2 = 0; int lect_air_qual_3 = 0; int moy_air = 0; void setup() { lcd.begin(16,2); Serial.begin(9600); pinMode(AIR_QUAL_PIN, INPUT); } void qualite_air() { lect_air_qual_1 = analogRead(AIR_QUAL_PIN); delay(500); lect_air_qual_2 = analogRead(AIR_QUAL_PIN); delay(500); lect_air_qual_3 = analogRead(AIR_QUAL_PIN); moy_air = (lect_air_qual_1 + lect_air_qual_2 + lect_air_qual_3)/3; lcd.clear(); lcd.setCursor(0, 0); lcd.print("Qualite Air="); lcd.print(moy_air); lcd.setCursor(0,1); if (moy_air <= 45) { lcd.print("Outdoor air"); } else if(moy_air <= 72 && moy_air >= 46) { lcd.print("Indoor Imurity"); } else if(moy_air >= 73 && moy_air <= 110) { lcd.print("Bad qualite"); } else if(moy_air >= 111 && moy_air <= 140) { lcd.print("Very bad qualite"); } else if(moy_air >= 141) { lcd.print("Move fresh air"); } delay(5000); } void loop() { qualite_air(); } ===== Code pour le capteur de Luminosité ===== Ci-dessous, c'est le code pour afficher la luminosité dans la pièce. #include "Arduino.h" #include #define PHOTOPIN A3 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { lcd.begin(16,2); Serial.begin(9600); pinMode(PHOTOPIN, INPUT); } void photo_sensor(void) { float photo = 0.0; photo = (analogRead(PHOTOPIN) * 100.0) / 1023.0; Serial.println("Light : "); Serial.println(photo); Serial.print("\n"); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Light : "); lcd.setCursor(8, 0); lcd.print(photo); lcd.print("%"); delay(1000); } void loop() { photo_sensor(); } ===== Code pour le capteur d'UV ===== Ci-dessous, c'est le code pour afficher l'indice d'UV. #include "Arduino.h" #include #define UVPIN A2 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { lcd.begin(16,2); Serial.begin(9600); pinMode(UVPIN, INPUT); } void UV_sensor(void) { float sensorValue; float sum=0; float indexUV = 0; for(int i=0; i<1024; i++) { sensorValue=analogRead(UVPIN); sum=sensorValue+sum; delay(1); } float meanVal = sum/1024; indexUV = -((meanVal*1000)/(4.3*-83))/21; Serial.print("UV index : "); Serial.print(indexUV); Serial.print("\n"); lcd.clear(); lcd.setCursor(0, 0); lcd.print("UV index : "); lcd.setCursor(11, 0); lcd.print(indexUV); delay(20); } void loop() { UV_sensor(); } ===== Code pour le capteur de Gaz ===== Ci-dessous, c'est le code pour afficher la quantité de gaz (monoxyde de carbone). Il faut étalonner le capteur avec le potentiomètre présent sur le capteur pour avoir les bonnes valeur de monoxyde de carbone présent. #include "Arduino.h" #include #define GASPIN A0 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { lcd.begin(16,2); Serial.begin(9600); pinMode(GASPIN, INPUT); } void gas_sensor (void) { float gas_value = 0.0; gas_value = (analogRead(GASPIN) * 100.0) / 1023.0; Serial.println("Gas CO :"); Serial.println(gas_value); Serial.print("\n"); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Gas CO :"); lcd.setCursor(9, 0); lcd.print(gas_value); lcd.print("%"); delay(1000); } void loop() { gas_sensor(); } ===== Code pour le capteur de Gesture ===== Ci-dessous, c'est le code pour afficher les mouvements effectué. #include #include #include "Arduino.h" #include #define GES_REACTION_TIME 500 // You can adjust the reaction time according to the actual circumstance. #define GES_ENTRY_TIME 800 // When you want to recognize the Forward/Backward gestures, your gestures' reaction time must less than GES_ENTRY_TIME(0.8s). #define GES_QUIT_TIME 1000 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { lcd.begin(16,2); Serial.begin(9600); Serial.println("\nPAJ7620U2 TEST DEMO: Recognize 9 gestures."); error = paj7620Init(); // initialize Paj7620 registers if (error) { Serial.print("INIT ERROR,CODE:"); Serial.println(error); } else { Serial.println("INIT OK"); } } void gesture_sensor(void) { uint8_t data = 0, data1 = 0, error; error = paj7620ReadReg(0x43, 1, &data); if (!error) { switch (data) { case GES_RIGHT_FLAG: delay(GES_ENTRY_TIME); paj7620ReadReg(0x43, 1, &data); Serial.println("Gesture : "); lcd.print("Gesture : "); if(data == GES_FORWARD_FLAG) { Serial.println("Forward"); lcd.print("Forward"); delay(GES_QUIT_TIME); } else if(data == GES_BACKWARD_FLAG) { Serial.println("Backward"); lcd.print("Backward"); delay(GES_QUIT_TIME); } else { Serial.println("Right"); lcd.print("Right"); } break; case GES_LEFT_FLAG: delay(GES_ENTRY_TIME); paj7620ReadReg(0x43, 1, &data); if(data == GES_FORWARD_FLAG) { Serial.println("Forward"); lcd.print("Forward"); delay(GES_QUIT_TIME); } else if(data == GES_BACKWARD_FLAG) { Serial.println("Backward"); lcd.print("Backward"); delay(GES_QUIT_TIME); } else { Serial.println("Left"); lcd.print("Left"); } break; case GES_UP_FLAG: delay(GES_ENTRY_TIME); paj7620ReadReg(0x43, 1, &data); if(data == GES_FORWARD_FLAG) { Serial.println("Forward"); lcd.print("Forward"); delay(GES_QUIT_TIME); } else if(data == GES_BACKWARD_FLAG) { Serial.println("Backward"); lcd.print("Backward"); delay(GES_QUIT_TIME); } else { Serial.println("Up"); lcd.print("Up"); } break; case GES_DOWN_FLAG: delay(GES_ENTRY_TIME); paj7620ReadReg(0x43, 1, &data); if(data == GES_FORWARD_FLAG) { Serial.println("Forward"); lcd.print("Forward"); delay(GES_QUIT_TIME); } else if(data == GES_BACKWARD_FLAG) { Serial.println("Backward"); lcd.print("Backward"); delay(GES_QUIT_TIME); } else { Serial.println("Down"); lcd.print("Down"); } break; case GES_FORWARD_FLAG: Serial.println("Forward"); lcd.print("Forward"); delay(GES_QUIT_TIME); break; case GES_BACKWARD_FLAG: Serial.println("Backward"); lcd.print("Backward"); delay(GES_QUIT_TIME); break; case GES_CLOCKWISE_FLAG: Serial.println("Clockwise"); lcd.print("Clockwise"); break; case GES_COUNT_CLOCKWISE_FLAG: Serial.println("anti-clockwise"); lcd.print("anti-clockwise"); break; default: paj7620ReadReg(0x44, 1, &data1); if (data1 == GES_WAVE_FLAG) { lcd.print("Wave"); } break; } } Serial.println("\n"); delay(100); } void loop() { gesture_sensor(); }