KRAK LLC

Making a custom sous-vide controller phase 1

September 15, 2014
Leave a Comment

What the heck is sous-vide?

Sous-vide is a method of cooking using a water bath at a highly controlled temperature. I became aware of the method in the same way most people do, the Modernist Cuisine.

ModernistCuisine

The market has dedicated sous-vide cookers, or controllers that will convert a rice cooker or slower cooker into a sous-vide cooker by adding a temperature sensor and regulating the heating element.

Sous-vide

Controllers can be bought with similar functions of what my basic controller can do, but I have plans for expansion. There are kits to make your own controller. But if you are like me, you might have most of the parts already on the shelf. And you would rather do a little work from scratch. My inspiration for this project came from an article I read in Make magazine for the Yogurt bot. My wife becomes a little nervous when a new Make magazine shows up in the mailbox.

MakeMagazine

Goals:

  1. I wanted to create my own controller from parts I had on hand, and buy as few parts as I can to complete the project.
  2. I also wanted to get a better understanding of GIT, a source code management system. The last Arduino project I worked on was a test chamber that could control temperature and humidity. I interfaced that with an industrial Touchscreen that I had on hand using Modbus protocol. I have since lost the source code of the project. I did not want to have that happen again. The unit is still working flawlessly, but if I want to make a change, I’ll have to rewrite the whole project again.
  3. I want to be able to add profiles to the controller so I can set it run at temperatures for beef, pork, lamb, ect, as well as timed profiles so I can make yogurt. EG run x number of minutes at y temperature, and then x number of minutes at a different temperature.

Parts:

I had on hand, an Arduino Uno, bread board, a SainSmart relay board, salvaged pc speaker, a crockpot, electrical outlet, electrical plug and the resister for the one wire sensor.

I had to buy a waterproof one wire temperature sensor, a SainSmart LCD Shield that had built in buttons.

Total cost is estimated at about $60, excluding the crock pot.

Hardware

Setup:

I started out slowly adding the parts I wanted to use one by one. I started with the temperature sensor and the example code that can be found with the Dallas library.

I then added the speaker, and used the example for playing melodies. I had to add the Pitch.h file to the project to make that work.

Adding the relay is simple enough, but with my setup, setting the relay pin to low would actually energize the relay coil. So I made a quick define to have RELAY_ON = 0, and RELAY_OFF = 1. This made the code cleaner to read and easier to understand. The relay sends power to the outlet when energized.

The LCD was the easiest part to integrate since it simply plugged into the Uno. But it took some work to find the code needed to set it up.

All of this is plugged into a bread board for the initial setup. This will be finalized later in a project box that I will likely design and print.

Development:

The first item to complete was setting up GIT on Windows 7 machine. It took a little reading online but it wasn’t too hard. I will not go into the process here as it can be found online.

Finding examples to build from:

I found the project for the Adafruit Kit which is intended to work with the Adafruit LCD shield and prototyping shield. I like the overall process but it would not work with the LCD shield I had.

Due to the lack of documentation of the SainSmart LCD I had to find examples of interfacing with the unit. I will have a link to the information I found to use this device.

Running

The yogurt bot project I found in Make magazine had a good outline for making a dedicated yogurt fermentation machine. But I want more for this project.

 

Yobot

The one-wire sensor is easy enough to use, but the library’s have to work with the newer 1.0+ of the Arduino compiler. So if you have any trouble with the sensor double check that library’s are up to date.

PID control library is used in the Adafruit project, and I want to have a pretty good temperature control setup so I am using that as well as the PID autotune code.

Speaker, as mentioned above, can play melodies, or simple tones. I am using a tone from the example for now, but I plan on changing that later.

Bringing it all together:

I like to use EditPad Pro for the coding of the sketch, and then use the Arduino IDE to compile and upload to the board. The same process can be accomplished with Notepad++. I have used Visual Micro in Visual studio before, but really didn’t care for it. The next time I have a project I think might use Atmel studio. But for now, EditPad Pro it is.

DevSetup

 

