I want to embark on my first Arduino Uno project that does the following:
1. Controls 2 computer fans PWM Fan 1 and 2 = 120mmx25mm COOLER MASTER 4-BMBS-20PK-R0 Voltage 12 V, Current (Ampere) 0.36A Max., Power Consumption 4.32 W Max. PWM Fan 3 = 180mmx18mm Silverstone FW181 Voltage 12 V, Input Current (0.04 ~ 0.54A) [@ max speed], Input Power (0.24 ~ 9.18W) [@max speed]
2. Automatically Adjusts speed of each fan according to a temperature target (input by user) that is referenced to each 10K thermistor temperature sensor in each radiator. Goal = display 5 temperatures on OLED display (Temp INPUT before radiator and Temp OUTPT after each radiator, etc)
3. Use an i2c 20x4 OLED character display
My question: How do I put it all together?
The test system = water cooled computer with 3 radiators. (180mm fan for top radiator & 120mm pwm fan for upper-right radiator & a secondary 120mm lower radiator.
Why not use a 5" TFT touch screen? There are plenty on ebay, and they usually work with the UTFT and UTouch libraries. I also have a Library that works with both of them and gives you a wide array of functions you can use.
Quite complex for a first Arduino project. Maybe the Mk II!
An Uno will be more than enough. To keep size down, use a Nano 3 or Pro Micro. They all have similar capabilities.
Simplest temp sensor to use would probably be lm35. Three of these could be wired to 3 analog inputs. Each would need 3 wires running from the Arduino to the sensor (+5V, 0V and temp output). The +5V and 0V connections could be shared by all 3 sensors, so a cable with 5 or more cores, like offcuts of cat5 cable, could be used to daisy chain the sensors and make the wiring neat.
A little more advanced would be to use 3 ds18b20 temp sensors. These are digital and can be daisy chained on the same 2-core wire.
A standard 16 x 2 character OLED display would fit in a drive bay panel. But they are 10 times the price of LCD equivalent! Get one with an i2c adaptor pre-fitted for easiest use, but as your Arduino will have plenty of spare pins, i2c not essential.
To drive the fans, you will need transistors. BC337 are cheap and should do fine.
I'm open to TFT, but I really liked the wider viewing angles and over display quality of the OLED displays. Are there any higher quality TFT models that compare to a good OLED character display in terms of quality that you'd recommend?:
Also, do you think there is any problem with Arduino Uno displaying on an OLED character display?
Also, do you guys know where I can buy the largest viewable 20x2 character OLES display (blue text, black background) in usa? The models I've found online have a significantly smaller viewabla are compared to the overall board size.
The 20x4 oled character displays I've found online all have a 60mm frame height or greater. This is too tall for the 5.25" drive bay height (~40mm max). I don't mind going with a 20x2 oled at this point and just use the USB port to program fan settings from the PC, thereby forgoing the dial control I had in mind for the front panel. I need to get this running asap, so the simpler = better :).
Regarding the temperature sensor, my understanding is they're also referred to as 10K Thermistor, so that includes the thermistor itself coupled with 10k ohm resistor. I'm learning as I go, so does that sound like a good explanation of the sensor specs?:
Looking at this picture from the link you posted, its clear the sensor has only two connectors. That tells me that your theory about a combined thermistor and 10K resistor probably isn’t correct. You would need 3 connectors for that. The thermistor and 10K resistor would form a voltage divider and therefore need connectors for +V, 0V and the output that varies with temp.
With only two connectors, my guess would be that this is a simple thermistor with a resistance of 10K at 25C.
This maybe a cool option. Looks like it would fit, the height is only 38mm. It has multiple serial input options, so might be easy enough to interface with the Arduino…
Attached file shows the Character display layout I had in mind: 3 temperature sensor readings up top in Fahrenheit and 2 fan speeds below. Is there a test I can perform with my sensors to determine the best way to integrate them with this Arduino Uno project? I have access to voltmeter and Oscilloscope fwiw. I appreciate all of your feedback and look forward to hearing more advice from you Arduino gurus. 8)
What do you guys think of this 20x2 OLED character display for the purpose of this project?:or this 20x4 OLED (perfect size for 5.25" drive bay cover):
They look great. I would check something first though. Ask the vendor if they are compatible with the standard Arduino LCD library (using the i2c connection). Or better still, if they can provide a sample sketch, post it here and we can check it looks "normal".
...2 fan speeds...
How do you plan to measure the fan speeds?
Is there a test I can perform with my sensors to determine the best way to integrate them with this Arduino Uno project?
Yes, use a multimeter on resistance setting. Dunk the sensor in a cup of hot water, along with an ordinary thermometer. Take a few temp/resistance readings as the water cools. If my theory is correct, it should be 10K at 25C. The temp/resistance relationship won't be quite linear. That's normal for a thermistor, and will be corrected for in your sketch, like in the example you posted earlier.
I contacted the ebay seller asking the details you mentioned. Regarding arduino Uno reading the fan speed, that is a good question. How can I setup Arduino to read a 4-pin pwm fan's speed? (This is the smaller 120mm fan)
I'll perform the temperature test within 24 hours .
Because of shipping delays, it looks like the OLED display will be the last part of this project. So, 1st stage = get this Arduino Uno Fan Controller working without a display.
Search the forum for reading pc fan speeds. Someone is sure to have done that already.
Until your oled arrives, you can send the same text you would send to the oled to Serial.print(). To get the formatting you posted earlier, I recommend using the sprintf () command. You wont find that command listed on the Arduino language reference page, so search the forum or google.