{"id":1166,"date":"2017-09-26T14:18:21","date_gmt":"2017-09-26T14:18:21","guid":{"rendered":"http:\/\/bryceautomation.com\/?p=1166"},"modified":"2021-03-04T10:22:23","modified_gmt":"2021-03-04T10:22:23","slug":"arduino-vape-box-mod","status":"publish","type":"post","link":"https:\/\/bryceautomation.com\/index.php\/2017\/09\/26\/arduino-vape-box-mod\/","title":{"rendered":"Arduino Vape Box Mod (With WiFI)"},"content":{"rendered":"<h2>Introduction to Arduino Vape Box Mod<\/h2>\n<p>In this document, I will explain how I built my own arduino vape box mod.&nbsp; This box will be based on PWM (Pulse Width Modulation).&nbsp; &nbsp;Be aware that the purpose of the document is just to explain how I built my own box. &nbsp; &nbsp;There are many dangers associated with this, so you will want to research the dangers of the components, and apply your own safety features.<\/p><div id=\"bryce-2594946463\" class=\"bryce-afterfirst bryce-entity-placement\"><script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js?client=ca-pub-8316758073402323\" crossorigin=\"anonymous\"><\/script><ins class=\"adsbygoogle\" style=\"display:block;\" data-ad-client=\"ca-pub-8316758073402323\" \ndata-ad-slot=\"7728240895\" \ndata-ad-format=\"auto\"><\/ins>\n<script> \n(adsbygoogle = window.adsbygoogle || []).push({}); \n<\/script>\n<\/div>\n<p>This mod uses Lithium batteries which can explode if used improperly, so I would always recommend using protected batteries. &nbsp; &nbsp;In this box, if the batteries are inserted improperly, the results could be disastrous. &nbsp; &nbsp; I&#8217;ve taken a few safety precautions on this box, though. &nbsp;You also would want to add safety features in the event that a MOSFET shorts and continuously fires.<\/p>\n<p><img decoding=\"async\" class=\"aligncenter size-full wp-image-1176 lazyload\" data-src=\"https:\/\/bryceautomation.com\/wp-content\/uploads\/2017\/09\/mainscreen.jpg\" alt=\"Display\" width=\"1632\" height=\"1224\" data-srcset=\"https:\/\/bryceautomation.com\/wp-content\/uploads\/2017\/09\/mainscreen.jpg 1000w, https:\/\/bryceautomation.com\/wp-content\/uploads\/2017\/09\/mainscreen-300x225.jpg 300w, https:\/\/bryceautomation.com\/wp-content\/uploads\/2017\/09\/mainscreen-768x576.jpg 768w, https:\/\/bryceautomation.com\/wp-content\/uploads\/2017\/09\/mainscreen-1024x768.jpg 1024w\" data-sizes=\"(max-width: 1632px) 100vw, 1632px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1632px; --smush-placeholder-aspect-ratio: 1632\/1224;\" \/><\/p>\n<p>In my setup, I can read temperature, humidity, and barometric pressure. &nbsp; In addition, the box will act as my alarm clock, and garage door opener. &nbsp; To use the garage door opener, I&#8217;ve built another box which connects to my home wifi. &nbsp; This other box simply closes a relay for one second to simulate pressing the push button. &nbsp; The purpose of this document is simply to give you ideas. &nbsp; You assume all liability if you try to implement this. &nbsp; I&#8217;m just documenting the project here for my own reference.<\/p>\n<p>&nbsp;<\/p>\n<h2>List of Components:<\/h2>\n<p><img decoding=\"async\" class=\"aligncenter size-full wp-image-1168 lazyload\" data-src=\"https:\/\/bryceautomation.com\/wp-content\/uploads\/2017\/09\/inside.jpg\" alt=\"Inside Vape\" width=\"1632\" height=\"1224\" data-srcset=\"https:\/\/bryceautomation.com\/wp-content\/uploads\/2017\/09\/inside.jpg 1000w, https:\/\/bryceautomation.com\/wp-content\/uploads\/2017\/09\/inside-300x225.jpg 300w, https:\/\/bryceautomation.com\/wp-content\/uploads\/2017\/09\/inside-768x576.jpg 768w, https:\/\/bryceautomation.com\/wp-content\/uploads\/2017\/09\/inside-1024x768.jpg 1024w\" data-sizes=\"(max-width: 1632px) 100vw, 1632px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1632px; --smush-placeholder-aspect-ratio: 1632\/1224;\" \/><\/p>\n<p>All of these parts were not required just to make the vape box work by itself, but here is what I used:<\/p>\n<p><a href=\"http:\/\/arduino.cc\">Arduino IDE<\/a> installed on your PC<\/p>\n<p>1 x USB Mini cable (to connect PC to Arduino nano)<\/p>\n<p>1 x painted wooden box<\/p>\n<p>4 x Dual 18650 battery sleds<\/p>\n<p>4 x 25A resettable fuses<\/p>\n<p>2 x 3034 MOSFETS (With heatsinks) &nbsp;Beware of fake mosfets!<\/p>\n<p>2 x 15K Resistors<\/p>\n<p>1 x Arduino nano<\/p>\n<p>1 x Screw terminal PCB for Arduino nano<\/p>\n<p>1 x DC-DC Buck Converter (to regulate voltage to 5v)<\/p>\n<p>1 x 1117 voltage regulator (required only to use the wifi card)<\/p>\n<p>1 x ESP8266-01 (Flashed with AT firmware)<\/p>\n<p>1 x DHT22 Temperature and Humidity Sensor<\/p>\n<p>1 x BMP280 (Barometric pressure sensor<\/p>\n<p>(Note &#8212; If using a BME 280, I would not have used the DHT22, because the BME will read both temperature and humidity)<\/p>\n<p>1 x ZS-042 Real Time clock module. &nbsp; (For alarm feature) with <a href=\"https:\/\/www.youtube.com\/watch?v=ND2shVqV9s4\">charging circuit disabled.<\/a><\/p>\n<p>1 x CR2032 battery<\/p>\n<p>1 x 510 connector<\/p>\n<p>1 x (20 x 4) LCD Display (with I2C)<\/p>\n<p>2 x Maintained Pushbuttons (For control power and boost power)<\/p>\n<p>2 x Small Momentary Push buttons (to adjust power level)<\/p>\n<p>1 x Large Momentary Push button (Main Vape Button)<\/p>\n<p>1 x Active Buzzer<\/p>\n<p>1 x LED Voltmeter (Mine is rated 0 to 30 volts)<\/p>\n<p>1 x PCB Switch (to turn the wifi card on or off for energy saving)<\/p>\n<p>1 x Atomizer of your choice<\/p>\n<p>8 x 18650 high drain batteries. &nbsp;All of these must be the same capacity, and have the same charge!<\/p>\n<p>3&#8242; of 16 Gauge Wire<\/p>\n<p>2&#8242; of 14 Gauge Wire<\/p>\n<p>7&#8242; Cat 5 cable (I removed all of the conductors to use as the control wiring)<\/p>\n<h2>Basic wiring Concepts:<\/h2>\n<p>This mod will run a max of 8.4 volts<\/p>\n<p><strong>Power Provision:<\/strong><\/p>\n<p>All of the individual battery sleds are wired in parallel. &nbsp; This means that all batteries will face the same direction. &nbsp;You must use protection. &nbsp; Don&#8217;t rely on yourself putting the batteries in the proper way every time. &nbsp; &nbsp;Use protected batteries. &nbsp;Only connect these batteries if you are familiar with how to safely design your own battery system. &nbsp; Don&#8217;t rely on the safety features I&#8217;ve provided in this document. &nbsp; Do your own research. &nbsp; You assume all responsibility if you implement this in any way!<\/p>\n<p><strong>Definitions<\/strong>:&nbsp; &nbsp;I&#8217;m defining a power pack as a sled of 2 batteries.&nbsp; &nbsp;I&#8217;m calling a power bank 2 power packs connected in series (ie. left side and right side)&nbsp; I&#8217;m calling the main power unit as both banks (left bank and right bank connected in parallel)<\/p>\n<p><strong>Left Battery bank<\/strong>: &nbsp; The lower left battery pack is connected in series to the upper left battery pack. &nbsp;Fuses are used to protect against reverse polarity, and overcurrent.<\/p>\n<p><strong>Right Battery bank<\/strong>: &nbsp; The lower right battery pack is connected in series to the upper right battery pack. &nbsp;Fuses are used to protect against reverse polarity, and over current.<\/p>\n<p>Using 14 gauge wire, the entire left battery bank is connected in parallel to the entire right battery bank. (providing a total of 8.4 volts when fully charged. &nbsp; Fuses are used to protect against an overcurrent condition.<\/p>\n<p><strong>510 Connector<\/strong>: &nbsp; Using 14 gauge wire, the + side of the main power unit will connect to the center pin of the 510 connector. &nbsp; Using 16 gauge wire, the case of the 510 connector has two 16 gauge wires soldered to the connector. &nbsp; Each of these will go to the Drain (center pin or case) of the 3034 MOSFETS.<\/p>\n<p><strong>Control Power<\/strong>: &nbsp;The + of the main power unit will connect to one side of your maintained Power Switch. &nbsp; Coming out of the power switch, to the + (input) of the DC-DC Buck converter. &nbsp; I&#8217;ve used a 5A resettable fuse coming from the + of the main power unit. &nbsp; The &#8211; (input) of the Buck Converter will connect to the &#8211; of the main power unit. &nbsp; I&#8217;ve also jumpered the &#8211; of the Input and outputs of the buck converter together to ensure the commons are the same. &nbsp; &nbsp;<em>Warning!!! &nbsp; If the &#8211; potential of the control circuits are at a different potential than the main power unit, &nbsp;the atomizer could fire at will!!!<\/em><\/p>\n<p>If using wifi, we also need to connect the LM1117 voltage regulator to give us a 3.3v supply. &nbsp; The + output of the Buck Converter will connect to the small pcb switch, then from the switch to input of the voltage regulator (right pin) &nbsp;The &#8211; output of the buck converter will connect to the &#8211; of the voltage regulator (Left pin) and to the &#8211; of the ESP8266-01. &nbsp; The VCC (+) of the ESP8266-01 connects to the OUTPUT of the LM1117 (center pin) &nbsp;Daisy chain the + and &#8211; from the ESP8266 to the appropriate pins on the BMP280.<\/p>\n<p><strong>Powering all 5v devices<\/strong>: &nbsp;Connect the + and &#8211; of the buck converter to the appropriate pins of the DHT22, Arduino nano, LCD Display, and ZS-042 Real Time Clock.<\/p>\n<p>Common Connections: &nbsp; The &#8211; of the Buck converter will connect to the remaining Maintained pushbutton (power boost), &nbsp;the small normally open buttons (for up\/down power), the main vape button (large normally open button), the &#8211; of the voltmeter, and the &#8211; of the buzzer.<\/p>\n<p><strong>DHT22<\/strong>: &nbsp;Place a 10K resistor between VCC (left) and Data (2nd Pin). &nbsp; Connect the Data pin of the DHT22 to Digital pin 3 on the arduino.<\/p>\n<p><strong>Button connections<\/strong>: &nbsp;When the buttons are pressed, the following pins will become grounded on the Arduino Nano:<\/p>\n<p>Main Vape Button &#8211; Pin 2<\/p>\n<p>Reduce Power Button &#8211; Pin 4<\/p>\n<p>Increase Power Button &#8211; Pin 5<\/p>\n<p>Power Boost &#8211; Pin 11<\/p>\n<p>Then the buzzer (+ side) will be connected to Pin 8<\/p>\n<p><strong>Firing Pin:<\/strong><\/p>\n<p>Be sure you have a 15K resistor connected across the left and right pins of each 3034 mosfet. &nbsp; This is a very critical connection. &nbsp; The mosfet will not shut off unless this resistor is connected!! &nbsp; Pin 10 of the Nano will connect to the gate (left pin) of both MOSFETs.<\/p>\n<p><strong>I2C Network:<\/strong> &nbsp; Connect pin A5 (SCL) of the arduino nano to the SCL Pins on the LCD Display, BMP280, and ZS-042 module. &nbsp; Pin A4 (SDA) will connect to the SDA Pins on these devices as well. &nbsp;You can just daisy chain from one device to another. &nbsp;If your cabling is long, you might need pullup resistors on these two busses. &nbsp;You can google the pullup resistors if you are having problems. &nbsp; I&#8217;m assuming your BMP280 is 5v tolerant for SCL and SCA. &nbsp;If your BMP280 is not 5v tolerant, you can use a logic level converter.<\/p>\n<p><strong>LED Voltmeter<\/strong>: &nbsp; We already have the &#8211; connected. &nbsp; On my voltmeter I have 3 leads. &nbsp; &nbsp;Ground&#8230; &nbsp;Then a red lead which powers the meter itself, and a yellow lead which measures the battery voltage. &nbsp; &nbsp;I connected the red lead to the + from the Buck converter, and the yellow lead to the + of the main power unit.&nbsp; If your voltmeter only has 2 leads, you can connect one lead to ground, and the other lead to the controlled side of your power switch.&nbsp; &nbsp; &nbsp;This way, the volt meter will not use any current when the power switch is off.<\/p>\n<p><strong>ESP8266<\/strong>: &nbsp; If using this feature, connect the RX of the ESP8266 to TX of the Nano. &nbsp; Connect the TX of the ESP8266 to the RX of the Nano. The CH_PD is connected to VCC to enable the module. &nbsp;I&#8217;m assuming the RX is 5v tolerant. &nbsp; If you are worried about damage to the ESP8266 though, you can use a logic level converter, or set up a voltage divider to ensure the RX pin does not receive more than 3.3v.<\/p>\n<p>&nbsp;<\/p>\n<h2>The Code:<\/h2>\n<p>&nbsp;<\/p>\n<p>#include &lt;Wire.h&gt;<br \/>\n#include &lt;LiquidCrystal_I2C.h&gt;<br \/>\n#include &lt;SimpleDHT.h&gt;<br \/>\n#include &lt;LowPower.h&gt;<br \/>\n#include &#8220;i2c.h&#8221;<br \/>\n#include &#8220;i2c_BMP280.h&#8221;<\/p>\n<p>BMP280 bmp280;<br \/>\nLiquidCrystal_I2C lcd(0x3f,20,4);<\/p>\n<p>SimpleDHT22 dht22;<\/p>\n<p>\/\/Define the pins<br \/>\nconst int ButtonPin = 2;<br \/>\nconst int pinDHT22 = 3;<br \/>\nconst int DownPowerPin = 4;<br \/>\nconst int UpPowerPin = 5;<\/p>\n<p>const int FiringPin = 10;<br \/>\nconst int BuzzerPin = 8;<br \/>\nconst int PowerBoost = 11;<br \/>\nconst int LedPin = 13;<\/p>\n<p>&nbsp;<\/p>\n<p>\/\/ Discrete Variable Declarations<br \/>\nint ButtonState = 0;<br \/>\nint PowerBoostState = 0;<br \/>\nint BuzzerShutoffOK = 1;<br \/>\nint PowerLevelRaw = 50;<br \/>\nint PowerLevelScaled = 0;<br \/>\nint PowerSetting = 10;<br \/>\nint UpPowerValue = 1;<br \/>\nint DownPowerValue = 1;<\/p>\n<p>\/\/ BMP280 Vars<br \/>\nfloat BMPtemperature;<br \/>\nfloat BMPpascal;<br \/>\nstatic float BMPmeters, BMPmetersold;<\/p>\n<p>\/\/ Timers<br \/>\nunsigned long ButtonMillisStart = 0;<br \/>\nunsigned long ButtonMillisTimeout = 6000;<\/p>\n<p>unsigned long FlashMillisStart = 0;<br \/>\nunsigned long FlashMillisTimeout = 100;<\/p>\n<p>unsigned long SleepMillisStart = 0;<br \/>\nunsigned long SleepMillisTimeout = 300000;<\/p>\n<p>&nbsp;<\/p>\n<p>int ButtonTimeout = 0;<br \/>\nint VapeTime = 0;<br \/>\nint VapeTimeLast = 0;<\/p>\n<p>\/\/ Counters<br \/>\nint MyCounter = 0;<br \/>\nint LightCounter = 0;<\/p>\n<p>\/\/ One Shots<br \/>\nint ButtonRising = 0;<br \/>\nint ButtonFalling = 0;<br \/>\nint UpPowerONS = 0;<br \/>\nint DownPowerONS = 0;<br \/>\nchar LastSecond;<\/p>\n<p>&nbsp;<\/p>\n<p>\/\/ This is for the Real Time Clock<\/p>\n<p>#define DS3231_I2C_ADDRESS 0x68<br \/>\n\/\/ Convert normal decimal numbers to binary coded decimal<br \/>\nbyte decToBcd(byte val){<br \/>\nreturn( (val\/10*16) + (val%10) );<br \/>\n}<br \/>\n\/\/ Convert binary coded decimal to normal decimal numbers<br \/>\nbyte bcdToDec(byte val){<br \/>\nreturn( (val\/16*10) + (val%16) );<br \/>\n}<\/p>\n<p>&nbsp;<\/p>\n<p>\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br \/>\nvoid wakeUp()<br \/>\n{<br \/>\n\/\/ Just a handler for the pin interrupt.<br \/>\n}<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<\/p>\n<p>&nbsp;<\/p>\n<p>void setup() {<br \/>\nWire.begin();<br \/>\nSerial.begin(9600);<\/p>\n<p>&nbsp;<\/p>\n<p>\/\/Serial.print(&#8220;Probe BMP280: &#8220;);<br \/>\nif (bmp280.initialize()){ \/\/Serial.println(&#8220;BMP Sensor found&#8221;);<br \/>\n}<br \/>\nelse<br \/>\n{<br \/>\n\/\/Serial.println(&#8220;BMP Sensor missing&#8221;);<br \/>\nwhile (1) {}<br \/>\n}<\/p>\n<p>\/\/ onetime-measure:<br \/>\nbmp280.setEnabled(0);<br \/>\nbmp280.triggerMeasurement();<\/p>\n<p>\/\/LCD Setup<br \/>\nlcd.init(); \/\/initialize the lcd<\/p>\n<p>\/\/ RTC<br \/>\n\/\/ set the initial time here:<br \/>\n\/\/ DS3231 seconds, minutes, hours, day, date, month, year<br \/>\n\/\/setDS3231time(30,16,18,7,1,9,2017);<\/p>\n<p>&nbsp;<\/p>\n<p>\/\/ Setup Pin Modes<br \/>\npinMode(DownPowerPin, INPUT_PULLUP);<br \/>\npinMode(UpPowerPin, INPUT_PULLUP);<br \/>\npinMode(ButtonPin, INPUT_PULLUP);<br \/>\npinMode(BuzzerPin, OUTPUT);<br \/>\npinMode(PowerBoost, INPUT_PULLUP);<br \/>\npinMode(LedPin, OUTPUT);<br \/>\nlcd.noBacklight();<\/p>\n<p>\/\/Configure Wireless<br \/>\nlcd.backlight();<br \/>\nlcd.setCursor(0,1);<br \/>\nlcd.print(&#8220;Setting Mode&#8221;);<br \/>\nSerial.println(&#8220;AT+CWMODE=1&#8221;);<br \/>\ndelay(1000);<\/p>\n<p>lcd.setCursor(0,1);<br \/>\nlcd.print(&#8220;Connecting Network&#8221;);<br \/>\nSerial.println(&#8220;AT+CWJAP=\\&#8221;yourSSID\\&#8221;,\\&#8221;yourPASSWORD\\&#8221;&#8221;);<br \/>\ndelay(3000);<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>\/\/ &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\n\/\/ RTC Logic for Setting clock<br \/>\n\/\/ &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\nvoid setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte<br \/>\ndayOfMonth, byte month, byte year){<br \/>\n\/\/ sets time and date data to DS3231<br \/>\nWire.beginTransmission(DS3231_I2C_ADDRESS);<br \/>\nWire.write(0); \/\/ set next input to start at the seconds register<br \/>\nWire.write(decToBcd(second)); \/\/ set seconds<br \/>\nWire.write(decToBcd(minute)); \/\/ set minutes<br \/>\nWire.write(decToBcd(hour)); \/\/ set hours<br \/>\nWire.write(decToBcd(dayOfWeek)); \/\/ set day of week (1=Sunday, 7=Saturday)<br \/>\nWire.write(decToBcd(dayOfMonth)); \/\/ set date (1 to 31)<br \/>\nWire.write(decToBcd(month)); \/\/ set month<br \/>\nWire.write(decToBcd(year)); \/\/ set year (0 to 99)<br \/>\nWire.endTransmission();<br \/>\n}<\/p>\n<p>void readDS3231time(byte *second,<br \/>\nbyte *minute,<br \/>\nbyte *hour,<br \/>\nbyte *dayOfWeek,<br \/>\nbyte *dayOfMonth,<br \/>\nbyte *month,<br \/>\nbyte *year)<br \/>\n{<br \/>\nWire.beginTransmission(DS3231_I2C_ADDRESS);<br \/>\nWire.write(0); \/\/ set DS3231 register pointer to 00h<br \/>\nWire.endTransmission();<br \/>\nWire.requestFrom(DS3231_I2C_ADDRESS, 7);<br \/>\n\/\/ request seven bytes of data from DS3231 starting from register 00h<br \/>\n*second = bcdToDec(Wire.read() &amp; 0x7f);<br \/>\n*minute = bcdToDec(Wire.read());<br \/>\n*hour = bcdToDec(Wire.read() &amp; 0x3f);<br \/>\n*dayOfWeek = bcdToDec(Wire.read());<br \/>\n*dayOfMonth = bcdToDec(Wire.read());<br \/>\n*month = bcdToDec(Wire.read());<br \/>\n*year = bcdToDec(Wire.read());<br \/>\n}<\/p>\n<p>\/\/ &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\n\/\/ End of RTC Code<br \/>\n\/\/ &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br \/>\nvoid loop() {<br \/>\n\/\/ read the state of the pushbuttons:<br \/>\nButtonState = digitalRead(ButtonPin);<br \/>\nPowerBoostState = digitalRead(PowerBoost);<br \/>\nDownPowerValue = digitalRead(DownPowerPin);<br \/>\nUpPowerValue = digitalRead(UpPowerPin);<\/p>\n<p>\/\/ Get the BMP280 Data<br \/>\nbmp280.awaitMeasurement();<br \/>\nbmp280.getTemperature(BMPtemperature);<br \/>\nbmp280.getPressure(BMPpascal);<br \/>\nbmp280.getAltitude(BMPmeters);<br \/>\nBMPmetersold = (BMPmetersold * 10 + BMPmeters)\/11;<\/p>\n<p>bmp280.triggerMeasurement();<\/p>\n<p>\/\/ get the milliseconds for the timers.<br \/>\nunsigned long CurrentMillis = millis();<\/p>\n<p>\/\/Low Power Setup<br \/>\n\/\/attachInterrupt(0, wakeUp, LOW);<br \/>\nif ((CurrentMillis-SleepMillisStart) &gt; SleepMillisTimeout){<br \/>\nLowPower.powerDown(SLEEP_1S, ADC_OFF, BOD_OFF);<br \/>\n}<\/p>\n<p>&nbsp;<\/p>\n<p>\/\/ Power Level Control<br \/>\nif (!DownPowerValue){<br \/>\nif (DownPowerONS==0){<br \/>\nPowerLevelRaw=PowerLevelRaw-5;<br \/>\n}<br \/>\nDownPowerONS = 1;<br \/>\nif (PowerLevelRaw &lt; 0){<br \/>\nPowerLevelRaw = 0;<br \/>\n}<br \/>\n}else{<br \/>\nDownPowerONS=0;<br \/>\n}<\/p>\n<p>if (!UpPowerValue){<br \/>\nif (UpPowerONS==0){<br \/>\nPowerLevelRaw=PowerLevelRaw+5;<br \/>\n}<br \/>\nUpPowerONS = 1;<br \/>\nif (PowerLevelRaw &gt; 255){<br \/>\nPowerLevelRaw = 255;<br \/>\n}<br \/>\n}else{<br \/>\nUpPowerONS=0;<br \/>\n}<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>PowerLevelScaled = PowerLevelRaw\/1;<br \/>\nif (!PowerBoostState){<br \/>\nPowerLevelScaled=PowerLevelScaled*1.3;<br \/>\n}<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>\/\/ ************************* Button is PRESSED *************************<br \/>\nif (ButtonState == LOW) {<br \/>\nSleepMillisStart=CurrentMillis;<br \/>\nButtonFalling = 0;<\/p>\n<p>\/\/ turn on the backlight on lcd<\/p>\n<p>if ((CurrentMillis -FlashMillisStart) &lt; FlashMillisTimeout){<br \/>\nlcd.backlight();<br \/>\n}else if ((CurrentMillis -FlashMillisStart) &lt; (FlashMillisTimeout *2)){<br \/>\nlcd.noBacklight();<br \/>\n} else {<br \/>\nFlashMillisStart = CurrentMillis;<br \/>\n}<\/p>\n<p>&nbsp;<\/p>\n<p>VapeTime = ((CurrentMillis-ButtonMillisStart) \/ 1000);<br \/>\nif (VapeTime!=VapeTimeLast){<br \/>\nlcd.clear();<br \/>\nlcd.setCursor(0,0);<br \/>\nlcd.print(&#8220;*** Running ***&#8221;);<br \/>\nlcd.setCursor(0,1);<br \/>\nif (PowerBoostState==1){<br \/>\nlcd.print (&#8220;High Power: &#8220;);<br \/>\n}else{<br \/>\nlcd.print (&#8220;Low Power: &#8220;);<br \/>\n}<br \/>\nlcd.print(VapeTime);<br \/>\nVapeTimeLast=VapeTime;<br \/>\n}<\/p>\n<p>&nbsp;<\/p>\n<p>if ((CurrentMillis &#8211; ButtonMillisStart) &lt; ButtonMillisTimeout){<br \/>\ndigitalWrite(LedPin,HIGH);<br \/>\nanalogWrite(FiringPin, PowerLevelScaled);<br \/>\n}else{<br \/>\nButtonTimeout = 1;<br \/>\ndigitalWrite(LedPin,LOW);<br \/>\ndigitalWrite(BuzzerPin,HIGH);<br \/>\nanalogWrite(FiringPin, 0);<\/p>\n<p>\/\/ Clear One Shot<\/p>\n<p>}<br \/>\nButtonRising = 1;<br \/>\n}else{<br \/>\n\/\/ ************************* Button is RELEASED ************************<br \/>\nButtonRising = 0;<br \/>\nif (LightCounter &gt; 10000){LightCounter = 0;}<br \/>\nif (ButtonFalling == 0){LightCounter = 0;}<br \/>\nbyte second, minute, hour, dayOfWeek, dayOfMonth, month, year;<br \/>\nreadDS3231time(&amp;second, &amp;minute, &amp;hour, &amp;dayOfWeek, &amp;dayOfMonth, &amp;month,<br \/>\n&amp;year);<br \/>\nif (second!=LastSecond){<br \/>\nLightCounter++;<br \/>\nfloat temperature = 0;<br \/>\nfloat humidity = 0;<br \/>\nint err = SimpleDHTErrSuccess;<br \/>\nif ((err = dht22.read2(pinDHT22, &amp;temperature, &amp;humidity, NULL)) != SimpleDHTErrSuccess) {<br \/>\n\/\/Serial.print(&#8220;Read DHT22 failed, err=&#8221;); Serial.println(err);delay(200);<br \/>\nreturn;<br \/>\n}<\/p>\n<p>&nbsp;<\/p>\n<p>\/\/lcd.backlight();<br \/>\nif (LightCounter &gt; 300){<br \/>\nlcd.noBacklight();<br \/>\n}else{<br \/>\nlcd.backlight();<br \/>\n}<br \/>\n\/\/lcd.clear();<br \/>\nlcd.setCursor(0,0);<br \/>\nlcd.print(hour);<br \/>\nlcd.print(&#8220;:&#8221;);<br \/>\nif (minute &lt; 10){lcd.print(&#8220;0&#8221;);}<br \/>\nlcd.print(minute);<br \/>\nlcd.print(&#8220;:&#8221;);<br \/>\nif (second &lt; 10){lcd.print(&#8220;0&#8243;);}<br \/>\nlcd.print(second);<br \/>\nlcd.print (&#8221; &#8220;);<br \/>\ntemperature=temperature*1.8+32;<br \/>\nlcd.print(temperature);<br \/>\nlcd.print((char)223);<br \/>\nlcd.print (&#8220;F &#8220;);<br \/>\nLastSecond = second;<\/p>\n<p>lcd.setCursor(0,1);<br \/>\nlcd.print(&#8220;Humidity: &#8220;);<br \/>\nlcd.print(humidity);<br \/>\nlcd.print(&#8220;% &#8220;);<\/p>\n<p>lcd.setCursor(0,2);<br \/>\nlcd.print(&#8220;PSR: &#8220;);<br \/>\nlcd.print(BMPpascal\/3386.38867);<br \/>\nlcd.print(&#8221; In Hg &#8220;);<\/p>\n<p>lcd.setCursor(0,3);<br \/>\nlcd.print(&#8220;Raw Power: &#8220;);<br \/>\nlcd.print(PowerLevelScaled);<br \/>\nlcd.print(&#8221; &#8220;);<br \/>\n}<br \/>\nButtonTimeout = 0;<br \/>\nButtonMillisStart = CurrentMillis;<br \/>\nif (BuzzerShutoffOK == 1) {<br \/>\ndigitalWrite(BuzzerPin,LOW);<br \/>\n}<br \/>\ndigitalWrite(LedPin,LOW);<br \/>\nanalogWrite(FiringPin, 0);<\/p>\n<p>ButtonFalling = 1;<br \/>\n}<\/p>\n<p>\/\/ Alarm Logic<br \/>\nbyte second, minute, hour, dayOfWeek, dayOfMonth, month, year;<br \/>\nreadDS3231time(&amp;second, &amp;minute, &amp;hour, &amp;dayOfWeek, &amp;dayOfMonth, &amp;month,<br \/>\n&amp;year);<\/p>\n<p>&nbsp;<\/p>\n<p>if ((hour==5) and (minute==0)){<br \/>\n\/\/Serial.println(&#8220;Alarm&#8221;);<br \/>\nBuzzerShutoffOK=0;<br \/>\ndigitalWrite(BuzzerPin,HIGH);<br \/>\n}else{<br \/>\nBuzzerShutoffOK=1;<br \/>\n}<\/p>\n<p>&nbsp;<\/p>\n<p>if (!UpPowerValue and !DownPowerValue and !PowerBoostState){<br \/>\nanalogWrite(FiringPin, 0);<\/p>\n<p>lcd.clear();<br \/>\nlcd.setCursor(0,0);<br \/>\nlcd.print(&#8220;Opening Garage Door&#8221;);<br \/>\nlcd.setCursor(0,1);<\/p>\n<p>lcd.setCursor(0,1);<br \/>\nlcd.print(&#8220;Connecting Door&#8230; &#8220;);<br \/>\nSerial.println(&#8220;AT+CIPSTART=\\&#8221;TCP\\&#8221;,\\&#8221;192.168.1.178\\&#8221;,80&#8243;);<br \/>\ndelay(2000);<\/p>\n<p>lcd.setCursor(0,1);<br \/>\nlcd.print(&#8220;Setting Length&#8230; &#8220;);<br \/>\nSerial.println(&#8220;AT+CIPSEND=20&#8221;);<br \/>\ndelay(1000);<\/p>\n<p>lcd.setCursor(0,1);<br \/>\nlcd.print(&#8220;Sending Command&#8230; &#8220;);<br \/>\nSerial.println(&#8220;GET \/?DoorCMD=DC&#8221;);<br \/>\nSerial.println(&#8220;&#8221;);<br \/>\ndelay(3000);<\/p>\n<p>lcd.setCursor(0,1);<br \/>\nlcd.print(&#8220;Closing Connection &#8220;);<br \/>\nSerial.println(&#8220;AT+CIPCLOSE&#8221;);<br \/>\ndelay(1000);<\/p>\n<p>lcd.clear();<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>}<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<\/p>\n<p>&nbsp;<\/p>\n<h2>Upload your project:<\/h2>\n<p>Remove the nano from your project, and connect it to your PC. &nbsp;Verify the code above, and install any libraries with you are missing.<\/p>\n<p>Locate this line in your code: &nbsp;\/\/setDS3231time(30,16,18,7,1,9,2017); &nbsp; Remove the &#8220;\/\/&#8221; and set the clock a minute fast. &nbsp;This string is i the format: &nbsp;seconds, minutes, hours, day, date, month, year.<\/p>\n<p>10 seconds before the set time is reached, press the upload button in your arduino IDE. &nbsp;Verify that &#8220;upload complete&#8221; is displayed roughly when the set time is at the actual time of day. &nbsp;Now, comment out this same line using &#8220;\/\/&#8221; before the setDS3231 time function, and upload again. &nbsp; &nbsp;This will ensure the time is not reset every time you power the arduino.<\/p>\n<p>&nbsp;<\/p>\n<h2>Testing your project<\/h2>\n<p>Check for any shorts with your multimeter. &nbsp; Check continuity of all connections to ensure you have no broken wires.<\/p>\n<p>Turn the voltage regulator down to zero.<\/p>\n<p>Be sure to insert the batteries correctly. &nbsp; You can test this with just two batteries in series with each other on either side.<\/p>\n<p>Using a voltmeter turn the buck converter up until you have 5volts.<\/p>\n<p>With no atomizer attached, ensure that all of your circuitry is working properly. &nbsp; &nbsp;The back of the LCD display has a contrast display that you will need to adjust. &nbsp;Hold the firing button in for at least 6 seconds. &nbsp; The buzzer should sound.<\/p>\n<p>Go outside the house to an open area, and place your atomizer into the 510 connector. &nbsp; Take care to have the ability to remove it quickly if it starts to fire immediately.<\/p>\n<p>Again&#8230; &nbsp; Be ready to remove the atomizer or batteries immediately in case something goes wrong, and test fire the atomizer. &nbsp; &nbsp;The default power is around 20%. &nbsp; You may need to increase or decrease the power level using your power buttons, or power boost button. &nbsp;The display will read RAW POWER on a scale of 0 to 255&#8230;. 255 being 100%.<\/p>\n<p>If everything works well, you are in good shape! &nbsp; &nbsp;Be sure to always remove the batteries when unattended. &nbsp; By default, the alarm will sound at 5am each morning. &nbsp; To change this, just adjust this line of code:<\/p>\n<p>if ((hour==5) and (minute==0)){<\/p>\n<p>Again &#8212; You assume all liability if you try to implement this. &nbsp; I&#8217;m just documenting the project here for my own reference.<\/p>\n<p><strong>Hints for your garage door opener<\/strong>: &nbsp; You can use another ESP8266 in your garage using EasyESP firmware. &nbsp;An output on the ESP8266 can be connected to a <a href=\"https:\/\/bryceautomation.com\/index.php\/2016\/12\/28\/transistor-controlled-relay\/\">transistor controlled relay,<\/a> which simulates pressing the pushbutton. &nbsp; You will need to adjust the IP address in the vape code, and the command you are sending to activate the relay. &nbsp; Some additional code might be required to to shut off the relay one second later.<\/p>\n<p>In my case, I just had an arduino uno board with an Ethernet shield, and programmed it as a web server to turn on the relay for once second when it receives the proper GET command.<\/p>\n<h2>Review of important warnings:<\/h2>\n<ul>\n<li>The delay() function could prevent your MOSFETS from shutting off while the power level is higher than 0. &nbsp; That is why this code uses a snapshot of the currentmillis to keep track of timed features. &nbsp; &nbsp;This way the loop can continue to scan, and shut off the MOSFETS at a reasonable time.<\/li>\n<li>High temperatures can damage your batteries. &nbsp; &nbsp;I personally will not use the vape feature if the temperature is reading over 95F.<\/li>\n<li>Again, be extremely careful to place your batteries correctly, and that they all have the same charge and capacity. &nbsp;Failure to ensure this could lead to an explosion.<\/li>\n<li>Ensure the 15K resistor has good contact between the source and the gate. &nbsp; &nbsp;Failure of this resistor could cause a permanent &#8220;ON&#8221; Condition of the MOSFETS<\/li>\n<li>The &#8211; Potential (ground) must be the same for the controller (arduino), and the MOSFETS. &nbsp; &nbsp;If the potential is not the same, the MOSFETS could fire at will!<\/li>\n<li>MOSFETS can short. &nbsp; &nbsp;Be prepared to remove the batteries at any time. &nbsp; It might be a good idea to add a high current safety switch to disconnect the atomizer from the main power source if needed.<\/li>\n<li>Be aware of the hazards of the vape itself.<\/li>\n<li>If the vape &#8220;Steam&#8221; is getting inside your box, you might want to add a small fan to pressurize your box slightly, or apply a seal where the box closes.<\/li>\n<li>There is no low voltage cutoff feature at this implementation. &nbsp; &nbsp;Do not allow any cell to discharge below 3.2 volts (2.7volts at very minimum) &nbsp;The voltmeter will typically read 6.4 when I re-charge the batteries.<\/li>\n<li>Use Ohm&#8217;s law. &nbsp; &nbsp;Check the battery&#8217;s current rating against the resistance of the coil to ensure you are not pulling too many amps. &nbsp;Periodically check the batteries and MOSFETS to ensure they are not getting too hot. &nbsp; MOSFETS can get too hot to touch, so be careful.<\/li>\n<li>Check all connections. &nbsp;A loose connection could cause heat to build up at the junction.<\/li>\n<li>Be aware of laws in your locality on building your own personal device.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>&#8212; Ricky Bryce<\/p>\n<p>&nbsp;<\/p>\n<div id=\"bryce-3454587708\" class=\"bryce-after-content bryce-entity-placement\"><script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js?client=ca-pub-8316758073402323\" crossorigin=\"anonymous\"><\/script><ins class=\"adsbygoogle\" style=\"display:block;\" data-ad-client=\"ca-pub-8316758073402323\" \ndata-ad-slot=\"4667596182\" \ndata-ad-format=\"auto\"><\/ins>\n<script> \n(adsbygoogle = window.adsbygoogle || []).push({}); \n<\/script>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Introduction to Arduino Vape Box Mod In this document, I will explain how I built my own arduino vape box mod.&nbsp; This box will be based on PWM (Pulse Width Modulation).&nbsp; &nbsp;Be aware that the purpose of the document is just to explain how I built my own box. &nbsp; &nbsp;There are many dangers associated <a class=\"moretag btn btn-primary\" href=\"https:\/\/bryceautomation.com\/index.php\/2017\/09\/26\/arduino-vape-box-mod\/\">Read More \u00bb<\/a><\/p>\n","protected":false},"author":1,"featured_media":1167,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10,5],"tags":[61,60],"class_list":{"0":"post-1166","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-advanced","8":"category-arduino-other-microprocessors","9":"tag-arduino","10":"tag-vape-mod","11":"czr-hentry"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Arduino Vape Box Mod -- How I built my own vape + Extra features!<\/title>\n<meta name=\"description\" content=\"This is how I built my own arduino vape box mod for around $20 + Atomizer and batteries. I will show you the wiring and source code!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/bryceautomation.com\/index.php\/2017\/09\/26\/arduino-vape-box-mod\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Arduino Vape Box Mod -- How I built my own vape + Extra features!\" \/>\n<meta property=\"og:description\" content=\"This is how I built my own arduino vape box mod for around $20 + Atomizer and batteries. I will show you the wiring and source code!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/bryceautomation.com\/index.php\/2017\/09\/26\/arduino-vape-box-mod\/\" \/>\n<meta property=\"og:site_name\" content=\"Bryce Automation\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/ricky.bryce.7\" \/>\n<meta property=\"article:published_time\" content=\"2017-09-26T14:18:21+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-03-04T10:22:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/bryceautomation.com\/wp-content\/uploads\/2017\/09\/outside-e1506429796920.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"750\" \/>\n\t<meta property=\"og:image:height\" content=\"1000\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Ricky\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2017\\\/09\\\/26\\\/arduino-vape-box-mod\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2017\\\/09\\\/26\\\/arduino-vape-box-mod\\\/\"},\"author\":{\"name\":\"Ricky\",\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/#\\\/schema\\\/person\\\/5d5b0f6f6ad768f1ee52968338e63af7\"},\"headline\":\"Arduino Vape Box Mod (With WiFI)\",\"datePublished\":\"2017-09-26T14:18:21+00:00\",\"dateModified\":\"2021-03-04T10:22:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2017\\\/09\\\/26\\\/arduino-vape-box-mod\\\/\"},\"wordCount\":3405,\"commentCount\":1,\"image\":{\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2017\\\/09\\\/26\\\/arduino-vape-box-mod\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/bryceautomation.com\\\/wp-content\\\/uploads\\\/2017\\\/09\\\/outside-e1506429796920.jpg\",\"keywords\":[\"Arduino\",\"Vape Mod\"],\"articleSection\":[\"Advanced\",\"Arduino and other microprocessors\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2017\\\/09\\\/26\\\/arduino-vape-box-mod\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2017\\\/09\\\/26\\\/arduino-vape-box-mod\\\/\",\"url\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2017\\\/09\\\/26\\\/arduino-vape-box-mod\\\/\",\"name\":\"Arduino Vape Box Mod -- How I built my own vape + Extra features!\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2017\\\/09\\\/26\\\/arduino-vape-box-mod\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2017\\\/09\\\/26\\\/arduino-vape-box-mod\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/bryceautomation.com\\\/wp-content\\\/uploads\\\/2017\\\/09\\\/outside-e1506429796920.jpg\",\"datePublished\":\"2017-09-26T14:18:21+00:00\",\"dateModified\":\"2021-03-04T10:22:23+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/#\\\/schema\\\/person\\\/5d5b0f6f6ad768f1ee52968338e63af7\"},\"description\":\"This is how I built my own arduino vape box mod for around $20 + Atomizer and batteries. I will show you the wiring and source code!\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2017\\\/09\\\/26\\\/arduino-vape-box-mod\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2017\\\/09\\\/26\\\/arduino-vape-box-mod\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2017\\\/09\\\/26\\\/arduino-vape-box-mod\\\/#primaryimage\",\"url\":\"https:\\\/\\\/bryceautomation.com\\\/wp-content\\\/uploads\\\/2017\\\/09\\\/outside-e1506429796920.jpg\",\"contentUrl\":\"https:\\\/\\\/bryceautomation.com\\\/wp-content\\\/uploads\\\/2017\\\/09\\\/outside-e1506429796920.jpg\",\"width\":750,\"height\":1000,\"caption\":\"Vape Mod\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2017\\\/09\\\/26\\\/arduino-vape-box-mod\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/bryceautomation.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Arduino Vape Box Mod (With WiFI)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/#website\",\"url\":\"https:\\\/\\\/bryceautomation.com\\\/\",\"name\":\"Bryce Automation\",\"description\":\"Automating Home and Industry...\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/bryceautomation.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/#\\\/schema\\\/person\\\/5d5b0f6f6ad768f1ee52968338e63af7\",\"name\":\"Ricky\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/wp-content\\\/wphb-cache\\\/gravatar\\\/a8f\\\/a8fe6bf79d292b388ffee281ccb12488x96.jpg\",\"url\":\"https:\\\/\\\/bryceautomation.com\\\/wp-content\\\/wphb-cache\\\/gravatar\\\/a8f\\\/a8fe6bf79d292b388ffee281ccb12488x96.jpg\",\"contentUrl\":\"https:\\\/\\\/bryceautomation.com\\\/wp-content\\\/wphb-cache\\\/gravatar\\\/a8f\\\/a8fe6bf79d292b388ffee281ccb12488x96.jpg\",\"caption\":\"Ricky\"},\"sameAs\":[\"http:\\\/\\\/bryceautomation.com\",\"https:\\\/\\\/www.facebook.com\\\/ricky.bryce.7\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/ricky-bryce-4367a416\\\/\"],\"url\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/author\\\/ricky\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Arduino Vape Box Mod -- How I built my own vape + Extra features!","description":"This is how I built my own arduino vape box mod for around $20 + Atomizer and batteries. I will show you the wiring and source code!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/bryceautomation.com\/index.php\/2017\/09\/26\/arduino-vape-box-mod\/","og_locale":"en_US","og_type":"article","og_title":"Arduino Vape Box Mod -- How I built my own vape + Extra features!","og_description":"This is how I built my own arduino vape box mod for around $20 + Atomizer and batteries. I will show you the wiring and source code!","og_url":"https:\/\/bryceautomation.com\/index.php\/2017\/09\/26\/arduino-vape-box-mod\/","og_site_name":"Bryce Automation","article_author":"https:\/\/www.facebook.com\/ricky.bryce.7","article_published_time":"2017-09-26T14:18:21+00:00","article_modified_time":"2021-03-04T10:22:23+00:00","og_image":[{"width":750,"height":1000,"url":"https:\/\/bryceautomation.com\/wp-content\/uploads\/2017\/09\/outside-e1506429796920.jpg","type":"image\/jpeg"}],"author":"Ricky","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/bryceautomation.com\/index.php\/2017\/09\/26\/arduino-vape-box-mod\/#article","isPartOf":{"@id":"https:\/\/bryceautomation.com\/index.php\/2017\/09\/26\/arduino-vape-box-mod\/"},"author":{"name":"Ricky","@id":"https:\/\/bryceautomation.com\/#\/schema\/person\/5d5b0f6f6ad768f1ee52968338e63af7"},"headline":"Arduino Vape Box Mod (With WiFI)","datePublished":"2017-09-26T14:18:21+00:00","dateModified":"2021-03-04T10:22:23+00:00","mainEntityOfPage":{"@id":"https:\/\/bryceautomation.com\/index.php\/2017\/09\/26\/arduino-vape-box-mod\/"},"wordCount":3405,"commentCount":1,"image":{"@id":"https:\/\/bryceautomation.com\/index.php\/2017\/09\/26\/arduino-vape-box-mod\/#primaryimage"},"thumbnailUrl":"https:\/\/bryceautomation.com\/wp-content\/uploads\/2017\/09\/outside-e1506429796920.jpg","keywords":["Arduino","Vape Mod"],"articleSection":["Advanced","Arduino and other microprocessors"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/bryceautomation.com\/index.php\/2017\/09\/26\/arduino-vape-box-mod\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/bryceautomation.com\/index.php\/2017\/09\/26\/arduino-vape-box-mod\/","url":"https:\/\/bryceautomation.com\/index.php\/2017\/09\/26\/arduino-vape-box-mod\/","name":"Arduino Vape Box Mod -- How I built my own vape + Extra features!","isPartOf":{"@id":"https:\/\/bryceautomation.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/bryceautomation.com\/index.php\/2017\/09\/26\/arduino-vape-box-mod\/#primaryimage"},"image":{"@id":"https:\/\/bryceautomation.com\/index.php\/2017\/09\/26\/arduino-vape-box-mod\/#primaryimage"},"thumbnailUrl":"https:\/\/bryceautomation.com\/wp-content\/uploads\/2017\/09\/outside-e1506429796920.jpg","datePublished":"2017-09-26T14:18:21+00:00","dateModified":"2021-03-04T10:22:23+00:00","author":{"@id":"https:\/\/bryceautomation.com\/#\/schema\/person\/5d5b0f6f6ad768f1ee52968338e63af7"},"description":"This is how I built my own arduino vape box mod for around $20 + Atomizer and batteries. I will show you the wiring and source code!","breadcrumb":{"@id":"https:\/\/bryceautomation.com\/index.php\/2017\/09\/26\/arduino-vape-box-mod\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/bryceautomation.com\/index.php\/2017\/09\/26\/arduino-vape-box-mod\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/bryceautomation.com\/index.php\/2017\/09\/26\/arduino-vape-box-mod\/#primaryimage","url":"https:\/\/bryceautomation.com\/wp-content\/uploads\/2017\/09\/outside-e1506429796920.jpg","contentUrl":"https:\/\/bryceautomation.com\/wp-content\/uploads\/2017\/09\/outside-e1506429796920.jpg","width":750,"height":1000,"caption":"Vape Mod"},{"@type":"BreadcrumbList","@id":"https:\/\/bryceautomation.com\/index.php\/2017\/09\/26\/arduino-vape-box-mod\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/bryceautomation.com\/"},{"@type":"ListItem","position":2,"name":"Arduino Vape Box Mod (With WiFI)"}]},{"@type":"WebSite","@id":"https:\/\/bryceautomation.com\/#website","url":"https:\/\/bryceautomation.com\/","name":"Bryce Automation","description":"Automating Home and Industry...","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/bryceautomation.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/bryceautomation.com\/#\/schema\/person\/5d5b0f6f6ad768f1ee52968338e63af7","name":"Ricky","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/bryceautomation.com\/wp-content\/wphb-cache\/gravatar\/a8f\/a8fe6bf79d292b388ffee281ccb12488x96.jpg","url":"https:\/\/bryceautomation.com\/wp-content\/wphb-cache\/gravatar\/a8f\/a8fe6bf79d292b388ffee281ccb12488x96.jpg","contentUrl":"https:\/\/bryceautomation.com\/wp-content\/wphb-cache\/gravatar\/a8f\/a8fe6bf79d292b388ffee281ccb12488x96.jpg","caption":"Ricky"},"sameAs":["http:\/\/bryceautomation.com","https:\/\/www.facebook.com\/ricky.bryce.7","https:\/\/www.linkedin.com\/in\/ricky-bryce-4367a416\/"],"url":"https:\/\/bryceautomation.com\/index.php\/author\/ricky\/"}]}},"_links":{"self":[{"href":"https:\/\/bryceautomation.com\/index.php\/wp-json\/wp\/v2\/posts\/1166","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bryceautomation.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bryceautomation.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bryceautomation.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bryceautomation.com\/index.php\/wp-json\/wp\/v2\/comments?post=1166"}],"version-history":[{"count":0,"href":"https:\/\/bryceautomation.com\/index.php\/wp-json\/wp\/v2\/posts\/1166\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/bryceautomation.com\/index.php\/wp-json\/wp\/v2\/media\/1167"}],"wp:attachment":[{"href":"https:\/\/bryceautomation.com\/index.php\/wp-json\/wp\/v2\/media?parent=1166"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bryceautomation.com\/index.php\/wp-json\/wp\/v2\/categories?post=1166"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bryceautomation.com\/index.php\/wp-json\/wp\/v2\/tags?post=1166"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}