Automatisé de Robot de Navigation avec gaz (MQ-2), température & capteurs d’humidité (DHT11) (8 / 12 étapes)

Étape 8: Le Code

Les bibliothèques requises pour que ce code à travailler sont :

  1. dht.h Bibliothèque pour le Module DHT11.
  2. Bibliothèque de LiquidCrystal_I2C.h pour le contrôle de l’écran LCD en utilisant le Module I2C.
  3. Bibliothèque de servo.h pour le contrôle du Servo
  4. AFMotor.h Bibliothèque pour une utilisation de l’écu de moteur L293D
  5. Bibliothèque de Wire.h qui permet de communiquer avec les Modules I2C
  6. LCD.h Bibliothèque à usage général de LCD.

Le code: (Notez s’il vous plaît mettre < > autour de dht.h par exemple #include #include de la bibliothèque doit être #include ou plutôt Télécharger la pièce jointe nommée "FinalAutoNavBotCode.ino" Merci: D)

 #include dht.h dht DHT; #include LiquidCrystal_I2C.h #include Servo.h #include AFMotor.h #include Wire.h #include LCD.h //tells the arduino what each pin use is connected to #define trigPin 13 #define echoPin 12 #define servoMainPin 10 #define BACKLIGHT_PIN 7 #define LED_ON 1 #define DHT11_PIN 5</p><p>Servo servoMain; // Define our Servo AF_DCMotor motor2(2, MOTOR12_64KHZ); // create motor #2, 64KHz pwm AF_DCMotor motor1(1, MOTOR12_64KHZ); // create motor #1, 64KHz pwm LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Addr, En, Rw, Rs, d4, d5, d6, d7, backlighpin, polarity int i = 0; int state = 0; void setup() //Sets each defined pin as an input or output so that the arduino what to expect at each pin { Serial.begin(9600); // set up Serial library at 9600 bps servoMain.attach(servoMainPin); // servo on digital pin 10 pinMode(trigPin, OUTPUT); //Unltrasonic output pinMode(echoPin, INPUT); //Ultrasonic input motor2.setSpeed(200); // set the speed to 200 motor1.setSpeed(200); // set the speed to 200 lcd.begin (16,4); // initialize the lcd lcd.setBacklight(LED_ON); // Switch on the backlight state = 0; delay(2000); //wait 2 seconds } //Ping Function to get the distance from the HC-SR04 unsigned long ping() { // Trigger the uSonic sensor (HC-SR04) to send out a ping long duration, distance; //Initial Distance measure digitalWrite(trigPin, LOW); // Added this line delayMicroseconds(1); // Added this line digitalWrite(trigPin, HIGH); // delayMicroseconds(1000); - Removed this line delayMicroseconds(1); // Added this line digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance = (duration/2) / 29.1; delay(100); //clearlcd(); return (distance); } //Forward Fuction sets motors to go forward void forward() { //Serial.println("Forward"); motor2.setSpeed(200); // set the speed to 200 motor1.setSpeed(200); // set the speed to 200 motor2.run(FORWARD); // going FORWARD motor1.run(FORWARD); // going FORWARD delay(200); botstopF(); } //Right Function sets motors for right void right() { //Serial.println("right"); motor2.setSpeed(200); // set the speed to 200 motor1.setSpeed(200); // set the speed to 200 motor2.run(BACKWARD); // going BACKWARD motor1.run(FORWARD); // going FORWARD delay(200); //botstopR(); } // Left Function sets motors for left void left() { //Serial.println("left"); motor2.setSpeed(200); // set the speed to 200 motor1.setSpeed(200); // set the speed to 200 motor2.run(FORWARD); // going FORWARD motor1.run(BACKWARD); // going BACKWARD delay(200); //botstopL(); } // Back Function sets motors going backwards void back() { //Serial.println("back"); motor2.setSpeed(200); // set the speed to 200 motor1.setSpeed(200); // set the speed to 200 motor2.run(BACKWARD); // going BACKWARD motor1.run(BACKWARD); // going BACKWARD delay(100); botstopB(); } //Function used to stop motors when going forward void botstopF() { motor2.setSpeed(0); // set the speed to 200 motor1.setSpeed(0); // set the speed to 200 motor2.run(FORWARD); // going forward motor1.run(FORWARD); // going forward delay(100); } //Function used to stop motors when going backwards, due to issue with general stop void botstopB() { motor2.setSpeed(0); // set the speed to 200 motor1.setSpeed(0); // set the speed to 200 motor2.run(BACKWARD); // going forward motor1.run(BACKWARD); // going forward delay(100); } // Clear the LCD Display void clearlcd() { lcd.clear(); lcd.home(); } // Function to gather DHT11 sensor data for temp, returns reading unsigned long DHTTemp() { int chk = DHT.read11(DHT11_PIN); Serial.println("Temparature "); Serial.println(DHT.temperature, 1); return (DHT.temperature); } // Function to gather DHT11 sensor data for humi, returns reading unsigned long DHTHum() { int chk = DHT.read11(DHT11_PIN); Serial.println("Humidity " ); Serial.println(DHT.humidity, 1); return (DHT.humidity); } // Function to gather data from the MQ-2 sensor, converts to voltage returns converted value as float float MQ2() { float sensor_volt; float sensorValue; sensorValue = analogRead(A0); sensor_volt = sensorValue/1024*5.0; Serial.println("MQ-2 Volt: " ); Serial.println(sensor_volt); return (sensor_volt); } void loop() { long int forwdis, leftdis, rightdis, temp, hum; float gas; // Used for connecting bluetooth device through bluetooth module if(Serial.available() > 0) { state = Serial.read(); Serial.print("I received: "); Serial.println(state); delay(10); } // When bluetooth connection sends 0 enters this state which is self navigation if (state == '0') { gas = MQ2(); // Runs MQ2 function saves value in gas lcd.setCursor(6,1); lcd.print("Gas:"); // Display gas on LCD display lcd.print(gas); // Prints gas temp = DHTTemp(); // Runs DHTTemp function saves value in temp lcd.setCursor(6,2); lcd.print("Temp:"); // Displays temp on LCD display lcd.print(temp); // Prints temp hum = DHTHum(); // Runs DHTHum function save value in hum lcd.setCursor(16,2); lcd.print("Humi:"); // Displays hum on LCD lcd.print(hum); // Prints Hum servoMain.write(90); // Centre Servo delay(150); forwdis = ping(); // Runs Ping fucntion reurns distance saves as forward distance Serial.println (forwdis); // Print forward distance i++; if (i == 8) // Used as LCD screen would ocasionally break, this could clear it fixing problem comment out if no issues { clearlcd(); i = 0; } if (forwdis >= 12) //If the forward dis is greater than 12 cm keep going forward { forward(); clearlcd(); lcd.setCursor(7,0); lcd.print("FORWARD"); // Display direction of movment lcd.setCursor(12,4); lcd.print(forwdis); // Print distance in cm lcd.print("CM"); } else if (forwdis < 12) //If distance is less than 12 cm then { back(); // Look left and get left distance servoMain.write(165); delay(150); leftdis = ping(); Serial.println (leftdis); // Look right and get right distance servoMain.write(15); delay(150); rightdis = ping(); Serial.println (rightdis); // Reset servo centre possition servoMain.write(90); delay(150); // If Left distance is greater than right then go left if (leftdis > rightdis) { clearlcd(); lcd.setCursor(7,0); lcd.print("LEFT"); // Display direction of movment lcd.setCursor(13,4); lcd.print(leftdis); // Print distance in cm left(); } // If right distance is greater than left distance go right else if (rightdis > leftdis) { clearlcd(); lcd.setCursor(7,0); lcd.print("RIGHT"); // Display direction of movment lcd.setCursor(13,4); lcd.print(rightdis); // Print distance in cm right(); } // If each are the same then go backwards and clear LCD else if (rightdis == leftdis) { clearlcd(); back(); } } } // If Bluetooth connection sends 1 change state into idle mode in this mode motors pause while sensors still read else if (state == '1') // If 1 Forwards { motor2.run(RELEASE); motor1.run(RELEASE); clearlcd(); lcd.setCursor(7,0); lcd.print("IDLE"); // Display direction of movment Serial.println ("IDLE"); gas = MQ2(); lcd.setCursor(6,1); lcd.print("Gas:"); lcd.print(gas); temp = DHTTemp(); lcd.setCursor(6,2); lcd.print("Temp:"); lcd.print(temp); hum = DHTHum(); lcd.setCursor(16,2); lcd.print("Humi:"); lcd.print(hum); motor2.run(RELEASE); motor1.run(RELEASE); delay(1000); } } 

Articles Liés

Framboise enregistreur PI et DHT22 la température et l’humidité avec lampe et envoyer des avertissements

Framboise enregistreur PI et DHT22 la température et l’humidité avec lampe et envoyer des avertissements

Il s'agit d'un enregistreur de température et d'humidité Raspberry Pi basé qui utilise 2 capteurs de Adafruit DHT22 (fonctionne aussi avec 1) pour les mesures. Vous pourriez avoir vu le même type d'instructions avant, mais celui-ci a une torsion. Il
Horloge de 7 segments avec affichage de la température [ds18b20 et 5 digits]

Horloge de 7 segments avec affichage de la température [ds18b20 et 5 digits]

horloge segment 5 chiffre sept avec affichage de la température.PIC16F877A fondé horloge1, haute précision température capteur ds18b202, RTC ds13073, 4 interrupteurs, option d'ajustement facile durée4, alternant la température et la durée d'affichage
Capteur d’humidité DHT11 avec un affichage à cristaux liquides facile!!!

Capteur d’humidité DHT11 avec un affichage à cristaux liquides facile!!!

Salut, les gars aujourd'hui nous allons faire de capteur d'humidité DHT11 travaillez-le avec un affichage à cristaux liquides.Il n'est pas difficile pour un débutant de câblage juste que l'écran LCD est la partie la plus difficile.Permet donc commenc
Sauvegarder les données de température et d’humidité sur MySQL avec Arduino Uno et Wifly

Sauvegarder les données de température et d’humidité sur MySQL avec Arduino Uno et Wifly

Bonjour les gars, je fais ce instructable pour les gens qui aimaient l'électronique et la botanique, avec cela, vous avez les données concernant la temperatura et l'humidité de votre verger et ce registre de données MySQL de base.Pour ce projet dont
Détecter la température et l’humidité avec Pi framboise et HTU21 / SHT21

Détecter la température et l’humidité avec Pi framboise et HTU21 / SHT21

Vous vous demandez quel est le climat ? Nous allons vérifier avec votre Pi framboise ! Ce tutoriel fournit des instructions étape par étape comment détecter la température et l'humidité avec le capteur I2C de vil prix HTU21D et ouvrir le code source
3P4W LED horloge avec affichage de la température

3P4W LED horloge avec affichage de la température

Il s'agit d'un projet d'horloge simple basé sur ti MSP430G2231. Le MSP430G2231 vient du micro-contrôleur inclus dans le kit de TI Launchpad 4,30 $. L'objectif du projet est de créer une horloge de travail avec des composants. Pour atteindre cet objec
Bricolage maison Portable Arduino café Coaster avec LED indicateur de température

Bricolage maison Portable Arduino café Coaster avec LED indicateur de température

Beaucoup de choses se produire juste en buvant du café. Les bonnes idées grandes entreprises sortent alors que les gens sont le chat buvant café. J'aime avoir le café surtout quand je suis dans le bureau. Je suis sûr que tout le monde là-bas aime caf
Enregistreur de Arduino température et d’humidité avec DHT11 et I2C afficheur

Enregistreur de Arduino température et d’humidité avec DHT11 et I2C afficheur

Il y a quelque temps j'ai trouvé une intéressante instructable sur l'enregistrement de données de température. Que j'ai eu quelques parties portant autour de mon bureau et à l'occasion de faire le Universal Shield, j'ai dit me suis dit pourquoi ne pa
Notebook Cooling Pad avec la consigne de température réglable

Notebook Cooling Pad avec la consigne de température réglable

Ce projet est sur un bloc de refroidissement pour ordinateur portable de piratage et ajout d'un capteur de température simple que contrôler le ventilateur. Un écran OLED est utilisé pour afficher la température de l'ordinateur portable (extérieur), a
Petit incubateur avec régulateur de température

Petit incubateur avec régulateur de température

nous avons quelques poulets à la maison, mais nous voulions plus nous choisissons ceux que nous voulions et décidé que nous voulions faire éclore des oeufs. Malheureusement pour moi cela voulait dire que mon envie de maintenant papa un incubateur don
7 segments horloge RTC avec affichage de la température

7 segments horloge RTC avec affichage de la température

http://www.edaboard.com/thread259183.htmlinstructables détaillée
La température DHT11 distance Wi-Fi une humidité I2C afficheur LCD 2 X 16 avec deux ESP8266 et Visuino

La température DHT11 distance Wi-Fi une humidité I2C afficheur LCD 2 X 16 avec deux ESP8266 et Visuino

ESP8266 modules sont contrôleurs seul grand peuplement faible coût avec construit en Wi-Fi, et j'ai déjà fait un clin d'oeil simple instructable avec module ESP8266 NodeMCU.L'avantage de ESP8266 sur l'Arduino et autres contrôleurs est le builtin Wi-F
Compléter une horloge numérique avec détecteur de présence (RTC - alarme - PIR - Point de rosée température - humidité -)

Compléter une horloge numérique avec détecteur de présence (RTC - alarme - PIR - Point de rosée température - humidité -)

SalutJ'ai déjà fait quelques projets de pendules à lecture digitale avec Arduino, y compris les écrans LED et LCD, mais celui-ci est plus spécial car j'ai introduit une nouvelle fonctionnalité avec un capteur de mouvement (PIR).Voir la vidéoPrincipal
Portable Arduino Uno température et capteur d’humidité avec écran LCD

Portable Arduino Uno température et capteur d’humidité avec écran LCD

Hey tout le monde. J'ai acquis beaucoup de bonnes idées d'instructables au fil des ans. Comme il s'agit de mon premier ' ible, je me dis que je voudrais partager quelque chose que j'ai fait aussi bien. Je suis cela concluez le plein spectre Laser con