This arduino tutorial lesson we use the arduino starter kit to learn Temperature Alarm.
We added a temperature sensor to the previous circuit to trigger the buzzer to make a sound when the temperature reaches a certain range. This is our first project using an actuator responding to a sensor.
component
DFRduino UNO (similar as Arduino UNO R3) *3 Prototype Shield *1 Jumper Cables M/M *5 Buzzer*1 Tem.Sensor*1Based on the circuit of project 6, connect temperate sensor LM35 as below. The pins are connected to 5V, Analog pin 0 and GND.
Sample code 7-1:
//Project 7 Temperature Alarm float sinVal; int toneVal; unsigned long tepTimer ; void setup(){ pinMode(8, OUTPUT); // configure pin of buzzer Serial.begin(9600); // configure baud rate to 9600 bps } void loop(){ int val; //save the value of LM35 double data; // save the converted value of temperature val=analogRead(0); //Connect LM35 to analog pin and read value from it data = (double) val * (5/10.24); //Convert the voltage value to temperature value if(data>27){ //If temperature is higher than 27, the buzzer starts to make sound. for(int x=0; x<180; x++){ //Convert sin function to radian sinVal = (sin(x*(3.1412/180))); //Use sin function to generate frequency of sound toneVal = 2000+(int(sinVal*1000)); //Configure the buzzer pin 8 tone(8, toneVal); delay(2); } } else { // If the temperature is lower than 27, turn off the buzzer noTone(8); // Turn off the buzzer } if(millis() - tepTimer > 50 // Every 500 ms, serial port outputs temperature value. tepTimer = millis(); Serial.print("temperature: "); // Serial port outputs temperature Serial.print(data); // Serial port outputs temperature value Serial.println("C"); // Serial port output temperature unit } } After the code is successfully uploaded, open the serial monitor of Arduino IDE.
Read temperature value from the serial port. If you put your fingers on the LM35 sensor, you will find the temperature rises immediately. Your fingers are transferring heat to the sensor!
As per the program, once the temperature reaches 27 degrees C, the buzzer starts to sound. If the temperature drops below 27 degrees C, the buzzer stops.
Most of the above codes are the same as those in Project 6. Almost all of the syntax has been mentioned in previous projects. Hopefully you have some understanding about the variables and functions by now. We initialize 3 variables at the top of the program.
float sinVal; int toneVal; unsigned long tepTimer ;
The third variable “tepTimer” is an unsigned long datatype to store time and output temperature values from serial port. Why “unsigned long”? Since the machine will run for a relatively long time, we choose a long integer and since it cannot store negative numbers, it is unsigned. In the first line of the “setup()” function, why do we only configure the buzzer as output mode and disregard the LM35 temperature sensor? The LM35 uses analog values. Analog values don’t need to be configured for “pinmode”. “pinMode” is only used for digital pins.
There are many functions for serial port communication:
Serial.begin(9600);
This function is to initialize the baud rate (data transmit rate) of the serial port. Normally the default setting in the serial monitor works for most applications, butsome wireless modules have a specific baud rate requirement.
In the “loop()” function, we declare 2 variables: “val” and “data” at the top. These are variables in a limited scope so that they only run inside the individual block of code.
val=analogRead(0);
This is a new function, “analogRead (pin)”.
analogRead(pin)
This function reads a value from the specified analog pin. The digital pins in the Arduino are connected to a 10 byte analog to digital converter, so the voltage between 0 and 5V is converted to a value ranging between 0 and 1023. Each value corresponds to a value of voltage. The voltage value of temperature read here outputs a range between 0 to 1023. Every 10mV corresponds to 1 degree for LM35 temperature sensor. data = (double) val * (5/10.24); From the voltage value read via the sensor, the range is from 0 to 1023. So we divide it into 1024 parts and multiply the result by 5 to convert it to voltage value. Since 10mV corresponds to 1 degree, we need to multiply that to get a temperature value in double datatype and assign it to a data variable.
The Serial Port
The serial port allows the Arduino to communicate with the external world by transmitting and receiving data. There is at least one serial port in each Arduino micro-controller, separately connected to digital pin 0 (RX/data receive) and analog pin 1 (TX/data transmit). Digital pin 1 and 0 cannot be used for I/O function when the serial port is in use. You download code to the Arduino via the serial port. When downloading code, the USB will occupy digital pin RX and analog pin TX. The RX and TX pins can not receive other signals during this, or there will be interference. The best way to use these 2 pins is to insert components after downloading your code.
In the following program, we evaluate the condition by using the “if/else” statement.
The “if/else” statement format:
if (expression) { Statement 1; } else{ Statement 2; }
This function is known as a conditional. It works as follows: An expression is specified. If the conditions of the expression are true, statment 1 is executed and statement 2 is skipped. If the expression is false, statment 2 is executed and statment 1 is skipped. Either statement 1 or 2 is to be executed but simultaneous execution is prevented. Put in simple terms, this is the Arduino making a decision between two pre determined variables.
If the temperature is higher than 27, The program runs the first part of the program, following the if statement to activate the buzzer. If not, it runs the else statement to stop the buzzer.
Apart from detecting temperature change for our alarm, we also need to display the temperature the Arduino reads via the serial port. We need to use the “millis()” function again to send out data every 500ms. (See Project 3 for more details if you are unsure.) After the serial port has received data, how can we display it on the serial monitor?
Serial.print(val); Serial.println(val);
print() works to convert “val” to a readable ASCII format (standard text) output from the serial port.
There are various formats for this function: 1. numbers output as a number e.g.: Serial.print(78); outputs “78”
2. floating datatype outputs as floating number with maximum 2 digits after decimal point e.g. Serial.print(1.23456); outputs “1.23”
3. Add single quotation mark to character and add double quotation mark to character string. e.g. Serial.print(‘N’); outputs “N”
The difference between “println()” and “print()” is that “println()” has a new line character.
Another common command is “Serial.write()”. It does not output in ASCII format but in a byte format. Check the reference on Arduino.cc if you are interested in finding out more.
Serial.print(data);
Is data a character string? Why does it output numbers? The answer is because we declared the variable in the program setup function to assign a number to it.
Components
LM35 temperature sensor
The LM35 is a very common temperature sensor which is accurate to +0.25 It has 3 pins: "+Vs" is power "Vout" is voltage output "GND" is ground.
The calculation formula is as follows:
If you want to learn more about this component, you can consult the data sheet. his gives extra detail on how a method for converting temperature data into voltage.
Add a LED to the project above. When the temperature is in a defined range, make the LED turn on and make the buzzer sound. You can assign different colored LEDs and different buzzer sounds for different temperature ranges
E.g.: - When the temperature is lower than 10 or higher than 35, a red LED turns on and the buzzer makes a rapidly-oscillating sound - When the temperature falls between 25 and 35, a yellow LED turns on and buzzer makes a smooth-osciallating sound - When the temperature falls between 10 and 25, a green LED turns on and the buzzer is off.
This article takes a closer look at each of these devices, comparing them across key areas like Python support, ease of use, Python programming tools, pin design, and hardware projects.
Deciding between Scratch and Python for your child's coding journey? This article compares both languages based on learning background, goals, methods, and difficulty.