Introduction
In this lesson, we will use a thermistor and a buzzer to make a temperature monitoring and alarm system.
Components
– 1*Raspberry Pi
– 1*Breadboard
– 1*Network cable (or USB wireless network adapter)
– 1*Thermistor
– 1*Buzzer
– 1*NPN transistor (8050)
– 1*Resistor (1KΩ)
– 1*Resistor (10KΩ)
– 1*ADC0832
– Jumper wires
Experimental Principle
We use an ADC0832 to convert the analog temperature collected by the thermistor to digital temperature. When the result is greater than 200 degrees Celsius, the buzzer will alarm.
Experimental Procedures
Step 1: Connect the circuit
Step 2: Edit and save the code(see path/Rpi_BasicKit/14_tempMonitor/tempMonitor.c)
Step 3: Compile the code
gcc tempMonitor.c -lwiringPi |
Step 4: Run the program
./a.out |
Press Enter, if use a lighter to burn the thermistor, you will hear the buzzer alarm.
C Code
#include <wiringPi.h> #include <stdio.h> typedef unsigned char uchar; typedef unsigned int uint; #define ADC_CS 0 #define ADC_CLK 1 #define ADC_DIO 2 #define Beep 3 void beepInit(void) { pinMode(Beep, OUTPUT); digitalWrite(Beep, 0); } void beep(void) { digitalWrite(Beep, 1); delay(200); digitalWrite(Beep, 0); delay(200); } uchar get_ADC_Result(void) { //10:CH0 //11:CH1 uchar i; uchar dat1=0, dat2=0; digitalWrite(ADC_CS, 0); digitalWrite(ADC_CLK,0); digitalWrite(ADC_DIO,1); delayMicroseconds(2); digitalWrite(ADC_CLK,1); delayMicroseconds(2); digitalWrite(ADC_CLK,0); digitalWrite(ADC_DIO,1); delayMicroseconds(2); //CH0 10 digitalWrite(ADC_CLK,1); delayMicroseconds(2); digitalWrite(ADC_CLK,0); digitalWrite(ADC_DIO,0); delayMicroseconds(2); //CH0 0 digitalWrite(ADC_CLK,1); digitalWrite(ADC_DIO,1); delayMicroseconds(2); digitalWrite(ADC_CLK,0); digitalWrite(ADC_DIO,1); delayMicroseconds(2); for(i=0;i<8;i++) { digitalWrite(ADC_CLK,1); delayMicroseconds(2); digitalWrite(ADC_CLK,0); delayMicroseconds(2); pinMode(ADC_DIO, INPUT); dat1=dat1<<1 | digitalRead(ADC_DIO); } for(i=0;i<8;i++) { dat2 = dat2 | ((uchar)(digitalRead(ADC_DIO))<<i); digitalWrite(ADC_CLK,1); delayMicroseconds(2); digitalWrite(ADC_CLK,0); delayMicroseconds(2); } digitalWrite(ADC_CS,1); pinMode(ADC_DIO, OUTPUT); return(dat1==dat2) ? dat1 : 0; } int main(void) { uchar adcVal; if(wiringPiSetup() == -1){ printf(“setup wiringPi failed !”); return 1; } pinMode(ADC_CS, OUTPUT); pinMode(ADC_CLK, OUTPUT); beepInit(); while(1){ pinMode(ADC_DIO, OUTPUT); adcVal = get_ADC_Result(); printf(“adcval : %d\n”,adcVal); if(adcVal > 200){ beep(); } } return 0; } |
Python Code
#!/usr/bin/env python import RPi.GPIO as GPIO import ADC0832 import time BeepPin = 15 def printMsg(): print ‘Press Ctrl+C to end the program…’ def adcInit(): ADC0832.setup() def beepInit(): GPIO.setmode(GPIO.BOARD) GPIO.setup(BeepPin, GPIO.OUT) GPIO.output(BeepPin, GPIO.LOW) def beep(): GPIO.output(BeepPin, GPIO.HIGH) time.sleep(0.2) GPIO.output(BeepPin, GPIO.LOW) time.sleep(0.2) def loop(): while True: res = ADC0832.getResult() print ‘res = %d’ % res if res > 200: beep() if __name__ == ‘__main__’: printMsg() adcInit() beepInit() try: loop() except KeyboardInterrupt: ADC0832.destroy() print ‘The end !’ |