added read me
This commit is contained in:
90
RPI-GPIO-fan-temp-control-of-external-HDD-enclosure.md
Normal file
90
RPI-GPIO-fan-temp-control-of-external-HDD-enclosure.md
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
# Raspberry Pi Fan Control Script
|
||||||
|
|
||||||
|
This Python script monitors the temperature of a Raspberry Pi using a 1-Wire digital temperature sensor (e.g., DS18B20) and controls a connected fan via GPIO. It is designed to help maintain optimal operating temperatures by automatically turning the fan on or off depending on the measured temperature.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🛠️ Features
|
||||||
|
|
||||||
|
- Reads temperature data from a 1-Wire sensor (`DS18B20`)
|
||||||
|
- Uses GPIO pin control to activate/deactivate a fan
|
||||||
|
- Customizable temperature thresholds for fan activation
|
||||||
|
- Simple, lightweight script suitable for cron jobs or long-running processes
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 💡 How It Works
|
||||||
|
|
||||||
|
1. The script accesses the DS18B20 sensor data from the Linux 1-Wire interface (`/sys/bus/w1/devices/`).
|
||||||
|
2. It parses the temperature output and converts it to degrees Celsius.
|
||||||
|
3. Based on the temperature:
|
||||||
|
- If `≥ 46°C`, the fan is turned **on**
|
||||||
|
- If `≤ 40°C`, the fan is turned **off**
|
||||||
|
4. GPIO pin 18 is used to control the fan via the `pinctrl` utility.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📌 Prerequisites
|
||||||
|
|
||||||
|
- Raspberry Pi (any model with GPIO and 1-Wire support)
|
||||||
|
- 1-Wire temperature sensor (e.g., DS18B20) connected and configured
|
||||||
|
- GPIO fan connected to pin 18 (can be changed in script)
|
||||||
|
- `pinctrl` utility installed and configured
|
||||||
|
- Python 3
|
||||||
|
|
||||||
|
Enable the 1-Wire interface on the Pi using `raspi-config` or by adding this line to `/boot/config.txt`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
dtoverlay=w1-gpio
|
||||||
|
```
|
||||||
|
Then reboot:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo reboot
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📄 Usage
|
||||||
|
|
||||||
|
1. Make sure the sensor is connected and recognized under `/sys/bus/w1/devices/`.
|
||||||
|
|
||||||
|
2. Update the `device_folder` variable if your sensor ID differs from the one in the script:
|
||||||
|
|
||||||
|
```python
|
||||||
|
device_folder = glob.glob(base_dir + '28-*')[0]
|
||||||
|
```
|
||||||
|
|
||||||
|
The script will continuously monitor the temperature and control the fan accordingly.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ⚙️ Customization
|
||||||
|
|
||||||
|
- **Temperature thresholds**: Modify the values in the `if` / `elif` block to change when the fan turns on/off.
|
||||||
|
- **GPIO pin**: Change the pin number in `pinctrl set 18 ...` if using a different GPIO.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧪 Example Output
|
||||||
|
|
||||||
|
```text
|
||||||
|
Temperature: 41.25 °C
|
||||||
|
Temperature: 43.12 °C
|
||||||
|
Temperature: 46.05 °C # Fan turns on here
|
||||||
|
Temperature: 39.80 °C # Fan turns off here
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📂 File Structure
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📌 Note
|
||||||
|
|
||||||
|
This script uses `pinctrl`, which may not be installed on all systems by default. You may need to substitute `pinctrl` with another GPIO control utility such as:
|
||||||
|
|
||||||
|
- `raspi-gpio`
|
||||||
|
- `gpio` (from WiringPi)
|
||||||
|
- Python libraries like `RPi.GPIO` or `gpiozero`
|
||||||
|
|
||||||
Reference in New Issue
Block a user