With all the pieces collected, I now have to combine them in some sort of organized mess to make a program. Setup a few defines, include a few library’s, declare a few variables and we are almost done. OK not quite done but it’s a good start.

The basic program flow will work like this:

Setup the sensor, make sure it doesn’t error out. Wait for user input to begin.

User input will decide if a profile will be run, or if the cooker will be at a set temperature. The user can also make changes to the PID tuning, and other settings.

CrockPot

As you can see the project is still in the development phase. It is working with the user defined setpoint. The PID still needs a little tuning to prevent overshoot, but it holds a constant temperature after it settles down from the initial temperature overshoot. I still have to add support for the profiles, additional melodies, and some serial logging. I will be modifying the Uno to prevent it from resetting when serial connection is established. I had serial debugging in the sketch but it actually caused more problems by using up too much memory and bogging down the serial buffer. I’ll slowly add it back in if needed. Of course I still have to package the whole unit up in a nice tidy box. I’ll design that later.

References:

I am standing on the shoulders of giants. Well not really, but I did pull a lot of information from various sources to get the project to this point.

http://playground.arduino.cc/Code/PIDAutotuneLibrary

http://playground.arduino.cc/Code/PIDLibrary

https://learn.adafruit.com/sous-vide-powered-by-arduino-the-sous-viduino/sous-vide

http://www.instructables.com/id/Arduino-Sous-Vide-Cooker/?ALLSTEPS

http://www.discoveringelectronics.com/Downloads/Sain-Smart-LCD-Keypad-Shield-v1.0-Pinout.pdf


A look back in time reveals an unnoticed pattern.

September 3, 2013
2 Comments

For years I thought I was working on technologies and product development. But recently I have looked back on my career only to realize that I may not be what I thought I was. In some form or another, I have always been a project manager.

I have been managing projects since before I graduated from college. Granted, many of the first projects were small in size, but they usually included managing budgets, schedules, resources, objectives and restrictions. As any Resident Assistant, Student Government leader can tell you, managing student projects or activities reveals to the organizer a lot about themselves to themselves. In my case it just didn’t sink in right away.

