Mitä tämä tekee?
Tämä projekti on aurinkopaneelien kääntäjän ohjausboksi. Mekaniikka ja moottori liikuttavat paneeleita, mutta tämä boksi tuo mukaan asentotiedon, moottorin ohjauksen, rajat ja Home Assistant -näkymän.
Komponentit
Tämä lista on ohjausboksia varten. Paneelien teline, moottori ja mekaniikka voivat olla jokaisella erilaiset.
| Osa | Mihin sitä käytetään? | Huomio |
|---|---|---|
| Wemos D1 Mini / ESP8266 | Ohjaimen “aivot”, ESPHome ja WiFi | D1/D2 I2C:lle, D5/D6 moottoriohjaukseen |
| AS5600 | Magneettinen kulma-anturi | Anturin päälle akselin päähän pieni magneetti |
| NPN-transistorit | Releiden / K1-K2-ohjausten vetäminen maihin | Esim. BC337, 2N2222, S8050 |
| 1 kΩ vastukset | GPIO → transistorin base | Yksi per ohjaussuunta |
| 10 kΩ vastukset | Base → GND alasveto | Estää transistorin kellumisen |
| Releet / suunnanvaihtokytkentä | Moottorin suunnan ohjaus | Kaksi suuntaa: aamu / ilta |
| 1N4007-diodi | Releen kelan flyback-suoja | Raidallinen pää relekelan + puolelle |
| LM2596 / stepdown | Laskee 12/24 V → 5 V ESPille | Säädä 5 V ennen kuin kytket D1 Minin |
| Rajakytkimet | Mekaaniset ääriasentojen turvat | Estää rakenteen ajamisen rikki |
| 3D-tulostettu kotelo | Elektroniikan suojaus ja kiinnitys | Muista vedonpoistot ja tiivistys ulkokäyttöön |
Kytkennät
D1 Mini → AS5600
AS5600 käyttää I2C-väylää. D1 Minillä tässä käytetään D1 ja D2 pinnejä.
D1 Mini → transistorit → releohjaus
GPIO ohjaa NPN-transistoria, joka vetää releen tai ohjaustulon maihin. Sama kytkentä tehdään kahdesti: yksi aamu-suuntaan ja yksi ilta-suuntaan.
Virtapuoli
12/24 V akku tai virtalähde ├─ sulake ├─ moottori / releiden tehopuoli └─ LM stepdown → 5 V → D1 Mini GND pitää olla yhteinen: akku/virtalähde GND → ohjaus GND → D1 Mini GND
DIY-releohjaus transistorilla
Videolla alkuperäinen valmis relekortti hajosi koteloon asentaessa, joten moottorin ohjaus tehtiin lopulta itse releillä, NPN-transistoreilla ja vastuksilla. Tämä osio dokumentoi sen perusidean, jotta sama kytkentä löytyy myös ohjesivulta eikä pelkästään videolta.
Yhden releen kytkentä
Tee tämä kytkentä yhdelle suunnalle. Jos tarvitset moottorille eteen/taakse-ohjauksen, tee sama kytkentä kahdesti: toinen D5-pinnille ja toinen D6-pinnille.
ASCII-kaavio
D1 Mini GPIO │ ├── 1 kΩ ── B NPN-transistori │ C ───────── releen kelan miinus │ E ───────── GND │ └── 10 kΩ ───── GND +12 V ───────────── releen kelan plus Diodi 1N4007 relekelan yli: raidallinen pää +12 V puolelle toinen pää transistorin collector / kelan miinuspuolelle
Kahden suunnan ohjaus
Aurinkokääntäjässä moottorille tarvitaan kaksi suuntaa. Käytännössä sama rele-/transistorikytkentä tehdään kahdesti.
| ESP-pinni | Kytkentä | Käyttö |
|---|---|---|
| D5 | 1 kΩ → NPN base, collector → rele 1 | Kulma isommaksi / aamuun päin |
| D6 | 1 kΩ → NPN base, collector → rele 2 | Kulma pienemmäksi / iltaan päin |
Releen koskettimet
Releen kelapuoli ja kosketinpuoli ovat eri asioita. Transistori ohjaa releen kelaa. Releen koskettimilla ohjataan moottorin virtapuolta tai suunnanvaihtoa.
Jos käytät moottorin suunnanvaihtoon kahta relettä, varmista koodissa ja johdotuksessa, etteivät molemmat
suunnat voi olla yhtä aikaa päällä. ESPHome-koodissa tämä tehdään interlock-asetuksella.
ESPHome-koodi
Alla oleva koodi on toimiva pohja D1 Minille. Siinä on AS5600, manuaalinapit, automaattiseuranta, softarajat, puolen yön palautus aamuasentoon ja STOP.
kulma_min, kulma_max, aamu_kulma ja ilta_kulma omien mitattujen ääriasentojen mukaan.esphome:
name: aurinkokaantaja-as5600
friendly_name: Aurinkokääntäjä AS5600
on_boot:
priority: 800
then:
- script.execute: aurinkokaantaja_stop
esp8266:
board: d1_mini
logger:
api:
encryption:
key: !secret api_encryption_key
ota:
platform: esphome
password: !secret ota_password
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
ap:
ssid: "aurinkokaantaja_fallback_ssid"
password: !secret fallback_password
captive_portal:
time:
- platform: sntp
id: esp_aika
timezone: Europe/Helsinki
on_time:
- seconds: 0
minutes: 0
hours: 0
then:
- script.execute: palauta_aamuun
i2c:
sda: D2
scl: D1
scan: true
frequency: 100kHz
as5600:
id: paneelin_as5600
direction: clockwise
globals:
- id: kulma_min
type: float
restore_value: true
initial_value: "145.0"
- id: kulma_max
type: float
restore_value: true
initial_value: "218.0"
- id: aamu_kulma
type: float
restore_value: true
initial_value: "218.0"
- id: ilta_kulma
type: float
restore_value: true
initial_value: "145.0"
- id: kuollut_alue
type: float
restore_value: true
initial_value: "2.0"
- id: seuranta_alku_tunti
type: int
restore_value: true
initial_value: "6"
- id: seuranta_loppu_tunti
type: int
restore_value: true
initial_value: "22"
sensor:
- platform: as5600
as5600_id: paneelin_as5600
name: "Aurinkokääntäjä kulma"
id: aurinkokaantaja_kulma
unit_of_measurement: "°"
accuracy_decimals: 1
icon: mdi:rotate-3d-variant
update_interval: 500ms
filters:
- lambda: |-
return x * as5600::RAW_TO_DEGREES * id(paneelin_as5600).get_range_scale();
raw_position:
name: "Aurinkokääntäjä raw position"
id: aurinkokaantaja_raw
gain:
name: "Aurinkokääntäjä AS5600 gain"
magnitude:
name: "Aurinkokääntäjä AS5600 magnitude"
status:
name: "Aurinkokääntäjä AS5600 status"
- platform: wifi_signal
name: "Aurinkokääntäjä WiFi signaali"
update_interval: 30s
- platform: template
name: "Aurinkokääntäjä tavoitekulma"
id: aurinkokaantaja_tavoitekulma
unit_of_measurement: "°"
accuracy_decimals: 1
update_interval: 30s
lambda: |-
auto now = id(esp_aika).now();
if (!now.is_valid()) return {};
int minuutit = now.hour * 60 + now.minute;
int alku = id(seuranta_alku_tunti) * 60;
int loppu = id(seuranta_loppu_tunti) * 60;
if (minuutit < alku) return id(aamu_kulma);
if (minuutit >= loppu) return id(ilta_kulma);
float etenema = float(minuutit - alku) / float(loppu - alku);
float tavoite = id(aamu_kulma) + (id(ilta_kulma) - id(aamu_kulma)) * etenema;
if (tavoite < id(kulma_min)) tavoite = id(kulma_min);
if (tavoite > id(kulma_max)) tavoite = id(kulma_max);
return tavoite;
switch:
- platform: gpio
name: "Aurinkokääntäjä K1 rele"
id: aurinkokaantaja_k1
pin:
number: D5
mode: OUTPUT
inverted: false
restore_mode: ALWAYS_OFF
internal: true
interlock:
- aurinkokaantaja_k2
interlock_wait_time: 1000ms
- platform: gpio
name: "Aurinkokääntäjä K2 rele"
id: aurinkokaantaja_k2
pin:
number: D6
mode: OUTPUT
inverted: false
restore_mode: ALWAYS_OFF
internal: true
interlock:
- aurinkokaantaja_k1
interlock_wait_time: 1000ms
- platform: template
name: "Aurinkokääntäjä automaattiseuranta"
id: automaattiseuranta
optimistic: true
restore_mode: RESTORE_DEFAULT_ON
icon: mdi:solar-power-variant
script:
- id: aurinkokaantaja_stop
mode: restart
then:
- switch.turn_off: aurinkokaantaja_k1
- switch.turn_off: aurinkokaantaja_k2
- id: aja_kulmaa_isommaksi_1s
mode: restart
then:
- switch.turn_off: aurinkokaantaja_k2
- delay: 1000ms
- switch.turn_on: aurinkokaantaja_k1
- delay: 1s
- switch.turn_off: aurinkokaantaja_k1
- id: aja_kulmaa_pienemmaksi_1s
mode: restart
then:
- switch.turn_off: aurinkokaantaja_k1
- delay: 1000ms
- switch.turn_on: aurinkokaantaja_k2
- delay: 1s
- switch.turn_off: aurinkokaantaja_k2
- id: palauta_aamuun
mode: restart
then:
- switch.turn_off: aurinkokaantaja_k2
- delay: 1000ms
- switch.turn_on: aurinkokaantaja_k1
- wait_until:
condition:
lambda: |-
if (!id(aurinkokaantaja_kulma).has_state()) return true;
return id(aurinkokaantaja_kulma).state >= (id(aamu_kulma) - id(kuollut_alue));
timeout: 120s
- script.execute: aurinkokaantaja_stop
button:
- platform: template
name: "Aurinkokääntäjä kulma isommaksi 1s"
icon: mdi:arrow-right-bold
on_press:
- script.execute: aja_kulmaa_isommaksi_1s
- platform: template
name: "Aurinkokääntäjä kulma pienemmäksi 1s"
icon: mdi:arrow-left-bold
on_press:
- script.execute: aja_kulmaa_pienemmaksi_1s
- platform: template
name: "Aurinkokääntäjä STOP"
icon: mdi:stop-circle
on_press:
- script.execute: aurinkokaantaja_stop
- platform: template
name: "Aurinkokääntäjä palauta aamuun nyt"
icon: mdi:weather-sunset-up
on_press:
- script.execute: palauta_aamuunTestaus ja käyttöönotto
0x36.Hyvä testijärjestys ulkona
1. Virrat päälle 2. Tarkista WiFi ja AS5600-kulma 3. Aja 1 s toiseen suuntaan 4. Aja 1 s toiseen suuntaan 5. Testaa STOP 6. Testaa rajakytkimet käsin 7. Aja varovasti ääriasentoihin 8. Kirjaa kulmat koodiin 9. Testaa aamuun palautus manuaalinapilla
Turvallisuus ja käytännön huomiot
Jatkokehitys
Tämä ohje on ensimmäinen toimiva DIY-versio. Seuraava askel on tehdä paketista siistimpi ja helpommin toistettava.
- Siistimpi piirilevy tai perfboard transistoriohjaukselle
- 3D-tulostettavan kotelon STL jakoon
- Erilliset kuvat AS5600- ja relekytkennöistä
- Tuottovertailu: kiinteä asento vastaan kääntyvä paneeli
- Akku + pieni latauspaneeli + PWM-lataussäädin
- WiFi-signaalin parannus ulkotukiasemalla