Previous posts for this project:

 

 

Introduction

 

In the little time I have had this week to work on my project, I've been experimenting with a peltier. Ideally, I'd like to use it to cool the water in the bowl.

 

Idea

 

I got the idea for the cooling method while watching the Ben Heck show, more specifically, the EMF camping chair episode.

 

Having most of the parts laying around, I attempted my own version with:

  • a small peltier from previous experiments
  • fan from old computer
  • heatsink for old computer

 

Now, the peltier is most likely not powerful enough, but I would like to put the idea to the test using the hardware I already have.

 

Circuit

 

To drive the peltier, I used an N-channel MOSFET triggered by a PWM signal from the RPiSoC.

 

Screen Shot 2014-10-09 at 20.03.01.png

I made the circuit with some screw terminals, to which I can attach the PSU, the peltier and the RPiSoC. I put some hotglue on the back to avoid accidental short-circuits.

 

photo 3.JPGphoto 4.JPG

 

Mounting

 

Using some clamps, I tried to flatten a part of the metal bowl. On that (supposed to be) flat side, I attached the peltier, heatsink and fan.

I say "supposed to be" because the result is still not flat enough for the peltier to make proper contact with the bowl.

 

photo 1.JPGphoto 5.JPG

 

The mounting is not that nice, but it illustrates the idea and should be functional in the end.

 

Script

 

I wrote a simple script which will pass set the PWM signal's duty cycle to the passed value.

 

The script includes some simple checks:

  • an integer needs to be passed, else the duty cycle is set to 0
  • the integer's value needs to be between 0 and 100, else duty cycle is set to 0

 

#!/usr/bin/env python

from rpisoc import *
import sys

RPiSoC('SPI')

My_DutyCycle = sys.argv[1]

My_PWM = PWM(1) # Port 3 Pin 1
My_PWM.Start()
My_PWM.WritePeriod(65535)

try:
    My_DutyCycle = int(My_DutyCycle)

    if(My_DutyCycle >= 0 and My_DutyCycle <= 100):
        # Inside boundaries, set passed value
        print "Inside boundaries, set passed value"
        My_PWM.SetDutyCycle(My_DutyCycle)

    else:
        # Outside boundaries, turn off
        print "Outside boundaries, turn off"
        My_PWM.SetDutyCycle(0)

except ValueError:
    # Invalid value, turn off
    print "Invalid value, turn off"
    My_PWM.SetDutyCycle(0)









 

A quick sanity check of the script confirms the input is properly checked:

 

pi@webserver ~/psoc_2_pi/API_Python_v_1_1_1 $ ./rpisoc_peltier.py 5
Inside boundaries, set passed value
pi@webserver ~/psoc_2_pi/API_Python_v_1_1_1 $ ./rpisoc_peltier.py 100
Inside boundaries, set passed value
pi@webserver ~/psoc_2_pi/API_Python_v_1_1_1 $ ./rpisoc_peltier.py 101
Outside boundaries, turn off
pi@webserver ~/psoc_2_pi/API_Python_v_1_1_1 $ ./rpisoc_peltier.py a
Invalid value, turn off
pi@webserver ~/psoc_2_pi/API_Python_v_1_1_1 $ ./rpisoc_peltier.py 0
Inside boundaries, set passed value







 

 

Test

 

In the pictures below, you can witness the test setup.

 

The multimeter measures the current draw of the peltier and fan, the scope visualises the PWM signal of the RPiSoC.

From left to right, 0% duty cycle, 50% and 100%.

 

photo 1.JPGphoto 2.JPGphoto 3.JPG

 

During the tests, I was able to have this specific peltier run without the heatsink becoming too hot. I'll have to calculate which peltier and heatsink should be used in the end, considering the amount of water to be cooled, by how many degrees and in which timespan. This might however result in a large heatsink, rendering the solution rather impractical.

 

Currently, this can only be considered a proof of concept. As the peltier is not making proper contact with its full surface with the bowl, the cooling effect is not properly passed.

I'll try to find a solution for this in the days to come, but time is running out, and everything still needs to be combined into a single solution, so I'll leave it at this for today.

 

More on this subject soon, hopefully!