GSD
Sometimes I was leading the project, other times I managed only a portion of the project. In almost every project I was involved with, I would be the “go to” guy. This is not because I know everything there is to know (because I don’t), but rather I seem to know how to fill in the gaps. I know how take steps to get a project to completion. One of my clients likes to refer to me as the GSD guy (Get S#^% Done). Up to this point I have been fortunate enough to be able to exercise one of two options to maintain that title. One: find the appropriate person or company to perform the task, or two: teach myself the required skills to complete the task myself. This in and of itself is not necessarily a good thing. The better approach, is to have plan in place prior to reaching the requirement of getting the task finished.

Analytical
As the people around me are already aware, I am not an emotionally charged person. I am not always very vocal. I tend to take in the situation and conditions before I begin to make decisions and take action. This trait seems to lead itself well to managing a project, where a number of issues could derail success. Having a plan, as well as alternative solutions, allows for quick reaction to changing situations. I had always considered this trait to be the most important for my designs and product development. But now I realize that it is even more critical for project management. Where I am not the sole developer, where teams of experts have to be brought into the project with aligned goals and time lines, this trait has proven the most useful. Where this trait is not very useful is during interviews and self-marketing. But that topic is for another post.

What is the punch line?
Not so much a punch line as it is a moral to the story. I suggest that from time to time, reflect back on your past experiences and how you handled stressful situations. You may find a common thread in all of your actions, roles, natural responses to reveal a side of you hidden from yourself. As someone close to me has recently discovered a natural talent to do business analysis, and market research, a hidden talent can be hard to recognize.


Arduino Modbus connection to a C-more HMI

January 4, 2013
27 Comments

Using an Arduino to collect information from an array of sensors is an economical alternative to using a PLC when the data collection is not critical. In this post I will explain the basics of connecting the hardware of an Arduino to a C-More touch panel from Automation direct. I will then show a basic setting to allow MODBUS communication to work between the two devices.

Hardware you will need:

C-more touch screen: http://www.automationdirect.com/adc/Shopping/Catalog/Operator_Interfaces/C-more_Touch_Panels/C-more_Touch_Panels_(all_sizes)/EA7-S6M-R

C-more Comm cable: http://www.automationdirect.com/adc/Shopping/Catalog/Operator_Interfaces/C-more_Touch_Panels/C-more_Touch_Panel_Programming_Software_-a-_Cables/EA-2CBL

Arduino, in this case I used a Duemilanove:

http://www.nkcelectronics.com/arduino-duemilanove.html

RS232 to TTL converter:

http://www.nkcelectronics.com/RS232-to-TTL-converter-board-DTE-with-Male-DB9-33V-to-5V_p_369.html

Parts to make a rj12 to db9 connection. I actually used a serial cable cut in half and spliced into a RJ45 jack. You may want to consider a part like this:

http://www.buy.com/retail/product.asp?sku=229955393&listingid=209691315

Software you will need:

C-more programming software:

http://www.automationdirect.com/adc/Shopping/Catalog/Operator_Interfaces/C-more_Touch_Panels/C-more_Touch_Panel_Programming_Software_-a-_Cables/EA-PGMSW

The Arduino IDE, I used version 1.01. At the time of writing this 1.03 is available.

http://code.google.com/p/arduino/downloads/list

The MODBUS library that I got to work with the C-more.

http://code.google.com/p/arduino-modbus-slave/downloads/detail?name=MODBUS.zip&can=2&q=

*note this library does not work with Arduino IDE prior to the 1.00 release.

Setting up the hardware.

Create the connector to convert the db9 connection to the RJ12 connection.

http://media.nkcelectronics.com/downloads/rs232ttl_DTE_v1.1.pdf

DB9 connections required are pin 2, 3,and 5. Pin 7 and 8 will not be used.

To make the RJ45 jack as I did connect make these connections.

DB9 — RJ45

Pin 2 – B4

Pin 3 – B5

Pin 5 – B2

When plugging in the RJ12 to the RJ45, be sure to center the plug in the jack.

###Edit adding Photo to show the intermediary cable.

DB9 to RJ45 hacked cable. Ideally should be DB9 to RJ12.
DB9 to RJ45 hacked cable. Ideally should be DB9 to RJ12.
Here the EA-2CBL RJ12 plug is plugged into the center of the RJ45 jack.

Here the EA-2CBL RJ12 plug is plugged into the center of the RJ45 jack.

( of course you can create your own DB9 to DB15 cable instead )

clip_image002

http://www.automationdirect.com/static/specs/cmorecables.pdf

DB9 |–| DB15

Pin 2 – Pin 3

Pin 3 – Pin 2

Pin 5 – Pin 5

Connecting the Arduino with the RS232 to TTL DTE board

Place jumpers on the RTS and CTS connections at the top of the board. clip_image004

Then make these following connections:

Arduino |—| DTE

5V – VCC

Gnd – GND

Digital pin 0 – RX (Use a jumper wire or place a switch in the middle of this connection.)

Digital pin 1 – TX

Do not connect the RTS or CTS pins from the board to anything.

Configure the Software.

For the Arduino:

Place the MOBUS library into the Arduino IDE library. See this for more information on how to do that: http://arduino.cc/en/Guide/Libraries

You can also copy the MODBUSslave example into the example folder.

Launch the Arduino IDE.

Open the MODBUSslave example. ( from the example menu or by navigating to it in the MODBUS library folder.

Now connect to your board. Remove the jumper to the RX pin. ( or turn off the switch if you used one) This will allow the computer to communicate with the Arduino. If you forget to do this, the DTE board will interfere with the upload of the sketch.

Upload the Example to the board.

Once complete, reconnect RX to D0.

C-more setup.

In the C-more software, Start a new project for the panel you have.

Go to Setup -> Panel Manager

On the com port, select the DEV001. Now would be a good time to rename this to ARDUINO.clip_image006

Set PLC Protocol to Modicon Modbus RTU

Select direct connection

Set PLC SLAVE number to 1.

Baud Rate 9600

Parity None

Stop bit 1

Control RTS No

Require CTS No

Select RS 485 No

Byte Order High Byte, Low Byte

Word Order Low Word, High Word

Character Order in register Char1, Char2

Registers per Message 32

Coils per message 64

Register Write Function Code 06

Coil Write Function Code 05

Time out 30

Poll time 3

Click ok.

Let’s place a Numeric Display on the screen,

In the Data Display tag open the tag database to create a new tag.

Click on Add

clip_image007

Select ARDUINO for the device name, Give the tag a name like ReadOnlyRandom.

Set it to Unsigned INT 16

Select memory type 3

Enter an address of 1

Click ADD, Select the new tag Click OK. (notice that the PLC address is shown as 30001)

Click OK again to assign the tag to the display.

Save and send the project to the C-more.

Test it!

Connect the C-more to the Arduino using the com cable.

You should see LEDs on the DTE board flicker and a random number updating on the C-more screen. Congratulations, you have gotten past the biggest hurdle to getting a C-more to talk to an Arduino.

If you do not see this, check that you have RX and Digital pin 0 connected. Also try swapping the RX and TX connections.

Writing to an Arduino

Ok so now you can read from an Arduino, but how about writing to it.

Continuing with the example, let’s add a Numeric Entry in the same fashion as we did with the Numeric Display.

But this time when you add the new tag, Name it WriteableNumber with a memory type of 4 and an address of 9.

clip_image008

Save and transfer the project to the screen.

You should now see a 9 in the new entry.

Change the 9 to a different number. Now you have written to the Arduino.

To make use the register in the Arduino, update the example to use regBank.get(40009).

So in this post I covered how to setup the hardware to between a C-more touch screen HMI, and an Arduino. I also showed how to load the MODBUS library and example onto the Arduino. Lastly I showed how to configure the settings on the C-more to make use of the MODBUS RTU protocol in conjunction with the supported features of the Arduino.

The MODBUS library I used is not the only one available on the web, but it is the first one I got to work with a C-more.

Remember, when you are uploading to the Arduino, you must remove the RX connection.

In the next post, I will share a derived library that takes advantage of SoftSerial. This will allow You to connect the DTE board to Pins 2 and 3 instead of 0 and 1. There by allowing you to upload to the Arduino while remaining connected to the C-more.

Lastly I will share some methods to make it easy to read and write discrete bits using whole registers, instead of coils.

Please let me know what you think of this post. I welcome questions and feedback.

Resources:

http://code.google.com/p/arduino-modbus-slave/downloads/detail?name=MODBUS.zip&can=2&q=

http://www.nkcelectronics.com/RS232-to-TTL-converter-board-DTE-with-Male-DB9-33V-to-5V_p_369.html

http://arduino.cc/en/

http://en.wikipedia.org/wiki/Modbus

http://www.automationdirect.com/static/specs/cmorecables.pdf

http://media.nkcelectronics.com/downloads/rs232ttl_DTE_v1.1.pdf

http://forum.automationdirect.com


Final post for Windows Embedded Compact 7. Build 2817 available.

September 14, 2012
Leave a Comment

This will likely be the final post I share about Windows Embedded Compact 7. I have moved off of the team, but the work will go on. As the title shows, the installer can be updated to build 2817 (released last week).

I encourage you to look for updates and post questions or comments to this blog moving forward:

http://blogs.msdn.com/b/icumove/ (Official Install Blog)

 

Thank you

Kyle


Windows Embedded Compact 7 updated to 2816

August 29, 2012
Leave a Comment

Windows Embedded Compact 7 has been updated with build 2816. This is the 13th update released. This update includes a major upgrade to Windows Embedded Silverlight Tools.

You can update Windows Embedded Silverlight Tools independent of Windows Embedded Compact 7, but it is generally recommended to allow Windows Embedded Compact 7 handle the upgrade for you. Simply let WEDU notify of you of the update, or launch the WindowsEmbeddedCompact7.exe installer from Add / Remove programs and select update.


Posted in Uncategorized

Some XP users might have an issue with Install Level 9.

April 19, 2012
Leave a Comment

XP users may encounter an error while installing updates at Install level 9 (Update 8). The issue is resolved by updating to Install level 10 (Update 9). This update was released with the March build 7.0.2812.

First_Indication


Uninstall WindowsEmbeddedCompact.exe no matter what

March 14, 2012
Leave a Comment

If you ever find your self in a situation where you are unsure of the state of you machine, you can uninstall the program with the command line.

Here are the steps to uninstall the whole program:

·Acquire the latest version of WindowsEmbeddedCompact7.exe. At this time the version is 2811.

*note {The Evaluation version program will work for this uninstall procedure, and can be downloaded from Microsoft.com.}

·Place the file on the system where the user can access it. For example c:\2811

·Open the Command Prompt with Administrative rights.

·Run WindowsEmbeddedCompact7.exe with the uninstall and quiet parameters. For example “c:\2811\WindowsembeddedCompact7.exe” –uninstall –quiet

·This will run WindowsEmbeddedCompact7.exe in the “Background”. To view the progress of the program use TaskManager. Under the Processes tad, two WindowsEmbeddedCompact7.exe Image names will be listed when the uninstall is taking place.

·When the WindowsEmbeddedCompact7.exe Image names are no longer present in the list of processes, the uninstall should be complete.

·To confirm that the uninstall finished successfully open the Add and Remove programs from the Control panel. Windows Embedded Compact 7 Should not be listed.

·Windows Embedded Silverlight Tools will remain in the Currently installed programs list.

·Uninstall Windows Embedded Silverlight Tools at this time.


Offline Layout for Windows Embedded Compact 7

February 14, 2012
3 Comments

Offline Layout

clip_image002

Offline Layout is a new feature that has been released with the latest update of Windows Embedded Compact 7 and Windows Embedded Silverlight Tools. This feature can create a reusable layout of all the content a user would need to install, modify, or repair the software. The big advantage of this feature is that the update patches will only need to be downloaded once. Now, when patches need to be acquired, the layout folder can be used as the source.

Overview:

1. Select the options you want to add to your offline layout.

2. Select “Yes, create an offline layout.”

3. Allow offline layout to be created.

Quick tips:

· Have the original install DVD’s close by. It is quicker to use the DVD’s as a source rather than downloading. Note not all options are available for download.

· When updating and performing the offline layout only the options currently installed will be saved to the offline layout folder.

· Offline layout will only add files to the layout folder. It will never delete files from the folder.

· The folder can be shared to enable network access and the folder content can be copied anywhere.

· Uninstalling the software will not remove the offline layout folder or its content.

For more details read section below:

So how does one perform an offline layout? It is very simple. If you are installing for the first time or modifying a current install you will see a new screen titled “Install Offline Layout”. See Below:

clip_image004

By default, offline layout is not selected. Select “Yes, create an offline layout” to enable offline layout.

clip_image006

When “Yes, create an offline layout.” is selected, new controls appear on the screen. The location of where the layout folder will be created and an additional check box are displayed. This check box can be unchecked to allow only the creation of the offline layout folder without installing the product. In this case any currently installed options will not be modified. For this demonstration, I’ll leave the check box checked and click next.

The “Ready to Proceed” screen will appear, and a new icon may be displayed.

clip_image008

In this scenario, Platform Builder is being modified to the update 3 level, so the Update 6 patch is being removed. Update 3 is already applied to Platform builder, so only the offline layout action is performed on that package. ARMv5 is also being installed, hence the installation of Architecture Common updates.

This floppy disk icon is displayed when a package is planned to be saved to the offline layout folder, and no other action is being taken with the package.

clip_image010

Packages that are being installed or modified will also be saved in the offline layout folder.

The estimated size of the offline layout is displayed and added to the total disk space required.

· Tip: at this point it is a good idea to have your original install media handy.

· If your system has AutoRun enabled a second instance of the installer may start. Close it down if it does.

clip_image012

Once the acquire phase has completed the offline layout action will begin. The packages will be saved and the modify phase will begin. Once all modifying is complete the “Finished” screen will display.

clip_image014

The location of the offline layout folder is displayed as a link. Click on this link to open the offline layout folder.

clip_image015

The layout folder will contain the packages required for installing the options that have been selected. This includes any updates that the options may have. Performing a Full install with Offline layout will result in a layout folder like the shown below.

clip_image016

I have found that the quickest and easiest process is to update your current install to 7.0.2810 (Update7) without performing the Layout action. Then drop the Windows Embedded Compact 7 DVD into the drive and proceed to perform layout only action on all of the options you may ever want to install. From here on forward only new update folders will need to be acquired.

Links to more information:

http://blogs.msdn.com/b/icumove/ (Official Install Blog)


How to check the current install level of Compact 7.

December 1, 2011
Leave a Comment

There are several ways to determine your Windows Embedded Compact 7 install level.

For the typical developer the easiest method is to launch the WindowsEmbeddedCompact7.exe to the Modify screen. Here at the top left section the screen Current Install Level will be displayed under Found Version.

clip_image002[4]

For those who would rather use a log file entry to determine the install level, you can search near the end of the last WindowsEmbeddedCompact7.00**.log in the user temp directory.

clip_image003[5]

clip_image004[5]

The third method is for more advanced users.

Warning: Changes made to the Windows Registry may affect the operations of the computer. Making a backup of the registry is highly recommended. Use Registry Editor, or other methods to access the registry at your own risk. For more information about the Windows Registry please go to:

http://support.microsoft.com/kb/136393

http://support.microsoft.com/kb/256986

As of version 7.0.2807.0, (October 2011 Update ), the value of the InstalledLevel is stored in the registry.

Registry Editor can be used search for the value of InstalledLevel. Regedit.exe can be used on the cmdline or with the GUI.

For 32 bit machines:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{A4FF3FC0-A8B3-47c2-8627-CE1D2988D0D8}]

For 64 bit machines:

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{A4FF3FC0-A8B3-47c2-8627-CE1D2988D0D8}]

