element14 Community
element14 Community
    Register Log In
  • Site
  • Search
  • Log In Register
  • Community Hub
    Community Hub
    • What's New on element14
    • Feedback and Support
    • Benefits of Membership
    • Personal Blogs
    • Members Area
    • Achievement Levels
  • Learn
    Learn
    • Ask an Expert
    • eBooks
    • element14 presents
    • Learning Center
    • Tech Spotlight
    • STEM Academy
    • Webinars, Training and Events
    • Learning Groups
  • Technologies
    Technologies
    • 3D Printing
    • FPGA
    • Industrial Automation
    • Internet of Things
    • Power & Energy
    • Sensors
    • Technology Groups
  • Challenges & Projects
    Challenges & Projects
    • Design Challenges
    • element14 presents Projects
    • Project14
    • Arduino Projects
    • Raspberry Pi Projects
    • Project Groups
  • Products
    Products
    • Arduino
    • Avnet & Tria Boards Community
    • Dev Tools
    • Manufacturers
    • Multicomp Pro
    • Product Groups
    • Raspberry Pi
    • RoadTests & Reviews
  • About Us
  • Store
    Store
    • Visit Your Store
    • Choose another store...
      • Europe
      •  Austria (German)
      •  Belgium (Dutch, French)
      •  Bulgaria (Bulgarian)
      •  Czech Republic (Czech)
      •  Denmark (Danish)
      •  Estonia (Estonian)
      •  Finland (Finnish)
      •  France (French)
      •  Germany (German)
      •  Hungary (Hungarian)
      •  Ireland
      •  Israel
      •  Italy (Italian)
      •  Latvia (Latvian)
      •  
      •  Lithuania (Lithuanian)
      •  Netherlands (Dutch)
      •  Norway (Norwegian)
      •  Poland (Polish)
      •  Portugal (Portuguese)
      •  Romania (Romanian)
      •  Russia (Russian)
      •  Slovakia (Slovak)
      •  Slovenia (Slovenian)
      •  Spain (Spanish)
      •  Sweden (Swedish)
      •  Switzerland(German, French)
      •  Turkey (Turkish)
      •  United Kingdom
      • Asia Pacific
      •  Australia
      •  China
      •  Hong Kong
      •  India
      • Japan
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      • Vietnam
      • Americas
      •  Brazil (Portuguese)
      •  Canada
      •  Mexico (Spanish)
      •  United States
      Can't find the country/region you're looking for? Visit our export site or find a local distributor.
  • Translate
  • Profile
  • Settings
Raspberry Pi
  • Products
  • More
Raspberry Pi
Raspberry Pi Forum Multilevel Temperature control
  • Blog
  • Forum
  • Documents
  • Quiz
  • Events
  • Polls
  • Files
  • Members
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
Join Raspberry Pi to participate - click to join for free!
Featured Articles
Announcing Pi
Technical Specifications
Raspberry Pi FAQs
Win a Pi
Raspberry Pi Wishlist
Actions
  • Share
  • More
  • Cancel
Forum Thread Details
  • State Suggested Answer
  • Replies 18 replies
  • Answers 3 answers
  • Subscribers 676 subscribers
  • Views 2088 views
  • Users 0 members are here
  • python
  • raspberry_pi
Related

Multilevel Temperature control

terryaris
terryaris over 10 years ago

I would like to control oven temperature with a Raspberry Pi.  I have a simple on-off control with deadband working well now.  My challenge is I need to control the oven to different temperatures for different time periods:  ie:  0 to 200F over a period of 6 hrs, cool to 125F over a period of 4 hrs, then back to 280F for 3 hrs.  I hope to do this with a while loop but do not really understand how to proceed once my first setpoint and time has completed.  I will count down the time with the time function, so once the first one zeros out, how do I proceed to the next setpoint/time ramp for the cooling phase?  Any suggestions or if you could direct me to some code that is already built it will be great! 

  • Sign in to reply
  • Cancel
