[Logo www.acvariu.ro]

Acvariu.ro - forum - Cea dintai comunitate a acvaristilor
  [Search] Search   [Recent Topics] Recent Topics   [Hottest Topics] Hottest Topics   [Top Downloads] Top Downloads   [Members] Member Listing   [Groups] acvariu.ro 
[Register] Register / 
[Login] Login 
Messages posted by: gmanea
Forum Index » Profile for gmanea » Messages posted by gmanea
Message
Nu prea conteaza chip-ul, cam toate au pwm-urile disponibile.
La prima lampa:
https://www.aliexpress.com/item/32992405688.html

La actuala:
https://www.aliexpress.com/item/32842966602.html

Testele cu firmware-ul trimis anterior:
https://www.aliexpress.com/item/4001166598098.html

Pe langa ESP32, am asa:
- alimentarea este din 24V, o sursa MeanWell de 500W, alimenteaza cam tot din acvariu; am utlizat o sursa DC/DC de 5V pentru ESP.
- 6 placute LED cu CREE 4x4 fiecare.
- 6 LDD1000
- 6 LDD500 (nu mai stiu exact, dar anumite led-uri au un max de 700mA).
- un senzor dallas DS18B20, prins cumva de radiator.
- un cooler ARCTIC cu PWM ce sufla in radiator cand e nevoie.
Toate pe unde au apucat, pe un radiator de 1m lungime.

Cablajele le-am facut cu un miniCNC/soldermask UV, acum nu-l mai am (este in upgrade) si din aceasta cauza momentan le "sudez" pe cablaj de test.
Am pus cateva poze la data respectiva aici: http://www.acvariu.ro/forum/posts/list/20/40777.page
Oricum o sa-l demontez sa-i scot oled-ul, regleta cu care curat geamurile se agata mereu de el, si oricum nu este util.
Si o sa revin cu o poza din interior.
Atasat sunt doua foldere ce contin sursele si binarele ce pot fi incarcate pe un ESP32.
Procedura este urmatoarea pentru cine nu doreste sa mai instaleze VisualStudioCode/platformIO:

1. Se instaleaza "esp32 flash_download_tool": https://www.espressif.com/sites/default/files/tools/flash_download_tool_v3.8.7.zip
2. Se conecteaza ESP32 la calculator si se noteaza portul COMx cu care este vazut de sistem.
3. Se lanseaza flash_download_tool si se selecteaza:
ChipType: ESP32
WorkMode: develop

4. Se selecteaza in aceasta ordine binarele (din folder-ul aquaLamp-firmware) si se scriu in dreapa (dupa caracterul @) adresele corespunzatoare:
bootloader_dio_40m.bin @ 0x1000
partitions.bin @ 0x8000
boot_app0.bin @ 0xe000
firmware.bin @ 0x10000

SPI SPEED: 40Mhz
SPI MODE: DIO
FLASH SIZE: 8Mbit
COM: Se selecteaza valoarea portului serial COMx asociat ESP-ului.

5. Start.......se asteapta finalizarea.

6. Se instaleaza pe mobil din app store "ESP Touch: Smart Config for ESP32" si se lanseaza; daca sunt mai multe retele WiFi telefonul trebuie sa fie conectat la reteaua dorita.
7. Se introduce parola retelei si se apasa CONFIRM.
8. Se asteapta pana apare confirmarea si se noteaza IP-ul obtinut: xxx.xxx.xxx.xxx

Daca se intampla sa nu gaseasca ESP-ul, atunci ESP-ul trebuie restartat in timp ce aplicatia cauta ESP-ul.

Gata!!!!
Se lanseaza pagina WEB http://xxx.xxx.xxx.xxx
Parola de acces pentru modificari:
user: admin
pass:esp32


Conectare:
PWM led 0: gpio 32
PWM led 1: gpio 33
PWM led 2: gpio 25
PWM led 3: gpio 26
PWM led 4: gpio 27

Senzor dallas: gpio14
Pwm FAN: gpio 13

Momentan controlul FAN-ului este hardcodat astfel:
- temperatura radiatorului < 35 grade, PWM=0%
- temperatura radiatorului >= 50 grade, PWM=100%
- altfel se regleaza PWM-ul intre 25% si 100% in functie de temperatura.

