Arduino Distance and Temperature Sensor + 7 Segment Display
by 724076 in Circuits > Arduino
1235 Views, 4 Favorites, 0 Comments
Arduino Distance and Temperature Sensor + 7 Segment Display
This project was something that I had thought about doing for a long time to make something that is relatively simple into something that is complicated just by adding a few extra parts. About a year ago I originally made a distance sensor with a single 7 segment display that would display the distance in inches. This is a better version of that which is more accurate and is in centimetres. I chose a max distance it could show of 99 cm because that's about as far as I've seen the distance sensor be accurate to in my experience.
Supplies
- An Arduino
- 2x 7 Segment Displays (The ones I used are common Anode)
- 2x 1K Ohm Resistor
- A TMP36 Temperature Sensor
- An Ultrasonic Distance Sensor
Assembling the Circuit
I'll explain the way that the 2 7 Seg displays work when I go over the code. The general idea is that the same terminals a-f are connected between the two displays and the Arduino, the exception are the common pins which are also attached to the Arduino.
The temperature sensor is much simpler as you just need to attach one end into power, the other into ground and the center one into an Analog In (I used A0).
The distance sensor just needs power, ground, a digital in and digital out.
The Code
The code for this is complex but not difficult to understand if you know the basics of how a 7 Seg display works.
The basic idea of using the 2 displays is that they cannot be on for at the same moment or else the same value would be displayed on both. However, if we have it constantly changing from off to on so fast that we can't see, it would seem to the human eye to be on.
This is the code that I used:
int aPin = 2; //Variables int bPin = 3; int cPin = 4; int dPin = 5; int ePin = 6; int fPin = 7; int gPin = 8; int firstPin = 9; int secondPin = 10; int trigPin = 11; int echoPin = 12; long duration, cm; int reading; float voltage = 0, temperature = 0, change, secondVal; void setup() { pinMode(aPin, OUTPUT); pinMode(bPin, OUTPUT); pinMode(cPin, OUTPUT); pinMode(dPin, OUTPUT); pinMode(ePin, OUTPUT); pinMode(fPin, OUTPUT); pinMode(gPin, OUTPUT); pinMode(firstPin, OUTPUT); pinMode(secondPin, OUTPUT); // Ultrasonic Setup pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output pinMode(echoPin, INPUT); // Sets the echoPin as an Input // Temperature Sensor pinMode(A0, INPUT); } void loop() { // Temperature Sensor temperature = map(((analogRead(A0) - 20) * 3.04), 0, 1023, -40, 125); // Distance Sensor // Clears the trigPin digitalWrite(trigPin, LOW); delayMicroseconds(2); // Sets the trigPin on HIGH state for 10 micro seconds digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); // Reads the echoPin, returns the sound wave travel time in microseconds duration = pulseIn(echoPin, HIGH); cm = microsecondsToCentimeters(duration, temperature); //Uses the function to determine the distance if (cm>=0&&cm<=9){ digitalWrite(firstPin, HIGH); // Turns on the Display zero(); // Sets the value to display delay(5); // Leaves it on for 5 miliseconds digitalWrite(firstPin, LOW); // Turns the display off reset(); // Resets the Display change = 0; // Helps calculate the next digit } else if (cm>=10&&cm<=19){ digitalWrite(firstPin, HIGH); one(); delay(5); digitalWrite(firstPin, LOW); reset(); change = 10; } else if (cm>=20&&cm<=29){ digitalWrite(firstPin, HIGH); two(); delay(5); digitalWrite(firstPin, LOW); reset(); change = 20; } else if (cm>=30&&cm<=39){ digitalWrite(firstPin, HIGH); three(); delay(5); digitalWrite(firstPin, LOW); reset(); change = 30; } else if (cm>=40&&cm<=49){ digitalWrite(firstPin, HIGH); four(); delay(5); digitalWrite(firstPin, LOW); reset(); change = 40; } else if (cm>=50&&cm<=59){ digitalWrite(firstPin, HIGH); five(); delay(5); digitalWrite(firstPin, LOW); reset(); change = 50; } else if (cm>=60&&cm<=69){ digitalWrite(firstPin, HIGH); six(); delay(5); digitalWrite(firstPin, LOW); reset(); change = 60; } else if (cm>=70&&cm<=79){ digitalWrite(firstPin, HIGH); seven(); delay(5); digitalWrite(firstPin, LOW); reset(); change = 70; } else if (cm>=80&&cm<=89){ digitalWrite(firstPin, HIGH); eight(); delay(5); digitalWrite(firstPin, LOW); reset(); change = 80; } else if (cm>=90&&cm<=99){ digitalWrite(firstPin, HIGH); nine(); delay(5); digitalWrite(firstPin, LOW); reset(); change = 90; } else{ digitalWrite(firstPin, HIGH); digitalWrite (gPin, LOW); delay(5); digitalWrite(firstPin, LOW); reset(); change = 200; } secondVal = cm - change; if (secondVal==0){ digitalWrite(secondPin, HIGH); zero(); delay(5); digitalWrite(secondPin, LOW); reset(); } else if (secondVal==1){ digitalWrite(secondPin, HIGH); one(); delay(5); digitalWrite(secondPin, LOW); reset(); } else if (secondVal==2){ digitalWrite(secondPin, HIGH); two(); delay(5); digitalWrite(secondPin, LOW); reset(); } else if (secondVal==3){ digitalWrite(secondPin, HIGH); three(); delay(5); digitalWrite(secondPin, LOW); reset(); } else if (secondVal==4){ digitalWrite(secondPin, HIGH); four(); delay(5); digitalWrite(secondPin, LOW); reset(); } else if (secondVal==5){ digitalWrite(secondPin, HIGH); five(); delay(5); digitalWrite(secondPin, LOW); reset(); } else if (secondVal==6){ digitalWrite(secondPin, HIGH); six(); delay(5); digitalWrite(secondPin, LOW); reset(); } else if (secondVal==7){ digitalWrite(secondPin, HIGH); seven(); delay(5); digitalWrite(secondPin, LOW); reset(); } else if (secondVal==8){ digitalWrite(secondPin, HIGH); eight(); delay(5); digitalWrite(secondPin, LOW); reset(); } else if (secondVal==9){ digitalWrite(secondPin, HIGH); nine(); delay(5); digitalWrite(secondPin, LOW); reset(); } else{ digitalWrite(secondPin, HIGH); digitalWrite (gPin, LOW); delay(5); digitalWrite(secondPin, LOW); reset(); } } long microsecondsToCentimeters(long microseconds, float temp){ // The speed of sound is 331.4 0.6*Temperature (in m/s). // The value 0.0001 is used to go from m/s to cm/microsecond. // The ping travels out and back, so to find the distance of the // object we take half of the distance travelled. return (microseconds*0.0001*(331.4+0.6*temp))/2; } void reset (){ digitalWrite (aPin, HIGH); digitalWrite (bPin, HIGH); digitalWrite (cPin, HIGH); digitalWrite (dPin, HIGH); digitalWrite (ePin, HIGH); digitalWrite (fPin, HIGH); digitalWrite (gPin, HIGH); } void nine (){ digitalWrite (aPin, LOW); digitalWrite (bPin, LOW); digitalWrite (cPin, LOW); digitalWrite (fPin, LOW); digitalWrite (gPin, LOW); } void eight (){ digitalWrite (aPin, LOW); digitalWrite (bPin, LOW); digitalWrite (cPin, LOW); digitalWrite (dPin, LOW); digitalWrite (ePin, LOW); digitalWrite (fPin, LOW); digitalWrite (gPin, LOW); } void seven(){ digitalWrite (aPin, LOW); digitalWrite (bPin, LOW); digitalWrite (cPin, LOW); } void six(){ digitalWrite (aPin, LOW); digitalWrite (cPin, LOW); digitalWrite (dPin, LOW); digitalWrite (ePin, LOW); digitalWrite (fPin, LOW); digitalWrite (gPin, LOW); } void five(){ digitalWrite (aPin, LOW); digitalWrite (cPin, LOW); digitalWrite (dPin, LOW); digitalWrite (fPin, LOW); digitalWrite (gPin, LOW); } void four(){ digitalWrite (bPin, LOW); digitalWrite (cPin, LOW); digitalWrite (fPin, LOW); digitalWrite (gPin, LOW); } void three(){ digitalWrite (aPin, LOW); digitalWrite (bPin, LOW); digitalWrite (cPin, LOW); digitalWrite (dPin, LOW); digitalWrite (gPin, LOW); } void two(){ digitalWrite (aPin, LOW); digitalWrite (bPin, LOW); digitalWrite (dPin, LOW); digitalWrite (ePin, LOW); digitalWrite (gPin, LOW); } void one(){ digitalWrite (bPin, LOW); digitalWrite (cPin, LOW); } void zero(){ digitalWrite (aPin, LOW); digitalWrite (bPin, LOW); digitalWrite (cPin, LOW); digitalWrite (dPin, LOW); digitalWrite (ePin, LOW); digitalWrite (fPin, LOW); }