Parents
  • rew
    0 rew over 10 years ago

    I would separate the "execution" and the planning parts.

     

    The planning part then again splits into an execution and a planning part.

     

    The execution part of planning is executing a ramp, which in bash would look like:

    #!/bin/bash

    # this program is called "do_ramp"

    starttemp=$1

    endtemp=$2

    tottime=$3

    curtime=0

    step=1

     

     

    curtime=0

    while [ $curtime -le $tottime ] ; do

      curtemp=`echo "$starttemp*($tottime-$curtime)/$tottime + $endtemp*$curtime/$tottime" | bc`

      echo -en $curtime $curtemp '\r'

      echo $curtemp > the_temperature_file

      sleep $step

      curtime=$[$curtime+$step]

    done

     

    The planning part of the planning program then becomes (again in bash):

     

    #!/bin/sh

    # Name this for the profile you are intending to make.
    # It should be able to find the "do_ramp" script above in the current directory.
    # slowly go to 200 over 6 hours

    ./do_ramp 70 200 `expr 6 \* 3600`

    #stay there for 15 minutes.

    ./do_ramp 200 200 900

    ./do_ramp 200 124 `expr 4 \* 3600`

    # etc...

     

    The "execution" part of the whole thing is what you already have, but now it reads the "the_temperature_file" for the setpoint every few seconds or so.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • terryaris
    0 terryaris over 10 years ago in reply to rew

    I really like your approach Roger and I thank you for getting back to me so quickly.   I have had a couple of issues with your script and wonder if you could help me out. I have the following questions: 

    1  When I put your script into Python 2, it did not like the $ on the the variables, so I removed them and all went well.

    2. it does not like the -le, just after the while loop, changing that to curtime-tottime lets it work. 

    3. should the curtemp statement be all in quotes, or should we be allowing that calculation? 

    4.  I cannot get this one working in any way. 

    curtemp=`echo "$starttemp*($tottime-$curtime)/$tottime + $endtemp*$curtime/$tottime" | bc`

      echo -en $curtime $curtemp '\r'

      echo $curtemp > the_temperature_file

      sleep $step

    I have tried -e, -en, -ne, brackets, ., and all I can think of but I cannot get python to accept it in any manner. 

     

    Please let me know where I am going wrong, as I believe this solution should work well.  Once again, thanks for your help. 

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Reject Answer
    • Cancel
  • mconners
    0 mconners over 10 years ago in reply to terryaris

    Roger's script was in bash, not python, and I agree with his approach. I misread your original question and thought you had completed the temp control part, but just needed a way to accurately trigger the execution. I was trying to accomplish the same thing roger was, separating execution from logic.

     

    BTW, bash is the Bourne Again Shell, and it is the default command line interpreter when you login to your pi.

     

    So you could copy the code roger gave you when saved in a text file will work just by changing the execute permissions on the file and typing it's name on the command line.

     

    the first line

    #!/bin/sh

    or

    #!/bin/bash

     

    tells the CLI to execute the program as a sh script or a bash script, it's just as if you were typing the commands one at a time on the command line.

     

    Mike

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Reject Answer
    • Cancel
  • terryaris
    0 terryaris over 10 years ago in reply to mconners

    Mike thanks for the note this morning.  I tried with the #!/bin/bash as you suggested.  Should I be concerned that it stays red like a comment?  When I go to the variables, it does not like the $ signs.  Are they to be left in?  When I get to the While loop, again it will not take the $ but if I take them out I get a Syntax error on tottime, if I put them in, I get a syntax on the $.  I have tried both from Python2  and from the monitor, but I just keep getting the syntax errors.  Is there something that I am doing wrong?

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • mconners
    0 mconners over 10 years ago in reply to terryaris

    I'm not sure what editor you are using, if it is a python specific editor it may show errors, but it should be fine. The $ should be in there.

     

    you may need to do

    chmod 755 <filename>

    to change the permissions on the file, then execute it by typing

    ./filename

     

    where filename is whatever you named the file.

     

    Do a quick google search on unix shell scripting

    look for a hello world type program and using command line arguments and variable in shell scripts.

     

    Mike

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • terryaris
    0 terryaris over 10 years ago in reply to mconners

    Mike thanks for the info, that did help.  The script will now run but I get the following errors: 

     

    1.  Line 12 the While loop start [0,: command not found

     

    2.  do_ramp command on line 36, 40, and 42 : command not found

     

    If I can get this running, is there a way to integrate it into my Python temperature control program, or just continue to run it as here? 

    Thanks again for all this help. 

     

    Terry

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • terryaris
    0 terryaris over 10 years ago in reply to mconners

    Mike:  Just wanted to thank you for the help you gave me in getting this temperature control going.  I did get is working, but thanks for the Chmod info, sure did the trick.  Want to than both you Roger for your help.   You both did very well, considering what you had to work with on this end. 

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
Reply
  • terryaris
    0 terryaris over 10 years ago in reply to mconners

    Mike:  Just wanted to thank you for the help you gave me in getting this temperature control going.  I did get is working, but thanks for the Chmod info, sure did the trick.  Want to than both you Roger for your help.   You both did very well, considering what you had to work with on this end. 

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
Children
  • mconners
    0 mconners over 10 years ago in reply to terryaris

    Seems like it was more Roger than me. He provided the meat of the solution. I just gave some OS pointers. Glad it worked out for you.

     

    Mike

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • mconners
    0 mconners over 10 years ago in reply to mconners

    BTW, if you ever type

     

    ls -al

     

    you see something like

     

    drwxr-xr-x  4 mconners mconners 4096 Feb 12  2015 .

    drwxr-xr-x 14 mconners mconners 4096 Nov 20 13:53 ..

    -rw-r--r--  1 mconners mconners  553 Feb 12  2015 foo.cs

    -rwxr-xr-x  1 mconners mconners 3584 Feb 12  2015 foo.exe

     

    the first character  d indicates that it is a directory

    . is the current directory

    .. is the parent directory

     

    -rw-r--r-- means  that the file is read/write for the owner,read only by the group, and read only for world (everyone else)

    -rwx-r-xr-x means read/write/execute for the owner, read/execute for the group, and read/execute for the world

     

    this pattern of rwx can be set on a file using the chmod command, where each set of rwx is an octal digit

    so 755 = 111 101 101

    which translates to rwx r-x r-x

     

     

    so that's what the chmod 755 did

    and the ./program means execute program in the current directory

     

    Mike

    • Cancel
    • Vote Up +2 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • rew
    0 rew over 10 years ago in reply to mconners

    Mike,

    You're going too fast with the binary stuff.

     

    On chmod you specify three digits. FIrst is for owner, second for group, third for others. Common values are: 6 for "read-write". and 4 for "readonly". when the file is a program that is executable, the numbers are 7 for read/write (and execute) and 5 for read-only (and execute).

     

    This leads to the following common combinations. 644: read/write for the owner, and readonly for group and others.

    Or 664 for read/write for owner and group, readonly for others.


    For executable programs those combinationsbecome 755 for only owner can write and 775 for group can write as well.

    On "ls" the 644 is shown as rw-r--r--, 664 is shown as rw-rw-r--, 755 is shown as rwxr-xr-x and 775 is shown as rwxrwxr-x.

     

    I'm not going to tell you that some people ignore the rules and specify 4 digts to "chmod": 4755.

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • mconners
    0 mconners over 10 years ago in reply to rew

    Yeah, you might be right, Roger. I do that sometimes.image At least I didn't tell him about the extra bits like you did. image

     

    Between the 2 of us, I think we have it covered.

     

    Mike

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • terryaris
    0 terryaris over 8 years ago in reply to mconners

    Subject: Re: [Raspberry Pi] - Multilevel Temperature control

    Hello Mike, you once helped me out with temperature control on my malting operation here in Ecuador. I have that part of the system up and running well now but have upped the anti a bit, and need to go to some higher temperatures - ie 400F which is above the limit of my DS18B20. I have managed to find a MAX6675 K type TC unit here, only to discover that it is obsolete, giving me a challenge finding info for setting it up to read these higher temperatures. Is it possible to get the library and possibly the code for this unit or am I just out of luck?

     

    h

    Can the library for the MAX 38155 be used with the MAX6675 to get some sort of readout?

    Thanks for any info you may be able to supply. 

    Terry Aris

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • mconners
    0 mconners over 8 years ago in reply to terryaris

    here is an Arduino library for the 6675

     

    https://github.com/adafruit/MAX6675-library

     

    and here is some code using wiring pi

     

    WiringPi for Raspberry Pi and MAX6675 thermal-couple sensor

     

    I'm not familiar with either of these modules, so I can't really help you there. They were just what came up when I googled

    MAX 6675 library

     

    I also don't have a 6675 so I can't really help debug them.

     

    Mike

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • rew
    0 rew over 8 years ago in reply to terryaris

    Hi Terry,

    Good to hear that it works. :-)

     

    I have a little project with a MAX38155. I have not looked into the compatiblity with the older 6675 chips.

     

    But Maxim is inclined to keep the protocols the same as much as possible. Many people who for example know the 6675 chip, will decide: "We can just as well use the TI chip instead of the Maxim one, if we have to rewrite the software". So Maxim is interested in keeping the protocol the same. "only minor changes" or "no changes at all".
    So find the datasheets and try to see for yourself if they are the same. After you've made a decision, you're welcome to post again including your verdict and with links to both datasheets. Then it's easy for me to verify your claim.

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • Verify Answer
    • Reject Answer
    • Cancel
element14 Community

element14 is the first online community specifically for engineers. Connect with your peers and get expert answers to your questions.

  • Members
  • Learn
  • Technologies
  • Challenges & Projects
  • Products
  • Store
  • About Us
  • Feedback & Support
  • FAQs
  • Terms of Use
  • Privacy Policy
  • Legal and Copyright Notices
  • Sitemap
  • Cookies

An Avnet Company © 2025 Premier Farnell Limited. All Rights Reserved.

Premier Farnell Ltd, registered in England and Wales (no 00876412), registered office: Farnell House, Forge Lane, Leeds LS12 2NE.

ICP 备案号 10220084.

Follow element14

  • X
  • Facebook
  • linkedin
  • YouTube