Eu zic sa-l incercati, o sa va placa cu siguranta!

Pentru controlul luminii eu vad asa:
(cateva poze cu lampa despre care vorbesc: http://www.acvariu.ro/forum/posts/list/20/40777.page)
1. Controller ESP32.
2. Software de baza:https://github.com/CelliesProjects/aquacontrol32
- eu l-am modificat astfel incat sa comande in PWM un cooler doar cand este nevoie, in functie de temperatura.
- o alta modificare o sa fie sa-i elimin partea de afisaj, nu-i vad rostul.
- o sa mai elimin si partea de SmartConfig cu un ConfigManager care functioneaza cam asa:
La pornire, in mod normal, chip-ul ESP32 WiFi se conecteaza la ultima retea cunoscuta.
Daca nu reuseste trece in modul "access point". Cu un telefon ne conectam la acel SSID si ni se deschide o pagina in care setam reteaua/parola dorita.
ESP-ul se restarteaza si daca reuseste sa se conecteze la retea trece in modul "station". Acum pagina de configurare a lampii este accesbilila dupa ip/hostname.

3. Senzor de temperatura pentru controlul cooler-ului: ds18b20
4. Cooler: eu am ales unul de la Arctic pe 4 fire (PWM si speed feedback); atentie ca nu toate opresc motorul la PWM=0, unele au o turatie de idle.
5. Drivere led, acum aici incepe sa difere in functie de drivere(eu am acum LDD-uri ce accepta direct pwm). Pentru 0-10V eu as merge asa:
- modulul PWM > 10V.
- un convertor de nivel 3.3V 5V (@adiio, buna observatie) pentru a ataca convertorul PWM > 10V.

Eu o sa postez firmware-ul/sursele modificate cu informatiile necesare (pini PWM, cooler, ds18b20, hostname).
Pentru a-l "arde" in chip(binarul), fara arduino, se poate utiliza "ESP32 Flash Download Tool".
Cred ca suntem destui aici care pot ajuta pe partea de software!!
Asa este, ESP32 are doua canale DAC, scoate o tensiune "curata" intre 0-3.3V, insa tot este necesar un operational pentru a ridica tensiunea in 10V si a asigura o impedanta mica la iesire. Dar are dacat doua canale DAC!


Mie mi se pare cam "demodat", butoane, LCD, munca la carcasa, etc...
Un ESP32 costa 1/10 si nu se compara:
- 34 × programmable GPIOs
- 12-bit SAR ADC up to 18 channels
- 2 × 8-bit DAC
- 10 × touch sensors
- 4 × SPI
- 2 × I²C
- 3 × UART
- LED PWM up to 16 channels
- 802.11 b/g/n, up to 150 Mbps

Zic si eu!


Da, micut, de retinut!
Multumesc pentru link-edit, cred ca am pus si poze cam mari si a stricat pagina...o sa fiu mai atent!
Cam asa a iesit momentan(mai este la printat capacul), este configurat ca intervalul [30mm, 300mm] sa reprezinte [0, 100%], o sa-l configurez dupa ce se termina apa in vasul ATO.
Am pus si un filmulet cu dashboard-ul NodeRed:
[youtube]https://youtu.be/lFLPQySZvSs[/youtube]

Lucian: am editat eu link-ul de youtube
Si senzorul de nivel pentru ATO RODI.
Schema este simpla, o sursa 24V > 5V, un pro mini 3.3v, un senzor laser si o placuta UART TTL la RS485.
Am atasat si SW-ul (ca sursa de inspiratie), ideea este ca raporteaza nivelul in procente (0-100%).
Revin cu un filmulet dupa ce-i fac o cutie si-l intregrez in dashboard-ul NodeRed.
Da, schema este clasica: un integrator (filtru trece jos RC) urmat de un buffer (operational), deoarece integratorul are nevoie de o sarcina cu o impedanta f. mare asigurata de intrarea amplificatorului operational.
O alta solutie fara integrator este un DAC (0-5V) urmat de un buffer cu gain=2 pentru a obtine 0-10V. Aici nu este nevoie de osciloscop.
Un DAC utilizat de mine la un aparat de sudura (pentru a inlocui potentiometrul analogic) a fost MCP4725 pentru care exista suport in Arduino. Dar tot ai nevoie de un operational + cablaj(DAC-ul este SMD SOT23).
Pert total o sa fie mai scum decat unul gata facut, eu raman la concluzia ca acel convertor PWM to 10V este mai ok!

Da , oricare din X9C102/103/104/503 trebuie sa reziste la maximum la 16V:

ABSOLUTE MAXIMUM RATINGS*
Temperature under Bias .................. –65°C to +135°C
Storage Temperature ....................... –65°C to +150°C
Voltage on CS, INC, U/D and VCC
with Respect to VSS ............................... –1V to +7V
Voltage on VH and VL
Referenced to VSS ................................. –8V to +8V
?V = |VH–VL|

Parametrii recomandati sunt:
RW Wiper Resistence 40 100 ? Max. Wiper Current ±1mA
VH VH Terminal Voltage –5 +5 V
VL VL Terminal Voltage –5 +5 V

Ceea ce acopera necesarul driverul Osram si este si mai ieftin!
Lucian wrote:
gmanea wrote:Nu cred ca merge cu pot digital deoarece cele mai uzuale nu ajung pana la 10V.
Cel mai sigur ar fi un convertor PWM->0...10V, cam asa:
https://www.aliexpress.com/item/4001197035519.html
Il gasesti si pe la noi dar cu ~40 ron.

Dupa ce termin treaba cu noul capac o sa testez si convertorul ala.
La potentiometrul digital nu ma intereseza tensiunea, imi trebuie potentiometrul propriu-zis. Am testat droselele Osram dimabile si daca se pune doar un potentiometru chior pe intrarea de comanda functioneaza bine mersi...

Trebuie sa masori pe potentiometrul cu care ai testat droserul respectiv tensiunea la borne, cel mai probabil o sa gasesti 10V. Daca o sa pui in locul lui unul digital, se va praji daca nu are in specificatii aceasta tensiune.
Uite pentru X9C102/103/104/503:
"VH and VL
The high (VH) and low (VL) terminals of the X9C102/103/
104/503 are equivalent to the fixed terminals of a
mechanical potentiometer. The minimum voltage is –5V
and the maximum is +5V. It should be noted that the
terminology of VL and VH references the relative position
of the terminal in relation to wiper movement direction
selected by the U/D input and not the voltage potential on
the terminal.

VW
VW is the wiper terminal, equivalent to the movable
terminal of a mechanical potentiometer. The position
of the wiper within the array is determined by the
control inputs. The wiper terminal series resistance is
typically 40?".

Nu cred ca merge cu pot digital deoarece cele mai uzuale nu ajung pana la 10V.
Cel mai sigur ar fi un convertor PWM->0...10V, cam asa:
https://www.aliexpress.com/item/4001197035519.html
Il gasesti si pe la noi dar cu ~40 ron.


adiio wrote:@gmanea
Imi place lampa, tu ai ceva finalizat, eu nici macar acvariu functional nu am. Chiar ai folosit ESP32?
Stiu ca exista o gramada de proiecte si proiectele out there facute de x,y sau z...
Ce am facut eu este in faza de test/proiect, este clar ca LED-uri prinse cu bride/soricei pe o bucata de aluminiu nu este o solutie ok pentru functionarea lor pe termen lung, am vrut doar sa testez ca functioneaza ce am citit initial.
Nici macar MOS module alea nu-s ok pentru ca-s prost concepute, sunt cu IRF520, dar chinezul zice ca merg max 5A, cu siguranta datorita faptului ca nu au radiatoare, nici cablajul nu este foarte generos.
"The output load current: < 5A (more than 1A need to add heat sink)"
Deci cand am sa vreau sa-mi fac o lampa trebuie sa-mi fac singur si partea de "MOS module" cu radiator si cablaj calumea.

@Lucian
Sa stii ca ma gandeam la drosele tale dimabile, 0-10V... iti spune ceva? Macar pentru tine s-ar potrivi montajul, nu ai nevoie de curent mare, tuburile se alimenteaza din drosel.


Da, proiectul aquacontrol a fost intial pentru esp8266, insa ulterior a fost trecut la esp32, care este net superior dpdv al IO-urilor speciale (I2C, PWN, serial, etc...) ia OS-ul FreeRTOS aste altceva decat Arduino!
(ce am pus in poza este chiar esp32-ul ce are un oled 0.96'' incorporat; nu am tinut cont de fenomenul de burnout al oled-ului si s-a dus putin din luminozitate; am in plan sa-l elimin, nu-i vad utilitatea deloc si ma incurca teribil cand curat geamurile, o sa-l inlocuiesc cu unul intern fara oled).

Da, multa munca la o lampa!!
Eu am pornit de la un soft gata facut:
https://github.com/CelliesProjects/aquacontrol32

Are cam tot ce-i trebuie unei lampi de acvariu, nu este peste MQTT, este peste http.
Am facut cateva modificari sa-mi controleze coolerul doar cand depaseste o anumita temperatura si am pus LDD1000H pentru led-uri.
LED-urile, reflectoarele si lentilele sunt de pe ali:
https://www.aliexpress.com/item/32633604879.html?spm=a2g0s.9042311.0.0.27424c4d2JtcGC
https://www.aliexpress.com/item/32418803147.html?spm=a2g0s.9042311.0.0.27424c4d2JtcGC

Cam asa arata momentan monitorizarea in Node Red a PH-ului, temperaturii si a modulului ATO.
Parametrii sunt:

Generali:
mberror = eroare raportata de modbus master (probleme cu echipamentele slave)
ph = PH-ul curent
voltage = tensiunea sondei PH amplificata de ADC, utila in recalibrarea sondei.
temp: temperatura curenta

ATO:
pump = 1 pompa ON, 0 pompa OFF, util in analiza cantitatii de apa evaporata pentru a estima cumva o eventuala dozare de ALK.
tara = valoarea in mm pana la luciul apei, setabil via 485; se salveaza automat in eeprom-ul ato.
speed = valoarea setata in RPM a pompei, setabil via 485; se salveaza automat in eeprom-ul ato.
autotara = 1 setarea automata a valorii "tara" dupa expirarea parametrului startup_delay; 0 tara se seteaza manual via 485.
range = valoarea curenta in mm pana la luciul apei
atostatus = 0 OK, altfel diferite erori (ex: pompa a functionat pana la expirarea parametrului timeout si nivelul nu a fost atins, probabil din lipsa apa in bazinul ATO).
vlstatus = 0 OK, altfel erori raportate de senzorul laser de masurare a distantei.
error = erori modbus raportate de slave.
timeout = timpul permis in care pompa trebuie sa aduca nivelul in bazin conform cu tara; daca expira acest interval se genereaza alarma, pompa este oprita; alarma se sterge automat daca nivelul apei este la tara sau se intervine manual.
threshold = valoarea permisa pentru rnage in intervalul [tara - threshold, tara + threshold]; nu prea este necesar pentru senzorul de distanta deoarece are precizie ~1mm, la mine cel putin nu sunt valuri in zona in care masoara senzorul.
interval: o valoare in secunde la care se fac masuratorile de distanta.
startup_delay = o valoare in secunde de la boot in care nu se actioneaza pompa; este utila la penele de curent sau interventii, cand trebuie sa astepte ca nivelul in sump sa se stabilizeze.
suspended = o valoare in minute, pentru care pompa este dezactivata. Foarte utila cand facem curatenie/schimbam apa deoarece dezactiveaza pompa de ATO pentru in interval prestabilit(setabil via 485). Dupa acest interval mecanismul de monitorizare a nivelului se activeaza automat.

Am atasat sursele (PlatformIO) ca sursa de inspiratie. Eu am utilizat un Arduino nano, dar cu noul bootloader pentru a beneficia de WDT (watchdog timer), in caz ca softul nu merge sa-i dea un reset!!
La mine merge din febroarie, pana acum nici o alarma!
Si convertorul 485 - mqtt
merge?
Cred ca l-am pus:
Am facut si un filmulet, sa vad cum il pun!
Teoretic senzorul are lentile pe led-urile interne. Dar ca sa dorm linistit am pus o sticla subtire de la un display oled 0.96'' spart(se desface cu o lama pe jumatate).
Ca modul este independent, pe 485 doar raporteaza datele si poate sa primesca parametrii de configurare pe care sa-i salveze in eeprom.

Da, si eu intentionez la fel, totul cablat la interior. Mai jos sunt cateva detalii, poate ca sursa de inspiratie:
- comunicatie interna pe 485 modbus intre modulele: ATO (nivel sump + nivel bazin ATO), Temperatura, PH si pompe.
- aceste module comunica cu un modul master 485 ce comunica peste WiFi(este un esp 8266 D1 mini) cu un server NodeRed peste MQTT(instalat pe un pi 4).
- server-ul NodeRed transmite mesaje de alarma MQTT catre o tableta (cu android) care avertizeaza sonor si vizual(conectata peste bluetooth cu un difuzor/lampa din tavan).

Ce este foarte important, fiecare modul este independent, managerul central are doar rol de configurare, monitorizare si alarmare.

Modulul ATO are urmatoarea arhitectura:
- controller ProMini 3.3V
- masurare nivel apa sump prin metoda ToF: VL53L0X
- pompa DIY cu Nema17 si stepper "super silent" tmc2209, furtun silicon 4mm.
- logica integrata pentru controlul distantei pana la luciul apei.
Ca parametrii de intrare primiti peste 485(la instalarea initiala):
- tara (valoarea de referinta a distantei pana la suprafata apei; in mod normal se face o singura data, cand se stabileste nivelul dorit in compartimentul pompei).
- threshold-ul dorit (din experienta nu este necesar, rezolutia este de 1mm).
- viteza motorului(cam 3 RPM sunt suficiente, dar depinde de bazin).
- timeout (daca nivelul nu ajunge la valoarea prestabilita intr-un interval de timp se genereaza alarma).

Cam aceeasi tehnologie este utlizata si pentru a masura nivelul din bazinul ATO(apa dulce).
Utilizez aceasta componenta pentru:
- a detecta daca apa care ajunge in sump este egala cu cea scoasa din bazinul ATO(alarma altfel, poate s-a spart un furtun...).
- alarma ca apa dulce este pe terminate.

Modulul de temperatura:
- Un incalzitor normal, setat putin peste valoarea curenta.
- Incalzitorul este alimentat printr-un releu SSR controlat de un arduino ProMini.
- Un senzor Dallas ds18b20 cu carcasa de inox.
Functionarea este urmatoarea: in functie de temperatura programata(putin sub valoarea setata mecanic) se genereaza un semnal PWM ce controleaza releul SSR ce alimenteaza incalzitorul.
In cazul in care releul SSR nu mai functioneaza, temperatura creste pana la valoarea setata mecanic din incalzitor si se genereaza alarma.

Pentru PH am utilizat o sonda Dupla, un amplificator "china" si un convertor ADC ADS1115 + ProMini 3.3V.
Aici este nevoie de un modul de alimentare cu izolatie astfel incat sa se elimine bucla de masa si a nu influenta masuratoarea sondei PH.

Pompele (skimmer, valuri, main) sunt comandate cu 0-5V cu ajutorul unui DAC si un ProMini.
Pentru a le putea opri o sa utilizez un FET (inca nu am aceasta dezvoltare, urmeaza).

Sunt in desfasurare multe din activitatile de mai sus, dar ce pot sa afirm cu certitudine(testate):
- masurarea nivelului prin metoda "time of flight" este foarte precisa.
- pompa DIY cu Nema17 si stepper tmc2209 este extrem de silentioasa.
- integrarea cu un home assistant/google/node red, etc.. este exceptionala, ofera foarte multe posibilitati de management;
de exemplu, eu culeg la 5 secunde temperatura si PH-ul masurate de senzori; daca se depaseste o valoare dorita se face "publish" pe o adresa MQTT o alarma; la adresa respectiva a facut "subscribe"
tableta care genereaza o notificare (si pe boxa bluetooth).

Daca este cineva interesat....revin!
 
Forum Index » Profile for gmanea » Messages posted by gmanea
Go to:   
Powered by JForum 2.3.4 © 2012 JForum Team • Maintained by Andowson.com