Xavier Hébert
Published © GPL3+

Automated thermometer

A self-driven car that takes the temperature of the persons it crosses and alert them.

BeginnerShowcase (no instructions)7
Automated thermometer

Things used in this project

Hardware components

Arduino UNO & Genuino UNO
Arduino UNO & Genuino UNO
×1
Ultrasonic Sensor - HC-SR04 (Generic)
Ultrasonic Sensor - HC-SR04 (Generic)
×1
SG90 Micro-servo motor
SG90 Micro-servo motor
×1
Jumper wires (generic)
Jumper wires (generic)
×1
DHT11 Temperature & Humidity Sensor (3 pins)
DHT11 Temperature & Humidity Sensor (3 pins)
×1
Dual H-Bridge motor drivers L293D
Texas Instruments Dual H-Bridge motor drivers L293D
×1
Breadboard (generic)
Breadboard (generic)
×1
Servo Module (Generic)
×1
Electric Car
×1

Software apps and online services

Arduino IDE
Arduino IDE

Hand tools and fabrication machines

Soldering iron (generic)
Soldering iron (generic)
Solder Wire, Lead Free
Solder Wire, Lead Free
Tape, Electrical
Tape, Electrical
Multitool, Screwdriver
Multitool, Screwdriver

Story

Read more

Schematics

Schematic

Connections between the different parts

Schematic (image)

Connectioon between the componants (JPEG)

Code

Code

C/C++
#define ENABLE 5 // Master du controle du moteur
#define DIRA 4 // Tourne dans un sens 
#define DIRB 3 // Tourne dans l'autre

#include <Servo.h>
Servo roues; // Servo des roues 
Servo capt; // Servo des capteurs

const int trigPin = 6; // Pin Trig attache  la broche 6
const int echoPin = 7; // Pin Echo attache  la broche 7
const int neutre = 90; // Les servos reviennent neutres  90 degrs

int pTurnL = 20; // Petit tourne gauche 
int pTurnR = 160; // Petit tourne droite
int gTurnL = 50; // Gros tourne gauche 
int gTurnR = 130; // Gros tourne droite



void setup() {
  
  Serial.begin(9600);
  roues.attach(9); // Servo des roues attach  la pin 9
  roues.write(neutre);
  capt.attach(10); // Servo du capteur attach  la pin 10
  capt.write(neutre);
  pinMode(ENABLE, OUTPUT);
  pinMode(DIRA, OUTPUT);
  pinMode(DIRB, OUTPUT);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}

