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 Boards Community
    • Dev Tools
    • Manufacturers
    • Multicomp Pro
    • Product Groups
    • Raspberry Pi
    • RoadTests & Reviews
  • 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
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      • 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 664 subscribers
  • Views 1573 views
  • Users 0 members are here
  • python
  • raspberry_pi
Related

Multilevel Temperature control

terryaris
terryaris over 9 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
  • mconners
    0 mconners over 9 years ago

    You could use cron job to execute a program to send a signal to your temp monitoring program to have it change monitoring modes.

     

    So in other words your program would run, monitoring the temp for 200 degrees, then it would receive a signal (like SIGUSR1) from the cron job, then it would switch to the cooling phase, then receive another signal from a second cron job, and switch to the 3rd monitoring phase, then receive a final signal that would terminate the program.

     

    So, look for Signals and Interrupts, and Cron for detailed instructions. This would probably be the easiest solution, with the least amount of coding. Plus you wont be busy waiting your pi the whole time, and wont need to worry about overflows on you timer.

     

    Mike

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • rew
    0 rew over 9 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 9 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 9 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 9 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 9 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 9 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 9 years ago in reply to rew

    Roger & Mike:  I got the loop to work by putting another set of brackets around the curtime -le While loop as long as I made sure that my curtime was less than my tottime and I took the $ off tottime.  Only issue now is that with a difference of 10 I get 10 errors as curtime steps up from 100 to 110 to become equal to tottime.  Errors are unexpected end of file on line 17  while looing for matching ' ' and unexpected EOF on line 18 echo -en read line. Can you see what the problem is here now.  Still looking for my do_ramp command. 

     

    Thanks for all your help guys, I think we are getting close.

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

    Hi Terry,

    When I cut-paste the program I wrote for you from this page into a file, it works first time. Exactly as written.

    So you must have made a copy-paste error or something like that. It's very hard to debug something like that if I can't see what I'm doing. (my source, apparently changed on your computer).

    To debug run the program with

       bash -x do_ramp

    then you can usually see what it is tryting to do.

     

    the first program I wrote should be called "do_ramp". The easiest to "find" it is to change the calls in the other program to "./do_ramp" )

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • terryaris
    0 terryaris over 9 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
>
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