@ -1,3 +1,5 @@ | |||||
# Air_Quality_Sensor_PPD42 | # Air_Quality_Sensor_PPD42 | ||||
Testing out the PPD42 Air Quality Sensor, with an MSP430 Launchpad and graphing the data with GNUplot. | |||||
Testing out the PPD42 Air Quality Sensor, with an MSP430 Launchpad and graphing the data with GNUplot. | |||||
This project has been abandoned, in favor of a Mega which has longer term support. |
@ -0,0 +1,275 @@ | |||||
\documentclass[11pt]{article} | |||||
%Gummi|065|=) | |||||
\usepackage{graphicx} | |||||
\usepackage{caption} | |||||
\usepackage{xcolor} | |||||
\usepackage[vcentering,dvips]{geometry} | |||||
\geometry{papersize={6in,9in},total={4.5in,6.8in}} | |||||
\title{\textbf{Air Quality Sensor}} | |||||
\author{Steak Electronics} | |||||
\date{2018 (revised 2019)} | |||||
\begin{document} | |||||
\maketitle | |||||
\tableofcontents | |||||
\textcolor{green!60!blue!70}{ | |||||
\section{Overview}} | |||||
To know when I need to clean my room. I usually vacuum every two or three weeks, but sometimes am lazy and I need a reminder. The dust sensor will be more motivation to get me to clean, when I see the dust levels increase. \footnote{Technically, I also get a rash from excess dust, which is another great motivator.} | |||||
\begin{center} | |||||
\includegraphics[scale=0.3]{../pics/dustsensor.JPG} | |||||
\captionof{figure}{Shinyei Dust sensor PPD42} | |||||
\end{center} | |||||
\textcolor{green!60!blue!70}{ | |||||
\section{Work Log}} | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{Parts List}} | |||||
\begin{itemize} | |||||
\item Shinyei PPD42NS Air Quality Sensor | |||||
\item MSP-EXP430G2553 V1.5 | |||||
\item 5V adapter (required as MSP is 3.3V only) | |||||
\item SD Card adapter | |||||
\item Ethernet Module | |||||
\item Energia version 0101E0012 (or later, possibly) | |||||
\end{itemize} | |||||
\subsection{Beginning} | |||||
Here are some things I learned working on this project. | |||||
\textbf{IDE} | |||||
I'm using Energia from energia.nu which is an Arduino IDE clone for TI Launchpads. This will allow for rapid development. And ease me into the TI platform. | |||||
\textbf{MSP-EXP430G2 V1.5} | |||||
There are different version of this. My particular board is the | |||||
and as explained here: http://energia.nu/pin-maps/guide\_msp430g2launchpad/ and http://energia.nu/pin-maps/guide\_msp430g2launchpad/ | |||||
You need to rotate the UART jumpers to get UART to display correctly. Oddly enough you can choose a different chip in the boards list and serial will print out right... But switch the jumpers and the correct board will work with UART. Otherwise, it does not work out of the box for serial.print. Though the blink example sketch works. | |||||
\textbf{Dust Sensor} | |||||
The code for the dust sensor is found online easily. The pinout is tricky as the colours of the wire are nonsense, but the pinout seems to be the same for all sensors, and is: PIN 1 (closest to black box) GND, PIN 3, VDD (5+V), PIN 4 output A. there is also an output B for different readings (I think size) of dust. I'm not that particular (no pun intended) about my dust so I will go with the one most people are using. | |||||
\textbf{3.3V only on TI} | |||||
The TI takes input of USB but only outputs 3.3V. Fail. I'll through a 5V PSU on the board. It won't be connected to USB for its use anyways. | |||||
\textbf{POW function} | |||||
There is a pow function (power exponent) in arduino. In TI, I changed it to powf, and included math.h. | |||||
I'm not sure if my change was correct. | |||||
EDIT: looks like there is a LED tied to pin 14. I'm moving to pin 13. I meant to use 13 earlier but accidentally used the wrong pin and kept using it. Oops. | |||||
EDIT 2: Actually, I was reading from the wrong pin in software. Maybe I will leave it on the LED pin as you can see when the dust is firing off the sensor. Hm.... Neat. | |||||
EDIT 3: Yes, so I had to use powf instead of pow, and it works. The accidental incorrect pin was a bonus as it allows me to see visually how often the sensor is going off. Over time, I should have a vague grasp of the dust levels just looking at the light. Actually, I won't. Nevermind. The dust sensor reading, is too irregular for that. | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{Work Log 08/2018}} | |||||
I've put everything on a single piece of plywood, and need to do some more work on the code. I've decided to forgo the SD card, as I don't want to deal with reading a 2MB sd card with the buffer provided by the SRAM. I'm not quite sure how to manage that, and whether it's possible to read such large data files. I did some quick research and did not find what I wanted. It is likely possible, but let's do something simpler. Instead, I will use the EEPROM to store the last 5 minutes of data or so, and then have the server read the data every five minutes. This keeps the client simple, and puts the burden of complexity on the server. | |||||
In addition, I don't want to read SD cards manually, as that is cumbersome, though possibly scripts could be made. | |||||
The PPD42 was made sure to be put vertically. | |||||
\begin{center} | |||||
\includegraphics[scale=0.3]{../pics/woodboard.JPG} | |||||
\captionof{figure}{Everything on a piece of plywood, is a nice presentation. Sand and finish with urethane as well.} | |||||
\end{center} | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{Work Log 12/2018}} | |||||
I have decided to change how I do this slightly. Instead of an SD card, I will connect on the LAN and use thingspeak from a locally hosted instance (and deployed with docker, possibly) or some other aggregating server to pull the data. I'll also make a shield, to simplify deployment. That might not be necessary, but I can make a shield in a few hours, and pcbs are cheap. These options such as thingspeak sometimes have graphing / plotting included. | |||||
I'm going to use this library: | |||||
https://github.com/reaper7/EtherEncLib/releases | |||||
so git clone that, then | |||||
git tags -l | |||||
git checkout tags/v0.4.2 | |||||
to get the latest release (or a newer one if possible). | |||||
The pinout for the ENC is viewable at the figure to the right. This is from the 43oh.com forum. | |||||
\footnote{You will see later, that this library turns out to be not developed enough, and results in overall failure for this project. Next time, use a well vetted library!} | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{PCB Layout}} | |||||
Layout is simple for the most part. I again, flipped the ENC as I had done on the Uno board, so it is inserted upside down on the board. This time I went only with the 2x5 pin enc for simplicity sake. The shield is below the MSP, so longer pin headers will be used (already have those) to give space for the barrel plug. The board needs a 3.3v regulator and 5v for the PPD42. To get the sizing of the shield right, I aligned my grid with that of the design files for the msp430 dev board, and made sure the spacing between the 0.1” headers was exactly the same – easy. Ran all traces of 20 mils and made the board small as reasonably possible. Now to get them made, and actually test this. | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsubsection{Aligning shield with Eagle and KiCad}} | |||||
So here was an interesting segway. I had design files in Eagle, and I wanted to make a shield for the MSP in Kicad. What I did, was align the grid in Eagle, to be the same as Kicad, and then as appropriate, sized points on the Kicad grid to fit exactly where the MSP shield was. In fact, it turned out 100\% correct the first try. Here is where FOSS and OSHW worked out well. Without the design files (say if I had only a PDF with some measurements), I can't say it would've turned out as well. Open file formats for all components and shields! | |||||
\begin{center} | |||||
\includegraphics[scale=0.5]{../pics/pcblayout.jpg} | |||||
\captionof{figure}{See caption on picture.} | |||||
\end{center} | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{Revision 1 Results}} | |||||
I built up the PCB today. A few errors were made, but this is much better than the mess I had on the plywood originally. First off, the ENC pins are wrong, so that is not going to be able to be mounted (unless I wanted to wire pins manually). Second, the orientation of the MCP part is wrong. I'm not sure how this was done incorrectly, but I suspect that the default KiCad libraries were wrong. I have a few other changes to do, but this was overall successful, and I can respin another board quick quickly. On my todo list is: | |||||
\begin{itemize} | |||||
\item add gnd breakout | |||||
\item add 5v breakout | |||||
\item add 3v3 to enc NOT 5v | |||||
\item fix enc pins | |||||
\item fix orientation of main board | |||||
\item add anime picture to back of board | |||||
\item fix orientation of 3v3 reg | |||||
\item buy more msps (need two more at least) | |||||
\item buy 100 1uf 0805 caps put in main box (I'm surprised I don't keep these in stock. I do have through hole 1uf but not 0805). | |||||
buylist + pcb : header so you can just plug in ppd. This is a sort of wish list thing, but something that will save a few seconds on build time. Although NOT necessary. | |||||
\end{itemize} | |||||
It looks like the connector between the board to the PPD42 is a type of 2.54 or 0.1” header. I will add a separate connector for the PPD42 that has all five pins. No need for any special connector. | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{BOM Creation Notes}} | |||||
Here's some notes on creating the BOM.\footnote{This is a tounge in cheek reference to automated searches for weapons, etc... Yes, the algorithms read everything on every computer.} | |||||
The MSP-EXP430G2 is being obsoleted, in favor of the MSP-EXP430G2ET. This is not a good thing, and shows poor sport on TI's part. I was always wary of the two dozen MSP430's, and now they are removing the original one from production, according to digikey. Ugh. Makes me think I should've just used an Arduino, but I digress. | |||||
Planned obsolecense means, I'll have to make my own dev board for a TI part next time. Which I may just do, the chip is simple enough, and if ICSP and energia will work with this (which I found after a short search on the 43oh.com forums), then that is good enough. | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{Work Log 01/24/19}} | |||||
Adding Library to Energia | |||||
The path for adding a library to energia is: | |||||
/home/dev/Desktop/code/electronics/airqualitysensor/energia-0101E0012/hardware/msp430/libraries | |||||
on my machine. The idea is to add the library to the libraries folder (but, NOT the lib folder…, a little confusing). And you might have to hunt to find that. So I git cloned the ethernet lib, and added it in Remember that this ENC library works with only certain launchpads. Including, my now OBSOLETE one. F\$\#\% companies, and their obsolescence. There’s a special place in hell for these people. | |||||
Upon adding the Ethernet libraries, and running websrv example, I get this error: | |||||
fatal error: avr/pgmspace.h: No such file or directory | |||||
compilation terminated. | |||||
After some fumbling, t looks like | |||||
https://github.com/energia/Energia/commit/cafa204a33e6e0dfa65b2f97dd14792a5964837e | |||||
is what I should be using. | |||||
Make sure you grab from the msp430 section, not the other cores… There’s only two header files, and one short c file. Then it’s all dupes for different cores (not sure if 100\% alike, but we only want msp430). | |||||
This library is poorly done. Had to manually add an include to EtherEncLibUdp.cpp for the dtostrf.h file. I also had to put that file somewhere it could be found. I think you can put it in the etherenc library folder, but perhaps I'm wrong and it should be in the reference folder of Arduino. One of those places. | |||||
\begin{center} | |||||
\includegraphics[scale=0.4]{../pics/DSCN1146.JPG} | |||||
\captionof{figure}{Shield PCB and PPD42} | |||||
\end{center} | |||||
After that it builds. | |||||
With the default example, you have to change a pin. It’s the CS pin that is wrong. I think it’s by default pin 10, but on the pin mappings, it should be 8 (see image in pics folder). There’s two places to change this. One in the sketch (obvious). The second is in etherenclib somewhere… I saw this mentioned in the post in resources I have saved, so refer to that in the git repo. | |||||
Ah, looks like I also forgot to solder some pins. Oops. After that’s out of the way, let’s look at the pin mappings. | |||||
Quote: “(you can change this pin in file enc28typedef.h - line 424, then also mandatory! in sketch pinMode(10,OUTPUT);” | |||||
Says the forum post. I believe it’s this: | |||||
\begin{verbatim} | |||||
#if (ENERGIA) | |||||
#define ENC28J60_CONTROL_CS 8 | |||||
//#define SPI_MOSI 13 | |||||
//#define SPI_MISO 12 | |||||
//#define SPI_SCK 14 | |||||
\end{verbatim} | |||||
And with that, I was able to get this to work. Note that pings do NOT work. It should do nothing if you ping. If you are getting destination not found, then something is wrong. Pings simply reach a dead end. Now to incorporate this with the air quality sensor. | |||||
At first, I had some memory issues. This TI chip has 512 Bytes of SRAM (compared to Atmega328p's 2K SRAM), so I had to do some cutting down of the code. Here's a short interlude where I did this. NOTE: Later on I simplified the code even more. | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsubsection{ENC28J60 on TI Launchpad Code Troubleshooting}} | |||||
\begin{verbatim} | |||||
Basic Server test | |||||
Works. | |||||
Basic Sensor test | |||||
Works | |||||
Basic Sensor and Server test | |||||
Fails. Out of memory. | |||||
\end{verbatim} | |||||
Let’s see at what point, the basic combination of server and sensor fails… What is pushing it over the barrier… I can put math.h and go through setup – no problem… | |||||
Ok, it’s this block of code: | |||||
\begin{verbatim} | |||||
if ((millis()-starttime) > sampletime_ms)//if the sample time == 30s | |||||
{ | |||||
ratio = lowpulseoccupancy/(sampletime_ms*10.0); // Integer percentage 0=>100 | |||||
concentration = 1.1*powf(ratio,3)-3.8*powf(ratio,2)+520*ratio+0.62; // using spec sheet curve | |||||
Serial.print(lowpulseoccupancy); | |||||
Serial.print(","); | |||||
Serial.print(ratio); | |||||
Serial.print(","); | |||||
Serial.println(concentration); | |||||
lowpulseoccupancy = 0; | |||||
starttime = millis(); | |||||
} | |||||
\end{verbatim} | |||||
Let’s cut it down. Interestingly this code here, jumps up 4K bytes: | |||||
\begin{verbatim} | |||||
if ((millis()-starttime) > sampletime_ms)//if the sample time == 30s | |||||
{ | |||||
//ratio = lowpulseoccupancy/(sampletime_ms*10.0); // Integer percentage 0=>100 | |||||
//concentration = 1.1*powf(ratio,3)-3.8*powf(ratio,2)+520*ratio+0.62; // using spec sheet curve | |||||
Serial.print(lowpulseoccupancy); | |||||
Serial.print(","); | |||||
Serial.print(ratio); | |||||
Serial.print(","); | |||||
Serial.println(concentration); | |||||
lowpulseoccupancy = 0; | |||||
starttime = millis(); | |||||
}, | |||||
\end{verbatim} | |||||
even with ratio and concentration cut out. From about 10K to 14K bytes. Wow. | |||||
If I do this: | |||||
\begin{verbatim} | |||||
if ((millis()-starttime) > sampletime_ms)//if the sample time == 30s | |||||
{ | |||||
//ratio = lowpulseoccupancy/(sampletime_ms*10.0); // Integer percentage 0=>100 | |||||
//concentration = 1.1*powf(ratio,3)-3.8*powf(ratio,2)+520*ratio+0.62; // using spec sheet curve | |||||
Serial.print(lowpulseoccupancy); | |||||
//Serial.print(","); | |||||
//Serial.print(ratio); | |||||
//Serial.print(","); | |||||
//Serial.println(concentration); | |||||
lowpulseoccupancy = 0; | |||||
starttime = millis(); | |||||
} | |||||
\end{verbatim} | |||||
It’s back to about 10K bytes. So the serial prints, are a bit wild. I actually don’t need serial prints at all. Let’s cut those out. | |||||
\begin{verbatim} | |||||
ratio = lowpulseoccupancy/(sampletime_ms*10.0); // Integer percentage 0=>100 | |||||
\end{verbatim} | |||||
this command is 2K bytes added. | |||||
The concentration post is simply too much, even by itself. The math is too expensive. It’s 7K bytes about. There must be a cheaper way to do the math. Is there a pow alternative (pow gets the exponent, it appears)… | |||||
https://stackoverflow.com/questions/101439/the-most-efficient-way-to-implement-an-integer-based-power-function-powint-int | |||||
seems hopeful. Simple enough. | |||||
Now I have: | |||||
\begin{verbatim} | |||||
if ((millis()-starttime) > sampletime_ms)//if the sample time == 30s | |||||
{ | |||||
ratio = lowpulseoccupancy/(sampletime_ms*10.0); // Integer percentage 0=>100 | |||||
//concentration = 1.1*powf(ratio,3)-3.8*powf(ratio,2)+520*ratio+0.62; // using spec sheet curve | |||||
concentration = 1.1*ipow(ratio,3)-3.8*ipow(ratio,2)+520*ratio+0.62; // using spec sheet curve | |||||
//Serial.print(lowpulseoccupancy); | |||||
//Serial.print(","); | |||||
//Serial.print(ratio); | |||||
//Serial.print(","); | |||||
//Serial.println(concentration); | |||||
lowpulseoccupancy = 0; | |||||
starttime = millis(); | |||||
} | |||||
\end{verbatim} | |||||
Using a leaner integer pow, instead of a float exponent formula. | |||||
Not sure how it will effect the data, but we will see. And it builds. | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{Power Dissipation}} | |||||
As far as the power dissipation of the linear vreg… I have a lm7805 on there, with a 12V regulator. In Troubleshooting Analog Circuits, Bob Pease mentions the 5 second rule for heat – if you can hold your finger (or thumb) on it for five seconds without being burned, it’s about 85 deg C, and OK. If it’s hotter, then you have issues. Well, I am right on the line, possibly a little under 5 seconds. I could improve with a 7-9V AC Adapter, or a DC – DC switching regulator, but for now – this will do. I should mention, I’m touching the PCB opposite the LM7805 due to the construction. I should add more vias on the bottom of the vreg, also, to get more copper heatsinking. | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{Network Errors due to lack of Memory}} | |||||
After installing everything, I found that the device was not working longer than a few minutes, due to memory constraints. Will need to use a larger TI part... Or just move to Arduino and use a Mega. Based on what happened here my two options are: 1) Give up on TI and use a more vetted part 2) Continue with Launchpad, using a custom PCB for the chip (instead of a launchpad that will be discontinued), and hopefully the memory issues will be resolved. | |||||
I'm leaning towards \#1, as I wish only to monitor dust, not to be stuck in microcontroller details. | |||||
\end{document} |
@ -0,0 +1,19 @@ | |||||
\relax | |||||
\@writefile{toc}{\contentsline {section}{\numberline {1}Overview}{1}} | |||||
\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Shinyei Dust sensor PPD42\relax }}{1}} | |||||
\@writefile{toc}{\contentsline {section}{\numberline {2}Work Log}{2}} | |||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.1}Parts List}{2}} | |||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.2}Beginning}{2}} | |||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.3}Work Log 08/2018}{3}} | |||||
\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces Everything on a piece of plywood, is a nice presentation. Sand and finish with urethane as well.\relax }}{4}} | |||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.4}Work Log 12/2018}{4}} | |||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.5}PCB Layout}{5}} | |||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.5.1}Aligning shield with Eagle and KiCad}{5}} | |||||
\@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces See caption on picture.\relax }}{6}} | |||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.6}Revision 1 Results}{6}} | |||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.7}BOM Creation Notes}{7}} | |||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.8}Work Log 01/24/19}{8}} | |||||
\@writefile{lof}{\contentsline {figure}{\numberline {4}{\ignorespaces Shield PCB and PPD42\relax }}{9}} | |||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.8.1}ENC28J60 on TI Launchpad Code Troubleshooting}{10}} | |||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.9}Power Dissipation}{12}} | |||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.10}Network Errors due to lack of Memory}{13}} |
@ -0,0 +1,540 @@ | |||||
This is pdfTeX, Version 3.14159265-2.6-1.40.17 (TeX Live 2016/Debian) (preloaded format=pdflatex 2019.8.17) 20 DEC 2019 17:28 | |||||
entering extended mode | |||||
restricted \write18 enabled. | |||||
%&-line parsing enabled. | |||||
**/home/layoutdev/Desktop/code/documentation_general/Electronics_Projects_2018/ | |||||
Air_Quality_Sensor_PPD42/docs/7,tex | |||||
(/home/layoutdev/Desktop/code/documentation_general/Electronics_Projects_2018/A | |||||
ir_Quality_Sensor_PPD42/docs/7,tex | |||||
LaTeX2e <2017/01/01> patch level 3 | |||||
Babel <3.9r> and hyphenation patterns for 3 language(s) loaded. | |||||
(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls | |||||
Document Class: article 2014/09/29 v1.4h Standard LaTeX document class | |||||
(/usr/share/texlive/texmf-dist/tex/latex/base/size11.clo | |||||
File: size11.clo 2014/09/29 v1.4h Standard LaTeX file (size option) | |||||
) | |||||
\c@part=\count79 | |||||
\c@section=\count80 | |||||
\c@subsection=\count81 | |||||
\c@subsubsection=\count82 | |||||
\c@paragraph=\count83 | |||||
\c@subparagraph=\count84 | |||||
\c@figure=\count85 | |||||
\c@table=\count86 | |||||
\abovecaptionskip=\skip41 | |||||
\belowcaptionskip=\skip42 | |||||
\bibindent=\dimen102 | |||||
) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty | |||||
Package: graphicx 2014/10/28 v1.0g Enhanced LaTeX Graphics (DPC,SPQR) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty | |||||
Package: keyval 2014/10/28 v1.15 key=value parser (DPC) | |||||
\KV@toks@=\toks14 | |||||
) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty | |||||
Package: graphics 2016/10/09 v1.0u Standard LaTeX Graphics (DPC,SPQR) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty | |||||
Package: trig 2016/01/03 v1.10 sin cos tan (DPC) | |||||
) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg | |||||
File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration | |||||
) | |||||
Package graphics Info: Driver file: pdftex.def on input line 99. | |||||
(/usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def | |||||
File: pdftex.def 2017/01/12 v0.06k Graphics/color for pdfTeX | |||||
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/infwarerr.sty | |||||
Package: infwarerr 2016/05/16 v1.4 Providing info/warning/error messages (HO) | |||||
) | |||||
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ltxcmds.sty | |||||
Package: ltxcmds 2016/05/16 v1.23 LaTeX kernel commands for general use (HO) | |||||
) | |||||
\Gread@gobject=\count87 | |||||
)) | |||||
\Gin@req@height=\dimen103 | |||||
\Gin@req@width=\dimen104 | |||||
) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/caption/caption.sty | |||||
Package: caption 2016/02/21 v3.3-144 Customizing captions (AR) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/caption/caption3.sty | |||||
Package: caption3 2016/05/22 v1.7-166 caption3 kernel (AR) | |||||
Package caption3 Info: TeX engine: e-TeX on input line 67. | |||||
\captionmargin=\dimen105 | |||||
\captionmargin@=\dimen106 | |||||
\captionwidth=\dimen107 | |||||
\caption@tempdima=\dimen108 | |||||
\caption@indent=\dimen109 | |||||
\caption@parindent=\dimen110 | |||||
\caption@hangindent=\dimen111 | |||||
) | |||||
\c@ContinuedFloat=\count88 | |||||
) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty | |||||
Package: xcolor 2016/05/11 v2.12 LaTeX color extensions (UK) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg | |||||
File: color.cfg 2016/01/02 v1.6 sample color configuration | |||||
) | |||||
Package xcolor Info: Driver file: pdftex.def on input line 225. | |||||
Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1348. | |||||
Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1352. | |||||
Package xcolor Info: Model `RGB' extended on input line 1364. | |||||
Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1366. | |||||
Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1367. | |||||
Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1368. | |||||
Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1369. | |||||
Package xcolor Info: Model `Gray' substituted by `gray' on input line 1370. | |||||
Package xcolor Info: Model `wave' substituted by `hsb' on input line 1371. | |||||
) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty | |||||
Package: geometry 2010/09/12 v5.6 Page Geometry | |||||
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty | |||||
Package: ifpdf 2016/05/14 v3.1 Provides the ifpdf switch | |||||
) | |||||
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifvtex.sty | |||||
Package: ifvtex 2016/05/16 v1.6 Detect VTeX and its facilities (HO) | |||||
Package ifvtex Info: VTeX not detected. | |||||
) | |||||
(/usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty | |||||
Package: ifxetex 2010/09/12 v0.6 Provides ifxetex conditional | |||||
) | |||||
\Gm@cnth=\count89 | |||||
\Gm@cntv=\count90 | |||||
\c@Gm@tempcnt=\count91 | |||||
\Gm@bindingoffset=\dimen112 | |||||
\Gm@wd@mp=\dimen113 | |||||
\Gm@odd@mp=\dimen114 | |||||
\Gm@even@mp=\dimen115 | |||||
\Gm@layoutwidth=\dimen116 | |||||
\Gm@layoutheight=\dimen117 | |||||
\Gm@layouthoffset=\dimen118 | |||||
\Gm@layoutvoffset=\dimen119 | |||||
\Gm@dimlist=\toks15 | |||||
) | |||||
No file 7,tex.aux. | |||||
\openout1 = `7,tex.aux'. | |||||
LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 11. | |||||
LaTeX Font Info: ... okay on input line 11. | |||||
LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 11. | |||||
LaTeX Font Info: ... okay on input line 11. | |||||
LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 11. | |||||
LaTeX Font Info: ... okay on input line 11. | |||||
LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 11. | |||||
LaTeX Font Info: ... okay on input line 11. | |||||
LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 11. | |||||
LaTeX Font Info: ... okay on input line 11. | |||||
LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 11. | |||||
LaTeX Font Info: ... okay on input line 11. | |||||
(/usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii | |||||
[Loading MPS to PDF converter (version 2006.09.02).] | |||||
\scratchcounter=\count92 | |||||
\scratchdimen=\dimen120 | |||||
\scratchbox=\box26 | |||||
\nofMPsegments=\count93 | |||||
\nofMParguments=\count94 | |||||
\everyMPshowfont=\toks16 | |||||
\MPscratchCnt=\count95 | |||||
\MPscratchDim=\dimen121 | |||||
\MPnumerator=\count96 | |||||
\makeMPintoPDFobject=\count97 | |||||
\everyMPtoPDFconversion=\toks17 | |||||
) (/usr/share/texlive/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty | |||||
Package: pdftexcmds 2016/05/21 v0.22 Utility functions of pdfTeX for LuaTeX (HO | |||||
) | |||||
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifluatex.sty | |||||
Package: ifluatex 2016/05/16 v1.4 Provides the ifluatex switch (HO) | |||||
Package ifluatex Info: LuaTeX not detected. | |||||
) | |||||
Package pdftexcmds Info: LuaTeX not detected. | |||||
Package pdftexcmds Info: \pdf@primitive is available. | |||||
Package pdftexcmds Info: \pdf@ifprimitive is available. | |||||
Package pdftexcmds Info: \pdfdraftmode found. | |||||
) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty | |||||
Package: epstopdf-base 2016/05/15 v2.6 Base part for package epstopdf | |||||
(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/grfext.sty | |||||
Package: grfext 2016/05/16 v1.2 Manage graphics extensions (HO) | |||||
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/kvdefinekeys.sty | |||||
Package: kvdefinekeys 2016/05/16 v1.4 Define keys (HO) | |||||
)) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty | |||||
Package: kvoptions 2016/05/16 v3.12 Key value format for package options (HO) | |||||
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty | |||||
Package: kvsetkeys 2016/05/16 v1.17 Key value parser (HO) | |||||
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/etexcmds.sty | |||||
Package: etexcmds 2016/05/16 v1.6 Avoid name clashes with e-TeX commands (HO) | |||||
Package etexcmds Info: Could not find \expanded. | |||||
(etexcmds) That can mean that you are not using pdfTeX 1.50 or | |||||
(etexcmds) that some package has redefined \expanded. | |||||
(etexcmds) In the latter case, load this package earlier. | |||||
))) | |||||
Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4 | |||||
38. | |||||
Package grfext Info: Graphics extension search list: | |||||
(grfext) [.png,.pdf,.jpg,.mps,.jpeg,.jbig2,.jb2,.PNG,.PDF,.JPG,.JPE | |||||
G,.JBIG2,.JB2,.eps] | |||||
(grfext) \AppendGraphicsExtensions on input line 456. | |||||
(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg | |||||
File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv | |||||
e | |||||
)) | |||||
Package caption Info: Begin \AtBeginDocument code. | |||||
Package caption Info: End \AtBeginDocument code. | |||||
*geometry* detected driver: dvips | |||||
*geometry* verbose mode - [ preamble ] result: | |||||
* driver: dvips | |||||
* paper: custom | |||||
* layout: <same size as paper> | |||||
* layoutoffset:(h,v)=(0.0pt,0.0pt) | |||||
* vratio: 1:1 | |||||
* modes: | |||||
* h-part:(L,W,R)=(54.2025pt, 325.215pt, 54.2025pt) | |||||
* v-part:(T,H,B)=(79.49689pt, 491.43622pt, 79.49689pt) | |||||
* \paperwidth=433.62pt | |||||
* \paperheight=650.43pt | |||||
* \textwidth=325.215pt | |||||
* \textheight=491.43622pt | |||||
* \oddsidemargin=-18.06749pt | |||||
* \evensidemargin=-18.06749pt | |||||
* \topmargin=-29.7731pt | |||||
* \headheight=12.0pt | |||||
* \headsep=25.0pt | |||||
* \topskip=11.0pt | |||||
* \footskip=30.0pt | |||||
* \marginparwidth=59.0pt | |||||
* \marginparsep=10.0pt | |||||
* \columnsep=10.0pt | |||||
* \skip\footins=10.0pt plus 4.0pt minus 2.0pt | |||||
* \hoffset=0.0pt | |||||
* \voffset=0.0pt | |||||
* \mag=1000 | |||||
* \@twocolumnfalse | |||||
* \@twosidefalse | |||||
* \@mparswitchfalse | |||||
* \@reversemarginfalse | |||||
* (1in=72.27pt=25.4mm, 1cm=28.453pt) | |||||
LaTeX Font Info: External font `cmex10' loaded for size | |||||
(Font) <12> on input line 13. | |||||
LaTeX Font Info: External font `cmex10' loaded for size | |||||
(Font) <8> on input line 13. | |||||
LaTeX Font Info: External font `cmex10' loaded for size | |||||
(Font) <6> on input line 13. | |||||
No file 7,tex.toc. | |||||
\tf@toc=\write3 | |||||
\openout3 = `7,tex.toc'. | |||||
LaTeX Font Info: External font `cmex10' loaded for size | |||||
(Font) <10.95> on input line 19. | |||||
LaTeX Font Info: External font `cmex10' loaded for size | |||||
(Font) <9> on input line 19. | |||||
LaTeX Font Info: External font `cmex10' loaded for size | |||||
(Font) <5> on input line 19. | |||||
<../pics/dustsensor.JPG, id=1, 667.49374pt x 499.8675pt> | |||||
File: ../pics/dustsensor.JPG Graphic file (type jpg) | |||||
<use ../pics/dustsensor.JPG> | |||||
Package pdftex.def Info: ../pics/dustsensor.JPG used on input line 22. | |||||
(pdftex.def) Requested size: 200.24966pt x 149.9614pt. | |||||
[1 | |||||
Non-PDF special ignored! | |||||
{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map} <../pics/dustsensor.JPG>] | |||||
LaTeX Font Info: Try loading font information for OMS+cmr on input line 31. | |||||
(/usr/share/texlive/texmf-dist/tex/latex/base/omscmr.fd | |||||
File: omscmr.fd 2014/09/29 v2.5h Standard LaTeX font definitions | |||||
) | |||||
LaTeX Font Info: Font shape `OMS/cmr/m/n' in size <10.95> not available | |||||
(Font) Font shape `OMS/cmsy/m/n' tried instead on input line 31. | |||||
Overfull \hbox (127.63495pt too wide) in paragraph at lines 45--49 | |||||
\OT1/cmr/m/n/10.95 maps/guide[]msp430g2launchpad/ and http://energia.nu/pin-map | |||||
s/guide[]msp430g2launchpad/ | |||||
[] | |||||
[2] <../pics/woodboard.JPG, id=18, 803.0pt x 602.25pt> | |||||
File: ../pics/woodboard.JPG Graphic file (type jpg) | |||||
<use ../pics/woodboard.JPG> | |||||
Package pdftex.def Info: ../pics/woodboard.JPG used on input line 75. | |||||
(pdftex.def) Requested size: 240.90186pt x 180.67639pt. | |||||
[3] | |||||
Overfull \hbox (68.98256pt too wide) in paragraph at lines 83--90 | |||||
[]\OT1/cmr/m/n/10.95 I'm go-ing to use this li-brary: https://github.com/reaper | |||||
7/EtherEncLib/releases | |||||
[] | |||||
[4 <../pics/woodboard.JPG>] | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no � in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no “ in font cmr10! | |||||
<../pics/pcblayout.jpg, id=25, 834.86906pt x 549.55313pt> | |||||
File: ../pics/pcblayout.jpg Graphic file (type jpg) | |||||
<use ../pics/pcblayout.jpg> | |||||
Package pdftex.def Info: ../pics/pcblayout.jpg used on input line 101. | |||||
(pdftex.def) Requested size: 417.43352pt x 274.7759pt. | |||||
Overfull \hbox (92.21852pt too wide) in paragraph at lines 101--102 | |||||
[] | |||||
[] | |||||
[5] [6 <../pics/pcblayout.jpg>] | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no � in font cmr10! | |||||
[7] | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ¦ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Overfull \hbox (10.25082pt too wide) in paragraph at lines 133--137 | |||||
\OT1/cmr/m/n/10.95 gia is: /home/dev/Desktop/code/electronics/airqualitysensor/ | |||||
energia- | |||||
[] | |||||
Overfull \hbox (278.58406pt too wide) in paragraph at lines 142--145 | |||||
[]\OT1/cmr/m/n/10.95 After some fum-bling, t looks like https://github.com/ener | |||||
gia/Energia/commit/cafa204a33e6e0dfa65b2f97dd14792a5964837e | |||||
[] | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ¦ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
<../pics/DSCN1146.JPG, id=36, 803.0pt x 602.25pt> | |||||
File: ../pics/DSCN1146.JPG Graphic file (type jpg) | |||||
<use ../pics/DSCN1146.JPG> | |||||
Package pdftex.def Info: ../pics/DSCN1146.JPG used on input line 150. | |||||
(pdftex.def) Requested size: 321.1943pt x 240.89572pt. | |||||
[8] | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ¦ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no œ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no � in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
[9 <../pics/DSCN1146.JPG>] | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ¦ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ¦ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no “ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ¦ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Overfull \hbox (65.69577pt too wide) in paragraph at lines 199--199 | |||||
[]\OT1/cmtt/m/n/10.95 if ((millis()-starttime) > sampletime_ms)//if the sample | |||||
time == 30s[] | |||||
[] | |||||
Overfull \hbox (163.42346pt too wide) in paragraph at lines 199--199 | |||||
[] \OT1/cmtt/m/n/10.95 ratio = lowpulseoccupancy/(sampletime_ms*10.0); | |||||
// Integer percentage 0=>100[] | |||||
[] | |||||
Overfull \hbox (255.40247pt too wide) in paragraph at lines 199--199 | |||||
[] \OT1/cmtt/m/n/10.95 concentration = 1.1*powf(ratio,3)-3.8*powf(ratio, | |||||
2)+520*ratio+0.62; // using spec sheet curve[] | |||||
[] | |||||
[10] | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Overfull \hbox (77.19315pt too wide) in paragraph at lines 214--214 | |||||
[] \OT1/cmtt/m/n/10.95 if ((millis()-starttime) > sampletime_ms)//if the sampl | |||||
e time == 30s[] | |||||
[] | |||||
Overfull \hbox (174.92084pt too wide) in paragraph at lines 214--214 | |||||
[] \OT1/cmtt/m/n/10.95 //ratio = lowpulseoccupancy/(sampletime_ms*10.0); | |||||
// Integer percentage 0=>100[] | |||||
[] | |||||
Overfull \hbox (266.89984pt too wide) in paragraph at lines 214--214 | |||||
[] \OT1/cmtt/m/n/10.95 //concentration = 1.1*powf(ratio,3)-3.8*powf(rati | |||||
o,2)+520*ratio+0.62; // using spec sheet curve[] | |||||
[] | |||||
Overfull \hbox (88.69052pt too wide) in paragraph at lines 232--232 | |||||
[] \OT1/cmtt/m/n/10.95 if ((millis()-starttime) > sampletime_ms)//if the sam | |||||
ple time == 30s[] | |||||
[] | |||||
Overfull \hbox (174.92084pt too wide) in paragraph at lines 232--232 | |||||
[] \OT1/cmtt/m/n/10.95 //ratio = lowpulseoccupancy/(sampletime_ms*10.0); | |||||
// Integer percentage 0=>100[] | |||||
[] | |||||
Overfull \hbox (266.89984pt too wide) in paragraph at lines 232--232 | |||||
[] \OT1/cmtt/m/n/10.95 //concentration = 1.1*powf(ratio,3)-3.8*powf(rati | |||||
o,2)+520*ratio+0.62; // using spec sheet curve[] | |||||
[] | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Overfull \hbox (117.43396pt too wide) in paragraph at lines 236--236 | |||||
[]\OT1/cmtt/m/n/10.95 ratio = lowpulseoccupancy/(sampletime_ms*10.0); // Integ | |||||
er percentage 0=>100[] | |||||
[] | |||||
[11] | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ¦ in font cmr10! | |||||
Overfull \hbox (24.45525pt too wide) in paragraph at lines 239--242 | |||||
\OT1/cmr/m/n/10.95 most-efficient-way-to-implement-an-integer-based-power-funct | |||||
ion-powint- | |||||
[] | |||||
Overfull \hbox (71.44446pt too wide) in paragraph at lines 258--258 | |||||
[] \OT1/cmtt/m/n/10.95 if ((millis()-starttime) > sampletime_ms)//if the sample | |||||
time == 30s[] | |||||
[] | |||||
Overfull \hbox (163.42346pt too wide) in paragraph at lines 258--258 | |||||
[] \OT1/cmtt/m/n/10.95 ratio = lowpulseoccupancy/(sampletime_ms*10.0); | |||||
// Integer percentage 0=>100[] | |||||
[] | |||||
Overfull \hbox (266.89984pt too wide) in paragraph at lines 258--258 | |||||
[] \OT1/cmtt/m/n/10.95 //concentration = 1.1*powf(ratio,3)-3.8*powf(rati | |||||
o,2)+520*ratio+0.62; // using spec sheet curve[] | |||||
[] | |||||
Overfull \hbox (255.40247pt too wide) in paragraph at lines 258--258 | |||||
[] \OT1/cmtt/m/n/10.95 concentration = 1.1*ipow(ratio,3)-3.8*ipow(ratio, | |||||
2)+520*ratio+0.62; // using spec sheet curve[] | |||||
[] | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ¦ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no “ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no “ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no “ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
[12] [13] (./7,tex.aux) ) | |||||
Here is how much of TeX's memory you used: | |||||
3560 strings out of 494945 | |||||
54231 string characters out of 6181032 | |||||
120072 words of memory out of 5000000 | |||||
6829 multiletter control sequences out of 15000+600000 | |||||
10198 words of font info for 36 fonts, out of 8000000 for 9000 | |||||
14 hyphenation exceptions out of 8191 | |||||
39i,8n,39p,826b,291s stack positions out of 5000i,500n,10000p,200000b,80000s | |||||
</usr/share/texlive/texmf-dist/fonts/type1/public/amsf | |||||
onts/cm/cmbx10.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/c | |||||
m/cmbx12.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr1 | |||||
0.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr12.pfb>< | |||||
/usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr6.pfb></usr/sha | |||||
re/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr8.pfb></usr/share/texli | |||||
ve/texmf-dist/fonts/type1/public/amsfonts/cm/cmr9.pfb></usr/share/texlive/texmf | |||||
-dist/fonts/type1/public/amsfonts/cm/cmsy10.pfb></usr/share/texlive/texmf-dist/ | |||||
fonts/type1/public/amsfonts/cm/cmtt10.pfb> | |||||
Output written on 7,tex.pdf (13 pages, 626835 bytes). | |||||
PDF statistics: | |||||
87 PDF objects out of 1000 (max. 8388607) | |||||
58 compressed objects within 1 object stream | |||||
0 named destinations out of 1000 (max. 500000) | |||||
21 words of extra memory for PDF output out of 10000 (max. 10000000) | |||||
@ -0,0 +1,14 @@ | |||||
\contentsline {section}{\numberline {1}Overview}{1} | |||||
\contentsline {section}{\numberline {2}Work Log}{2} | |||||
\contentsline {subsection}{\numberline {2.1}Parts List}{2} | |||||
\contentsline {subsection}{\numberline {2.2}Beginning}{2} | |||||
\contentsline {subsection}{\numberline {2.3}Work Log 08/2018}{3} | |||||
\contentsline {subsection}{\numberline {2.4}Work Log 12/2018}{4} | |||||
\contentsline {subsection}{\numberline {2.5}PCB Layout}{5} | |||||
\contentsline {subsubsection}{\numberline {2.5.1}Aligning shield with Eagle and KiCad}{5} | |||||
\contentsline {subsection}{\numberline {2.6}Revision 1 Results}{6} | |||||
\contentsline {subsection}{\numberline {2.7}BOM Creation Notes}{7} | |||||
\contentsline {subsection}{\numberline {2.8}Work Log 01/24/19}{8} | |||||
\contentsline {subsubsection}{\numberline {2.8.1}ENC28J60 on TI Launchpad Code Troubleshooting}{10} | |||||
\contentsline {subsection}{\numberline {2.9}Power Dissipation}{12} | |||||
\contentsline {subsection}{\numberline {2.10}Network Errors due to lack of Memory}{13} |
@ -0,0 +1,19 @@ | |||||
\relax | |||||
\@writefile{toc}{\contentsline {section}{\numberline {1}Overview}{1}} | |||||
\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Shinyei Dust sensor PPD42\relax }}{2}} | |||||
\@writefile{toc}{\contentsline {section}{\numberline {2}Work Log}{2}} | |||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.1}Parts List}{2}} | |||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.2}Beginning}{3}} | |||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.3}Work Log 08/2018}{4}} | |||||
\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces Everything on a piece of plywood, is a nice presentation. Sand and finish with urethane as well.\relax }}{4}} | |||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.4}Work Log 12/2018}{5}} | |||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.5}PCB Layout}{5}} | |||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.5.1}Aligning shield with Eagle and KiCad}{5}} | |||||
\@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces See caption on picture.\relax }}{6}} | |||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.6}Revision 1 Results}{6}} | |||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.7}BOM Creation Notes}{7}} | |||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.8}Work Log 01/24/19}{8}} | |||||
\@writefile{lof}{\contentsline {figure}{\numberline {4}{\ignorespaces Shield PCB and PPD42\relax }}{9}} | |||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.8.1}ENC28J60 on TI Launchpad Code Troubleshooting}{10}} | |||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.9}Power Dissipation}{12}} | |||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.10}Network Errors due to lack of Memory}{13}} |
@ -0,0 +1,545 @@ | |||||
This is pdfTeX, Version 3.14159265-2.6-1.40.17 (TeX Live 2016/Debian) (preloaded format=pdflatex 2019.8.17) 20 DEC 2019 17:29 | |||||
entering extended mode | |||||
restricted \write18 enabled. | |||||
%&-line parsing enabled. | |||||
**/home/layoutdev/Desktop/code/documentation_general/Electronics_Projects_2018/ | |||||
Air_Quality_Sensor_PPD42/docs/8.tex | |||||
(/home/layoutdev/Desktop/code/documentation_general/Electronics_Projects_2018/A | |||||
ir_Quality_Sensor_PPD42/docs/8.tex | |||||
LaTeX2e <2017/01/01> patch level 3 | |||||
Babel <3.9r> and hyphenation patterns for 3 language(s) loaded. | |||||
(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls | |||||
Document Class: article 2014/09/29 v1.4h Standard LaTeX document class | |||||
(/usr/share/texlive/texmf-dist/tex/latex/base/size11.clo | |||||
File: size11.clo 2014/09/29 v1.4h Standard LaTeX file (size option) | |||||
) | |||||
\c@part=\count79 | |||||
\c@section=\count80 | |||||
\c@subsection=\count81 | |||||
\c@subsubsection=\count82 | |||||
\c@paragraph=\count83 | |||||
\c@subparagraph=\count84 | |||||
\c@figure=\count85 | |||||
\c@table=\count86 | |||||
\abovecaptionskip=\skip41 | |||||
\belowcaptionskip=\skip42 | |||||
\bibindent=\dimen102 | |||||
) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty | |||||
Package: graphicx 2014/10/28 v1.0g Enhanced LaTeX Graphics (DPC,SPQR) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty | |||||
Package: keyval 2014/10/28 v1.15 key=value parser (DPC) | |||||
\KV@toks@=\toks14 | |||||
) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty | |||||
Package: graphics 2016/10/09 v1.0u Standard LaTeX Graphics (DPC,SPQR) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty | |||||
Package: trig 2016/01/03 v1.10 sin cos tan (DPC) | |||||
) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg | |||||
File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration | |||||
) | |||||
Package graphics Info: Driver file: pdftex.def on input line 99. | |||||
(/usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def | |||||
File: pdftex.def 2017/01/12 v0.06k Graphics/color for pdfTeX | |||||
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/infwarerr.sty | |||||
Package: infwarerr 2016/05/16 v1.4 Providing info/warning/error messages (HO) | |||||
) | |||||
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ltxcmds.sty | |||||
Package: ltxcmds 2016/05/16 v1.23 LaTeX kernel commands for general use (HO) | |||||
) | |||||
\Gread@gobject=\count87 | |||||
)) | |||||
\Gin@req@height=\dimen103 | |||||
\Gin@req@width=\dimen104 | |||||
) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/caption/caption.sty | |||||
Package: caption 2016/02/21 v3.3-144 Customizing captions (AR) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/caption/caption3.sty | |||||
Package: caption3 2016/05/22 v1.7-166 caption3 kernel (AR) | |||||
Package caption3 Info: TeX engine: e-TeX on input line 67. | |||||
\captionmargin=\dimen105 | |||||
\captionmargin@=\dimen106 | |||||
\captionwidth=\dimen107 | |||||
\caption@tempdima=\dimen108 | |||||
\caption@indent=\dimen109 | |||||
\caption@parindent=\dimen110 | |||||
\caption@hangindent=\dimen111 | |||||
) | |||||
\c@ContinuedFloat=\count88 | |||||
) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty | |||||
Package: xcolor 2016/05/11 v2.12 LaTeX color extensions (UK) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg | |||||
File: color.cfg 2016/01/02 v1.6 sample color configuration | |||||
) | |||||
Package xcolor Info: Driver file: pdftex.def on input line 225. | |||||
Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1348. | |||||
Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1352. | |||||
Package xcolor Info: Model `RGB' extended on input line 1364. | |||||
Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1366. | |||||
Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1367. | |||||
Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1368. | |||||
Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1369. | |||||
Package xcolor Info: Model `Gray' substituted by `gray' on input line 1370. | |||||
Package xcolor Info: Model `wave' substituted by `hsb' on input line 1371. | |||||
) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty | |||||
Package: geometry 2010/09/12 v5.6 Page Geometry | |||||
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty | |||||
Package: ifpdf 2016/05/14 v3.1 Provides the ifpdf switch | |||||
) | |||||
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifvtex.sty | |||||
Package: ifvtex 2016/05/16 v1.6 Detect VTeX and its facilities (HO) | |||||
Package ifvtex Info: VTeX not detected. | |||||
) | |||||
(/usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty | |||||
Package: ifxetex 2010/09/12 v0.6 Provides ifxetex conditional | |||||
) | |||||
\Gm@cnth=\count89 | |||||
\Gm@cntv=\count90 | |||||
\c@Gm@tempcnt=\count91 | |||||
\Gm@bindingoffset=\dimen112 | |||||
\Gm@wd@mp=\dimen113 | |||||
\Gm@odd@mp=\dimen114 | |||||
\Gm@even@mp=\dimen115 | |||||
\Gm@layoutwidth=\dimen116 | |||||
\Gm@layoutheight=\dimen117 | |||||
\Gm@layouthoffset=\dimen118 | |||||
\Gm@layoutvoffset=\dimen119 | |||||
\Gm@dimlist=\toks15 | |||||
) (./8.aux) | |||||
\openout1 = `8.aux'. | |||||
LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 11. | |||||
LaTeX Font Info: ... okay on input line 11. | |||||
LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 11. | |||||
LaTeX Font Info: ... okay on input line 11. | |||||
LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 11. | |||||
LaTeX Font Info: ... okay on input line 11. | |||||
LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 11. | |||||
LaTeX Font Info: ... okay on input line 11. | |||||
LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 11. | |||||
LaTeX Font Info: ... okay on input line 11. | |||||
LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 11. | |||||
LaTeX Font Info: ... okay on input line 11. | |||||
(/usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii | |||||
[Loading MPS to PDF converter (version 2006.09.02).] | |||||
\scratchcounter=\count92 | |||||
\scratchdimen=\dimen120 | |||||
\scratchbox=\box26 | |||||
\nofMPsegments=\count93 | |||||
\nofMParguments=\count94 | |||||
\everyMPshowfont=\toks16 | |||||
\MPscratchCnt=\count95 | |||||
\MPscratchDim=\dimen121 | |||||
\MPnumerator=\count96 | |||||
\makeMPintoPDFobject=\count97 | |||||
\everyMPtoPDFconversion=\toks17 | |||||
) (/usr/share/texlive/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty | |||||
Package: pdftexcmds 2016/05/21 v0.22 Utility functions of pdfTeX for LuaTeX (HO | |||||
) | |||||
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifluatex.sty | |||||
Package: ifluatex 2016/05/16 v1.4 Provides the ifluatex switch (HO) | |||||
Package ifluatex Info: LuaTeX not detected. | |||||
) | |||||
Package pdftexcmds Info: LuaTeX not detected. | |||||
Package pdftexcmds Info: \pdf@primitive is available. | |||||
Package pdftexcmds Info: \pdf@ifprimitive is available. | |||||
Package pdftexcmds Info: \pdfdraftmode found. | |||||
) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty | |||||
Package: epstopdf-base 2016/05/15 v2.6 Base part for package epstopdf | |||||
(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/grfext.sty | |||||
Package: grfext 2016/05/16 v1.2 Manage graphics extensions (HO) | |||||
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/kvdefinekeys.sty | |||||
Package: kvdefinekeys 2016/05/16 v1.4 Define keys (HO) | |||||
)) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty | |||||
Package: kvoptions 2016/05/16 v3.12 Key value format for package options (HO) | |||||
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty | |||||
Package: kvsetkeys 2016/05/16 v1.17 Key value parser (HO) | |||||
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/etexcmds.sty | |||||
Package: etexcmds 2016/05/16 v1.6 Avoid name clashes with e-TeX commands (HO) | |||||
Package etexcmds Info: Could not find \expanded. | |||||
(etexcmds) That can mean that you are not using pdfTeX 1.50 or | |||||
(etexcmds) that some package has redefined \expanded. | |||||
(etexcmds) In the latter case, load this package earlier. | |||||
))) | |||||
Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4 | |||||
38. | |||||
Package grfext Info: Graphics extension search list: | |||||
(grfext) [.png,.pdf,.jpg,.mps,.jpeg,.jbig2,.jb2,.PNG,.PDF,.JPG,.JPE | |||||
G,.JBIG2,.JB2,.eps] | |||||
(grfext) \AppendGraphicsExtensions on input line 456. | |||||
(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg | |||||
File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv | |||||
e | |||||
)) | |||||
Package caption Info: Begin \AtBeginDocument code. | |||||
Package caption Info: End \AtBeginDocument code. | |||||
*geometry* detected driver: dvips | |||||
*geometry* verbose mode - [ preamble ] result: | |||||
* driver: dvips | |||||
* paper: custom | |||||
* layout: <same size as paper> | |||||
* layoutoffset:(h,v)=(0.0pt,0.0pt) | |||||
* vratio: 1:1 | |||||
* modes: | |||||
* h-part:(L,W,R)=(54.2025pt, 325.215pt, 54.2025pt) | |||||
* v-part:(T,H,B)=(79.49689pt, 491.43622pt, 79.49689pt) | |||||
* \paperwidth=433.62pt | |||||
* \paperheight=650.43pt | |||||
* \textwidth=325.215pt | |||||
* \textheight=491.43622pt | |||||
* \oddsidemargin=-18.06749pt | |||||
* \evensidemargin=-18.06749pt | |||||
* \topmargin=-29.7731pt | |||||
* \headheight=12.0pt | |||||
* \headsep=25.0pt | |||||
* \topskip=11.0pt | |||||
* \footskip=30.0pt | |||||
* \marginparwidth=59.0pt | |||||
* \marginparsep=10.0pt | |||||
* \columnsep=10.0pt | |||||
* \skip\footins=10.0pt plus 4.0pt minus 2.0pt | |||||
* \hoffset=0.0pt | |||||
* \voffset=0.0pt | |||||
* \mag=1000 | |||||
* \@twocolumnfalse | |||||
* \@twosidefalse | |||||
* \@mparswitchfalse | |||||
* \@reversemarginfalse | |||||
* (1in=72.27pt=25.4mm, 1cm=28.453pt) | |||||
LaTeX Font Info: External font `cmex10' loaded for size | |||||
(Font) <12> on input line 13. | |||||
LaTeX Font Info: External font `cmex10' loaded for size | |||||
(Font) <8> on input line 13. | |||||
LaTeX Font Info: External font `cmex10' loaded for size | |||||
(Font) <6> on input line 13. | |||||
(./8.toc | |||||
LaTeX Font Info: External font `cmex10' loaded for size | |||||
(Font) <10.95> on input line 3. | |||||
Overfull \hbox (9.8543pt too wide) in paragraph at lines 12--12 | |||||
[][] []\OT1/cmr/m/n/10.95 ENC28J60 on TI Launch-pad Code Trou-bleshoot- | |||||
[] | |||||
) | |||||
\tf@toc=\write3 | |||||
\openout3 = `8.toc'. | |||||
LaTeX Font Info: External font `cmex10' loaded for size | |||||
(Font) <9> on input line 19. | |||||
LaTeX Font Info: External font `cmex10' loaded for size | |||||
(Font) <5> on input line 19. | |||||
[1 | |||||
Non-PDF special ignored! | |||||
{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] | |||||
<../pics/dustsensor.JPG, id=10, 667.49374pt x 499.8675pt> | |||||
File: ../pics/dustsensor.JPG Graphic file (type jpg) | |||||
<use ../pics/dustsensor.JPG> | |||||
Package pdftex.def Info: ../pics/dustsensor.JPG used on input line 22. | |||||
(pdftex.def) Requested size: 200.24966pt x 149.9614pt. | |||||
LaTeX Font Info: Try loading font information for OMS+cmr on input line 31. | |||||
(/usr/share/texlive/texmf-dist/tex/latex/base/omscmr.fd | |||||
File: omscmr.fd 2014/09/29 v2.5h Standard LaTeX font definitions | |||||
) | |||||
LaTeX Font Info: Font shape `OMS/cmr/m/n' in size <10.95> not available | |||||
(Font) Font shape `OMS/cmsy/m/n' tried instead on input line 31. | |||||
[2 <../pics/dustsensor.JPG>] | |||||
Overfull \hbox (127.63495pt too wide) in paragraph at lines 46--50 | |||||
\OT1/cmr/m/n/10.95 maps/guide[]msp430g2launchpad/ and http://energia.nu/pin-map | |||||
s/guide[]msp430g2launchpad/ | |||||
[] | |||||
[3] <../pics/woodboard.JPG, id=21, 803.0pt x 602.25pt> | |||||
File: ../pics/woodboard.JPG Graphic file (type jpg) | |||||
<use ../pics/woodboard.JPG> | |||||
Package pdftex.def Info: ../pics/woodboard.JPG used on input line 76. | |||||
(pdftex.def) Requested size: 240.90186pt x 180.67639pt. | |||||
[4 <../pics/woodboard.JPG>] | |||||
Overfull \hbox (68.98256pt too wide) in paragraph at lines 84--91 | |||||
[]\OT1/cmr/m/n/10.95 I'm go-ing to use this li-brary: https://github.com/reaper | |||||
7/EtherEncLib/releases | |||||
[] | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no � in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no “ in font cmr10! | |||||
[5] <../pics/pcblayout.jpg, id=28, 834.86906pt x 549.55313pt> | |||||
File: ../pics/pcblayout.jpg Graphic file (type jpg) | |||||
<use ../pics/pcblayout.jpg> | |||||
Package pdftex.def Info: ../pics/pcblayout.jpg used on input line 102. | |||||
(pdftex.def) Requested size: 417.43352pt x 274.7759pt. | |||||
Overfull \hbox (92.21852pt too wide) in paragraph at lines 102--103 | |||||
[] | |||||
[] | |||||
[6 <../pics/pcblayout.jpg>] | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no � in font cmr10! | |||||
[7] | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ¦ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Overfull \hbox (10.25082pt too wide) in paragraph at lines 134--138 | |||||
\OT1/cmr/m/n/10.95 gia is: /home/dev/Desktop/code/electronics/airqualitysensor/ | |||||
energia- | |||||
[] | |||||
Overfull \hbox (278.58406pt too wide) in paragraph at lines 143--146 | |||||
[]\OT1/cmr/m/n/10.95 After some fum-bling, t looks like https://github.com/ener | |||||
gia/Energia/commit/cafa204a33e6e0dfa65b2f97dd14792a5964837e | |||||
[] | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ¦ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
<../pics/DSCN1146.JPG, id=36, 803.0pt x 602.25pt> | |||||
File: ../pics/DSCN1146.JPG Graphic file (type jpg) | |||||
<use ../pics/DSCN1146.JPG> | |||||
Package pdftex.def Info: ../pics/DSCN1146.JPG used on input line 151. | |||||
(pdftex.def) Requested size: 321.1943pt x 240.89572pt. | |||||
[8] | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ¦ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no œ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no � in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
[9 <../pics/DSCN1146.JPG>] | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ¦ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ¦ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no “ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ¦ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Overfull \hbox (65.69577pt too wide) in paragraph at lines 200--200 | |||||
[]\OT1/cmtt/m/n/10.95 if ((millis()-starttime) > sampletime_ms)//if the sample | |||||
time == 30s[] | |||||
[] | |||||
Overfull \hbox (163.42346pt too wide) in paragraph at lines 200--200 | |||||
[] \OT1/cmtt/m/n/10.95 ratio = lowpulseoccupancy/(sampletime_ms*10.0); | |||||
// Integer percentage 0=>100[] | |||||
[] | |||||
Overfull \hbox (255.40247pt too wide) in paragraph at lines 200--200 | |||||
[] \OT1/cmtt/m/n/10.95 concentration = 1.1*powf(ratio,3)-3.8*powf(ratio, | |||||
2)+520*ratio+0.62; // using spec sheet curve[] | |||||
[] | |||||
[10] | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Overfull \hbox (77.19315pt too wide) in paragraph at lines 215--215 | |||||
[] \OT1/cmtt/m/n/10.95 if ((millis()-starttime) > sampletime_ms)//if the sampl | |||||
e time == 30s[] | |||||
[] | |||||
Overfull \hbox (174.92084pt too wide) in paragraph at lines 215--215 | |||||
[] \OT1/cmtt/m/n/10.95 //ratio = lowpulseoccupancy/(sampletime_ms*10.0); | |||||
// Integer percentage 0=>100[] | |||||
[] | |||||
Overfull \hbox (266.89984pt too wide) in paragraph at lines 215--215 | |||||
[] \OT1/cmtt/m/n/10.95 //concentration = 1.1*powf(ratio,3)-3.8*powf(rati | |||||
o,2)+520*ratio+0.62; // using spec sheet curve[] | |||||
[] | |||||
Overfull \hbox (88.69052pt too wide) in paragraph at lines 233--233 | |||||
[] \OT1/cmtt/m/n/10.95 if ((millis()-starttime) > sampletime_ms)//if the sam | |||||
ple time == 30s[] | |||||
[] | |||||
Overfull \hbox (174.92084pt too wide) in paragraph at lines 233--233 | |||||
[] \OT1/cmtt/m/n/10.95 //ratio = lowpulseoccupancy/(sampletime_ms*10.0); | |||||
// Integer percentage 0=>100[] | |||||
[] | |||||
Overfull \hbox (266.89984pt too wide) in paragraph at lines 233--233 | |||||
[] \OT1/cmtt/m/n/10.95 //concentration = 1.1*powf(ratio,3)-3.8*powf(rati | |||||
o,2)+520*ratio+0.62; // using spec sheet curve[] | |||||
[] | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Overfull \hbox (117.43396pt too wide) in paragraph at lines 237--237 | |||||
[]\OT1/cmtt/m/n/10.95 ratio = lowpulseoccupancy/(sampletime_ms*10.0); // Integ | |||||
er percentage 0=>100[] | |||||
[] | |||||
[11] | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ¦ in font cmr10! | |||||
Overfull \hbox (24.45525pt too wide) in paragraph at lines 240--243 | |||||
\OT1/cmr/m/n/10.95 most-efficient-way-to-implement-an-integer-based-power-funct | |||||
ion-powint- | |||||
[] | |||||
Overfull \hbox (71.44446pt too wide) in paragraph at lines 259--259 | |||||
[] \OT1/cmtt/m/n/10.95 if ((millis()-starttime) > sampletime_ms)//if the sample | |||||
time == 30s[] | |||||
[] | |||||
Overfull \hbox (163.42346pt too wide) in paragraph at lines 259--259 | |||||
[] \OT1/cmtt/m/n/10.95 ratio = lowpulseoccupancy/(sampletime_ms*10.0); | |||||
// Integer percentage 0=>100[] | |||||
[] | |||||
Overfull \hbox (266.89984pt too wide) in paragraph at lines 259--259 | |||||
[] \OT1/cmtt/m/n/10.95 //concentration = 1.1*powf(ratio,3)-3.8*powf(rati | |||||
o,2)+520*ratio+0.62; // using spec sheet curve[] | |||||
[] | |||||
Overfull \hbox (255.40247pt too wide) in paragraph at lines 259--259 | |||||
[] \OT1/cmtt/m/n/10.95 concentration = 1.1*ipow(ratio,3)-3.8*ipow(ratio, | |||||
2)+520*ratio+0.62; // using spec sheet curve[] | |||||
[] | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ¦ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no “ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no “ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no “ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
[12] [13] (./8.aux) ) | |||||
Here is how much of TeX's memory you used: | |||||
3564 strings out of 494945 | |||||
54235 string characters out of 6181032 | |||||
120072 words of memory out of 5000000 | |||||
6829 multiletter control sequences out of 15000+600000 | |||||
10198 words of font info for 36 fonts, out of 8000000 for 9000 | |||||
14 hyphenation exceptions out of 8191 | |||||
39i,8n,39p,808b,291s stack positions out of 5000i,500n,10000p,200000b,80000s | |||||
</usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts | |||||
/cm/cmbx10.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cm | |||||
bx12.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pf | |||||
b></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr12.pfb></usr | |||||
/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr6.pfb></usr/share/t | |||||
exlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr8.pfb></usr/share/texlive/t | |||||
exmf-dist/fonts/type1/public/amsfonts/cm/cmr9.pfb></usr/share/texlive/texmf-dis | |||||
t/fonts/type1/public/amsfonts/cm/cmsy10.pfb></usr/share/texlive/texmf-dist/font | |||||
s/type1/public/amsfonts/cm/cmtt10.pfb> | |||||
Output written on 8.pdf (13 pages, 627973 bytes). | |||||
PDF statistics: | |||||
87 PDF objects out of 1000 (max. 8388607) | |||||
58 compressed objects within 1 object stream | |||||
0 named destinations out of 1000 (max. 500000) | |||||
21 words of extra memory for PDF output out of 10000 (max. 10000000) | |||||
@ -0,0 +1,276 @@ | |||||
\documentclass[11pt]{article} | |||||
%Gummi|065|=) | |||||
\usepackage{graphicx} | |||||
\usepackage{caption} | |||||
\usepackage{xcolor} | |||||
\usepackage[vcentering,dvips]{geometry} | |||||
\geometry{papersize={6in,9in},total={4.5in,6.8in}} | |||||
\title{\textbf{Air Quality Sensor}} | |||||
\author{Steak Electronics} | |||||
\date{2018 (revised 2019)} | |||||
\begin{document} | |||||
\maketitle | |||||
\tableofcontents | |||||
\textcolor{green!60!blue!70}{ | |||||
\section{Overview}} | |||||
To know when I need to clean my room. I usually vacuum every two or three weeks, but sometimes am lazy and I need a reminder. The dust sensor will be more motivation to get me to clean, when I see the dust levels increase. \footnote{Technically, I also get a rash from excess dust, which is another great motivator.} | |||||
\begin{center} | |||||
\includegraphics[scale=0.3]{../pics/dustsensor.JPG} | |||||
\captionof{figure}{Shinyei Dust sensor PPD42} | |||||
\end{center} | |||||
\textcolor{green!60!blue!70}{ | |||||
\section{Work Log}} | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{Parts List}} | |||||
\begin{itemize} | |||||
\item Shinyei PPD42NS Air Quality Sensor | |||||
\item MSP-EXP430G2553 V1.5 | |||||
\item 5V adapter (required as MSP is 3.3V only) | |||||
\item SD Card adapter | |||||
\item Ethernet Module | |||||
\item Energia version 0101E0012 (or later, possibly) | |||||
\end{itemize} | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{Beginning}} | |||||
Here are some things I learned working on this project. | |||||
\textbf{IDE} | |||||
I'm using Energia from energia.nu which is an Arduino IDE clone for TI Launchpads. This will allow for rapid development. And ease me into the TI platform. | |||||
\textbf{MSP-EXP430G2 V1.5} | |||||
There are different version of this. My particular board is the | |||||
and as explained here: http://energia.nu/pin-maps/guide\_msp430g2launchpad/ and http://energia.nu/pin-maps/guide\_msp430g2launchpad/ | |||||
You need to rotate the UART jumpers to get UART to display correctly. Oddly enough you can choose a different chip in the boards list and serial will print out right... But switch the jumpers and the correct board will work with UART. Otherwise, it does not work out of the box for serial.print. Though the blink example sketch works. | |||||
\textbf{Dust Sensor} | |||||
The code for the dust sensor is found online easily. The pinout is tricky as the colours of the wire are nonsense, but the pinout seems to be the same for all sensors, and is: PIN 1 (closest to black box) GND, PIN 3, VDD (5+V), PIN 4 output A. there is also an output B for different readings (I think size) of dust. I'm not that particular (no pun intended) about my dust so I will go with the one most people are using. | |||||
\textbf{3.3V only on TI} | |||||
The TI takes input of USB but only outputs 3.3V. Fail. I'll through a 5V PSU on the board. It won't be connected to USB for its use anyways. | |||||
\textbf{POW function} | |||||
There is a pow function (power exponent) in arduino. In TI, I changed it to powf, and included math.h. | |||||
I'm not sure if my change was correct. | |||||
EDIT: looks like there is a LED tied to pin 14. I'm moving to pin 13. I meant to use 13 earlier but accidentally used the wrong pin and kept using it. Oops. | |||||
EDIT 2: Actually, I was reading from the wrong pin in software. Maybe I will leave it on the LED pin as you can see when the dust is firing off the sensor. Hm.... Neat. | |||||
EDIT 3: Yes, so I had to use powf instead of pow, and it works. The accidental incorrect pin was a bonus as it allows me to see visually how often the sensor is going off. Over time, I should have a vague grasp of the dust levels just looking at the light. Actually, I won't. Nevermind. The dust sensor reading, is too irregular for that. | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{Work Log 08/2018}} | |||||
I've put everything on a single piece of plywood, and need to do some more work on the code. I've decided to forgo the SD card, as I don't want to deal with reading a 2MB sd card with the buffer provided by the SRAM. I'm not quite sure how to manage that, and whether it's possible to read such large data files. I did some quick research and did not find what I wanted. It is likely possible, but let's do something simpler. Instead, I will use the EEPROM to store the last 5 minutes of data or so, and then have the server read the data every five minutes. This keeps the client simple, and puts the burden of complexity on the server. | |||||
In addition, I don't want to read SD cards manually, as that is cumbersome, though possibly scripts could be made. | |||||
The PPD42 was made sure to be put vertically. | |||||
\begin{center} | |||||
\includegraphics[scale=0.3]{../pics/woodboard.JPG} | |||||
\captionof{figure}{Everything on a piece of plywood, is a nice presentation. Sand and finish with urethane as well.} | |||||
\end{center} | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{Work Log 12/2018}} | |||||
I have decided to change how I do this slightly. Instead of an SD card, I will connect on the LAN and use thingspeak from a locally hosted instance (and deployed with docker, possibly) or some other aggregating server to pull the data. I'll also make a shield, to simplify deployment. That might not be necessary, but I can make a shield in a few hours, and pcbs are cheap. These options such as thingspeak sometimes have graphing / plotting included. | |||||
I'm going to use this library: | |||||
https://github.com/reaper7/EtherEncLib/releases | |||||
so git clone that, then | |||||
git tags -l | |||||
git checkout tags/v0.4.2 | |||||
to get the latest release (or a newer one if possible). | |||||
The pinout for the ENC is viewable at the figure to the right. This is from the 43oh.com forum. | |||||
\footnote{You will see later, that this library turns out to be not developed enough, and results in overall failure for this project. Next time, use a well vetted library!} | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{PCB Layout}} | |||||
Layout is simple for the most part. I again, flipped the ENC as I had done on the Uno board, so it is inserted upside down on the board. This time I went only with the 2x5 pin enc for simplicity sake. The shield is below the MSP, so longer pin headers will be used (already have those) to give space for the barrel plug. The board needs a 3.3v regulator and 5v for the PPD42. To get the sizing of the shield right, I aligned my grid with that of the design files for the msp430 dev board, and made sure the spacing between the 0.1” headers was exactly the same – easy. Ran all traces of 20 mils and made the board small as reasonably possible. Now to get them made, and actually test this. | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsubsection{Aligning shield with Eagle and KiCad}} | |||||
So here was an interesting segway. I had design files in Eagle, and I wanted to make a shield for the MSP in Kicad. What I did, was align the grid in Eagle, to be the same as Kicad, and then as appropriate, sized points on the Kicad grid to fit exactly where the MSP shield was. In fact, it turned out 100\% correct the first try. Here is where FOSS and OSHW worked out well. Without the design files (say if I had only a PDF with some measurements), I can't say it would've turned out as well. Open file formats for all components and shields! | |||||
\begin{center} | |||||
\includegraphics[scale=0.5]{../pics/pcblayout.jpg} | |||||
\captionof{figure}{See caption on picture.} | |||||
\end{center} | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{Revision 1 Results}} | |||||
I built up the PCB today. A few errors were made, but this is much better than the mess I had on the plywood originally. First off, the ENC pins are wrong, so that is not going to be able to be mounted (unless I wanted to wire pins manually). Second, the orientation of the MCP part is wrong. I'm not sure how this was done incorrectly, but I suspect that the default KiCad libraries were wrong. I have a few other changes to do, but this was overall successful, and I can respin another board quick quickly. On my todo list is: | |||||
\begin{itemize} | |||||
\item add gnd breakout | |||||
\item add 5v breakout | |||||
\item add 3v3 to enc NOT 5v | |||||
\item fix enc pins | |||||
\item fix orientation of main board | |||||
\item add anime picture to back of board | |||||
\item fix orientation of 3v3 reg | |||||
\item buy more msps (need two more at least) | |||||
\item buy 100 1uf 0805 caps put in main box (I'm surprised I don't keep these in stock. I do have through hole 1uf but not 0805). | |||||
buylist + pcb : header so you can just plug in ppd. This is a sort of wish list thing, but something that will save a few seconds on build time. Although NOT necessary. | |||||
\end{itemize} | |||||
It looks like the connector between the board to the PPD42 is a type of 2.54 or 0.1” header. I will add a separate connector for the PPD42 that has all five pins. No need for any special connector. | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{BOM Creation Notes}} | |||||
Here's some notes on creating the BOM.\footnote{This is a tounge in cheek reference to automated searches for weapons, etc... Yes, the algorithms read everything on every computer.} | |||||
The MSP-EXP430G2 is being obsoleted, in favor of the MSP-EXP430G2ET. This is not a good thing, and shows poor sport on TI's part. I was always wary of the two dozen MSP430's, and now they are removing the original one from production, according to digikey. Ugh. Makes me think I should've just used an Arduino, but I digress. | |||||
Planned obsolecense means, I'll have to make my own dev board for a TI part next time. Which I may just do, the chip is simple enough, and if ICSP and energia will work with this (which I found after a short search on the 43oh.com forums), then that is good enough. | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{Work Log 01/24/19}} | |||||
Adding Library to Energia | |||||
The path for adding a library to energia is: | |||||
/home/dev/Desktop/code/electronics/airqualitysensor/energia-0101E0012/hardware/msp430/libraries | |||||
on my machine. The idea is to add the library to the libraries folder (but, NOT the lib folder…, a little confusing). And you might have to hunt to find that. So I git cloned the ethernet lib, and added it in Remember that this ENC library works with only certain launchpads. Including, my now OBSOLETE one. F\$\#\% companies, and their obsolescence. There’s a special place in hell for these people. | |||||
Upon adding the Ethernet libraries, and running websrv example, I get this error: | |||||
fatal error: avr/pgmspace.h: No such file or directory | |||||
compilation terminated. | |||||
After some fumbling, t looks like | |||||
https://github.com/energia/Energia/commit/cafa204a33e6e0dfa65b2f97dd14792a5964837e | |||||
is what I should be using. | |||||
Make sure you grab from the msp430 section, not the other cores… There’s only two header files, and one short c file. Then it’s all dupes for different cores (not sure if 100\% alike, but we only want msp430). | |||||
This library is poorly done. Had to manually add an include to EtherEncLibUdp.cpp for the dtostrf.h file. I also had to put that file somewhere it could be found. I think you can put it in the etherenc library folder, but perhaps I'm wrong and it should be in the reference folder of Arduino. One of those places. | |||||
\begin{center} | |||||
\includegraphics[scale=0.4]{../pics/DSCN1146.JPG} | |||||
\captionof{figure}{Shield PCB and PPD42} | |||||
\end{center} | |||||
After that it builds. | |||||
With the default example, you have to change a pin. It’s the CS pin that is wrong. I think it’s by default pin 10, but on the pin mappings, it should be 8 (see image in pics folder). There’s two places to change this. One in the sketch (obvious). The second is in etherenclib somewhere… I saw this mentioned in the post in resources I have saved, so refer to that in the git repo. | |||||
Ah, looks like I also forgot to solder some pins. Oops. After that’s out of the way, let’s look at the pin mappings. | |||||
Quote: “(you can change this pin in file enc28typedef.h - line 424, then also mandatory! in sketch pinMode(10,OUTPUT);” | |||||
Says the forum post. I believe it’s this: | |||||
\begin{verbatim} | |||||
#if (ENERGIA) | |||||
#define ENC28J60_CONTROL_CS 8 | |||||
//#define SPI_MOSI 13 | |||||
//#define SPI_MISO 12 | |||||
//#define SPI_SCK 14 | |||||
\end{verbatim} | |||||
And with that, I was able to get this to work. Note that pings do NOT work. It should do nothing if you ping. If you are getting destination not found, then something is wrong. Pings simply reach a dead end. Now to incorporate this with the air quality sensor. | |||||
At first, I had some memory issues. This TI chip has 512 Bytes of SRAM (compared to Atmega328p's 2K SRAM), so I had to do some cutting down of the code. Here's a short interlude where I did this. NOTE: Later on I simplified the code even more. | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsubsection{ENC28J60 on TI Launchpad Code Troubleshooting}} | |||||
\begin{verbatim} | |||||
Basic Server test | |||||
Works. | |||||
Basic Sensor test | |||||
Works | |||||
Basic Sensor and Server test | |||||
Fails. Out of memory. | |||||
\end{verbatim} | |||||
Let’s see at what point, the basic combination of server and sensor fails… What is pushing it over the barrier… I can put math.h and go through setup – no problem… | |||||
Ok, it’s this block of code: | |||||
\begin{verbatim} | |||||
if ((millis()-starttime) > sampletime_ms)//if the sample time == 30s | |||||
{ | |||||
ratio = lowpulseoccupancy/(sampletime_ms*10.0); // Integer percentage 0=>100 | |||||
concentration = 1.1*powf(ratio,3)-3.8*powf(ratio,2)+520*ratio+0.62; // using spec sheet curve | |||||
Serial.print(lowpulseoccupancy); | |||||
Serial.print(","); | |||||
Serial.print(ratio); | |||||
Serial.print(","); | |||||
Serial.println(concentration); | |||||
lowpulseoccupancy = 0; | |||||
starttime = millis(); | |||||
} | |||||
\end{verbatim} | |||||
Let’s cut it down. Interestingly this code here, jumps up 4K bytes: | |||||
\begin{verbatim} | |||||
if ((millis()-starttime) > sampletime_ms)//if the sample time == 30s | |||||
{ | |||||
//ratio = lowpulseoccupancy/(sampletime_ms*10.0); // Integer percentage 0=>100 | |||||
//concentration = 1.1*powf(ratio,3)-3.8*powf(ratio,2)+520*ratio+0.62; // using spec sheet curve | |||||
Serial.print(lowpulseoccupancy); | |||||
Serial.print(","); | |||||
Serial.print(ratio); | |||||
Serial.print(","); | |||||
Serial.println(concentration); | |||||
lowpulseoccupancy = 0; | |||||
starttime = millis(); | |||||
}, | |||||
\end{verbatim} | |||||
even with ratio and concentration cut out. From about 10K to 14K bytes. Wow. | |||||
If I do this: | |||||
\begin{verbatim} | |||||
if ((millis()-starttime) > sampletime_ms)//if the sample time == 30s | |||||
{ | |||||
//ratio = lowpulseoccupancy/(sampletime_ms*10.0); // Integer percentage 0=>100 | |||||
//concentration = 1.1*powf(ratio,3)-3.8*powf(ratio,2)+520*ratio+0.62; // using spec sheet curve | |||||
Serial.print(lowpulseoccupancy); | |||||
//Serial.print(","); | |||||
//Serial.print(ratio); | |||||
//Serial.print(","); | |||||
//Serial.println(concentration); | |||||
lowpulseoccupancy = 0; | |||||
starttime = millis(); | |||||
} | |||||
\end{verbatim} | |||||
It’s back to about 10K bytes. So the serial prints, are a bit wild. I actually don’t need serial prints at all. Let’s cut those out. | |||||
\begin{verbatim} | |||||
ratio = lowpulseoccupancy/(sampletime_ms*10.0); // Integer percentage 0=>100 | |||||
\end{verbatim} | |||||
this command is 2K bytes added. | |||||
The concentration post is simply too much, even by itself. The math is too expensive. It’s 7K bytes about. There must be a cheaper way to do the math. Is there a pow alternative (pow gets the exponent, it appears)… | |||||
https://stackoverflow.com/questions/101439/the-most-efficient-way-to-implement-an-integer-based-power-function-powint-int | |||||
seems hopeful. Simple enough. | |||||
Now I have: | |||||
\begin{verbatim} | |||||
if ((millis()-starttime) > sampletime_ms)//if the sample time == 30s | |||||
{ | |||||
ratio = lowpulseoccupancy/(sampletime_ms*10.0); // Integer percentage 0=>100 | |||||
//concentration = 1.1*powf(ratio,3)-3.8*powf(ratio,2)+520*ratio+0.62; // using spec sheet curve | |||||
concentration = 1.1*ipow(ratio,3)-3.8*ipow(ratio,2)+520*ratio+0.62; // using spec sheet curve | |||||
//Serial.print(lowpulseoccupancy); | |||||
//Serial.print(","); | |||||
//Serial.print(ratio); | |||||
//Serial.print(","); | |||||
//Serial.println(concentration); | |||||
lowpulseoccupancy = 0; | |||||
starttime = millis(); | |||||
} | |||||
\end{verbatim} | |||||
Using a leaner integer pow, instead of a float exponent formula. | |||||
Not sure how it will effect the data, but we will see. And it builds. | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{Power Dissipation}} | |||||
As far as the power dissipation of the linear vreg… I have a lm7805 on there, with a 12V regulator. In Troubleshooting Analog Circuits, Bob Pease mentions the 5 second rule for heat – if you can hold your finger (or thumb) on it for five seconds without being burned, it’s about 85 deg C, and OK. If it’s hotter, then you have issues. Well, I am right on the line, possibly a little under 5 seconds. I could improve with a 7-9V AC Adapter, or a DC – DC switching regulator, but for now – this will do. I should mention, I’m touching the PCB opposite the LM7805 due to the construction. I should add more vias on the bottom of the vreg, also, to get more copper heatsinking. | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{Network Errors due to lack of Memory}} | |||||
After installing everything, I found that the device was not working longer than a few minutes, due to memory constraints. Will need to use a larger TI part... Or just move to Arduino and use a Mega. Based on what happened here my two options are: 1) Give up on TI and use a more vetted part 2) Continue with Launchpad, using a custom PCB for the chip (instead of a launchpad that will be discontinued), and hopefully the memory issues will be resolved. | |||||
I'm leaning towards \#1, as I wish only to monitor dust, not to be stuck in microcontroller details. | |||||
\end{document} |
@ -0,0 +1,275 @@ | |||||
\documentclass[11pt]{article} | |||||
%Gummi|065|=) | |||||
\usepackage{graphicx} | |||||
\usepackage{caption} | |||||
\usepackage{xcolor} | |||||
\usepackage[vcentering,dvips]{geometry} | |||||
\geometry{papersize={6in,9in},total={4.5in,6.8in}} | |||||
\title{\textbf{Air Quality Sensor}} | |||||
\author{Steak Electronics} | |||||
\date{2018 (revised 2019)} | |||||
\begin{document} | |||||
\maketitle | |||||
\tableofcontents | |||||
\textcolor{green!60!blue!70}{ | |||||
\section{Overview}} | |||||
To know when I need to clean my room. I usually vacuum every two or three weeks, but sometimes am lazy and I need a reminder. The dust sensor will be more motivation to get me to clean, when I see the dust levels increase. \footnote{Technically, I also get a rash from excess dust, which is another great motivator.} | |||||
\begin{center} | |||||
\includegraphics[scale=0.3]{../pics/dustsensor.JPG} | |||||
\captionof{figure}{Shinyei Dust sensor PPD42} | |||||
\end{center} | |||||
\textcolor{green!60!blue!70}{ | |||||
\section{Work Log}} | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{Parts List}} | |||||
\begin{itemize} | |||||
\item Shinyei PPD42NS Air Quality Sensor | |||||
\item MSP-EXP430G2553 V1.5 | |||||
\item 5V adapter (required as MSP is 3.3V only) | |||||
\item SD Card adapter | |||||
\item Ethernet Module | |||||
\item Energia version 0101E0012 (or later, possibly) | |||||
\end{itemize} | |||||
\subsection{Beginning} | |||||
Here are some things I learned working on this project. | |||||
\textbf{IDE} | |||||
I'm using Energia from energia.nu which is an Arduino IDE clone for TI Launchpads. This will allow for rapid development. And ease me into the TI platform. | |||||
\textbf{MSP-EXP430G2 V1.5} | |||||
There are different version of this. My particular board is the | |||||
and as explained here: http://energia.nu/pin-maps/guide\_msp430g2launchpad/ and http://energia.nu/pin-maps/guide\_msp430g2launchpad/ | |||||
You need to rotate the UART jumpers to get UART to display correctly. Oddly enough you can choose a different chip in the boards list and serial will print out right... But switch the jumpers and the correct board will work with UART. Otherwise, it does not work out of the box for serial.print. Though the blink example sketch works. | |||||
\textbf{Dust Sensor} | |||||
The code for the dust sensor is found online easily. The pinout is tricky as the colours of the wire are nonsense, but the pinout seems to be the same for all sensors, and is: PIN 1 (closest to black box) GND, PIN 3, VDD (5+V), PIN 4 output A. there is also an output B for different readings (I think size) of dust. I'm not that particular (no pun intended) about my dust so I will go with the one most people are using. | |||||
\textbf{3.3V only on TI} | |||||
The TI takes input of USB but only outputs 3.3V. Fail. I'll through a 5V PSU on the board. It won't be connected to USB for its use anyways. | |||||
\textbf{POW function} | |||||
There is a pow function (power exponent) in arduino. In TI, I changed it to powf, and included math.h. | |||||
I'm not sure if my change was correct. | |||||
EDIT: looks like there is a LED tied to pin 14. I'm moving to pin 13. I meant to use 13 earlier but accidentally used the wrong pin and kept using it. Oops. | |||||
EDIT 2: Actually, I was reading from the wrong pin in software. Maybe I will leave it on the LED pin as you can see when the dust is firing off the sensor. Hm.... Neat. | |||||
EDIT 3: Yes, so I had to use powf instead of pow, and it works. The accidental incorrect pin was a bonus as it allows me to see visually how often the sensor is going off. Over time, I should have a vague grasp of the dust levels just looking at the light. Actually, I won't. Nevermind. The dust sensor reading, is too irregular for that. | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{Work Log 08/2018}} | |||||
I've put everything on a single piece of plywood, and need to do some more work on the code. I've decided to forgo the SD card, as I don't want to deal with reading a 2MB sd card with the buffer provided by the SRAM. I'm not quite sure how to manage that, and whether it's possible to read such large data files. I did some quick research and did not find what I wanted. It is likely possible, but let's do something simpler. Instead, I will use the EEPROM to store the last 5 minutes of data or so, and then have the server read the data every five minutes. This keeps the client simple, and puts the burden of complexity on the server. | |||||
In addition, I don't want to read SD cards manually, as that is cumbersome, though possibly scripts could be made. | |||||
The PPD42 was made sure to be put vertically. | |||||
\begin{center} | |||||
\includegraphics[scale=0.3]{../pics/woodboard.JPG} | |||||
\captionof{figure}{Everything on a piece of plywood, is a nice presentation. Sand and finish with urethane as well.} | |||||
\end{center} | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{Work Log 12/2018}} | |||||
I have decided to change how I do this slightly. Instead of an SD card, I will connect on the LAN and use thingspeak from a locally hosted instance (and deployed with docker, possibly) or some other aggregating server to pull the data. I'll also make a shield, to simplify deployment. That might not be necessary, but I can make a shield in a few hours, and pcbs are cheap. These options such as thingspeak sometimes have graphing / plotting included. | |||||
I'm going to use this library: | |||||
https://github.com/reaper7/EtherEncLib/releases | |||||
so git clone that, then | |||||
git tags -l | |||||
git checkout tags/v0.4.2 | |||||
to get the latest release (or a newer one if possible). | |||||
The pinout for the ENC is viewable at the figure to the right. This is from the 43oh.com forum. | |||||
\footnote{You will see later, that this library turns out to be not developed enough, and results in overall failure for this project. Next time, use a well vetted library!} | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{PCB Layout}} | |||||
Layout is simple for the most part. I again, flipped the ENC as I had done on the Uno board, so it is inserted upside down on the board. This time I went only with the 2x5 pin enc for simplicity sake. The shield is below the MSP, so longer pin headers will be used (already have those) to give space for the barrel plug. The board needs a 3.3v regulator and 5v for the PPD42. To get the sizing of the shield right, I aligned my grid with that of the design files for the msp430 dev board, and made sure the spacing between the 0.1” headers was exactly the same – easy. Ran all traces of 20 mils and made the board small as reasonably possible. Now to get them made, and actually test this. | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsubsection{Aligning shield with Eagle and KiCad}} | |||||
So here was an interesting segway. I had design files in Eagle, and I wanted to make a shield for the MSP in Kicad. What I did, was align the grid in Eagle, to be the same as Kicad, and then as appropriate, sized points on the Kicad grid to fit exactly where the MSP shield was. In fact, it turned out 100\% correct the first try. Here is where FOSS and OSHW worked out well. Without the design files (say if I had only a PDF with some measurements), I can't say it would've turned out as well. Open file formats for all components and shields! | |||||
\begin{center} | |||||
\includegraphics[scale=0.5]{../pics/pcblayout.jpg} | |||||
\captionof{figure}{See caption on picture.} | |||||
\end{center} | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{Revision 1 Results}} | |||||
I built up the PCB today. A few errors were made, but this is much better than the mess I had on the plywood originally. First off, the ENC pins are wrong, so that is not going to be able to be mounted (unless I wanted to wire pins manually). Second, the orientation of the MCP part is wrong. I'm not sure how this was done incorrectly, but I suspect that the default KiCad libraries were wrong. I have a few other changes to do, but this was overall successful, and I can respin another board quick quickly. On my todo list is: | |||||
\begin{itemize} | |||||
\item add gnd breakout | |||||
\item add 5v breakout | |||||
\item add 3v3 to enc NOT 5v | |||||
\item fix enc pins | |||||
\item fix orientation of main board | |||||
\item add anime picture to back of board | |||||
\item fix orientation of 3v3 reg | |||||
\item buy more msps (need two more at least) | |||||
\item buy 100 1uf 0805 caps put in main box (I'm surprised I don't keep these in stock. I do have through hole 1uf but not 0805). | |||||
buylist + pcb : header so you can just plug in ppd. This is a sort of wish list thing, but something that will save a few seconds on build time. Although NOT necessary. | |||||
\end{itemize} | |||||
It looks like the connector between the board to the PPD42 is a type of 2.54 or 0.1” header. I will add a separate connector for the PPD42 that has all five pins. No need for any special connector. | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{BOM Creation Notes}} | |||||
Here's some notes on creating the BOM.\footnote{This is a tounge in cheek reference to automated searches for weapons, etc... Yes, the algorithms read everything on every computer.} | |||||
The MSP-EXP430G2 is being obsoleted, in favor of the MSP-EXP430G2ET. This is not a good thing, and shows poor sport on TI's part. I was always wary of the two dozen MSP430's, and now they are removing the original one from production, according to digikey. Ugh. Makes me think I should've just used an Arduino, but I digress. | |||||
Planned obsolecense means, I'll have to make my own dev board for a TI part next time. Which I may just do, the chip is simple enough, and if ICSP and energia will work with this (which I found after a short search on the 43oh.com forums), then that is good enough. | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{Work Log 01/24/19}} | |||||
Adding Library to Energia | |||||
The path for adding a library to energia is: | |||||
/home/dev/Desktop/code/electronics/airqualitysensor/energia-0101E0012/hardware/msp430/libraries | |||||
on my machine. The idea is to add the library to the libraries folder (but, NOT the lib folder…, a little confusing). And you might have to hunt to find that. So I git cloned the ethernet lib, and added it in Remember that this ENC library works with only certain launchpads. Including, my now OBSOLETE one. F\$\#\% companies, and their obsolescence. There’s a special place in hell for these people. | |||||
Upon adding the Ethernet libraries, and running websrv example, I get this error: | |||||
fatal error: avr/pgmspace.h: No such file or directory | |||||
compilation terminated. | |||||
After some fumbling, t looks like | |||||
https://github.com/energia/Energia/commit/cafa204a33e6e0dfa65b2f97dd14792a5964837e | |||||
is what I should be using. | |||||
Make sure you grab from the msp430 section, not the other cores… There’s only two header files, and one short c file. Then it’s all dupes for different cores (not sure if 100\% alike, but we only want msp430). | |||||
This library is poorly done. Had to manually add an include to EtherEncLibUdp.cpp for the dtostrf.h file. I also had to put that file somewhere it could be found. I think you can put it in the etherenc library folder, but perhaps I'm wrong and it should be in the reference folder of Arduino. One of those places. | |||||
\begin{center} | |||||
\includegraphics[scale=0.4]{../pics/DSCN1146.JPG} | |||||
\captionof{figure}{Shield PCB and PPD42} | |||||
\end{center} | |||||
After that it builds. | |||||
With the default example, you have to change a pin. It’s the CS pin that is wrong. I think it’s by default pin 10, but on the pin mappings, it should be 8 (see image in pics folder). There’s two places to change this. One in the sketch (obvious). The second is in etherenclib somewhere… I saw this mentioned in the post in resources I have saved, so refer to that in the git repo. | |||||
Ah, looks like I also forgot to solder some pins. Oops. After that’s out of the way, let’s look at the pin mappings. | |||||
Quote: “(you can change this pin in file enc28typedef.h - line 424, then also mandatory! in sketch pinMode(10,OUTPUT);” | |||||
Says the forum post. I believe it’s this: | |||||
\begin{verbatim} | |||||
#if (ENERGIA) | |||||
#define ENC28J60_CONTROL_CS 8 | |||||
//#define SPI_MOSI 13 | |||||
//#define SPI_MISO 12 | |||||
//#define SPI_SCK 14 | |||||
\end{verbatim} | |||||
And with that, I was able to get this to work. Note that pings do NOT work. It should do nothing if you ping. If you are getting destination not found, then something is wrong. Pings simply reach a dead end. Now to incorporate this with the air quality sensor. | |||||
At first, I had some memory issues. This TI chip has 512 Bytes of SRAM (compared to Atmega328p's 2K SRAM), so I had to do some cutting down of the code. Here's a short interlude where I did this. NOTE: Later on I simplified the code even more. | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsubsection{ENC28J60 on TI Launchpad Code Troubleshooting}} | |||||
\begin{verbatim} | |||||
Basic Server test | |||||
Works. | |||||
Basic Sensor test | |||||
Works | |||||
Basic Sensor and Server test | |||||
Fails. Out of memory. | |||||
\end{verbatim} | |||||
Let’s see at what point, the basic combination of server and sensor fails… What is pushing it over the barrier… I can put math.h and go through setup – no problem… | |||||
Ok, it’s this block of code: | |||||
\begin{verbatim} | |||||
if ((millis()-starttime) > sampletime_ms)//if the sample time == 30s | |||||
{ | |||||
ratio = lowpulseoccupancy/(sampletime_ms*10.0); // Integer percentage 0=>100 | |||||
concentration = 1.1*powf(ratio,3)-3.8*powf(ratio,2)+520*ratio+0.62; // using spec sheet curve | |||||
Serial.print(lowpulseoccupancy); | |||||
Serial.print(","); | |||||
Serial.print(ratio); | |||||
Serial.print(","); | |||||
Serial.println(concentration); | |||||
lowpulseoccupancy = 0; | |||||
starttime = millis(); | |||||
} | |||||
\end{verbatim} | |||||
Let’s cut it down. Interestingly this code here, jumps up 4K bytes: | |||||
\begin{verbatim} | |||||
if ((millis()-starttime) > sampletime_ms)//if the sample time == 30s | |||||
{ | |||||
//ratio = lowpulseoccupancy/(sampletime_ms*10.0); // Integer percentage 0=>100 | |||||
//concentration = 1.1*powf(ratio,3)-3.8*powf(ratio,2)+520*ratio+0.62; // using spec sheet curve | |||||
Serial.print(lowpulseoccupancy); | |||||
Serial.print(","); | |||||
Serial.print(ratio); | |||||
Serial.print(","); | |||||
Serial.println(concentration); | |||||
lowpulseoccupancy = 0; | |||||
starttime = millis(); | |||||
}, | |||||
\end{verbatim} | |||||
even with ratio and concentration cut out. From about 10K to 14K bytes. Wow. | |||||
If I do this: | |||||
\begin{verbatim} | |||||
if ((millis()-starttime) > sampletime_ms)//if the sample time == 30s | |||||
{ | |||||
//ratio = lowpulseoccupancy/(sampletime_ms*10.0); // Integer percentage 0=>100 | |||||
//concentration = 1.1*powf(ratio,3)-3.8*powf(ratio,2)+520*ratio+0.62; // using spec sheet curve | |||||
Serial.print(lowpulseoccupancy); | |||||
//Serial.print(","); | |||||
//Serial.print(ratio); | |||||
//Serial.print(","); | |||||
//Serial.println(concentration); | |||||
lowpulseoccupancy = 0; | |||||
starttime = millis(); | |||||
} | |||||
\end{verbatim} | |||||
It’s back to about 10K bytes. So the serial prints, are a bit wild. I actually don’t need serial prints at all. Let’s cut those out. | |||||
\begin{verbatim} | |||||
ratio = lowpulseoccupancy/(sampletime_ms*10.0); // Integer percentage 0=>100 | |||||
\end{verbatim} | |||||
this command is 2K bytes added. | |||||
The concentration post is simply too much, even by itself. The math is too expensive. It’s 7K bytes about. There must be a cheaper way to do the math. Is there a pow alternative (pow gets the exponent, it appears)… | |||||
https://stackoverflow.com/questions/101439/the-most-efficient-way-to-implement-an-integer-based-power-function-powint-int | |||||
seems hopeful. Simple enough. | |||||
Now I have: | |||||
\begin{verbatim} | |||||
if ((millis()-starttime) > sampletime_ms)//if the sample time == 30s | |||||
{ | |||||
ratio = lowpulseoccupancy/(sampletime_ms*10.0); // Integer percentage 0=>100 | |||||
//concentration = 1.1*powf(ratio,3)-3.8*powf(ratio,2)+520*ratio+0.62; // using spec sheet curve | |||||
concentration = 1.1*ipow(ratio,3)-3.8*ipow(ratio,2)+520*ratio+0.62; // using spec sheet curve | |||||
//Serial.print(lowpulseoccupancy); | |||||
//Serial.print(","); | |||||
//Serial.print(ratio); | |||||
//Serial.print(","); | |||||
//Serial.println(concentration); | |||||
lowpulseoccupancy = 0; | |||||
starttime = millis(); | |||||
} | |||||
\end{verbatim} | |||||
Using a leaner integer pow, instead of a float exponent formula. | |||||
Not sure how it will effect the data, but we will see. And it builds. | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{Power Dissipation}} | |||||
As far as the power dissipation of the linear vreg… I have a lm7805 on there, with a 12V regulator. In Troubleshooting Analog Circuits, Bob Pease mentions the 5 second rule for heat – if you can hold your finger (or thumb) on it for five seconds without being burned, it’s about 85 deg C, and OK. If it’s hotter, then you have issues. Well, I am right on the line, possibly a little under 5 seconds. I could improve with a 7-9V AC Adapter, or a DC – DC switching regulator, but for now – this will do. I should mention, I’m touching the PCB opposite the LM7805 due to the construction. I should add more vias on the bottom of the vreg, also, to get more copper heatsinking. | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{Network Errors due to lack of Memory}} | |||||
After installing everything, I found that the device was not working longer than a few minutes, due to memory constraints. Will need to use a larger TI part... Or just move to Arduino and use a Mega. Based on what happened here my two options are: 1) Give up on TI and use a more vetted part 2) Continue with Launchpad, using a custom PCB for the chip (instead of a launchpad that will be discontinued), and hopefully the memory issues will be resolved. | |||||
I'm leaning towards \#1, as I wish only to monitor dust, not to be stuck in microcontroller details. | |||||
\end{document} |
@ -0,0 +1,14 @@ | |||||
\contentsline {section}{\numberline {1}Overview}{1} | |||||
\contentsline {section}{\numberline {2}Work Log}{2} | |||||
\contentsline {subsection}{\numberline {2.1}Parts List}{2} | |||||
\contentsline {subsection}{\numberline {2.2}Beginning}{3} | |||||
\contentsline {subsection}{\numberline {2.3}Work Log 08/2018}{4} | |||||
\contentsline {subsection}{\numberline {2.4}Work Log 12/2018}{5} | |||||
\contentsline {subsection}{\numberline {2.5}PCB Layout}{5} | |||||
\contentsline {subsubsection}{\numberline {2.5.1}Aligning shield with Eagle and KiCad}{5} | |||||
\contentsline {subsection}{\numberline {2.6}Revision 1 Results}{6} | |||||
\contentsline {subsection}{\numberline {2.7}BOM Creation Notes}{7} | |||||
\contentsline {subsection}{\numberline {2.8}Work Log 01/24/19}{8} | |||||
\contentsline {subsubsection}{\numberline {2.8.1}ENC28J60 on TI Launchpad Code Troubleshooting}{10} | |||||
\contentsline {subsection}{\numberline {2.9}Power Dissipation}{12} | |||||
\contentsline {subsection}{\numberline {2.10}Network Errors due to lack of Memory}{13} |
@ -0,0 +1,20 @@ | |||||
\relax | |||||
\@writefile{toc}{\contentsline {section}{\numberline {1}Overview}{1}} | |||||
\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Shinyei Dust sensor PPD42\relax }}{2}} | |||||
\@writefile{toc}{\contentsline {section}{\numberline {2}Work Log}{2}} | |||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.1}Parts List}{2}} | |||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.2}Beginning}{3}} | |||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.3}Work Log 08/2018}{4}} | |||||
\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces Plywood can make a good base. While this one wasn't screwed in, I commonly use wood to hold projects. Wood can be finished, and looks nice if desired.\relax }}{4}} | |||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.4}Work Log 12/2018}{5}} | |||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.5}PCB Layout}{5}} | |||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.5.1}Aligning shield with Eagle and KiCad}{5}} | |||||
\@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces See caption on picture.\relax }}{6}} | |||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.6}Revision 1 Results}{6}} | |||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.7}BOM Creation Notes}{7}} | |||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.8}Work Log 01/24/19}{8}} | |||||
\@writefile{lof}{\contentsline {figure}{\numberline {4}{\ignorespaces Shield PCB and PPD42\relax }}{9}} | |||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.8.1}ENC28J60 on TI Launchpad Code Troubleshooting}{10}} | |||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.9}Power Dissipation}{12}} | |||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.10}Network Errors due to lack of Memory}{13}} | |||||
\@writefile{toc}{\contentsline {section}{\numberline {3}End of Year Retrospective}{13}} |
@ -0,0 +1,545 @@ | |||||
This is pdfTeX, Version 3.14159265-2.6-1.40.17 (TeX Live 2016/Debian) (preloaded format=pdflatex 2019.8.17) 17 JAN 2020 20:47 | |||||
entering extended mode | |||||
restricted \write18 enabled. | |||||
%&-line parsing enabled. | |||||
**/home/layoutdev/Desktop/code/documentation_general/Electronics_Projects_2018/ | |||||
Air_Quality_Sensor_PPD42/docs/9.tex | |||||
(/home/layoutdev/Desktop/code/documentation_general/Electronics_Projects_2018/A | |||||
ir_Quality_Sensor_PPD42/docs/9.tex | |||||
LaTeX2e <2017/01/01> patch level 3 | |||||
Babel <3.9r> and hyphenation patterns for 3 language(s) loaded. | |||||
(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls | |||||
Document Class: article 2014/09/29 v1.4h Standard LaTeX document class | |||||
(/usr/share/texlive/texmf-dist/tex/latex/base/size11.clo | |||||
File: size11.clo 2014/09/29 v1.4h Standard LaTeX file (size option) | |||||
) | |||||
\c@part=\count79 | |||||
\c@section=\count80 | |||||
\c@subsection=\count81 | |||||
\c@subsubsection=\count82 | |||||
\c@paragraph=\count83 | |||||
\c@subparagraph=\count84 | |||||
\c@figure=\count85 | |||||
\c@table=\count86 | |||||
\abovecaptionskip=\skip41 | |||||
\belowcaptionskip=\skip42 | |||||
\bibindent=\dimen102 | |||||
) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty | |||||
Package: graphicx 2014/10/28 v1.0g Enhanced LaTeX Graphics (DPC,SPQR) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty | |||||
Package: keyval 2014/10/28 v1.15 key=value parser (DPC) | |||||
\KV@toks@=\toks14 | |||||
) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty | |||||
Package: graphics 2016/10/09 v1.0u Standard LaTeX Graphics (DPC,SPQR) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty | |||||
Package: trig 2016/01/03 v1.10 sin cos tan (DPC) | |||||
) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg | |||||
File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration | |||||
) | |||||
Package graphics Info: Driver file: pdftex.def on input line 99. | |||||
(/usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def | |||||
File: pdftex.def 2017/01/12 v0.06k Graphics/color for pdfTeX | |||||
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/infwarerr.sty | |||||
Package: infwarerr 2016/05/16 v1.4 Providing info/warning/error messages (HO) | |||||
) | |||||
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ltxcmds.sty | |||||
Package: ltxcmds 2016/05/16 v1.23 LaTeX kernel commands for general use (HO) | |||||
) | |||||
\Gread@gobject=\count87 | |||||
)) | |||||
\Gin@req@height=\dimen103 | |||||
\Gin@req@width=\dimen104 | |||||
) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/caption/caption.sty | |||||
Package: caption 2016/02/21 v3.3-144 Customizing captions (AR) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/caption/caption3.sty | |||||
Package: caption3 2016/05/22 v1.7-166 caption3 kernel (AR) | |||||
Package caption3 Info: TeX engine: e-TeX on input line 67. | |||||
\captionmargin=\dimen105 | |||||
\captionmargin@=\dimen106 | |||||
\captionwidth=\dimen107 | |||||
\caption@tempdima=\dimen108 | |||||
\caption@indent=\dimen109 | |||||
\caption@parindent=\dimen110 | |||||
\caption@hangindent=\dimen111 | |||||
) | |||||
\c@ContinuedFloat=\count88 | |||||
) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty | |||||
Package: xcolor 2016/05/11 v2.12 LaTeX color extensions (UK) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg | |||||
File: color.cfg 2016/01/02 v1.6 sample color configuration | |||||
) | |||||
Package xcolor Info: Driver file: pdftex.def on input line 225. | |||||
Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1348. | |||||
Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1352. | |||||
Package xcolor Info: Model `RGB' extended on input line 1364. | |||||
Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1366. | |||||
Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1367. | |||||
Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1368. | |||||
Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1369. | |||||
Package xcolor Info: Model `Gray' substituted by `gray' on input line 1370. | |||||
Package xcolor Info: Model `wave' substituted by `hsb' on input line 1371. | |||||
) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty | |||||
Package: geometry 2010/09/12 v5.6 Page Geometry | |||||
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty | |||||
Package: ifpdf 2016/05/14 v3.1 Provides the ifpdf switch | |||||
) | |||||
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifvtex.sty | |||||
Package: ifvtex 2016/05/16 v1.6 Detect VTeX and its facilities (HO) | |||||
Package ifvtex Info: VTeX not detected. | |||||
) | |||||
(/usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty | |||||
Package: ifxetex 2010/09/12 v0.6 Provides ifxetex conditional | |||||
) | |||||
\Gm@cnth=\count89 | |||||
\Gm@cntv=\count90 | |||||
\c@Gm@tempcnt=\count91 | |||||
\Gm@bindingoffset=\dimen112 | |||||
\Gm@wd@mp=\dimen113 | |||||
\Gm@odd@mp=\dimen114 | |||||
\Gm@even@mp=\dimen115 | |||||
\Gm@layoutwidth=\dimen116 | |||||
\Gm@layoutheight=\dimen117 | |||||
\Gm@layouthoffset=\dimen118 | |||||
\Gm@layoutvoffset=\dimen119 | |||||
\Gm@dimlist=\toks15 | |||||
) (./9.aux) | |||||
\openout1 = `9.aux'. | |||||
LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 11. | |||||
LaTeX Font Info: ... okay on input line 11. | |||||
LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 11. | |||||
LaTeX Font Info: ... okay on input line 11. | |||||
LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 11. | |||||
LaTeX Font Info: ... okay on input line 11. | |||||
LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 11. | |||||
LaTeX Font Info: ... okay on input line 11. | |||||
LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 11. | |||||
LaTeX Font Info: ... okay on input line 11. | |||||
LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 11. | |||||
LaTeX Font Info: ... okay on input line 11. | |||||
(/usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii | |||||
[Loading MPS to PDF converter (version 2006.09.02).] | |||||
\scratchcounter=\count92 | |||||
\scratchdimen=\dimen120 | |||||
\scratchbox=\box26 | |||||
\nofMPsegments=\count93 | |||||
\nofMParguments=\count94 | |||||
\everyMPshowfont=\toks16 | |||||
\MPscratchCnt=\count95 | |||||
\MPscratchDim=\dimen121 | |||||
\MPnumerator=\count96 | |||||
\makeMPintoPDFobject=\count97 | |||||
\everyMPtoPDFconversion=\toks17 | |||||
) (/usr/share/texlive/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty | |||||
Package: pdftexcmds 2016/05/21 v0.22 Utility functions of pdfTeX for LuaTeX (HO | |||||
) | |||||
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifluatex.sty | |||||
Package: ifluatex 2016/05/16 v1.4 Provides the ifluatex switch (HO) | |||||
Package ifluatex Info: LuaTeX not detected. | |||||
) | |||||
Package pdftexcmds Info: LuaTeX not detected. | |||||
Package pdftexcmds Info: \pdf@primitive is available. | |||||
Package pdftexcmds Info: \pdf@ifprimitive is available. | |||||
Package pdftexcmds Info: \pdfdraftmode found. | |||||
) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty | |||||
Package: epstopdf-base 2016/05/15 v2.6 Base part for package epstopdf | |||||
(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/grfext.sty | |||||
Package: grfext 2016/05/16 v1.2 Manage graphics extensions (HO) | |||||
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/kvdefinekeys.sty | |||||
Package: kvdefinekeys 2016/05/16 v1.4 Define keys (HO) | |||||
)) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty | |||||
Package: kvoptions 2016/05/16 v3.12 Key value format for package options (HO) | |||||
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty | |||||
Package: kvsetkeys 2016/05/16 v1.17 Key value parser (HO) | |||||
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/etexcmds.sty | |||||
Package: etexcmds 2016/05/16 v1.6 Avoid name clashes with e-TeX commands (HO) | |||||
Package etexcmds Info: Could not find \expanded. | |||||
(etexcmds) That can mean that you are not using pdfTeX 1.50 or | |||||
(etexcmds) that some package has redefined \expanded. | |||||
(etexcmds) In the latter case, load this package earlier. | |||||
))) | |||||
Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4 | |||||
38. | |||||
Package grfext Info: Graphics extension search list: | |||||
(grfext) [.png,.pdf,.jpg,.mps,.jpeg,.jbig2,.jb2,.PNG,.PDF,.JPG,.JPE | |||||
G,.JBIG2,.JB2,.eps] | |||||
(grfext) \AppendGraphicsExtensions on input line 456. | |||||
(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg | |||||
File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv | |||||
e | |||||
)) | |||||
Package caption Info: Begin \AtBeginDocument code. | |||||
Package caption Info: End \AtBeginDocument code. | |||||
*geometry* detected driver: dvips | |||||
*geometry* verbose mode - [ preamble ] result: | |||||
* driver: dvips | |||||
* paper: custom | |||||
* layout: <same size as paper> | |||||
* layoutoffset:(h,v)=(0.0pt,0.0pt) | |||||
* vratio: 1:1 | |||||
* modes: | |||||
* h-part:(L,W,R)=(54.2025pt, 325.215pt, 54.2025pt) | |||||
* v-part:(T,H,B)=(79.49689pt, 491.43622pt, 79.49689pt) | |||||
* \paperwidth=433.62pt | |||||
* \paperheight=650.43pt | |||||
* \textwidth=325.215pt | |||||
* \textheight=491.43622pt | |||||
* \oddsidemargin=-18.06749pt | |||||
* \evensidemargin=-18.06749pt | |||||
* \topmargin=-29.7731pt | |||||
* \headheight=12.0pt | |||||
* \headsep=25.0pt | |||||
* \topskip=11.0pt | |||||
* \footskip=30.0pt | |||||
* \marginparwidth=59.0pt | |||||
* \marginparsep=10.0pt | |||||
* \columnsep=10.0pt | |||||
* \skip\footins=10.0pt plus 4.0pt minus 2.0pt | |||||
* \hoffset=0.0pt | |||||
* \voffset=0.0pt | |||||
* \mag=1000 | |||||
* \@twocolumnfalse | |||||
* \@twosidefalse | |||||
* \@mparswitchfalse | |||||
* \@reversemarginfalse | |||||
* (1in=72.27pt=25.4mm, 1cm=28.453pt) | |||||
LaTeX Font Info: External font `cmex10' loaded for size | |||||
(Font) <12> on input line 13. | |||||
LaTeX Font Info: External font `cmex10' loaded for size | |||||
(Font) <8> on input line 13. | |||||
LaTeX Font Info: External font `cmex10' loaded for size | |||||
(Font) <6> on input line 13. | |||||
(./9.toc | |||||
LaTeX Font Info: External font `cmex10' loaded for size | |||||
(Font) <10.95> on input line 3. | |||||
Overfull \hbox (9.8543pt too wide) in paragraph at lines 12--12 | |||||
[][] []\OT1/cmr/m/n/10.95 ENC28J60 on TI Launch-pad Code Trou-bleshoot- | |||||
[] | |||||
) | |||||
\tf@toc=\write3 | |||||
\openout3 = `9.toc'. | |||||
LaTeX Font Info: External font `cmex10' loaded for size | |||||
(Font) <9> on input line 19. | |||||
LaTeX Font Info: External font `cmex10' loaded for size | |||||
(Font) <5> on input line 19. | |||||
[1 | |||||
Non-PDF special ignored! | |||||
{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] | |||||
<../pics/dustsensor.JPG, id=10, 667.49374pt x 499.8675pt> | |||||
File: ../pics/dustsensor.JPG Graphic file (type jpg) | |||||
<use ../pics/dustsensor.JPG> | |||||
Package pdftex.def Info: ../pics/dustsensor.JPG used on input line 22. | |||||
(pdftex.def) Requested size: 200.24966pt x 149.9614pt. | |||||
LaTeX Font Info: Try loading font information for OMS+cmr on input line 31. | |||||
(/usr/share/texlive/texmf-dist/tex/latex/base/omscmr.fd | |||||
File: omscmr.fd 2014/09/29 v2.5h Standard LaTeX font definitions | |||||
) | |||||
LaTeX Font Info: Font shape `OMS/cmr/m/n' in size <10.95> not available | |||||
(Font) Font shape `OMS/cmsy/m/n' tried instead on input line 31. | |||||
[2 <../pics/dustsensor.JPG>] | |||||
Overfull \hbox (127.63495pt too wide) in paragraph at lines 46--50 | |||||
\OT1/cmr/m/n/10.95 maps/guide[]msp430g2launchpad/ and http://energia.nu/pin-map | |||||
s/guide[]msp430g2launchpad/ | |||||
[] | |||||
[3] <../pics/woodboard.JPG, id=21, 803.0pt x 602.25pt> | |||||
File: ../pics/woodboard.JPG Graphic file (type jpg) | |||||
<use ../pics/woodboard.JPG> | |||||
Package pdftex.def Info: ../pics/woodboard.JPG used on input line 76. | |||||
(pdftex.def) Requested size: 240.90186pt x 180.67639pt. | |||||
[4 <../pics/woodboard.JPG>] | |||||
Overfull \hbox (68.98256pt too wide) in paragraph at lines 84--91 | |||||
[]\OT1/cmr/m/n/10.95 I'm go-ing to use this li-brary: https://github.com/reaper | |||||
7/EtherEncLib/releases | |||||
[] | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no � in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no “ in font cmr10! | |||||
[5] <../pics/pcblayout.jpg, id=28, 834.86906pt x 549.55313pt> | |||||
File: ../pics/pcblayout.jpg Graphic file (type jpg) | |||||
<use ../pics/pcblayout.jpg> | |||||
Package pdftex.def Info: ../pics/pcblayout.jpg used on input line 103. | |||||
(pdftex.def) Requested size: 417.43352pt x 274.7759pt. | |||||
Overfull \hbox (92.21852pt too wide) in paragraph at lines 103--104 | |||||
[] | |||||
[] | |||||
[6 <../pics/pcblayout.jpg>] | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no � in font cmr10! | |||||
[7] | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ¦ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Overfull \hbox (10.25082pt too wide) in paragraph at lines 135--139 | |||||
\OT1/cmr/m/n/10.95 gia is: /home/dev/Desktop/code/electronics/airqualitysensor/ | |||||
energia- | |||||
[] | |||||
Overfull \hbox (278.58406pt too wide) in paragraph at lines 144--147 | |||||
[]\OT1/cmr/m/n/10.95 After some fum-bling, t looks like https://github.com/ener | |||||
gia/Energia/commit/cafa204a33e6e0dfa65b2f97dd14792a5964837e | |||||
[] | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ¦ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
<../pics/DSCN1146.JPG, id=36, 803.0pt x 602.25pt> | |||||
File: ../pics/DSCN1146.JPG Graphic file (type jpg) | |||||
<use ../pics/DSCN1146.JPG> | |||||
Package pdftex.def Info: ../pics/DSCN1146.JPG used on input line 152. | |||||
(pdftex.def) Requested size: 321.1943pt x 240.89572pt. | |||||
[8] | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ¦ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no œ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no � in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
[9 <../pics/DSCN1146.JPG>] | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ¦ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ¦ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no “ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ¦ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Overfull \hbox (65.69577pt too wide) in paragraph at lines 201--201 | |||||
[]\OT1/cmtt/m/n/10.95 if ((millis()-starttime) > sampletime_ms)//if the sample | |||||
time == 30s[] | |||||
[] | |||||
Overfull \hbox (163.42346pt too wide) in paragraph at lines 201--201 | |||||
[] \OT1/cmtt/m/n/10.95 ratio = lowpulseoccupancy/(sampletime_ms*10.0); | |||||
// Integer percentage 0=>100[] | |||||
[] | |||||
Overfull \hbox (255.40247pt too wide) in paragraph at lines 201--201 | |||||
[] \OT1/cmtt/m/n/10.95 concentration = 1.1*powf(ratio,3)-3.8*powf(ratio, | |||||
2)+520*ratio+0.62; // using spec sheet curve[] | |||||
[] | |||||
[10] | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Overfull \hbox (77.19315pt too wide) in paragraph at lines 216--216 | |||||
[] \OT1/cmtt/m/n/10.95 if ((millis()-starttime) > sampletime_ms)//if the sampl | |||||
e time == 30s[] | |||||
[] | |||||
Overfull \hbox (174.92084pt too wide) in paragraph at lines 216--216 | |||||
[] \OT1/cmtt/m/n/10.95 //ratio = lowpulseoccupancy/(sampletime_ms*10.0); | |||||
// Integer percentage 0=>100[] | |||||
[] | |||||
Overfull \hbox (266.89984pt too wide) in paragraph at lines 216--216 | |||||
[] \OT1/cmtt/m/n/10.95 //concentration = 1.1*powf(ratio,3)-3.8*powf(rati | |||||
o,2)+520*ratio+0.62; // using spec sheet curve[] | |||||
[] | |||||
Overfull \hbox (88.69052pt too wide) in paragraph at lines 234--234 | |||||
[] \OT1/cmtt/m/n/10.95 if ((millis()-starttime) > sampletime_ms)//if the sam | |||||
ple time == 30s[] | |||||
[] | |||||
Overfull \hbox (174.92084pt too wide) in paragraph at lines 234--234 | |||||
[] \OT1/cmtt/m/n/10.95 //ratio = lowpulseoccupancy/(sampletime_ms*10.0); | |||||
// Integer percentage 0=>100[] | |||||
[] | |||||
Overfull \hbox (266.89984pt too wide) in paragraph at lines 234--234 | |||||
[] \OT1/cmtt/m/n/10.95 //concentration = 1.1*powf(ratio,3)-3.8*powf(rati | |||||
o,2)+520*ratio+0.62; // using spec sheet curve[] | |||||
[] | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Overfull \hbox (117.43396pt too wide) in paragraph at lines 238--238 | |||||
[]\OT1/cmtt/m/n/10.95 ratio = lowpulseoccupancy/(sampletime_ms*10.0); // Integ | |||||
er percentage 0=>100[] | |||||
[] | |||||
[11] | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ¦ in font cmr10! | |||||
Overfull \hbox (24.45525pt too wide) in paragraph at lines 241--244 | |||||
\OT1/cmr/m/n/10.95 most-efficient-way-to-implement-an-integer-based-power-funct | |||||
ion-powint- | |||||
[] | |||||
Overfull \hbox (71.44446pt too wide) in paragraph at lines 260--260 | |||||
[] \OT1/cmtt/m/n/10.95 if ((millis()-starttime) > sampletime_ms)//if the sample | |||||
time == 30s[] | |||||
[] | |||||
Overfull \hbox (163.42346pt too wide) in paragraph at lines 260--260 | |||||
[] \OT1/cmtt/m/n/10.95 ratio = lowpulseoccupancy/(sampletime_ms*10.0); | |||||
// Integer percentage 0=>100[] | |||||
[] | |||||
Overfull \hbox (266.89984pt too wide) in paragraph at lines 260--260 | |||||
[] \OT1/cmtt/m/n/10.95 //concentration = 1.1*powf(ratio,3)-3.8*powf(rati | |||||
o,2)+520*ratio+0.62; // using spec sheet curve[] | |||||
[] | |||||
Overfull \hbox (255.40247pt too wide) in paragraph at lines 260--260 | |||||
[] \OT1/cmtt/m/n/10.95 concentration = 1.1*ipow(ratio,3)-3.8*ipow(ratio, | |||||
2)+520*ratio+0.62; // using spec sheet curve[] | |||||
[] | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ¦ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no “ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no “ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no “ in font cmr10! | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no ™ in font cmr10! | |||||
[12] [13] (./9.aux) ) | |||||
Here is how much of TeX's memory you used: | |||||
3564 strings out of 494945 | |||||
54235 string characters out of 6181032 | |||||
120072 words of memory out of 5000000 | |||||
6829 multiletter control sequences out of 15000+600000 | |||||
10198 words of font info for 36 fonts, out of 8000000 for 9000 | |||||
14 hyphenation exceptions out of 8191 | |||||
39i,8n,39p,808b,291s stack positions out of 5000i,500n,10000p,200000b,80000s | |||||
</usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts | |||||
/cm/cmbx10.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cm | |||||
bx12.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pf | |||||
b></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr12.pfb></usr | |||||
/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr6.pfb></usr/share/t | |||||
exlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr8.pfb></usr/share/texlive/t | |||||
exmf-dist/fonts/type1/public/amsfonts/cm/cmr9.pfb></usr/share/texlive/texmf-dis | |||||
t/fonts/type1/public/amsfonts/cm/cmsy10.pfb></usr/share/texlive/texmf-dist/font | |||||
s/type1/public/amsfonts/cm/cmtt10.pfb> | |||||
Output written on 9.pdf (13 pages, 629317 bytes). | |||||
PDF statistics: | |||||
87 PDF objects out of 1000 (max. 8388607) | |||||
58 compressed objects within 1 object stream | |||||
0 named destinations out of 1000 (max. 500000) | |||||
21 words of extra memory for PDF output out of 10000 (max. 10000000) | |||||
@ -0,0 +1,281 @@ | |||||
\documentclass[11pt]{article} | |||||
%Gummi|065|=) | |||||
\usepackage{graphicx} | |||||
\usepackage{caption} | |||||
\usepackage{xcolor} | |||||
\usepackage[vcentering,dvips]{geometry} | |||||
\geometry{papersize={6in,9in},total={4.5in,6.8in}} | |||||
\title{\textbf{Air Quality Sensor}} | |||||
\author{Steak Electronics} | |||||
\date{2018 (revised 2019)} | |||||
\begin{document} | |||||
\maketitle | |||||
\tableofcontents | |||||
\textcolor{green!60!blue!70}{ | |||||
\section{Overview}} | |||||
To know when I need to clean my room. I usually vacuum every two or three weeks, but sometimes am lazy and I need a reminder. The dust sensor will be more motivation to get me to clean, when I see the dust levels increase. \footnote{Technically, I also get a rash from excess dust, which is another great motivator.} | |||||
\begin{center} | |||||
\includegraphics[scale=0.3]{../pics/dustsensor.JPG} | |||||
\captionof{figure}{Shinyei Dust sensor PPD42} | |||||
\end{center} | |||||
\textcolor{green!60!blue!70}{ | |||||
\section{Work Log}} | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{Parts List}} | |||||
\begin{itemize} | |||||
\item Shinyei PPD42NS Air Quality Sensor | |||||
\item MSP-EXP430G2553 V1.5 | |||||
\item 5V adapter (required as MSP is 3.3V only) | |||||
\item SD Card adapter | |||||
\item Ethernet Module | |||||
\item Energia version 0101E0012 (or later, possibly) | |||||
\end{itemize} | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{Beginning}} | |||||
Here are some things I learned working on this project. | |||||
\textbf{IDE} | |||||
I'm using Energia from energia.nu which is an Arduino IDE clone for TI Launchpads. This will allow for rapid development. And ease me into the TI platform. | |||||
\textbf{MSP-EXP430G2 V1.5} | |||||
There are different version of this. My particular board is the | |||||
and as explained here: http://energia.nu/pin-maps/guide\_msp430g2launchpad/ and http://energia.nu/pin-maps/guide\_msp430g2launchpad/ | |||||
You need to rotate the UART jumpers to get UART to display correctly. Oddly enough you can choose a different chip in the boards list and serial will print out right... But switch the jumpers and the correct board will work with UART. Otherwise, it does not work out of the box for serial.print. Though the blink example sketch works. | |||||
\textbf{Dust Sensor} | |||||
The code for the dust sensor is found online easily. The pinout is tricky as the colours of the wire are nonsense, but the pinout seems to be the same for all sensors, and is: PIN 1 (closest to black box) GND, PIN 3, VDD (5+V), PIN 4 output A. there is also an output B for different readings (I think size) of dust. I'm not that particular (no pun intended) about my dust so I will go with the one most people are using. | |||||
\textbf{3.3V only on TI} | |||||
The TI takes input of USB but only outputs 3.3V. Fail. I'll through a 5V PSU on the board. It won't be connected to USB for its use anyways. | |||||
\textbf{POW function} | |||||
There is a pow function (power exponent) in arduino. In TI, I changed it to powf, and included math.h. | |||||
I'm not sure if my change was correct. | |||||
EDIT: looks like there is a LED tied to pin 14. I'm moving to pin 13. I meant to use 13 earlier but accidentally used the wrong pin and kept using it. Oops. | |||||
EDIT 2: Actually, I was reading from the wrong pin in software. Maybe I will leave it on the LED pin as you can see when the dust is firing off the sensor. Hm.... Neat. | |||||
EDIT 3: Yes, so I had to use powf instead of pow, and it works. The accidental incorrect pin was a bonus as it allows me to see visually how often the sensor is going off. Over time, I should have a vague grasp of the dust levels just looking at the light. Actually, I won't. Nevermind. The dust sensor reading, is too irregular for that. | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{Work Log 08/2018}} | |||||
I've put everything on a single piece of plywood, and need to do some more work on the code. I've decided to forgo the SD card, as I don't want to deal with reading a 2MB sd card with the buffer provided by the SRAM. I'm not quite sure how to manage that, and whether it's possible to read such large data files. I did some quick research and did not find what I wanted. It is likely possible, but let's do something simpler. Instead, I will use the EEPROM to store the last 5 minutes of data or so, and then have the server read the data every five minutes. This keeps the client simple, and puts the burden of complexity on the server. | |||||
In addition, I don't want to read SD cards manually, as that is cumbersome, though possibly scripts could be made. | |||||
The PPD42 was made sure to be put vertically. | |||||
\begin{center} | |||||
\includegraphics[scale=0.3]{../pics/woodboard.JPG} | |||||
\captionof{figure}{Plywood can make a good base. While this one wasn't screwed in, I commonly use wood to hold projects. Wood can be finished, and looks nice if desired.} | |||||
\end{center} | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{Work Log 12/2018}} | |||||
I have decided to change how I do this slightly. Instead of an SD card, I will connect on the LAN and use thingspeak from a locally hosted instance (and deployed with docker, possibly) or some other aggregating server to pull the data. I'll also make a shield, to simplify deployment. That might not be necessary, but I can make a shield in a few hours, and pcbs are cheap. These options such as thingspeak sometimes have graphing / plotting included. | |||||
I'm going to use this library: | |||||
https://github.com/reaper7/EtherEncLib/releases | |||||
so git clone that, then | |||||
git tags -l | |||||
git checkout tags/v0.4.2 | |||||
to get the latest release (or a newer one if possible). | |||||
The pinout for the ENC is viewable at the figure to the right. This is from the 43oh.com forum. | |||||
\footnote{You will see later, that this library turns out to be not developed enough, and results in overall failure for this project. Next time, use a well vetted library!} | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{PCB Layout}} | |||||
Layout is simple for the most part. I again, flipped the ENC as I had done on the Uno board, so it is inserted upside down on the board. This time I went only with the 2x5 pin enc for simplicity sake. The shield is below the MSP, so longer pin headers will be used (already have those) to give space for the barrel plug. The board needs a 3.3v regulator and 5v for the PPD42. To get the sizing of the shield right, I aligned my grid with that of the design files for the msp430 dev board, and made sure the spacing between the 0.1” headers was exactly the same – easy. Ran all traces of 20 mils and made the board small as reasonably possible. Now to get them made, and actually test this. | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsubsection{Aligning shield with Eagle and KiCad}} | |||||
So here was an interesting segway. I had design files in Eagle, and I wanted to make a shield for the MSP in Kicad. What I did, was align the grid in Eagle, to be the same as Kicad, and then as appropriate, sized points on the Kicad grid to fit exactly where the MSP shield was. In fact, it turned out 100\% correct the first try. Here is where FOSS and OSHW worked out well. Without the design files (say if I had only a PDF with some measurements), I can't say it would've turned out as well. Open file formats for all components and shields! | |||||
\begin{center} | |||||
\includegraphics[scale=0.5]{../pics/pcblayout.jpg} | |||||
\captionof{figure}{See caption on picture.} | |||||
\end{center} | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{Revision 1 Results}} | |||||
I built up the PCB today. A few errors were made, but this is much better than the mess I had on the plywood originally. First off, the ENC pins are wrong, so that is not going to be able to be mounted (unless I wanted to wire pins manually). Second, the orientation of the MCP part is wrong. I'm not sure how this was done incorrectly, but I suspect that the default KiCad libraries were wrong. I have a few other changes to do, but this was overall successful, and I can respin another board quick quickly. On my todo list is: | |||||
\begin{itemize} | |||||
\item add gnd breakout | |||||
\item add 5v breakout | |||||
\item add 3v3 to enc NOT 5v | |||||
\item fix enc pins | |||||
\item fix orientation of main board | |||||
\item add anime picture to back of board | |||||
\item fix orientation of 3v3 reg | |||||
\item buy more msps (need two more at least) | |||||
\item buy 100 1uf 0805 caps put in main box (I'm surprised I don't keep these in stock. I do have through hole 1uf but not 0805). | |||||
buylist + pcb : header so you can just plug in ppd. This is a sort of wish list thing, but something that will save a few seconds on build time. Although NOT necessary. | |||||
\end{itemize} | |||||
It looks like the connector between the board to the PPD42 is a type of 2.54 or 0.1” header. I will add a separate connector for the PPD42 that has all five pins. No need for any special connector. | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{BOM Creation Notes}} | |||||
Here's some notes on creating the BOM.\footnote{This is a tounge in cheek reference to automated searches for weapons, etc... Yes, the algorithms read everything on every computer.} | |||||
The MSP-EXP430G2 is being obsoleted, in favor of the MSP-EXP430G2ET. This is not a good thing, and shows poor sport on TI's part. I was always wary of the two dozen MSP430's, and now they are removing the original one from production, according to digikey. Ugh. Makes me think I should've just used an Arduino, but I digress. | |||||
Planned obsolecense means, I'll have to make my own dev board for a TI part next time. Which I may just do, the chip is simple enough, and if ICSP and energia will work with this (which I found after a short search on the 43oh.com forums), then that is good enough. | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{Work Log 01/24/19}} | |||||
Adding Library to Energia | |||||
The path for adding a library to energia is: | |||||
/home/dev/Desktop/code/electronics/airqualitysensor/energia-0101E0012/hardware/msp430/libraries | |||||
on my machine. The idea is to add the library to the libraries folder (but, NOT the lib folder…, a little confusing). And you might have to hunt to find that. So I git cloned the ethernet lib, and added it in Remember that this ENC library works with only certain launchpads. Including, my now OBSOLETE one. F\$\#\% companies, and their obsolescence. There’s a special place in hell for these people. | |||||
Upon adding the Ethernet libraries, and running websrv example, I get this error: | |||||
fatal error: avr/pgmspace.h: No such file or directory | |||||
compilation terminated. | |||||
After some fumbling, t looks like | |||||
https://github.com/energia/Energia/commit/cafa204a33e6e0dfa65b2f97dd14792a5964837e | |||||
is what I should be using. | |||||
Make sure you grab from the msp430 section, not the other cores… There’s only two header files, and one short c file. Then it’s all dupes for different cores (not sure if 100\% alike, but we only want msp430). | |||||
This library is poorly done. Had to manually add an include to EtherEncLibUdp.cpp for the dtostrf.h file. I also had to put that file somewhere it could be found. I think you can put it in the etherenc library folder, but perhaps I'm wrong and it should be in the reference folder of Arduino. One of those places. | |||||
\begin{center} | |||||
\includegraphics[scale=0.4]{../pics/DSCN1146.JPG} | |||||
\captionof{figure}{Shield PCB and PPD42} | |||||
\end{center} | |||||
After that it builds. | |||||
With the default example, you have to change a pin. It’s the CS pin that is wrong. I think it’s by default pin 10, but on the pin mappings, it should be 8 (see image in pics folder). There’s two places to change this. One in the sketch (obvious). The second is in etherenclib somewhere… I saw this mentioned in the post in resources I have saved, so refer to that in the git repo. | |||||
Ah, looks like I also forgot to solder some pins. Oops. After that’s out of the way, let’s look at the pin mappings. | |||||
Quote: “(you can change this pin in file enc28typedef.h - line 424, then also mandatory! in sketch pinMode(10,OUTPUT);” | |||||
Says the forum post. I believe it’s this: | |||||
\begin{verbatim} | |||||
#if (ENERGIA) | |||||
#define ENC28J60_CONTROL_CS 8 | |||||
//#define SPI_MOSI 13 | |||||
//#define SPI_MISO 12 | |||||
//#define SPI_SCK 14 | |||||
\end{verbatim} | |||||
And with that, I was able to get this to work. Note that pings do NOT work. It should do nothing if you ping. If you are getting destination not found, then something is wrong. Pings simply reach a dead end. Now to incorporate this with the air quality sensor. | |||||
At first, I had some memory issues. This TI chip has 512 Bytes of SRAM (compared to Atmega328p's 2K SRAM), so I had to do some cutting down of the code. Here's a short interlude where I did this. NOTE: Later on I simplified the code even more. | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsubsection{ENC28J60 on TI Launchpad Code Troubleshooting}} | |||||
\begin{verbatim} | |||||
Basic Server test | |||||
Works. | |||||
Basic Sensor test | |||||
Works | |||||
Basic Sensor and Server test | |||||
Fails. Out of memory. | |||||
\end{verbatim} | |||||
Let’s see at what point, the basic combination of server and sensor fails… What is pushing it over the barrier… I can put math.h and go through setup – no problem… | |||||
Ok, it’s this block of code: | |||||
\begin{verbatim} | |||||
if ((millis()-starttime) > sampletime_ms)//if the sample time == 30s | |||||
{ | |||||
ratio = lowpulseoccupancy/(sampletime_ms*10.0); // Integer percentage 0=>100 | |||||
concentration = 1.1*powf(ratio,3)-3.8*powf(ratio,2)+520*ratio+0.62; // using spec sheet curve | |||||
Serial.print(lowpulseoccupancy); | |||||
Serial.print(","); | |||||
Serial.print(ratio); | |||||
Serial.print(","); | |||||
Serial.println(concentration); | |||||
lowpulseoccupancy = 0; | |||||
starttime = millis(); | |||||
} | |||||
\end{verbatim} | |||||
Let’s cut it down. Interestingly this code here, jumps up 4K bytes: | |||||
\begin{verbatim} | |||||
if ((millis()-starttime) > sampletime_ms)//if the sample time == 30s | |||||
{ | |||||
//ratio = lowpulseoccupancy/(sampletime_ms*10.0); // Integer percentage 0=>100 | |||||
//concentration = 1.1*powf(ratio,3)-3.8*powf(ratio,2)+520*ratio+0.62; // using spec sheet curve | |||||
Serial.print(lowpulseoccupancy); | |||||
Serial.print(","); | |||||
Serial.print(ratio); | |||||
Serial.print(","); | |||||
Serial.println(concentration); | |||||
lowpulseoccupancy = 0; | |||||
starttime = millis(); | |||||
}, | |||||
\end{verbatim} | |||||
even with ratio and concentration cut out. From about 10K to 14K bytes. Wow. | |||||
If I do this: | |||||
\begin{verbatim} | |||||
if ((millis()-starttime) > sampletime_ms)//if the sample time == 30s | |||||
{ | |||||
//ratio = lowpulseoccupancy/(sampletime_ms*10.0); // Integer percentage 0=>100 | |||||
//concentration = 1.1*powf(ratio,3)-3.8*powf(ratio,2)+520*ratio+0.62; // using spec sheet curve | |||||
Serial.print(lowpulseoccupancy); | |||||
//Serial.print(","); | |||||
//Serial.print(ratio); | |||||
//Serial.print(","); | |||||
//Serial.println(concentration); | |||||
lowpulseoccupancy = 0; | |||||
starttime = millis(); | |||||
} | |||||
\end{verbatim} | |||||
It’s back to about 10K bytes. So the serial prints, are a bit wild. I actually don’t need serial prints at all. Let’s cut those out. | |||||
\begin{verbatim} | |||||
ratio = lowpulseoccupancy/(sampletime_ms*10.0); // Integer percentage 0=>100 | |||||
\end{verbatim} | |||||
this command is 2K bytes added. | |||||
The concentration post is simply too much, even by itself. The math is too expensive. It’s 7K bytes about. There must be a cheaper way to do the math. Is there a pow alternative (pow gets the exponent, it appears)… | |||||
https://stackoverflow.com/questions/101439/the-most-efficient-way-to-implement-an-integer-based-power-function-powint-int | |||||
seems hopeful. Simple enough. | |||||
Now I have: | |||||
\begin{verbatim} | |||||
if ((millis()-starttime) > sampletime_ms)//if the sample time == 30s | |||||
{ | |||||
ratio = lowpulseoccupancy/(sampletime_ms*10.0); // Integer percentage 0=>100 | |||||
//concentration = 1.1*powf(ratio,3)-3.8*powf(ratio,2)+520*ratio+0.62; // using spec sheet curve | |||||
concentration = 1.1*ipow(ratio,3)-3.8*ipow(ratio,2)+520*ratio+0.62; // using spec sheet curve | |||||
//Serial.print(lowpulseoccupancy); | |||||
//Serial.print(","); | |||||
//Serial.print(ratio); | |||||
//Serial.print(","); | |||||
//Serial.println(concentration); | |||||
lowpulseoccupancy = 0; | |||||
starttime = millis(); | |||||
} | |||||
\end{verbatim} | |||||
Using a leaner integer pow, instead of a float exponent formula. | |||||
Not sure how it will effect the data, but we will see. And it builds. | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{Power Dissipation}} | |||||
As far as the power dissipation of the linear vreg… I have a lm7805 on there, with a 12V regulator. In Troubleshooting Analog Circuits, Bob Pease mentions the 5 second rule for heat – if you can hold your finger (or thumb) on it for five seconds without being burned, it’s about 85 deg C, and OK. If it’s hotter, then you have issues. Well, I am right on the line, possibly a little under 5 seconds. I could improve with a 7-9V AC Adapter, or a DC – DC switching regulator, but for now – this will do. I should mention, I’m touching the PCB opposite the LM7805 due to the construction. I should add more vias on the bottom of the vreg, also, to get more copper heatsinking. | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{Network Errors due to lack of Memory}} | |||||
After installing everything, I found that the device was not working longer than a few minutes, due to memory constraints. Will need to use a larger TI part... Or just move to Arduino and use a Mega. Based on what happened here my two options are: 1) Give up on TI and use a more vetted part 2) Continue with Launchpad, using a custom PCB for the chip (instead of a launchpad that will be discontinued), and hopefully the memory issues will be resolved. | |||||
I'm leaning towards \#1, as I wish only to monitor dust, not to be stuck in microcontroller details. | |||||
\textcolor{green!60!blue!70}{ | |||||
\section{End of Year Retrospective}} | |||||
This project hinged on the ENC Library working, as well as availability of the TI dev board. When the ENC library turned out to be unusable, and the dev board discontinued... At this point, I would've avoided these problems by using a more vetted solution like an Uno or Mega. Alternatively, I could've made my own TI board, and substituted a Micro with larger RAM. However, I can't create time, so making a board didn't happen. | |||||
\end{document} |
@ -0,0 +1,280 @@ | |||||
\documentclass[11pt]{article} | |||||
%Gummi|065|=) | |||||
\usepackage{graphicx} | |||||
\usepackage{caption} | |||||
\usepackage{xcolor} | |||||
\usepackage[vcentering,dvips]{geometry} | |||||
\geometry{papersize={6in,9in},total={4.5in,6.8in}} | |||||
\title{\textbf{Air Quality Sensor}} | |||||
\author{Steak Electronics} | |||||
\date{2018 (revised 2019)} | |||||
\begin{document} | |||||
\maketitle | |||||
\tableofcontents | |||||
\textcolor{green!60!blue!70}{ | |||||
\section{Overview}} | |||||
To know when I need to clean my room. I usually vacuum every two or three weeks, but sometimes am lazy and I need a reminder. The dust sensor will be more motivation to get me to clean, when I see the dust levels increase. \footnote{Technically, I also get a rash from excess dust, which is another great motivator.} | |||||
\begin{center} | |||||
\includegraphics[scale=0.3]{../pics/dustsensor.JPG} | |||||
\captionof{figure}{Shinyei Dust sensor PPD42} | |||||
\end{center} | |||||
\textcolor{green!60!blue!70}{ | |||||
\section{Work Log}} | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{Parts List}} | |||||
\begin{itemize} | |||||
\item Shinyei PPD42NS Air Quality Sensor | |||||
\item MSP-EXP430G2553 V1.5 | |||||
\item 5V adapter (required as MSP is 3.3V only) | |||||
\item SD Card adapter | |||||
\item Ethernet Module | |||||
\item Energia version 0101E0012 (or later, possibly) | |||||
\end{itemize} | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{Beginning}} | |||||
Here are some things I learned working on this project. | |||||
\textbf{IDE} | |||||
I'm using Energia from energia.nu which is an Arduino IDE clone for TI Launchpads. This will allow for rapid development. And ease me into the TI platform. | |||||
\textbf{MSP-EXP430G2 V1.5} | |||||
There are different version of this. My particular board is the | |||||
and as explained here: http://energia.nu/pin-maps/guide\_msp430g2launchpad/ and http://energia.nu/pin-maps/guide\_msp430g2launchpad/ | |||||
You need to rotate the UART jumpers to get UART to display correctly. Oddly enough you can choose a different chip in the boards list and serial will print out right... But switch the jumpers and the correct board will work with UART. Otherwise, it does not work out of the box for serial.print. Though the blink example sketch works. | |||||
\textbf{Dust Sensor} | |||||
The code for the dust sensor is found online easily. The pinout is tricky as the colours of the wire are nonsense, but the pinout seems to be the same for all sensors, and is: PIN 1 (closest to black box) GND, PIN 3, VDD (5+V), PIN 4 output A. there is also an output B for different readings (I think size) of dust. I'm not that particular (no pun intended) about my dust so I will go with the one most people are using. | |||||
\textbf{3.3V only on TI} | |||||
The TI takes input of USB but only outputs 3.3V. Fail. I'll through a 5V PSU on the board. It won't be connected to USB for its use anyways. | |||||
\textbf{POW function} | |||||
There is a pow function (power exponent) in arduino. In TI, I changed it to powf, and included math.h. | |||||
I'm not sure if my change was correct. | |||||
EDIT: looks like there is a LED tied to pin 14. I'm moving to pin 13. I meant to use 13 earlier but accidentally used the wrong pin and kept using it. Oops. | |||||
EDIT 2: Actually, I was reading from the wrong pin in software. Maybe I will leave it on the LED pin as you can see when the dust is firing off the sensor. Hm.... Neat. | |||||
EDIT 3: Yes, so I had to use powf instead of pow, and it works. The accidental incorrect pin was a bonus as it allows me to see visually how often the sensor is going off. Over time, I should have a vague grasp of the dust levels just looking at the light. Actually, I won't. Nevermind. The dust sensor reading, is too irregular for that. | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{Work Log 08/2018}} | |||||
I've put everything on a single piece of plywood, and need to do some more work on the code. I've decided to forgo the SD card, as I don't want to deal with reading a 2MB sd card with the buffer provided by the SRAM. I'm not quite sure how to manage that, and whether it's possible to read such large data files. I did some quick research and did not find what I wanted. It is likely possible, but let's do something simpler. Instead, I will use the EEPROM to store the last 5 minutes of data or so, and then have the server read the data every five minutes. This keeps the client simple, and puts the burden of complexity on the server. | |||||
In addition, I don't want to read SD cards manually, as that is cumbersome, though possibly scripts could be made. | |||||
The PPD42 was made sure to be put vertically. | |||||
\begin{center} | |||||
\includegraphics[scale=0.3]{../pics/woodboard.JPG} | |||||
\captionof{figure}{Everything on a piece of plywood, is a nice presentation. Sand and finish with urethane as well.} | |||||
\end{center} | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{Work Log 12/2018}} | |||||
I have decided to change how I do this slightly. Instead of an SD card, I will connect on the LAN and use thingspeak from a locally hosted instance (and deployed with docker, possibly) or some other aggregating server to pull the data. I'll also make a shield, to simplify deployment. That might not be necessary, but I can make a shield in a few hours, and pcbs are cheap. These options such as thingspeak sometimes have graphing / plotting included. | |||||
I'm going to use this library: | |||||
https://github.com/reaper7/EtherEncLib/releases | |||||
so git clone that, then | |||||
git tags -l | |||||
git checkout tags/v0.4.2 | |||||
to get the latest release (or a newer one if possible). | |||||
The pinout for the ENC is viewable at the figure to the right. This is from the 43oh.com forum. | |||||
\footnote{You will see later, that this library turns out to be not developed enough, and results in overall failure for this project. Next time, use a well vetted library!} | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{PCB Layout}} | |||||
Layout is simple for the most part. I again, flipped the ENC as I had done on the Uno board, so it is inserted upside down on the board. This time I went only with the 2x5 pin enc for simplicity sake. The shield is below the MSP, so longer pin headers will be used (already have those) to give space for the barrel plug. The board needs a 3.3v regulator and 5v for the PPD42. To get the sizing of the shield right, I aligned my grid with that of the design files for the msp430 dev board, and made sure the spacing between the 0.1” headers was exactly the same – easy. Ran all traces of 20 mils and made the board small as reasonably possible. Now to get them made, and actually test this. | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsubsection{Aligning shield with Eagle and KiCad}} | |||||
So here was an interesting segway. I had design files in Eagle, and I wanted to make a shield for the MSP in Kicad. What I did, was align the grid in Eagle, to be the same as Kicad, and then as appropriate, sized points on the Kicad grid to fit exactly where the MSP shield was. In fact, it turned out 100\% correct the first try. Here is where FOSS and OSHW worked out well. Without the design files (say if I had only a PDF with some measurements), I can't say it would've turned out as well. Open file formats for all components and shields! | |||||
\begin{center} | |||||
\includegraphics[scale=0.5]{../pics/pcblayout.jpg} | |||||
\captionof{figure}{See caption on picture.} | |||||
\end{center} | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{Revision 1 Results}} | |||||
I built up the PCB today. A few errors were made, but this is much better than the mess I had on the plywood originally. First off, the ENC pins are wrong, so that is not going to be able to be mounted (unless I wanted to wire pins manually). Second, the orientation of the MCP part is wrong. I'm not sure how this was done incorrectly, but I suspect that the default KiCad libraries were wrong. I have a few other changes to do, but this was overall successful, and I can respin another board quick quickly. On my todo list is: | |||||
\begin{itemize} | |||||
\item add gnd breakout | |||||
\item add 5v breakout | |||||
\item add 3v3 to enc NOT 5v | |||||
\item fix enc pins | |||||
\item fix orientation of main board | |||||
\item add anime picture to back of board | |||||
\item fix orientation of 3v3 reg | |||||
\item buy more msps (need two more at least) | |||||
\item buy 100 1uf 0805 caps put in main box (I'm surprised I don't keep these in stock. I do have through hole 1uf but not 0805). | |||||
buylist + pcb : header so you can just plug in ppd. This is a sort of wish list thing, but something that will save a few seconds on build time. Although NOT necessary. | |||||
\end{itemize} | |||||
It looks like the connector between the board to the PPD42 is a type of 2.54 or 0.1” header. I will add a separate connector for the PPD42 that has all five pins. No need for any special connector. | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{BOM Creation Notes}} | |||||
Here's some notes on creating the BOM.\footnote{This is a tounge in cheek reference to automated searches for weapons, etc... Yes, the algorithms read everything on every computer.} | |||||
The MSP-EXP430G2 is being obsoleted, in favor of the MSP-EXP430G2ET. This is not a good thing, and shows poor sport on TI's part. I was always wary of the two dozen MSP430's, and now they are removing the original one from production, according to digikey. Ugh. Makes me think I should've just used an Arduino, but I digress. | |||||
Planned obsolecense means, I'll have to make my own dev board for a TI part next time. Which I may just do, the chip is simple enough, and if ICSP and energia will work with this (which I found after a short search on the 43oh.com forums), then that is good enough. | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{Work Log 01/24/19}} | |||||
Adding Library to Energia | |||||
The path for adding a library to energia is: | |||||
/home/dev/Desktop/code/electronics/airqualitysensor/energia-0101E0012/hardware/msp430/libraries | |||||
on my machine. The idea is to add the library to the libraries folder (but, NOT the lib folder…, a little confusing). And you might have to hunt to find that. So I git cloned the ethernet lib, and added it in Remember that this ENC library works with only certain launchpads. Including, my now OBSOLETE one. F\$\#\% companies, and their obsolescence. There’s a special place in hell for these people. | |||||
Upon adding the Ethernet libraries, and running websrv example, I get this error: | |||||
fatal error: avr/pgmspace.h: No such file or directory | |||||
compilation terminated. | |||||
After some fumbling, t looks like | |||||
https://github.com/energia/Energia/commit/cafa204a33e6e0dfa65b2f97dd14792a5964837e | |||||
is what I should be using. | |||||
Make sure you grab from the msp430 section, not the other cores… There’s only two header files, and one short c file. Then it’s all dupes for different cores (not sure if 100\% alike, but we only want msp430). | |||||
This library is poorly done. Had to manually add an include to EtherEncLibUdp.cpp for the dtostrf.h file. I also had to put that file somewhere it could be found. I think you can put it in the etherenc library folder, but perhaps I'm wrong and it should be in the reference folder of Arduino. One of those places. | |||||
\begin{center} | |||||
\includegraphics[scale=0.4]{../pics/DSCN1146.JPG} | |||||
\captionof{figure}{Shield PCB and PPD42} | |||||
\end{center} | |||||
After that it builds. | |||||
With the default example, you have to change a pin. It’s the CS pin that is wrong. I think it’s by default pin 10, but on the pin mappings, it should be 8 (see image in pics folder). There’s two places to change this. One in the sketch (obvious). The second is in etherenclib somewhere… I saw this mentioned in the post in resources I have saved, so refer to that in the git repo. | |||||
Ah, looks like I also forgot to solder some pins. Oops. After that’s out of the way, let’s look at the pin mappings. | |||||
Quote: “(you can change this pin in file enc28typedef.h - line 424, then also mandatory! in sketch pinMode(10,OUTPUT);” | |||||
Says the forum post. I believe it’s this: | |||||
\begin{verbatim} | |||||
#if (ENERGIA) | |||||
#define ENC28J60_CONTROL_CS 8 | |||||
//#define SPI_MOSI 13 | |||||
//#define SPI_MISO 12 | |||||
//#define SPI_SCK 14 | |||||
\end{verbatim} | |||||
And with that, I was able to get this to work. Note that pings do NOT work. It should do nothing if you ping. If you are getting destination not found, then something is wrong. Pings simply reach a dead end. Now to incorporate this with the air quality sensor. | |||||
At first, I had some memory issues. This TI chip has 512 Bytes of SRAM (compared to Atmega328p's 2K SRAM), so I had to do some cutting down of the code. Here's a short interlude where I did this. NOTE: Later on I simplified the code even more. | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsubsection{ENC28J60 on TI Launchpad Code Troubleshooting}} | |||||
\begin{verbatim} | |||||
Basic Server test | |||||
Works. | |||||
Basic Sensor test | |||||
Works | |||||
Basic Sensor and Server test | |||||
Fails. Out of memory. | |||||
\end{verbatim} | |||||
Let’s see at what point, the basic combination of server and sensor fails… What is pushing it over the barrier… I can put math.h and go through setup – no problem… | |||||
Ok, it’s this block of code: | |||||
\begin{verbatim} | |||||
if ((millis()-starttime) > sampletime_ms)//if the sample time == 30s | |||||
{ | |||||
ratio = lowpulseoccupancy/(sampletime_ms*10.0); // Integer percentage 0=>100 | |||||
concentration = 1.1*powf(ratio,3)-3.8*powf(ratio,2)+520*ratio+0.62; // using spec sheet curve | |||||
Serial.print(lowpulseoccupancy); | |||||
Serial.print(","); | |||||
Serial.print(ratio); | |||||
Serial.print(","); | |||||
Serial.println(concentration); | |||||
lowpulseoccupancy = 0; | |||||
starttime = millis(); | |||||
} | |||||
\end{verbatim} | |||||
Let’s cut it down. Interestingly this code here, jumps up 4K bytes: | |||||
\begin{verbatim} | |||||
if ((millis()-starttime) > sampletime_ms)//if the sample time == 30s | |||||
{ | |||||
//ratio = lowpulseoccupancy/(sampletime_ms*10.0); // Integer percentage 0=>100 | |||||
//concentration = 1.1*powf(ratio,3)-3.8*powf(ratio,2)+520*ratio+0.62; // using spec sheet curve | |||||
Serial.print(lowpulseoccupancy); | |||||
Serial.print(","); | |||||
Serial.print(ratio); | |||||
Serial.print(","); | |||||
Serial.println(concentration); | |||||
lowpulseoccupancy = 0; | |||||
starttime = millis(); | |||||
}, | |||||
\end{verbatim} | |||||
even with ratio and concentration cut out. From about 10K to 14K bytes. Wow. | |||||
If I do this: | |||||
\begin{verbatim} | |||||
if ((millis()-starttime) > sampletime_ms)//if the sample time == 30s | |||||
{ | |||||
//ratio = lowpulseoccupancy/(sampletime_ms*10.0); // Integer percentage 0=>100 | |||||
//concentration = 1.1*powf(ratio,3)-3.8*powf(ratio,2)+520*ratio+0.62; // using spec sheet curve | |||||
Serial.print(lowpulseoccupancy); | |||||
//Serial.print(","); | |||||
//Serial.print(ratio); | |||||
//Serial.print(","); | |||||
//Serial.println(concentration); | |||||
lowpulseoccupancy = 0; | |||||
starttime = millis(); | |||||
} | |||||
\end{verbatim} | |||||
It’s back to about 10K bytes. So the serial prints, are a bit wild. I actually don’t need serial prints at all. Let’s cut those out. | |||||
\begin{verbatim} | |||||
ratio = lowpulseoccupancy/(sampletime_ms*10.0); // Integer percentage 0=>100 | |||||
\end{verbatim} | |||||
this command is 2K bytes added. | |||||
The concentration post is simply too much, even by itself. The math is too expensive. It’s 7K bytes about. There must be a cheaper way to do the math. Is there a pow alternative (pow gets the exponent, it appears)… | |||||
https://stackoverflow.com/questions/101439/the-most-efficient-way-to-implement-an-integer-based-power-function-powint-int | |||||
seems hopeful. Simple enough. | |||||
Now I have: | |||||
\begin{verbatim} | |||||
if ((millis()-starttime) > sampletime_ms)//if the sample time == 30s | |||||
{ | |||||
ratio = lowpulseoccupancy/(sampletime_ms*10.0); // Integer percentage 0=>100 | |||||
//concentration = 1.1*powf(ratio,3)-3.8*powf(ratio,2)+520*ratio+0.62; // using spec sheet curve | |||||
concentration = 1.1*ipow(ratio,3)-3.8*ipow(ratio,2)+520*ratio+0.62; // using spec sheet curve | |||||
//Serial.print(lowpulseoccupancy); | |||||
//Serial.print(","); | |||||
//Serial.print(ratio); | |||||
//Serial.print(","); | |||||
//Serial.println(concentration); | |||||
lowpulseoccupancy = 0; | |||||
starttime = millis(); | |||||
} | |||||
\end{verbatim} | |||||
Using a leaner integer pow, instead of a float exponent formula. | |||||
Not sure how it will effect the data, but we will see. And it builds. | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{Power Dissipation}} | |||||
As far as the power dissipation of the linear vreg… I have a lm7805 on there, with a 12V regulator. In Troubleshooting Analog Circuits, Bob Pease mentions the 5 second rule for heat – if you can hold your finger (or thumb) on it for five seconds without being burned, it’s about 85 deg C, and OK. If it’s hotter, then you have issues. Well, I am right on the line, possibly a little under 5 seconds. I could improve with a 7-9V AC Adapter, or a DC – DC switching regulator, but for now – this will do. I should mention, I’m touching the PCB opposite the LM7805 due to the construction. I should add more vias on the bottom of the vreg, also, to get more copper heatsinking. | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{Network Errors due to lack of Memory}} | |||||
After installing everything, I found that the device was not working longer than a few minutes, due to memory constraints. Will need to use a larger TI part... Or just move to Arduino and use a Mega. Based on what happened here my two options are: 1) Give up on TI and use a more vetted part 2) Continue with Launchpad, using a custom PCB for the chip (instead of a launchpad that will be discontinued), and hopefully the memory issues will be resolved. | |||||
I'm leaning towards \#1, as I wish only to monitor dust, not to be stuck in microcontroller details. | |||||
\textcolor{green!60!blue!70}{ | |||||
\section{End of Year Retrospective}} | |||||
This project hinged on the ENC Library working, as well as availability of the TI dev board. When the ENC library turned out to be unusable, and the dev board discontinued... At this point, I would've avoided these problems by using a more vetted solution like an Uno or Mega. Alternatively, I could've made my own TI board, and substituted a Micro with larger RAM. However, I can't create time, so making a board didn't happen. | |||||
\end{document} |
@ -0,0 +1,15 @@ | |||||
\contentsline {section}{\numberline {1}Overview}{1} | |||||
\contentsline {section}{\numberline {2}Work Log}{2} | |||||
\contentsline {subsection}{\numberline {2.1}Parts List}{2} | |||||
\contentsline {subsection}{\numberline {2.2}Beginning}{3} | |||||
\contentsline {subsection}{\numberline {2.3}Work Log 08/2018}{4} | |||||
\contentsline {subsection}{\numberline {2.4}Work Log 12/2018}{5} | |||||
\contentsline {subsection}{\numberline {2.5}PCB Layout}{5} | |||||
\contentsline {subsubsection}{\numberline {2.5.1}Aligning shield with Eagle and KiCad}{5} | |||||
\contentsline {subsection}{\numberline {2.6}Revision 1 Results}{6} | |||||
\contentsline {subsection}{\numberline {2.7}BOM Creation Notes}{7} | |||||
\contentsline {subsection}{\numberline {2.8}Work Log 01/24/19}{8} | |||||
\contentsline {subsubsection}{\numberline {2.8.1}ENC28J60 on TI Launchpad Code Troubleshooting}{10} | |||||
\contentsline {subsection}{\numberline {2.9}Power Dissipation}{12} | |||||
\contentsline {subsection}{\numberline {2.10}Network Errors due to lack of Memory}{13} | |||||
\contentsline {section}{\numberline {3}End of Year Retrospective}{13} |
@ -0,0 +1,10 @@ | |||||
\relax | |||||
\@writefile{toc}{\contentsline {section}{\numberline {1}Overview}{1}} | |||||
\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Windmill Data Logger was used with a 12V 1Ah battery. The Regulator used is a somewhat low power AP2204K-ADJTRG1, set to 13.7 or 13.8V\relax }}{1}} | |||||
\@writefile{toc}{\contentsline {section}{\numberline {2}Work Log}{1}} | |||||
\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces Morning hours on my east facing Window, there is a rise, then a drop off, where self discharge begins. The Sharp dropoff can be ignored - it was due to a poor connection. This data is from 062818, only one day.\relax }}{2}} | |||||
\@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces Data from 07-01 to 07-08-18 Note that a few cloudy days, cause the battery to discharge, (overall) with this setup. The current readings, do show a slight increase, though still in the noise. We need more panels.\relax }}{3}} | |||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.1}Work Log 08/2018}{3}} | |||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.2}Work Log 082818}{4}} | |||||
\@writefile{lof}{\contentsline {figure}{\numberline {4}{\ignorespaces Board in the Window\relax }}{5}} | |||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.3}Work Log 082918}{5}} |
@ -0,0 +1,298 @@ | |||||
This is pdfTeX, Version 3.14159265-2.6-1.40.17 (TeX Live 2016/Debian) (preloaded format=pdflatex 2019.8.17) 1 JAN 2020 18:33 | |||||
entering extended mode | |||||
restricted \write18 enabled. | |||||
%&-line parsing enabled. | |||||
**/home/layoutdev/Desktop/code/documentation_general/Electronics_Projects_2018/ | |||||
Home_Solar_Logger/docs/4.tex | |||||
(/home/layoutdev/Desktop/code/documentation_general/Electronics_Projects_2018/H | |||||
ome_Solar_Logger/docs/4.tex | |||||
LaTeX2e <2017/01/01> patch level 3 | |||||
Babel <3.9r> and hyphenation patterns for 3 language(s) loaded. | |||||
(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls | |||||
Document Class: article 2014/09/29 v1.4h Standard LaTeX document class | |||||
(/usr/share/texlive/texmf-dist/tex/latex/base/size11.clo | |||||
File: size11.clo 2014/09/29 v1.4h Standard LaTeX file (size option) | |||||
) | |||||
\c@part=\count79 | |||||
\c@section=\count80 | |||||
\c@subsection=\count81 | |||||
\c@subsubsection=\count82 | |||||
\c@paragraph=\count83 | |||||
\c@subparagraph=\count84 | |||||
\c@figure=\count85 | |||||
\c@table=\count86 | |||||
\abovecaptionskip=\skip41 | |||||
\belowcaptionskip=\skip42 | |||||
\bibindent=\dimen102 | |||||
) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty | |||||
Package: graphicx 2014/10/28 v1.0g Enhanced LaTeX Graphics (DPC,SPQR) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty | |||||
Package: keyval 2014/10/28 v1.15 key=value parser (DPC) | |||||
\KV@toks@=\toks14 | |||||
) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty | |||||
Package: graphics 2016/10/09 v1.0u Standard LaTeX Graphics (DPC,SPQR) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty | |||||
Package: trig 2016/01/03 v1.10 sin cos tan (DPC) | |||||
) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg | |||||
File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration | |||||
) | |||||
Package graphics Info: Driver file: pdftex.def on input line 99. | |||||
(/usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def | |||||
File: pdftex.def 2017/01/12 v0.06k Graphics/color for pdfTeX | |||||
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/infwarerr.sty | |||||
Package: infwarerr 2016/05/16 v1.4 Providing info/warning/error messages (HO) | |||||
) | |||||
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ltxcmds.sty | |||||
Package: ltxcmds 2016/05/16 v1.23 LaTeX kernel commands for general use (HO) | |||||
) | |||||
\Gread@gobject=\count87 | |||||
)) | |||||
\Gin@req@height=\dimen103 | |||||
\Gin@req@width=\dimen104 | |||||
) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/caption/caption.sty | |||||
Package: caption 2016/02/21 v3.3-144 Customizing captions (AR) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/caption/caption3.sty | |||||
Package: caption3 2016/05/22 v1.7-166 caption3 kernel (AR) | |||||
Package caption3 Info: TeX engine: e-TeX on input line 67. | |||||
\captionmargin=\dimen105 | |||||
\captionmargin@=\dimen106 | |||||
\captionwidth=\dimen107 | |||||
\caption@tempdima=\dimen108 | |||||
\caption@indent=\dimen109 | |||||
\caption@parindent=\dimen110 | |||||
\caption@hangindent=\dimen111 | |||||
) | |||||
\c@ContinuedFloat=\count88 | |||||
) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty | |||||
Package: xcolor 2016/05/11 v2.12 LaTeX color extensions (UK) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg | |||||
File: color.cfg 2016/01/02 v1.6 sample color configuration | |||||
) | |||||
Package xcolor Info: Driver file: pdftex.def on input line 225. | |||||
Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1348. | |||||
Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1352. | |||||
Package xcolor Info: Model `RGB' extended on input line 1364. | |||||
Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1366. | |||||
Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1367. | |||||
Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1368. | |||||
Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1369. | |||||
Package xcolor Info: Model `Gray' substituted by `gray' on input line 1370. | |||||
Package xcolor Info: Model `wave' substituted by `hsb' on input line 1371. | |||||
) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty | |||||
Package: geometry 2010/09/12 v5.6 Page Geometry | |||||
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty | |||||
Package: ifpdf 2016/05/14 v3.1 Provides the ifpdf switch | |||||
) | |||||
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifvtex.sty | |||||
Package: ifvtex 2016/05/16 v1.6 Detect VTeX and its facilities (HO) | |||||
Package ifvtex Info: VTeX not detected. | |||||
) | |||||
(/usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty | |||||
Package: ifxetex 2010/09/12 v0.6 Provides ifxetex conditional | |||||
) | |||||
\Gm@cnth=\count89 | |||||
\Gm@cntv=\count90 | |||||
\c@Gm@tempcnt=\count91 | |||||
\Gm@bindingoffset=\dimen112 | |||||
\Gm@wd@mp=\dimen113 | |||||
\Gm@odd@mp=\dimen114 | |||||
\Gm@even@mp=\dimen115 | |||||
\Gm@layoutwidth=\dimen116 | |||||
\Gm@layoutheight=\dimen117 | |||||
\Gm@layouthoffset=\dimen118 | |||||
\Gm@layoutvoffset=\dimen119 | |||||
\Gm@dimlist=\toks15 | |||||
) (./4.aux) | |||||
\openout1 = `4.aux'. | |||||
LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 11. | |||||
LaTeX Font Info: ... okay on input line 11. | |||||
LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 11. | |||||
LaTeX Font Info: ... okay on input line 11. | |||||
LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 11. | |||||
LaTeX Font Info: ... okay on input line 11. | |||||
LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 11. | |||||
LaTeX Font Info: ... okay on input line 11. | |||||
LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 11. | |||||
LaTeX Font Info: ... okay on input line 11. | |||||
LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 11. | |||||
LaTeX Font Info: ... okay on input line 11. | |||||
(/usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii | |||||
[Loading MPS to PDF converter (version 2006.09.02).] | |||||
\scratchcounter=\count92 | |||||
\scratchdimen=\dimen120 | |||||
\scratchbox=\box26 | |||||
\nofMPsegments=\count93 | |||||
\nofMParguments=\count94 | |||||
\everyMPshowfont=\toks16 | |||||
\MPscratchCnt=\count95 | |||||
\MPscratchDim=\dimen121 | |||||
\MPnumerator=\count96 | |||||
\makeMPintoPDFobject=\count97 | |||||
\everyMPtoPDFconversion=\toks17 | |||||
) (/usr/share/texlive/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty | |||||
Package: pdftexcmds 2016/05/21 v0.22 Utility functions of pdfTeX for LuaTeX (HO | |||||
) | |||||
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifluatex.sty | |||||
Package: ifluatex 2016/05/16 v1.4 Provides the ifluatex switch (HO) | |||||
Package ifluatex Info: LuaTeX not detected. | |||||
) | |||||
Package pdftexcmds Info: LuaTeX not detected. | |||||
Package pdftexcmds Info: \pdf@primitive is available. | |||||
Package pdftexcmds Info: \pdf@ifprimitive is available. | |||||
Package pdftexcmds Info: \pdfdraftmode found. | |||||
) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty | |||||
Package: epstopdf-base 2016/05/15 v2.6 Base part for package epstopdf | |||||
(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/grfext.sty | |||||
Package: grfext 2016/05/16 v1.2 Manage graphics extensions (HO) | |||||
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/kvdefinekeys.sty | |||||
Package: kvdefinekeys 2016/05/16 v1.4 Define keys (HO) | |||||
)) | |||||
(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty | |||||
Package: kvoptions 2016/05/16 v3.12 Key value format for package options (HO) | |||||
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty | |||||
Package: kvsetkeys 2016/05/16 v1.17 Key value parser (HO) | |||||
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/etexcmds.sty | |||||
Package: etexcmds 2016/05/16 v1.6 Avoid name clashes with e-TeX commands (HO) | |||||
Package etexcmds Info: Could not find \expanded. | |||||
(etexcmds) That can mean that you are not using pdfTeX 1.50 or | |||||
(etexcmds) that some package has redefined \expanded. | |||||
(etexcmds) In the latter case, load this package earlier. | |||||
))) | |||||
Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4 | |||||
38. | |||||
Package grfext Info: Graphics extension search list: | |||||
(grfext) [.png,.pdf,.jpg,.mps,.jpeg,.jbig2,.jb2,.PNG,.PDF,.JPG,.JPE | |||||
G,.JBIG2,.JB2,.eps] | |||||
(grfext) \AppendGraphicsExtensions on input line 456. | |||||
(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg | |||||
File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv | |||||
e | |||||
)) | |||||
Package caption Info: Begin \AtBeginDocument code. | |||||
Package caption Info: End \AtBeginDocument code. | |||||
*geometry* detected driver: dvips | |||||
*geometry* verbose mode - [ preamble ] result: | |||||
* driver: dvips | |||||
* paper: custom | |||||
* layout: <same size as paper> | |||||
* layoutoffset:(h,v)=(0.0pt,0.0pt) | |||||
* vratio: 1:1 | |||||
* modes: | |||||
* h-part:(L,W,R)=(54.2025pt, 325.215pt, 54.2025pt) | |||||
* v-part:(T,H,B)=(79.49689pt, 491.43622pt, 79.49689pt) | |||||
* \paperwidth=433.62pt | |||||
* \paperheight=650.43pt | |||||
* \textwidth=325.215pt | |||||
* \textheight=491.43622pt | |||||
* \oddsidemargin=-18.06749pt | |||||
* \evensidemargin=-18.06749pt | |||||
* \topmargin=-29.7731pt | |||||
* \headheight=12.0pt | |||||
* \headsep=25.0pt | |||||
* \topskip=11.0pt | |||||
* \footskip=30.0pt | |||||
* \marginparwidth=59.0pt | |||||
* \marginparsep=10.0pt | |||||
* \columnsep=10.0pt | |||||
* \skip\footins=10.0pt plus 4.0pt minus 2.0pt | |||||
* \hoffset=0.0pt | |||||
* \voffset=0.0pt | |||||
* \mag=1000 | |||||
* \@twocolumnfalse | |||||
* \@twosidefalse | |||||
* \@mparswitchfalse | |||||
* \@reversemarginfalse | |||||
* (1in=72.27pt=25.4mm, 1cm=28.453pt) | |||||
<../pics/DSCN0156.JPG, id=1, 1110.0672pt x 832.5504pt> | |||||
File: ../pics/DSCN0156.JPG Graphic file (type jpg) | |||||
<use ../pics/DSCN0156.JPG> | |||||
Package pdftex.def Info: ../pics/DSCN0156.JPG used on input line 22. | |||||
(pdftex.def) Requested size: 277.51611pt x 208.13708pt. | |||||
[1 | |||||
Non-PDF special ignored! | |||||
{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map} <../pics/DSCN0156.JPG>] <.. | |||||
/pics/062918_homesolar.jpg, id=9, 963.6pt x 542.025pt> | |||||
File: ../pics/062918_homesolar.jpg Graphic file (type jpg) | |||||
<use ../pics/062918_homesolar.jpg> | |||||
Package pdftex.def Info: ../pics/062918_homesolar.jpg used on input line 45. | |||||
(pdftex.def) Requested size: 289.08223pt x 162.60875pt. | |||||
[2 <../pics/062918_homesolar.jpg>] | |||||
<../pics/070818_homesolar.jpg, id=13, 1445.4pt x 963.6pt> | |||||
File: ../pics/070818_homesolar.jpg Graphic file (type jpg) | |||||
<use ../pics/070818_homesolar.jpg> | |||||
Package pdftex.def Info: ../pics/070818_homesolar.jpg used on input line 56. | |||||
(pdftex.def) Requested size: 361.34912pt x 240.89941pt. | |||||
Overfull \hbox (36.13412pt too wide) in paragraph at lines 56--57 | |||||
[] | |||||
[] | |||||
[3 <../pics/070818_homesolar.jpg>] | |||||
Overfull \hbox (108.58505pt too wide) in paragraph at lines 79--80 | |||||
[]\OT1/cmr/m/n/10.95 http://web.archive.org/web/20180216201121/http://lowrank.n | |||||
et:80/gnuplot/datetime- | |||||
[] | |||||
[4] <../pics/DSCN0294.JPG, id=20, 803.0pt x 602.25pt> | |||||
File: ../pics/DSCN0294.JPG Graphic file (type jpg) | |||||
<use ../pics/DSCN0294.JPG> | |||||
Package pdftex.def Info: ../pics/DSCN0294.JPG used on input line 93. | |||||
(pdftex.def) Requested size: 321.1943pt x 240.89572pt. | |||||
Missing character: There is no â in font cmr10! | |||||
Missing character: There is no € in font cmr10! | |||||
Missing character: There is no “ in font cmr10! | |||||
[5 <../pics/DSCN0294.JPG>] | |||||
Overfull \hbox (6.50659pt too wide) in paragraph at lines 109--111 | |||||
[]\OT1/cmr/m/n/10.95 References: https://www.vishay.com/docs/89398/solarcell.pd | |||||
f So- | |||||
[] | |||||
[6] (./4.aux) ) | |||||
Here is how much of TeX's memory you used: | |||||
3510 strings out of 494945 | |||||
53573 string characters out of 6181032 | |||||
118057 words of memory out of 5000000 | |||||
6793 multiletter control sequences out of 15000+600000 | |||||
5318 words of font info for 20 fonts, out of 8000000 for 9000 | |||||
14 hyphenation exceptions out of 8191 | |||||
39i,5n,39p,1156b,252s stack positions out of 5000i,500n,10000p,200000b,80000s | |||||
</usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cm | |||||
bx12.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pf | |||||
b></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmtt10.pfb> | |||||
Output written on 4.pdf (6 pages, 4033280 bytes). | |||||
PDF statistics: | |||||
39 PDF objects out of 1000 (max. 8388607) | |||||
23 compressed objects within 1 object stream | |||||
0 named destinations out of 1000 (max. 500000) | |||||
21 words of extra memory for PDF output out of 10000 (max. 10000000) | |||||
@ -0,0 +1,119 @@ | |||||
\documentclass[11pt]{article} | |||||
%Gummi|065|=) | |||||
\usepackage{graphicx,caption} | |||||
\usepackage{xcolor} | |||||
\usepackage[vcentering,dvips]{geometry} | |||||
\geometry{papersize={6in,9in},total={4.5in,6.8in}} | |||||
\title{\textbf{Home Solar Data Logger}} | |||||
\author{Steak Electronics} | |||||
\date{} | |||||
\begin{document} | |||||
%\maketitle | |||||
%\tableofcontents | |||||
\textcolor{green!60!blue!70}{ | |||||
\section{Overview}} | |||||
Test out a KISS battery and solar panel, having the panel charge the battery. Log. | |||||
\begin{center} | |||||
\includegraphics[scale=0.25]{../pics/DSCN0156.JPG} | |||||
\captionof{figure}{Windmill Data Logger was used with a 12V 1Ah battery. The Regulator used is a somewhat low power AP2204K-ADJTRG1, set to 13.7 or 13.8V} | |||||
\end{center} | |||||
\textcolor{green!60!blue!70}{ | |||||
\section{Work Log}} | |||||
General Build: | |||||
There are two solar panels in series, to make about 14 to 16 volts in direct sunlight. They go to a 150mA adjustable voltage regulator (AP2204K-ADJTRG1) on a piece of perfboard which sets the output voltage to be 13.7 or 13.8 volts on a breadboard. There is a diode outputting into the lead battery to prevent any backflow. There is an LED on the output of the Vreg to signal that power is live. The externally power Arduino Mega and custom Windmill shield tap into the V+ of the battery, and have an ACS712 5A current meter in series with the current output. SD card logs data at about 1 per second. GPS keeps time (see windmill docs for detail on troubleshooting GPS). | |||||
Battery used: | |||||
A battery made in China with the Duracell brand tacked on. The side of it says distributed by Ascent Battery Supply, LLC from Wisconsin. See photo of the front. It's fairly small. Cost was ~\$20-25.00 | |||||
I need to find the data sheet for this battery to see how much current I can pull from it. | |||||
Diode: | |||||
There is some additional drop across the diode. I have to test other regulators that can go higher than the AP2204K which seems to have a limit around 13.7, in my setup. | |||||
\begin{center} | |||||
\includegraphics[scale=0.3]{../pics/062918_homesolar.jpg} | |||||
\captionof{figure}{Morning hours on my east facing Window, there is a rise, then a drop off, where self discharge begins. The Sharp dropoff can be ignored - it was due to a poor connection. This data is from 062818, only one day.} | |||||
\end{center} | |||||
Findings: | |||||
See the above graphs. Although the data cuts out (I knocked out by accident, the adc line into +) you can see a steady self discharge. The current meter used here is not sensitive enough to register the max of 10mA that is charging the battery (used a sparkfun breakout for an ACS712, of 5A current meter) but it may show a slight increase when the battery is increasing. How much self discharge do lead batteries have? We are going to test this particular battery and find out exactly how it performs. | |||||
\begin{center} | |||||
\includegraphics[scale=0.25]{../pics/070818_homesolar.jpg} | |||||
\captionof{figure}{Data from 07-01 to 07-08-18 Note that a few cloudy days, cause the battery to discharge, (overall) with this setup. The current readings, do show a slight increase, though still in the noise. We need more panels.} | |||||
\end{center} | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{Work Log 08/2018}} | |||||
I've put everything on one piece of 1/8th inch plywood, and will begin logging again. I may want to have the battery covered up, so sunlight doesn't heat it up. We are heading into fall now, so I expect sunlight to diminish as we head towards December. See photo. I've added fuses to the battery and to the Logger PSU connector. The additional two panels wired in parallel should give us additional current, and hopefully show greater peaks and troughs in the readings. | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{Work Log 082818}} | |||||
The data from the past ten days has been collected. I will admit, that I'm doing this fast, so I expect to make mistakes, but I plan to learn from each mistake. | |||||
Here the data shows a few things. One the date and time is not included, which is OK for short periods of time, but I can do better.. I'm going to alter the code to include a unix timestamp. This unix timestamp will allow other devices to sync to this, with an easy interval, and conversions are straightforward, I believe. It will hopefully also allow me to graph the date and time better. I'm not quite sure how to approach time and data with Gnuplot yet. Second, I will do a better job of connecting the Voltage monitor. You can see the voltage line drop out, and that isn't from the battery dying, but from the wire being disconnected. I will use wire wrapping or solder to connect them this time. I also have obtained a portable (butane) powered soldering iron, which I can use if I open the windows. The data lines or sensor lines are everything here, so I can't afford to lose one. I could also use a terminal block, if I can find one in my junk box. What I need is a foolproof connection, but also one that I can disconnect when necessary. | |||||
I considered adding a math conversion for the current, but I'm not entirely worried about how much current is passing through the device yet. Maybe I will add one in addition to the existing ADC however. | |||||
Some links that reference the date and time: | |||||
http://gnuplot.sourceforge.net/docs\_4.2/node76.html | |||||
http://lowrank.net/gnuplot/datetime-e.html | |||||
http://web.archive.org/web/20180216201121/http://lowrank.net:80/gnuplot/datetime-e.html | |||||
The lowrank link in particular is helpful: | |||||
\begin{verbatim} | |||||
gnuplot> set xdata time | |||||
gnuplot> set timefmt "%Y-%m-%d" | |||||
gnuplot> plot "sample.dat" using 1:2 with boxes | |||||
\end{verbatim} | |||||
\begin{center} | |||||
\includegraphics[scale=0.4]{../pics/DSCN0294.JPG} | |||||
\captionof{figure}{Board in the Window} | |||||
\end{center} | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{Work Log 082918}} | |||||
I looked at voltages this morning while the sun was out. It appears that outside of the voltage being disconnected in the last graph (the ground wire was pulled from the breadboard), everything is working. It is floating at a voltage of 12.8, so max voltage has been reached. There is ample current available from the solar panels. The voltages of the panels differ – one is about 18 volts, the other 11.5 volts. I should do something to keep them similar (more notes below). The Vreg seems to be managing the different voltages. Solar cells are photodiodes, so it being a diode, I am making the assumption we should be OK, with a reasonably close voltage. (reference: https://romikoderbynew.com/2011/02/25/reverse-bias-in-solar-cells/). | |||||
However, looking closely at the two panels, I can see 13mA passing out of the 18V panels, and -12 mA passing into the smaller 11V solar panels, so apparently it is not ok, and that link is not entirely correct. A solution would be either a diode, or tune another Vreg so that they are the same on the panels (maybe both). I don't want to connect them all in series for the Vreg. I read there is danger of them impacting each other if the currents are different enough. One might burn out the other, if the currents are not close. I also don't like one of them breaking or being shadowed, and stopping the others. I could connect up reverse bias diodes, to passover any non working cells, but this is not necessary in this small setup. | |||||
I think I will pursue two separate Vregs, both set to output a fixed voltage, and the sum of these Vregs will output into the battery. That all being said we have another issue. We need to start using the battery. | |||||
Load | |||||
I have a sparkfun beefcake relay board, I will setup some kind of device to be powered on, by the 12.8V battery (probably another Arduino Uno logging something) for a period of time each day. So this adds more code todo. What would be useful to log for short periods throughout the day, but not constantly? Temperature? Maybe I could take a picture, of outside every ten minutes... I think I will start with Temperature for simplicity sake. | |||||
References: | |||||
https://www.vishay.com/docs/89398/solarcell.pdf Solar Cell Bypass Diodes in Silicon Crystalline Photovoltaic - Vishay | |||||
\end{document} |
@ -0,0 +1,119 @@ | |||||
\documentclass[11pt]{article} | |||||
%Gummi|065|=) | |||||
\usepackage{graphicx,caption} | |||||
\usepackage{xcolor} | |||||
\usepackage[vcentering,dvips]{geometry} | |||||
\geometry{papersize={6in,9in},total={4.5in,6.8in}} | |||||
\title{\textbf{Home Solar Data Logger}} | |||||
\author{Steak Electronics} | |||||
\date{} | |||||
\begin{document} | |||||
%\maketitle | |||||
%\tableofcontents | |||||
\textcolor{green!60!blue!70}{ | |||||
\section{Overview}} | |||||
Test out a KISS battery and solar panel, having the panel charge the battery. Log. | |||||
\begin{center} | |||||
\includegraphics[scale=0.05]{../pics/DSCN0156.JPG} | |||||
\captionof{figure}{Windmill Data Logger was used with a 12V 1Ah battery. The Regulator used is a somewhat low power AP2204K-ADJTRG1, set to 13.7 or 13.8V} | |||||
\end{center} | |||||
\textcolor{green!60!blue!70}{ | |||||
\section{Work Log}} | |||||
General Build: | |||||
There are two solar panels in series, to make about 14 to 16 volts in direct sunlight. They go to a 150mA adjustable voltage regulator (AP2204K-ADJTRG1) on a piece of perfboard which sets the output voltage to be 13.7 or 13.8 volts on a breadboard. There is a diode outputting into the lead battery to prevent any backflow. There is an LED on the output of the Vreg to signal that power is live. The externally power Arduino Mega and custom Windmill shield tap into the V+ of the battery, and have an ACS712 5A current meter in series with the current output. SD card logs data at about 1 per second. GPS keeps time (see windmill docs for detail on troubleshooting GPS). | |||||
Battery used: | |||||
A battery made in China with the Duracell brand tacked on. The side of it says distributed by Ascent Battery Supply, LLC from Wisconsin. See photo of the front. It's fairly small. Cost was ~\$20-25.00 | |||||
I need to find the data sheet for this battery to see how much current I can pull from it. | |||||
Diode: | |||||
There is some additional drop across the diode. I have to test other regulators that can go higher than the AP2204K which seems to have a limit around 13.7, in my setup. | |||||
\begin{center} | |||||
\includegraphics[scale=0.3]{../pics/062918_homesolar.jpg} | |||||
\captionof{figure}{Morning hours on my east facing Window, there is a rise, then a drop off, where self discharge begins. The Sharp dropoff can be ignored - it was due to a poor connection. This data is from 062818, only one day.} | |||||
\end{center} | |||||
Findings: | |||||
See the above graphs. Although the data cuts out (I knocked out by accident, the adc line into +) you can see a steady self discharge. The current meter used here is not sensitive enough to register the max of 10mA that is charging the battery (used a sparkfun breakout for an ACS712, of 5A current meter) but it may show a slight increase when the battery is increasing. How much self discharge do lead batteries have? We are going to test this particular battery and find out exactly how it performs. | |||||
\begin{center} | |||||
\includegraphics[scale=0.25]{../pics/070818_homesolar.jpg} | |||||
\captionof{figure}{Data from 07-01 to 07-08-18 Note that a few cloudy days, cause the battery to discharge, (overall) with this setup. The current readings, do show a slight increase, though still in the noise. We need more panels.} | |||||
\end{center} | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{Work Log 08/2018}} | |||||
I've put everything on one piece of 1/8th inch plywood, and will begin logging again. I may want to have the battery covered up, so sunlight doesn't heat it up. We are heading into fall now, so I expect sunlight to diminish as we head towards December. See photo. I've added fuses to the battery and to the Logger PSU connector. The additional two panels wired in parallel should give us additional current, and hopefully show greater peaks and troughs in the readings. | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{Work Log 082818}} | |||||
The data from the past ten days has been collected. I will admit, that I'm doing this fast, so I expect to make mistakes, but I plan to learn from each mistake. | |||||
Here the data shows a few things. One the date and time is not included, which is OK for short periods of time, but I can do better.. I'm going to alter the code to include a unix timestamp. This unix timestamp will allow other devices to sync to this, with an easy interval, and conversions are straightforward, I believe. It will hopefully also allow me to graph the date and time better. I'm not quite sure how to approach time and data with Gnuplot yet. Second, I will do a better job of connecting the Voltage monitor. You can see the voltage line drop out, and that isn't from the battery dying, but from the wire being disconnected. I will use wire wrapping or solder to connect them this time. I also have obtained a portable (butane) powered soldering iron, which I can use if I open the windows. The data lines or sensor lines are everything here, so I can't afford to lose one. I could also use a terminal block, if I can find one in my junk box. What I need is a foolproof connection, but also one that I can disconnect when necessary. | |||||
I considered adding a math conversion for the current, but I'm not entirely worried about how much current is passing through the device yet. Maybe I will add one in addition to the existing ADC however. | |||||
Some links that reference the date and time: | |||||
http://gnuplot.sourceforge.net/docs\_4.2/node76.html | |||||
http://lowrank.net/gnuplot/datetime-e.html | |||||
http://web.archive.org/web/20180216201121/http://lowrank.net:80/gnuplot/datetime-e.html | |||||
The lowrank link in particular is helpful: | |||||
\begin{verbatim} | |||||
gnuplot> set xdata time | |||||
gnuplot> set timefmt "%Y-%m-%d" | |||||
gnuplot> plot "sample.dat" using 1:2 with boxes | |||||
\end{verbatim} | |||||
\begin{center} | |||||
\includegraphics[scale=0.4]{../pics/DSCN0294.JPG} | |||||
\captionof{figure}{Board in the Window} | |||||
\end{center} | |||||
\textcolor{green!60!blue!70}{ | |||||
\subsection{Work Log 082918}} | |||||
I looked at voltages this morning while the sun was out. It appears that outside of the voltage being disconnected in the last graph (the ground wire was pulled from the breadboard), everything is working. It is floating at a voltage of 12.8, so max voltage has been reached. There is ample current available from the solar panels. The voltages of the panels differ – one is about 18 volts, the other 11.5 volts. I should do something to keep them similar (more notes below). The Vreg seems to be managing the different voltages. Solar cells are photodiodes, so it being a diode, I am making the assumption we should be OK, with a reasonably close voltage. (reference: https://romikoderbynew.com/2011/02/25/reverse-bias-in-solar-cells/). | |||||
However, looking closely at the two panels, I can see 13mA passing out of the 18V panels, and -12 mA passing into the smaller 11V solar panels, so apparently it is not ok, and that link is not entirely correct. A solution would be either a diode, or tune another Vreg so that they are the same on the panels (maybe both). I don't want to connect them all in series for the Vreg. I read there is danger of them impacting each other if the currents are different enough. One might burn out the other, if the currents are not close. I also don't like one of them breaking or being shadowed, and stopping the others. I could connect up reverse bias diodes, to passover any non working cells, but this is not necessary in this small setup. | |||||
I think I will pursue two separate Vregs, both set to output a fixed voltage, and the sum of these Vregs will output into the battery. That all being said we have another issue. We need to start using the battery. | |||||
Load | |||||
I have a sparkfun beefcake relay board, I will setup some kind of device to be powered on, by the 12.8V battery (probably another Arduino Uno logging something) for a period of time each day. So this adds more code todo. What would be useful to log for short periods throughout the day, but not constantly? Temperature? Maybe I could take a picture, of outside every ten minutes... I think I will start with Temperature for simplicity sake. | |||||
References: | |||||
https://www.vishay.com/docs/89398/solarcell.pdf Solar Cell Bypass Diodes in Silicon Crystalline Photovoltaic - Vishay | |||||
\end{document} |