void loop() {
  
  long duration, distance;
  long dureUn, distaUn;
  long dureDeux, distaDeux;
  
  digitalWrite(trigPin, LOW); // Calcule la distance entre l'avant de la voiture et les obstacles.
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(echoPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration / 2) / 29.1;

   if(distance > 30) {
    Serial.print(distance);
    Serial.println(" cm, Avance"); // Si la distance est plus grande que 30cm, la voiture avance.
    
    digitalWrite(ENABLE, HIGH);
    digitalWrite(DIRA, HIGH);
    digitalWrite(DIRB, LOW);
    }

   if(distance < 15){
    Serial.print(distance);
    Serial.println(" cm, Recule"); // Si la distance est plus petite que 15cm, la voiture recule. 
    
    digitalWrite(ENABLE, HIGH); // Recule durant 0,5 seconde.
    digitalWrite(DIRA, LOW);
    digitalWrite(DIRB, HIGH);
    delay(500);

    digitalWrite(ENABLE, HIGH); // Arrêt.
    digitalWrite(DIRA, LOW);
    digitalWrite(DIRB, LOW);
    Serial.print(distance);
    Serial.println(" cm, Stop");
    
    delay(1000); 
    capt.write(pTurnL); // Petit servo tourne vers la gauche
    delay(500);

  digitalWrite(trigPin, LOW); // Mesure de la distance de gauche.
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(echoPin, LOW);
  dureUn = pulseIn(echoPin, HIGH);
  distaUn = (dureUn / 2) / 29.1;
  Serial.print(distaUn);
  Serial.println(" cm, Gauche");
  
  delay(500);
  capt.write(pTurnR); // Petit servo tourne  droite.
  delay(500);
  
  digitalWrite(trigPin, LOW); // Mesure de la distance de droite.
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(echoPin, LOW);
  dureDeux = pulseIn(echoPin, HIGH);
  distaDeux = (dureDeux / 2) / 29.1;
  Serial.print(distaDeux);
  Serial.println(" cm, Droite");
  
  delay(500);
  capt.write(neutre); // Petit servo revient  90 degrs

    if(distaUn < distaDeux){ // Se déroule si le ct gauche est plus petit que le cot droit.
      roues.write(gTurnR); // Gros servo tourne  gauche.
      delay(500);
      digitalWrite(ENABLE, HIGH); // Avance 0,5 seconde.
      digitalWrite(DIRA, HIGH);
      digitalWrite(DIRB, LOW);
      
      delay(500);

      digitalWrite(ENABLE, HIGH); // Arrêt
      digitalWrite(DIRA, LOW);
      digitalWrite(DIRB, LOW);

      roues.write(neutre); // Gros servo revient  90 degrs
      }
    if(distaDeux < distaUn){ // Se déroule si le ct droit est plus petit que le ct gauche. 
          roues.write(gTurnL); // Gros servo tourne  gauche.
      delay(500);
      digitalWrite(ENABLE, HIGH); // Avance 0,5 secondes.
      digitalWrite(DIRA, HIGH);
      digitalWrite(DIRB, LOW);
      
      delay(500);

      digitalWrite(ENABLE, HIGH); // Arrêt
      digitalWrite(DIRA, LOW);
      digitalWrite(DIRB, LOW);

      roues.write(neutre); // Gros servo revient  90 degrs.
    }
         }

         
    if(distance < 30 ){ // Se déroules si la distance est plus petite que 30cm et plus grande que 15cm.
       delay(1000);
    capt.write(pTurnL); // Petit servo tourne  gauche.
    delay(500);

     digitalWrite(trigPin, LOW); // Calcul la distance de gauche.
     delayMicroseconds(2);
     digitalWrite(trigPin, HIGH);
     delayMicroseconds(10);
     digitalWrite(echoPin, LOW);
     dureUn = pulseIn(echoPin, HIGH);
     distaUn = (dureUn / 2) / 29.1;
     Serial.print(distaUn);
     Serial.println(" cm, Gauche");
  
      delay(500);
      capt.write(pTurnR); // Petit servo tourne  droite.
      delay(500);
  
    digitalWrite(trigPin, LOW); // Calcul de la distance de droite. 
    delayMicroseconds(2);
    digitalWrite(trigPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(echoPin, LOW);
   dureDeux = pulseIn(echoPin, HIGH);
    distaDeux = (dureDeux / 2) / 29.1;
    Serial.print(distaDeux);
    Serial.println(" cm, Droite");
  
     delay(500);
     capt.write(neutre); // Petit servo revient  90 degrés

     if(distaUn < distaDeux){ // Se droule si le ct gauche est plus petit que le ct droit. 
      roues.write(gTurnR); // Gros servo tourne  gauche.
      delay(500);
      digitalWrite(ENABLE, HIGH); // Avance 0,5 seconde.
      digitalWrite(DIRA, HIGH);
      digitalWrite(DIRB, LOW);
      
      delay(500);

      digitalWrite(ENABLE, HIGH); // Arrêt
      digitalWrite(DIRA, LOW);
      digitalWrite(DIRB, LOW);

      roues.write(neutre); // Gros servo revient  90 degrs.
      }
      
     if(distaDeux < distaUn){ // Se déroule si le ct droit est plus petit que le ct gauche.
          roues.write(gTurnL); //Gros servo tourne  gauche.
      delay(500);
      digitalWrite(ENABLE, HIGH); // Avance 0,5 seconde.
      digitalWrite(DIRA, HIGH);
      digitalWrite(DIRB, LOW);
      
      delay(500);

      digitalWrite(ENABLE, HIGH); // Arrêt
      digitalWrite(DIRA, LOW);
      digitalWrite(DIRB, LOW);

      roues.write(neutre); // Gros servo revient  90 degrés.
      } 
       }
}

Credits

Xavier Hébert

Xavier Hébert

0 projects • 0 followers

Comments