15
ARDUINO FINAL PROJECT BY : MHMOUD SALAMA . HUSSAM H AMDY.

Temperature Sensor with LED matrix Display BY ►iRFAN QADOOS◄ 9

Embed Size (px)

Citation preview

Page 1: Temperature Sensor with LED matrix Display BY ►iRFAN QADOOS◄ 9

ARDUINO FINAL PROJECT

B Y : MH M

O U D S A L A MA .

H U S S A M H A M

D Y .

Page 2: Temperature Sensor with LED matrix Display BY ►iRFAN QADOOS◄ 9

MAIN PROJECTTo 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 LED matrix Display BY ►iRFAN QADOOS◄ 9

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 LED matrix Display BY ►iRFAN QADOOS◄ 9

WIRING DIAGRAM

Page 5: Temperature Sensor with LED matrix Display BY ►iRFAN QADOOS◄ 9

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 LED matrix Display BY ►iRFAN QADOOS◄ 9

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 LED matrix Display BY ►iRFAN QADOOS◄ 9

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 speedint potPin = 5;

// pin for reading the temperatureint tempPin = 4;

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

Page 8: Temperature Sensor with LED matrix Display BY ►iRFAN QADOOS◄ 9

CODEvoid 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 =100HzTimer1.initialize(10000); Timer1.attachInterrupt(screenUpdate);}

Page 9: Temperature Sensor with LED matrix Display BY ►iRFAN QADOOS◄ 9

CODE//Continuous LOOPvoid 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 LED matrix Display BY ►iRFAN QADOOS◄ 9

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 LED matrix Display BY ►iRFAN QADOOS◄ 9

// 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 LED matrix Display BY ►iRFAN QADOOS◄ 9

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 LED matrix Display BY ►iRFAN QADOOS◄ 9

//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 LED matrix Display BY ►iRFAN QADOOS◄ 9

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 LED matrix Display BY ►iRFAN QADOOS◄ 9

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");

}