clip_image005

The RegRead method is also able to programmatically retrieve the value of InstalledLevel.

More information about that method can be found here:

http://msdn.microsoft.com/en-us/library/x05fawxd.aspx


Windows Embedded Compact 7 releases October updates.

November 15, 2011
Leave a Comment

clip_image002

Updates are available for Windows Embedded Compact 7. These updates include changes for DCHP, MSFLASH, and NETIO. There are also changes to the installer software. There are two features added to the software that most people will never see, but will appreciate if they do. Sleep is now blocked by the software when content is being acquired or when an action is performed on an option. This will not over write the system’s power settings. Some updates can take a considerable amount of time to download, and to be applied. This feature prevents the system from going to an idle state where Sleep, Stand by, or Hibernate can take effect.

Of course there are still times when the system can enter into Sleep, Stand by, Hibernate, or even Shutdown while the software is running. To address the issue of having to uninstall everything in the event of an interruption to the software progress, a resume feature has been added. Previously the software was able to recognize that the state of the installation was compromised and an uninstall action would be performed to return the machine to a clean state. This can be annoying and costly in terms of time. The resume feature will keep track of the progress of the software. In the event of an interruption, such as a power loss, the software will store the current state. When the user logs in again the installer software is launched and will attempt to resume the action it was taking prior to the interruption. In the event of a reboot or power loss, the software will launch automatically when the user logs in.

One bug fix that is worth noting is the behavior of the download all check box and Shared Source. A user can select to download all of their content. Shared Source cannot be downloaded. Previously if a user with a retail version of the software wanted to install an option like Platform Builder and Shared Source but did not have Disk 1 in their DVD drive, they would be prompted for source. The user could select to download all the content. The software would proceed to download all of the content until it reached Shared Source. The user would not be able to uncheck the Download All check box, and would have to cancel the out of the software. Now the user can uncheck the Download All check box, and browse to the location of Shared Source.

Please let me know if you have a questions or comments.

Kyle

Links for more information:

http://blogs.msdn.com/b/icumove/ (Official Install Blog)


Next Page »
Follow

Get every new post delivered to your Inbox.