\documentclass[a4paper,12pt]{article} \usepackage[backend=bibtex]{biblatex} \usepackage{geometry} \usepackage{titling} \usepackage{titlesec} \usepackage[english]{babel} \usepackage[hidelinks]{hyperref} \usepackage{listings} \usepackage{xcolor} \usepackage{graphicx} \usepackage{forest} \usepackage{tikz-qtree} \usepackage[siunitx, european, straightvoltages, cute inductors]{circuitikz} \usepackage{setspace} \usepackage{ragged2e} \addbibresource{ref.bib} \definecolor{codegreen}{rgb}{0,0.6,0} \definecolor{codegray}{rgb}{0.5,0.5,0.5} \definecolor{codepurple}{rgb}{0.58,0,0.82} \definecolor{backcolour}{rgb}{0.95,0.95,0.92} \lstdefinestyle{mystyle}{ backgroundcolor=\color{backcolour}, commentstyle=\color{codegreen}, keywordstyle=\color{magenta}, numberstyle=\tiny\color{codegray}, stringstyle=\color{codepurple}, basicstyle=\ttfamily\footnotesize, breakatwhitespace=false, breaklines=true, captionpos=b, keepspaces=true, numbers=left, numbersep=5pt, showspaces=false, showstringspaces=false, showtabs=false, tabsize=8 } \lstset{style=mystyle} \tikzstyle{startstop} = [rectangle, rounded corners, minimum width=3cm, minimum height=1cm,text centered, draw=black, fill=red!30] \tikzstyle{io} = [trapezium, trapezium left angle=70, trapezium right angle=110, minimum width=0cm, minimum height=1cm, text centered, draw=black, fill=blue!30] \tikzstyle{process} = [rectangle, minimum width=3cm, minimum height=1cm, text centered, draw=black, fill=orange!30] \tikzstyle{subroutine} = [rectangle, minimum width=3cm, minimum height=1cm, text centered, draw=black, fill=yellow!30, double distance=1] \tikzstyle{decision} = [diamond, minimum width=3cm, minimum height=1cm, text centered, draw=black, fill=green!30] \tikzstyle{arrow} = [thick,->,>=stealth] \titleformat{\section} {\Huge} {} {0em} {}[\titlerule] \geometry{a4paper,total={170mm,257mm},left=25mm,right=25mm,} \author{Lucas Standen} \title{Creating a simple temprature sensing circuit} \begin{document} \maketitle \newpage \tableofcontents \newpage \setlength{\parskip}{1em} {\setlength{\parindent}{0cm} \section{System Planning} \subsection{Problem analysis} My circuit will sense temperature, and will be taking into consideration pet owners, worried about their homes over-heating for their pets, this will be especially helpful for owners of sensitive pets such as fish. People who own these pets often leave them at home alone, which can be deadly on summer days, my device plans to alert the owner, and can be attached to other systems such as a cooling system. My system, will flash an LED and pulse a buzzer to make it clear that it is too hot, have an indicator to tell the user that something has gone wrong, and have a pin to free to attach to an external system. It will have a adjustment dial to change the threshold, so the user can specify what temperature is too hot. \subsection{Who is it for?} My project will be used by pet owners, focussing on fish, to keep the tank at the correct temperature. This is a broad range of people as many people own fish\cite{FISH}. Many fish die due to their tanks getting too hot, especially in the summer, my project is perfect for these fish owners. \section{Design specification} \subsection{System Design} The project will need to do the following things: \begin{description} \item[] Read the temprature \item[] Compare the temprature to a known value \item[] The output is a flashing led and buzzer \item[] The output is a flashing led and buzzer \end{description} My system will contain the following components to function: \begin{description} \item[Mircocontroller] This will be used to control all the other components \item[Thermistor] This will sense the temperature \item[Potentiomiter] This will set the activation threshold \item[Red, Green and Amber LED's] These will indicate the state of the device \item[Buzzer] This will indicate that it is too hot \item[Button] This will reset the device \end{description} With these components I will make a circuit that can be used to sense and warn a user about high temperatures. The design will revolve around the micro controller, with everything else coming off it as a sub system like so: \begin{center} \begin{tikzpicture} \tikzset{edge from parent/.style={draw,edge from parent path={(\tikzparentnode.south)-- +(0,-8pt)-| (\tikzchildnode)}}} \Tree [.Button [.Microcontroller [.Inputs [.Thermistor ] [.Potentiomiter ] ] [.Outputs [.LED(green) ] [.LED(red) ] [.LED(amber) ] [.Buzzer ] ] ] ] \end{tikzpicture} \end{center} As one can see a button will control the Microcontroller, by drawing all the current that the power supply can through the button, one can make the Microcontroller reset. The Microcontroller will have 2 inputs, and 4 outputs. The potentiomiter will be used to set the threshold in which the warnings begin, this will be done inside the microcontroller, with a subtraction between the Thermistor value, and the potentiometer value. The needed outputs will pulse to be especially clear that something is wrong. \subsection{Flowchart} Here is my code, build into an abstracted flow chart, to make the reading of the program easier. It is spread across 2 pages, to ensure it is big enough to read. \begin{tikzpicture}[node distance=2cm] \node (start) [startstop] {Start}; \node (in1) [io, below of=start] {Read temprature}; \node (in2) [io, below of=in1] {Read threshold value}; \node (dec1) [decision, below of=in2, yshift=-2cm] {Is the temprature too hot?}; \node (sub1) [subroutine, right of=dec1, xshift=6cm] {Flash}; \node (proc1) [process, below of=dec1, yshift=-2cm, xshift=6cm] {Reset the status flag}; \draw [arrow] (start) -- (in1); \draw [arrow] (in1) -- (in2); \draw [arrow] (in2) -- (dec1); \draw [arrow] (dec1) -- node[anchor=north] {Yes} (sub1); \draw [arrow] (sub1) |- (start); \draw [arrow] (dec1) |- node[anchor=east] {No} (proc1); \draw [arrow] (proc1) |- (start); \end{tikzpicture} \newpage \begin{tikzpicture}[node distance=2cm] \node (flash) [subroutine, below of=dec1, yshift=-4cm] {Flash}; \node (proc2) [process, below of=flash] {Set counter to 5}; \node (out1) [io, below of=proc2] {Set LED and buzzer on}; \node (proc3) [process, below of=out1] {Wait 1 second}; \node (proc4) [process, below of=proc3] {Decrement 1 from the counter}; \node (dec2) [decision, below of=proc4, yshift=-1cm] {Is counter == 0}; \node (out3) [io, below of=dec2, yshift=-1cm] {Set LED and buzzer off}; \node (return) [subroutine, below of=out3] {Return}; \node (out2) [io, right of=dec2, xshift=6cm] {Set LED and buzzer off}; \node (proc5) [process, above of=out2] {Wait 1 second}; \draw [arrow] (flash) -- (proc2); \draw [arrow] (proc2) -- (out1); \draw [arrow] (out1) -- (proc3); \draw [arrow] (proc3) -- (proc4); \draw [arrow] (proc4) -- (dec2); \draw [arrow] (dec2) -- node[anchor=north] {No} (out2); \draw [arrow] (dec2) -- node[anchor=east] {Yes} (out3); \draw [arrow] (out3) -- (return); \draw [arrow] (out2) -- (proc5); \draw [arrow] (proc5) |- (out1); \end{tikzpicture} \subsection{How will it function?} Bellow is the diagram for my circuit, it works mostly via the code on the micro controller, so this is just connecting things between live and the microcontroller. \begin{flushleft} \begin{circuitikz} \draw (-8,5) to[short,o-o] (8,5){}; % power rail \draw (0,5) node[vcc]{5V}; \draw (-8,-6) to[short,o-o] (8,-6){}; % ground rail \draw (0,-6) node[ground]{}; \draw (0,3) to[short,o-] (7,3){}; % push button \draw (7,3) to[push button,-o] (7,-6){}; \ctikzset{multipoles/thickness=4} \ctikzset{multipoles/external pins thickness=2} \draw (0,0)node[dipchip, num pins=18, external pins width=0.3, external pad fraction=3, scale=1.8, rotate=90](Micro){ \rotatebox{-90}{PICAXE 18m2}}; % micro controller \draw (-7, 5) to[thermistor,a=\tiny{100K},o-o] (-7,0){}; % thermistor \draw (-7, 0) to[resistor,a=\tiny{100K},o-o] (-7,-6){}; % thermistor divider resistor \draw (-7, 0) to[short, o-] (-6,0){}; %thermistor divider wire \draw (-6, 0) to[short, -] (-6,3){}; \draw(-6, 3) to[short, -] (-4, 3){}; \draw (-4, 3) to[short, -] (Micro.pin 18){}; \draw (-8, 5) to[potentiometer, a=\tiny{10K}, -] (-8, -2){}; \draw (-8, -2) to[short, -] (-8, -6){}; \draw (-7.5, 1.5) to[short, o-] (-5, 1.5){}; % potentiometer wire \draw (-5, 1.5) to[short,-] (-5, 4){}; \draw (-5, 4) to[short,-] (-3, 4){}; \draw (-3, 4) to[short, -] (Micro.pin 17){}; \draw (Micro.pin 14) to[short,-o] (0,5){}; %microcontroller live \draw (Micro.pin 5) to[short,-o](0,-6){}; %microcontroller ground \draw (Micro.pin 6) to[empty led] (1, -4){}; %output red \draw (Micro.pin 7) to[buzzer] (2, -6){}; %output buzzer \draw (Micro.pin 8) to[empty led] (3, -4){}; %output amber \draw (Micro.pin 9) to[empty led] (4, -4){}; %output green \draw (1,-4) to[resistor,-o,a=\tiny{220}] (1,-6){}; % output resistor \draw (3,-4) to[resistor,-o,a=\tiny{220}] (3,-6){}; % output resistor \draw (4,-4) to[resistor,-o,a=\tiny{220}] (4,-6){}; % output resistor \end{circuitikz} \end{flushleft} The way this works is the potential divider on the left feeds into the micro controller which performs a comparison between it and the potentiometer, using the ADC pins on the pic chip. The button seen on the right is being used as a reset switch, for a short time, it can cut short circuit the system, cutting power to the microcontroller, effectively acting as a reset switch. The outputs at the bottom are in order; a red LED that flashes when the circuit detects it is too hot; a buzzer that flashes at the same time; an amber LED that turns on after the flashing has stopped to inform the user that it was too hot at some point; and a green status LED to inform the user that all is working. \subsection{The code} Bellow is the code for the micro controller. It is 59 lines long and commented. It contains 12 unique instructions. \lstinputlisting[]{./final.asm} This code starts with an initialisation section, that sets the micro controller's input and output pins to do the correct things. Then it defines a subroutine that flashes the LED and buzzer and sets the status led. And finally the main function runs in a loop to continue checking if it is too hot. \subsection{Errors in code} Through out the development of project, a few errors came up in my code, I fixed them, however here is a documented list of them \subsubsection{Forgetting to specify the output register} \lstinputlisting[]{./final.1.err} this error was fixed by adding ", w" to the end of the line (before the comment), as it had been missing an argument before this point. \subsubsection{Bit test file, skip if set or skip if clear} While this didn't stop my code from compiling, it did stop the code from working properly, with it triggering when it was the right temperature, and stopped when it was too hot. It was a simple fix however, all that needed to change was to change a C to an S. \section{System Realisation} \subsection{Circuit realisation} PUT CIRCUIT PHOTO HERE Here is my finished design prototyped on a bread board, I have cut the wires to an adequate length to ensure it is cleanly made. I left the potential divider uncut, as I changed what value components I was using many times. \subsection{Calibrating the sensors} PUT PHOTOS HERE FOR CALIBRATING \subsection{Results} \section{System Evaluation} \subsection{Did it work?} \subsection{What could go better?} \newpage \printbibliography } \end{document}