15
Arduino Final Project By : Mhmoud Salama. Hussam Hamdy.

Temperature sensor with a led matrix display (arduino controlled)

Embed Size (px)

DESCRIPTION

Basic idea was to build a simple, cheap temperature sensing circuit-manually calibrated. then display the temperature in real-time on an 8x8 LED matrix.

Citation preview

Page 1: Temperature sensor with a led matrix display (arduino controlled)

Arduino Final Project

By: Mhmoud Salama. Hussam Hamdy.

Page 2: Temperature sensor with a led matrix display (arduino controlled)

Main Project• To make a temperature sensor that outputs the reading

as a scrolling message on a LED matrix.• We used a LED matrix which is a common anode 8x8

display.• Wired on breadboards.

Page 3: Temperature sensor with a led matrix display (arduino controlled)

Main Concept

• Use of two shift registers (2x 74HC595) to pass the encoded-charachter data serially from the arduino as a parallel output to the rows and Columns of an 8x8 LED matrix.

• The arduino handles the scrolling of the message and the periodic time-multiplexing of rows and columns (refresh rate = 100Hz), using a periodic interrupt, to which the function “screenUpdate” is attached.

• So , we calibrated the sensor using a potentiometer through the serial monitor window.

• then the complete circuit is connected.

Page 4: Temperature sensor with a led matrix display (arduino controlled)

Wiring Diagram

Page 5: Temperature sensor with a led matrix display (arduino controlled)

74HC595-Shift Registers

-- An 8-bit shift register with Serial to parallel capability.-- We use two of them, Each one controlling eight rows/columns.

Page 6: Temperature sensor with a led matrix display (arduino controlled)

LM335-Temperature Sensor

• Calibration:

-- We connect the calibration circuit , and connected it’s output as an analogue input to the arduino.

-- With a potentiometer, and a small code... we used the serial monitor of arduino to fine-tune the sensor to give an acceptable reading (28°C for average room temperature).

Page 7: Temperature sensor with a led matrix display (arduino controlled)

CODE• #include <TimerOne.h> • #include <charEncodings.h> // Each charachter and it’s (8x8 LED matrix)-mapped code.

• // BASIC PIN CONFIGURATION • // AND DECLARATIONS

• //Pin connected to Pin 12 of 74HC595 (Latch)• int latchPin = 8;• //Pin connected to Pin 11 of 74HC595 (Clock)• int clockPin = 12;• //Pin connected to Pin 14 of 74HC595 (Data)• int dataPin = 11;

• // pin for the potentiometer to control the scrolling speed• int potPin = 5;

• // pin for reading the temperature• int tempPin = 4;

• // this is the gobal array that represents what the matrix• // is currently displaying• uint8_t led[8];

Page 8: Temperature sensor with a led matrix display (arduino controlled)

CODE• void setup()• {

//set pins to output• pinMode(latchPin, OUTPUT);• pinMode(clockPin, OUTPUT);• pinMode(dataPin, OUTPUT);• pinMode(potPin, INPUT);• pinMode(tempPin, INPUT);• analogReference(INTERNAL);

• // attach the screenUpdate function to the interrupt timer• // Period=10,000micro-second /refresh rate =100Hz• Timer1.initialize(10000); • Timer1.attachInterrupt(screenUpdate);• }

Page 9: Temperature sensor with a led matrix display (arduino controlled)

CODE• //Continuous LOOP• void loop()• {• long counter1 = 0;• long counter2 = 0;• char reading[10];• char buffer[18];

• if (counter1++ >=100000) {• counter2++;• }• if (counter2 >= 10000) {• counter1 = 0;• counter2 = 0;• }

getTemp(reading); displayScrolledText(reading);}

Page 10: Temperature sensor with a led matrix display (arduino controlled)

The (displayScrolledText ) Function

• void displayScrolledText(char* textToDisplay)

• {

• int textLen = strlen(textToDisplay);• char charLeft, charRight;

• // scan through entire string one column at a time and call• // function to display 8 columns to the right• for (int col = 1; col <= textLen*8; col++)• {• • // if (col-1) is exact multiple of 8 then only one character• // involved, so just display that one

• if ((col-1) % 8 == 0 )• {• char charToDisplay = textToDisplay[(col-1)/8];• • for (int j=0; j<8; j++)• {• led[j] = charBitmaps[charToDisplay][j];• }

• }

• else• {• int charLeftIndex = (col-1)/8;• int charRightIndex = (col-1)/8+1;

• charLeft = textToDisplay[charLeftIndex];

Page 11: Temperature sensor with a led matrix display (arduino controlled)

• // check we are not off the end of the string• if (charRightIndex <= textLen)• {• charRight = textToDisplay[charRightIndex];• }• else• {• charRight = ' ';• }• setMatrixFromPosition(charLeft, charRight, (col-1) % 8);• }

• int delayTime = analogRead(potPin);

• delay (delayTime);• }

• }

Page 12: Temperature sensor with a led matrix display (arduino controlled)

• void shiftIt(byte dataOut) {• // Shift out 8 bits LSB first,• // on rising edge of clock

• boolean pinState;

• //clear shift register read for sending data• digitalWrite(dataPin, LOW);

• // for each bit in dataOut send out a bit• for (int i=0; i<=7; i++) {• //set clockPin to LOW prior to sending bit• digitalWrite(clockPin, LOW);

• // if the value of DataOut and (logical AND) a bitmask• // are true, set pinState to 1 (HIGH)• if ( dataOut & (1<<i) ) {• pinState = HIGH;• }• else {• pinState = LOW;• }

• //sets dataPin to HIGH or LOW depending on pinState• digitalWrite(dataPin, pinState);• //send bit out on rising edge of clock• digitalWrite(clockPin, HIGH);• digitalWrite(dataPin, LOW);• }

Page 13: Temperature sensor with a led matrix display (arduino controlled)

• //stop shifting• digitalWrite(clockPin, LOW);• }

• boolean isKeyboardInput() {

• // returns true is there is any characters in the keyboard buffer• return (Serial.available() > 0);• }

• }

• // terminate the string• readString[index] = '\0';• }

Page 14: Temperature sensor with a led matrix display (arduino controlled)

• void setMatrixFromPosition(char charLeft, char charRight, int col) {

• // take col left most columns from left character and bitwise OR with 8-col from• // the right character• for (int j=0; j<8; j++) {• led[j] = charBitmaps[charLeft][j] << col | charBitmaps[charRight][j] >> 8-col;• }• }

• void screenUpdate() {

• uint8_t col = B00000001;

• for (byte k = 0; k < 8; k++) {• digitalWrite(latchPin, LOW); // Open up the latch ready to receive data

• shiftIt(~led[7-k]);• shiftIt(col);

• digitalWrite(latchPin, HIGH); // Close the latch, sending the registers data to the matrix• col = col << 1;• }• digitalWrite(latchPin, LOW);• shiftIt(~0 );• shiftIt(255);• digitalWrite(latchPin, HIGH);• }

Page 15: Temperature sensor with a led matrix display (arduino controlled)

• void getTemp(char* reading) {

• int span = 20;• int aRead = 0;• long temp;• char tmpStr[10];

• // average out several readings• for (int i = 0; i < span; i++) {• aRead = aRead+analogRead(tempPin);• }

• aRead = aRead / span;

• temp = ((100*1.1*aRead)/1024)*10;

• reading[0] = '\0';

• itoa(temp/10, tmpStr, 10);• strcat(reading,tmpStr);• strcat(reading, ".");• itoa(temp % 10, tmpStr, 10);• strcat(reading, tmpStr);• strcat(reading, "C");

• }