- Radeon RX 9060 XT: Ezt aztán jól meghúzták
- Atomenergiával dübörögnek tovább az Amazon adatközpontok, SMR-ek is jöhetnek
- Macron betiltatná az EU-ban a közösségi médiát a 15 év alattiaknak
- Az NVIDIA ipari AI-felhőt épít a németeknek, együtt az OpenAI és a Google
- Két új Ryzen közül választhatnak a kézikonzolok
-
PROHARDVER!
Arduino hardverrel és szoftverrel foglakozó téma. Minden mikrovezérlő ami arduinoval programozható, és minden arduino program, board, és hardverrel kapcsolatos kérdések helye.
Új hozzászólás Aktív témák
-
Postas99
senior tag
-
Tankblock
aktív tag
válasz
JozsBiker #22587 üzenetére
Szia,
ha egyedi kell megtervezem magamnak, ez neked meg nem segít....
vegyél eredetit, a klónokkal több gond is lehet
- nem eredeti a AVR chip ez alegnagyobb probléma
- nem elégséges a tápfeszültség ellátás és az olcsó LDO megkotlik
- vacakol az USB to serial converterHonnan : akár innen is lényeg heredeti legyen
-
JozsBiker
aktív tag
válasz
JozsBiker #22586 üzenetére
Bocs, lehet kicsit furán fogalmaztam. Tulajdonképpen azt kérdezném, hogy ahova tuti megoldás kell oda szerintetek honnan célszerű Nano -t beszerezni. Még sosem volt fizetős Arduino -s projektem és mivel 60 felé közeledem nem is valószínű hogy sok lesz, de most ezt a harangozás vezérlős témát szeretném végre lezárni. Találtam Nano -t a Conrad -nál 8 e Ft -ért, a Techfun -nál 10 e felett eredetit, érdemes szerintetek annyit rááldozni vagy egy alis klón is megbízhatóan elműködget ? Köszi.
-
Postas99
senior tag
válasz
JozsBiker #22574 üzenetére
Sziasztok!
Megérkezett a mini szivattyú motor. [Innen] Az adatlapja szerint Max 132mA az áramfelvétele, 3,7 V-on, Max 5V feszültségig lehet használni, de 3.0V esetén is működik, ezeket viszont nem ellenőzitem le működés közben.
A kérdésem az lenne hogy ESP32-vel vezérelve a szivattyút mit tegyek be vezérlésnek, annyi mindent olvastam, hogy feleslegesen nem akarok össze vissza vásárolgatni.
IRF520 vagy valami más, ugye a vezérlő lábat nem akarom kinyírni. De nem kell őrült áramnak sem folynia.Előre is köszönöm a segítségeteket.
-
Tankblock
aktív tag
válasz
JozsBiker #22568 üzenetére
A feszstab felett van egy dióda, arra mérjél rá, hogy nem e lett e zárlatos....
HA egyszerre hajtanád USB ill külső feszültségforrásról akkor azt NE tedd. Ezen kínai klónok hallnak....Ha szerencséd van csak a Schotky dióda ment örök mezőre, és könnyen cserélhető,
ha nincs akkor a CH340 Chip is elbúcsúzott és azért nem látod PCről.ISR Portról még megpróbálhatod, ha van másik Arduino, vagy programozó, természetesen miután leszedted az elhalálozott alkatrészeket.
-
Undoroid
őstag
válasz
JozsBiker #22566 üzenetére
Még lenne két ötletem, ha még elérhető a "rossz" NANO!
1. A kész szerkezetben perforált próbapanelt látok, ahová a NANO-t is berakod...annak a hátoldalán nincs valami gixer? Ha túlmelegíted a forrszemeket, akkor azok képesek leválni a hordozóról és mozgatás közben hibát is okozhatnak! Látszólag minden rendben van, de egy kicsi mozgás és...főleg, ha a beforrasztott aljzat, több darabból áll! Esetleg a beszerelés közben nem került bele valami fémforgács a lábak közé?
2. A rossz NANO-t meg kellene próbálni a "Vin"-oldalról megtáplálni, de úgy, hogy akár közvetlenül rá kellene forrasztanod egy 100nF-os, kerámiakondit a paneljára! Ha van működő, másik NANO-d, akkor mindkettőn megnézném az üresjárati áramfelvételét!
Szerintem ez a kicsi különbség az alsó részen leginkább a különböző portok miatti tervezés eredménye lehet...esetleg klón az egyik...vagy rossz az adatkábeled!
-
válasz
JozsBiker #22562 üzenetére
Egy ilyen kimenetet nem szabad lebegve hagyni. Boot közben ugyan hi-z módban vannak a kimenetek, de bármilyen zavart össze tud szedni a levegőből is a vezetéken át.
De a SETUP 5. sorában lehúzatom LOW -ba, tehát túl sokat nem tud lebegni. De köszi az észrevételt.
Dehogynem, a bootloader legalább 1mp-el késlelteti a program indulását onnantól, hogy áram alá került az eszköz.
Még mindig nem látom, hogy mi okozhatta a túlzott áramfelvételt. Vagy egy forrasztási hiba, vagy a behelyezéskor esetleg rossz helyre került vezeték okozta rövidzárlatra gyanakszom. 🤔
Én se emlékszem, hogy statikus behatás miatt tönkrement volna egy AVR nálam. Gondolom áramtalanítás után cserélted a boardokat az áramkörben.
Mégis csak egy fordított behelyezésre gyanakszom, mert ugye ha kizárunk minden lehetséges magyarázatot, akkor marad a lehetetlen.
-
Undoroid
őstag
válasz
JozsBiker #22559 üzenetére
Igen, így már (ismerve a vezérlésed működését) valóban felesleges lehet a háttérakku!
A két modul különbsége sokat segített volna...itt nem látod a két különböző NANO-t?
Az a tápegység jónak tűnik! Egy átlagos, kapcsoló üzemű táp lehet. Gyanítom, hogy egyformát (NANO) szerettél volna vásárolni, ezért lehet, hogy volt vele valami "furcsaság" amitől az a biztosíték megszólalhatott...Nem túl régen Én is találkoztam egy furcsasággal (ahogyan nyilván mások is) amit észrevettem még beüzemelés és tesztelés előtt!
" Nincs túl bonyolítva. " Nincs túl bonyolítva, de akkor mi okozza a helytelen működést? Elsőre a betápra gondoltam, mert nem a Vin- bemenetre csatlakoztál, de ez - itt nem számít.
Várjuk meg mások észrevételeit is! Hátha másnak feltűnt valami!
-
Undoroid
őstag
válasz
JozsBiker #22544 üzenetére
Szia!
" Az kizárható hogy beüzemelés óta nem volt kikapcs-bekapcs, mert a faluban rendszeresek az áramszünetek. " Pont ezért a kalapsín és az SSR közötti részre betennék valami egyszerűbb helyi energiaforrást (18650 alapú) amivel az áramszünet okozta kimaradásokat/meghibásodásokat valamennyire csökkenteni lehetne és ezzel párhuzamosan a GSM-modul küldene egy hibaüzenetet az illetékeseknek. Nem sokat segítene az az akku, mert nyilván a szerkezet többi része nem fog menni, de legalább valameddig életben tartaná a vezérlést.
" ránézésre volt némi eltérés a két modulon " Megtennéd, hogy lefotóznád őket?
A lecserélt biztosíték "C" vagy "B" jelölésű?
A teljes rajz engem is érdekelne! A harangot egy pneumatikus hengerrel és egy egyszerű kompresszorral mozgatod egy egymágneses 3/2 (vagy 5/2) szeleppel?Egy másik kérdés:
" harangozás vezérlés távolról, sms üzenetekkel " Ezt nem bonyolítottad meg egy kicsit? Ha jól gondolom, akkor a harangozások (fél)óránként szokták követni egymást. Minden 'egész' órában az időpontnak megfelelő számú kongatás és minden 'fél' órában egy kongatás...miért kell ezt SmS-el indítani? Egy óramodul (RTC?) és annak megfelelően menne minden +egy kézi vezérlés, ha áramszünet van...vagy ebben az esetben másképpen kell működtetni a dolgokat?
-
válasz
JozsBiker #22546 üzenetére
Lehet olyan hogy két NANO -nak eltérő ?
Nem tudom, egy fényképet szívesen megnéznék a két modulról. Illetve egy rajzot a teljes áramkörről.
Abból kiindulva, hogy a két modul máshogy viselkedik programozáskor, bármi is lehet.A tűsort is lehet fejjel lefelé beforrasztani, én már jártam úgy, igaz RasPi zero-val.
-
válasz
JozsBiker #22544 üzenetére
Hú b*szki
Triviális kérdés: nem dugtad fordítva a lapot az eredeti helyére? 😅 Nekem ez tűnik a legvalószínűbbnek. 🤔
A lábkiosztás egyezik?
Nem ázott be a doboz, nem költözött bele vmi állat ami a mozgatás hatására zárlatot okozott?
A régi modult visszatetted és működik?
-
JozsBiker
aktív tag
válasz
JozsBiker #22251 üzenetére
Találtam megoldást a villogtatásra ennek az oldalnak a végén. AI pedig segített hogyan lehet ki-be kapcsolgatni ( a 'flashing' állítgatásával ):
const int LED_PIN = 13;
volatile boolean flashing = true; // A LED villogás állapotát jelző változó
void setup() {
pinMode(LED_PIN, OUTPUT); // LED láb beállítása kimenetnek
// Timer beállítása a villogtatáshoz
cli(); // Megszakítások tiltása
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 0;
OCR1A = 31250; // 1 másodperc, 16 MHz-es órajel és 256-os osztó esetén
TCCR1B |= (1 << WGM12); // CTC mód beállítása
TCCR1B |= (1 << CS12) | (1 << CS10); // 256-os osztó beállítása
TIMSK1 |= (1 << OCIE1A); // Timer 1 megszakítás engedélyezése
sei(); // Megszakítások engedélyezése
}
void loop() {
// Itt a fő programciklus, LED villogtatása stb.
}
// Timer 1 megszakítás kezelése
ISR(TIMER1_COMPA_vect) {
if (flashing) {
digitalWrite(LED_PIN, !digitalRead(LED_PIN)); // LED állapotának váltása
}
} -
-
-
JozsBiker
aktív tag
válasz
JozsBiker #22171 üzenetére
Küzdök az IDE 2.3.2 -vel. A napokban tettem fel, azóta háromszor indítottam el, egyik alkalommal sem bírta 10 percnél tovább, Windows kékhalál jött. Volt hogy a háttérben futott és úgy meredt le a gép, majd kék üzenet után újraindult. Fent van egy régebbi IDE is, de épp most írtátok hogy akár több is fent lehet. Kerestem neten megoldást, de nem találtam. Pedig tetszene tulajdonképpen, főleg a színezés, és hogy nagyon gyorsan fordít és tölt.
-
JozsBiker
aktív tag
válasz
JozsBiker #22171 üzenetére
Bocs, az utóbbit megtaláltam nagynehezen. Még a bal oldali oszlopot ( Activity Bar ? ) kellene eltüntetni és teljes lenne a boldogság :-).
-
-
#99235328
törölt tag
válasz
JozsBiker #21534 üzenetére
Nekem sikerült anno a Hestore-ról olyan stm32f103 mcu-val szerelt scope kitet venni, ami valami kínai klón kontrollerrel volt szerelve és nem is a hirdetett dso-138 volt még a firmware sem.
Persze nem működött induláskor kapásból, kaptam 1 hónap után egy másik ugyanilyen klón-t.
A kijelzőjét használom a többi része valami doboz alján pihen.más:
Adott egy STM32F401CCU, aminek a pinjeiről szeretnék egy i2c 1.3" oled kijelzőt és egy másik pinről egy i2c hőmérséklet szenzort hajtani.
Azért a pinekről, mert az a tervem, hogy akku merülés esetén ezeket lekapcsolom, a kontroller pedig sleep-be megy alkalmanként feléledve és felvillantva egy üzenetet a kijelzőn, majd kicsit később sleep újra.Ezen doksi 58-as oldala szerint, ha jól értelmezem, akkor 25mA-el (de összesen max 160mA-el) terhelhetőek a pin-ek. Ha beleférek akkor direktben meghajthatnék 2db pinről oled+szenzor párost?
-
ViZion
félisten
válasz
JozsBiker #21532 üzenetére
Szia! Köszönjük. Szerintem akik itt olvasgatnak, azok ismerik ezt a kínai khmmm... minőséget. Ahogy itt is és az okosotthon topikban is elhangzott sokszor, a kínaiak azt írnak rá, amit a vevő (nem a végfelhasználó, hanem a nagyker, importőr, etc..) kér.
Szal. lehetne a relék, szenzorok, okos kapcsolók nagyon nagy részét is ehhez pattintani, a szitu ugyan az. Pl. konnektoros/dugvillás okosrelé, 20 A terhelhetőség, vagy a sokat emlegetett Wemos klónok, stb... egy kalap. Amúgy nekem is Fotek klón van, elvi 25A, eszembe nem jutna megküldeni annyival. Keringetőt kapcsol, max 65 W, de ált. a 40 W állásban használom (lehet nem ezek a pontos értékek, nem emléXem).
Ohh, és a kínai TV okosítókon backdoor is van, pár hete linkeltem valahol. -
-
Undoroid
őstag
válasz
JozsBiker #21498 üzenetére
Szia!
Igen, ez a kérdés rendszeresen előfordult már itt! Többek között már Én is rákérdeztem erre!
Viszont ennek ellenére voltam olyan "tehetséges" hogy egy hosszú műszak és egy késő esti szerelés közben -fáradtan- sikeresen hazavágtam a 6. pint az UNO-n. Rettentő dühös voltam magamra, hogy mégis miért kellett ilyen feltételek mellett mégis szerelnem? Ez volt az egyetlen ilyen lapom. Azóta áttértem a NANO-ra és az UNO pedig megmaradt próbára... Kezdő voltam még ebben a témában (még most is az vagyok) és így elfogadtam ezt a minimális "védelmet"!
-
biker
nagyúr
válasz
JozsBiker #21493 üzenetére
De JÓ! direkt ilyen az arduino uno, és minden uno ilyen, és minden hozzá kaphato szendvicspanel ilyen. Én is gyártatok rá panelt, figyelni kell erre
2db 8-as sort kell betenni, te meg egy 17-essel próbálkozol, ami nem fog menni!
a két darab 8-as sor közt nem 2RM hanem 1RM van
Lásd itt, jobb és bal oldalt más a pinsor osztása -
Postas99
senior tag
válasz
JozsBiker #21409 üzenetére
Ez egyszerű mint a faék.
Több megoldás is leheséges1, Kétoldalú puha ragasztó csík. Az tart de ha kell eltávolítható
2, Mi lenne ha [------] a nyákot betolnád egy sínbe? illusztrálni próbáltam
3, Van forrasztható furat rajta, adja magát hogy hosszabb beforrasztott tüskékkel egy bedugaszolós megoldásba bele tudnád tenni.A többin még gondolkodom
-
-
Tankblock
aktív tag
válasz
JozsBiker #21123 üzenetére
Akkor végképp felejtsd el a kínai kék relét amit írtál....
OMRON gyárt jó reléket, meg hozzá kalapsínre szerelhető tartót. Ha egy gyártósort elbír akkor ezt is. Halálozás esetén kikapod a relét és teszed bele a következőt, se forrasztani se várni nem kell...Ha full iparit szeretnél akkor meg 24V annyi lehetőség van.
-
Tankblock
aktív tag
válasz
JozsBiker #21119 üzenetére
Szia
Mit szeretnél vele kapcsolni?
Klasszikus kínai kék relé, max addig amíg a prototípussal kísérletezel....
Van kalap sínre rakható relé tartó, hozzá akár 5V relé vagy SSR relé is. Ipari minőség. Plusz egy dióda...Én a vezérlést is ezt is leválasztanám egy optokapuval,
-
Wolfram
aktív tag
válasz
JozsBiker #21051 üzenetére
Szia,
Külső doboz: falon kívüli kötődoboz [link] (a Gao/Obo félpuha műanyagból van, jól vágható)
Belső szerelésnél fém csavarok és anyák M2-től felfelé, távtartók, pl.: [link] , [link]
Ha nem akarsz vagy nem tudsz mindent odacsavarozni, jól jön a forró ragasztó is, pl.: [link]Nem látom pontosan miről van szó, de a 230-as részt valószínűleg külön dobozba raknám.
-
Janos250
őstag
válasz
JozsBiker #21051 üzenetére
Én 3D nyomtatóval szoktam nyomtatni dobozt, amiben mindennek megvan a helye, a rögzítéshez szüksége stiftek, lyukak, stb. Persze, ha nincs 3D nyomtatód, akkor ez nem megy.
Arra mindenképp figyelj, hogy a kisfeszültségű rész, és a 230 stabilan, biztonságosan legyen egymástól elválasztva! Akkor se legyen baj, ha történetes beleköltözik egy egér, darázs, stb, és elkezdi rágcsálni a dolgokat! -
válasz
JozsBiker #21051 üzenetére
Nem csináltam, de a körülményektől is függ, hogy hogyan érdemes dobozolni. Ha fűtetlen, szellőzés nélküli helyen van, akkor a nedvesség lehet a legnagyobb probléma. Mivel az esztétikum jelen esetben nem szempont, vegyél egy IP67 védett vízhatlan kötődobozt, azzal nem foghatsz mellé.
-
vargalex
félisten
válasz
JozsBiker #20841 üzenetére
Szia!
Én valami ilyet csináltam anno:
#include <limits.h>
...
unsigned long startTime = millis();
unsigned long elapsedTime;
...
unsigned long currTime = millis();
if (startTime < currTime) {
elapsedTime = currTime - startTime;
}
else {
elapsedTime = ULONG_MAX - startTime + currTime;
}
-
vargalex
félisten
válasz
JozsBiker #20777 üzenetére
Rengeteg routernél is (pl. D-Link DIR-825, Asus RT-AC65P, stb.) is ilyet alkalmaznak, ahogy notebookok esetén is a wifi antennákhoz. Igaz, valóban kicsit véknyabb a vezeték, de más a frekvencia.
-
vargalex
félisten
válasz
JozsBiker #20772 üzenetére
Csak rá kell pattintani. Az egy U.FL csatlakozó.
-
-
-
-
Gergosz2
veterán
válasz
JozsBiker #19090 üzenetére
Nos, nem kell feladni, szoftversen is lehet rajta szűrni:
#include <Arduino.h>
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#define ADC_BUFFER_SIZE 20
#define ADC_PIN A0
#define ADC_OFFSET 512.0f
#define ADC_GAIN 0.0f // be kell állítani
#define RMS_GAIN 0.05f // delta_T/T
volatile uint8_t bufferIterator = 0;
volatile uint16_t ADC_BUFFER[ADC_BUFFER_SIZE];
volatile bool CalcRMS = false;
volatile uint16_t FilterCoeffInv = 5u;
uint16_t ADC_BUFFER_CALC[ADC_BUFFER_SIZE];
float RMS_Current;
unsigned long SerialTimer = 0u;
unsigned long SerialPrintTimeout = 1000;
void setup()
{
//Gergosz2 2023
Serial.begin(51200);
bufferIterator = 0;
SerialTimer = millis();
memset(ADC_BUFFER, (uint16_t)0, ADC_BUFFER_SIZE*sizeof(uint16_t));
setupPWMInterrupt();
}
void loop()
{
if (true == CalcRMS)
{
CalcRMS = false;
memcpy(ADC_BUFFER_CALC, ADC_BUFFER, ADC_BUFFER_SIZE*sizeof(uint16_t));
RMS_Current = 0.0f;
int iterator = 0;
for (iterator = 0; iterator < ADC_BUFFER_SIZE; iterator++)
{
float SI_val = (((float)ADC_BUFFER_CALC[iterator] - ADC_OFFSET)*ADC_GAIN);
RMS_Current = RMS_Current + SI_val*SI_val* RMS_GAIN;
}
RMS_Current = sqrt(RMS_Current);
}
if ((millis() - SerialTimer) > SerialPrintTimeout)
{
SerialTimer = millis();
Serial.println(RMS_Current);
}
}
void setupPWMInterrupt()
{
noInterrupts(); // disable all interrupts
TCCR2A = 0; // set entire TCCR2A register to 0
TCCR2B = 0; // same for TCCR2B
TCNT2 = 0; //initialize counter value to 0
// set compare match register for 1khz increments
OCR2A = 124; // = (16*10^6) / (2*1000*64) - 1 (must be <256)
TCCR2A |= (1 << WGM21); // turn on CTC mode
TCCR2B |= (1 << CS22); // Set CS01 and CS00 bits for 64 prescaler
sbi(TIMSK2, OCIE2A); // enable timer compare interrupt
interrupts(); // enable all interrupts
}
ISR(TIMER2_COMPA_vect)
{
uint16_t prevSample = 0u;
if(bufferIterator == 0u)
{
prevSample = ADC_BUFFER_SIZE - 1u;
}
else
{
prevSample = bufferIterator - 1u;
}
ADC_BUFFER[bufferIterator] = ADC_BUFFER[prevSample] - (uint16_t)(ADC_BUFFER[prevSample]/FilterCoeffInv) + (uint16_t)(analogRead(ADC_PIN)/FilterCoeffInv);
bufferIterator ++;
if (bufferIterator > ( ADC_BUFFER_SIZE - 1u) )
{
CalcRMS = true;
bufferIterator = 0u;
}
}Gaineket ne felejts beírni
-
válasz
JozsBiker #19060 üzenetére
Sima rezisztív fogyasztót csak egy 75 W -os izzót találtam, a műszer szerint 0,3 A -t vesz fel. A szkóp szerint az ACS712 kimenetén a szinusz jel 2,4 - 2,6 V között mozog ( ez mondjuk nem tudom hogyan egyeztethető össze a fenti 0,185mV/A -rel ), bár elég szőrös a jelalak.
0,3 Aeff = 2 * 0,3 * 1,41 = 0,846 Apeak-peak
2,6 - 2,4 = 200 mVpeak-peak / 185 mV/A = 1,08 Apeak-peakHa elég hunyorítva nézed, kijön az.
-
Gergosz2
veterán
válasz
JozsBiker #19050 üzenetére
Ennyit finomítanék a kódon :
#include <Arduino.h>
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#define ADC_BUFFER_SIZE 20
#define ADC_PIN A0
#define ADC_OFFSET 512.0f
#define ADC_GAIN 0.0f // be kell állítani
#define RMS_GAIN 0.05f // delta_T/T
volatile uint8_t bufferIterator = 0;
volatile uint16_t ADC_BUFFER[ADC_BUFFER_SIZE];
volatile bool CalcRMS = false;
uint16_t ADC_BUFFER_CALC[ADC_BUFFER_SIZE];
float RMS_Current;
unsigned long SerialTimer = 0u;
unsigned long SerialPrintTimeout = 1000;
void setup()
{
//Gergosz2 2023
Serial.begin(51200);
setupPWMInterrupt();
bufferIterator = 0;
SerialTimer = millis();
memset(ADC_BUFFER, (uint16_t)0, ADC_BUFFER_SIZE*sizeof(uint16_t));
}
void loop()
{
if (true == CalcRMS)
{
CalcRMS = false;
memcpy(ADC_BUFFER_CALC, ADC_BUFFER, ADC_BUFFER_SIZE*sizeof(uint16_t));
RMS_Current = 0.0f;
int iterator = 0;
for (iterator = 0; iterator < ADC_BUFFER_SIZE; iterator++)
{
float SI_val = (((float)ADC_BUFFER_CALC[iterator] - ADC_OFFSET)*ADC_GAIN);
RMS_Current = RMS_Current + SI_val*SI_val* RMS_GAIN;
}
RMS_Current = sqrt(RMS_Current);
}
if ((millis() - SerialTimer) > SerialPrintTimeout)
{
SerialTimer = millis();
Serial.println(RMS_Current);
}
}
void setupPWMInterrupt()
{
noInterrupts(); // disable all interrupts
TCCR2A = 0; // set entire TCCR2A register to 0
TCCR2B = 0; // same for TCCR2B
TCNT2 = 0; //initialize counter value to 0
// set compare match register for 1khz increments
OCR2A = 124; // = (16*10^6) / (2*1000*64) - 1 (must be <256)
TCCR2A |= (1 << WGM21); // turn on CTC mode
TCCR2B |= (1 << CS22); // Set CS01 and CS00 bits for 64 prescaler
sbi(TIMSK2, OCIE2A); // enable timer compare interrupt
interrupts(); // enable all interrupts
}
ISR(TIMER2_COMPA_vect)
{
ADC_BUFFER[bufferIterator] = analogRead(ADC_PIN);
bufferIterator ++;
if (bufferIterator > ( ADC_BUFFER_SIZE - 1u) )
{
CalcRMS = true;
bufferIterator = 0u;
}
}Láttam hogy van szkópod szóval ezeket így lehetne kalibrálni:
ADC_OFFSET : egyszerűen nulla terheléssel, értsd nincs rajta semmilyen fogyasztó, mekkora feszültség értéket ad vissza a szkóp? Tegyük fel, hogy 2.5V, akkor az ADC_OFFSET értéke (2.5/5)*1023 lesz, ami 512-re jön ki kerekítve.
ADC_GAIN : ha megvan az ADC_OFFSET, akkor ismert terhelésre megkéne nézni mit ad vissza a mérőműszer a kimenetén. Ehhez kéne a szkóp és multiméter is. Célszerű itt egy sima izzót használni, semmi fancy LED dolgot. Tegyük fel hogy az ADC_OFFSET 2.5V lett és mondjuk 2A csúcs folyt izzón amit a multiméterről olvastál le, amire 3V csúcsfeszültséget mértél a szópon. Ilyenkor az ADC_GAIN nem lesz más mint (5/1023)* 2 /(3-2.5).
Ha ezekről adsz képet és vagy mérési eredményt kiszámolom neked.
RMS_GAIN : ehhez nem nyúlj, kivéve ha a megszakítást akarod változtatni.
Az interrupt kezelő rész fontos bele ? Mit csinál tulajdonképpen ?
1kHz mintavételezési időt valósít meg , így gyakorlatilag 20 mintát vesz 1 hálózati periódusból. -
Gergosz2
veterán
válasz
JozsBiker #19015 üzenetére
Ahogy fentebb is írtam : Ez a kód most nullát fog mindenre visszaadni amígy ADC_GAIN -t nem állítod be.
Szinuszos áram mérésekor a ZMCT103C analóg kimenetén a bemenő jelalaknak megfelelő feszültség mérhető, aminek a nullátmenete kb. a fél tápfeszültségnél azaz 2,5 V -nál van. Az amplitudó arányos a mért áram amplitudójával ill. lehet változtatni a trimmerrel.
Ez tiszta sor, de mennyi az amplitúdó? 5A? Ha annyi akkor a
#define ADC_GAIN 0.0f
sort írd át erre :
#define ADC_GAIN 0.009765625000000f // 5/512
-
Gergosz2
veterán
válasz
JozsBiker #18965 üzenetére
Na én valami ilyesmivel próbálkoznék. Boarodon nem próbáltam ki, csak gyorsan összedobtam. Amit bekéne állítani az a
ADC_GAIN
ésADC_OFFSET
, Utóbbit 512-re tippelem viszont látom, hogy a modulon van valami potméter is így tipper a gain az állítható.
Ez a kód most nullát fog mindenre visszaadni amígyADC_GAIN
-t nem állítod be.#include <Arduino.h>
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#define ADC_BUFFER_SIZE 20
#define ADC_PIN A0
#define ADC_OFFSET 512.0f
#define ADC_GAIN 0.0f // be kell állítani
#define RMS_GAIN 0.05f // delta_T/T
volatile uint8_t bufferIterator = 0;
volatile uint16_t ADC_BUFFER[ADC_BUFFER_SIZE];
uint16_t ADC_BUFFER_CALC[ADC_BUFFER_SIZE];
float RMS_Current;
void setup()
{
//Gergosz2 2023
Serial.begin(51200);
setupPWMInterrupt();
bufferIterator = 0;
memset(ADC_BUFFER, (uint16_t)0, ADC_BUFFER_SIZE*sizeof(uint16_t));
}
void loop()
{
if (0u == bufferIterator)
{
memcpy(ADC_BUFFER_CALC, ADC_BUFFER, ADC_BUFFER_SIZE*sizeof(uint16_t));
RMS_Current = 0.0f;
int iterator = 0;
for (iterator = 0; iterator < ADC_BUFFER_SIZE; iterator++)
{
float SI_val = (((float)ADC_BUFFER_CALC[iterator] - ADC_OFFSET)*ADC_GAIN);
RMS_Current = RMS_Current + SI_val*SI_val* RMS_GAIN;
}
RMS_Current = sqrt(RMS_Current);
Serial.println(RMS_Current);
}
}
void setupPWMInterrupt()
{
noInterrupts(); // disable all interrupts
TCCR2A = 0; // set entire TCCR2A register to 0
TCCR2B = 0; // same for TCCR2B
TCNT2 = 0; //initialize counter value to 0
// set compare match register for 1khz increments
OCR2A = 124; // = (16*10^6) / (2*1000*64) - 1 (must be <256)
TCCR2A |= (1 << WGM21); // turn on CTC mode
TCCR2B |= (1 << CS22); // Set CS01 and CS00 bits for 64 prescaler
sbi(TIMSK2, OCIE2A); // enable timer compare interrupt
interrupts(); // enable all interrupts
}
ISR(TIMER2_COMPA_vect)
{
ADC_BUFFER[bufferIterator] = analogRead(ADC_PIN);
bufferIterator ++;
if (bufferIterator > ( ADC_BUFFER_SIZE - 1u) ) bufferIterator = 0u;
} -
Janos250
őstag
válasz
JozsBiker #19009 üzenetére
Én nem vagyok villanyász, és nem is értek hozzá, de én már az elején elakadtam. Az elveknél!
Ha egy trafó primer árama megy keresztül a kütyün, és a szekunderen semmi nincs, akkor rohangál ott áram? De még mennyire! Teljesítmény? Nulla.
Elvi kérdés, hogy akkor milyen értéket akarunk kapni? Nullát, vagy nem nullát. Nem tudom, a lakatfogó ilyen esetben mit mér. Mert ha tisztán ohmikus a terhelés, akkor OK, de ez nem mindig van így. Pl. fúrógép. -
-
-
-
-
válasz
JozsBiker #18965 üzenetére
Én a min-max kiválasztás helyett inkább négyzetes átlagolnám (RMS) a 10 ciklus alatt vételezett adatokat, majd arra alkotnék "tapasztalati tényezőt".
A peak-to-peak értékek nagyon becsapják a mérésed, mert ugyanazt fogja adni akkor is, ha:
- Egy cikluson belül egy-egy mérés idejére leng ki a csúcs (tüske kapcsüzemű tápok esetén)
- Egy cikluson belül teljes szinusz hullám ideje alatt ment a terhelés (ohmikus fogyasztók)Gondolom a lakatfogó is használ valami mozgóátlagot, és emiatt nem egyezik a mérés a tieddel.
-
Janos250
őstag
válasz
JozsBiker #16879 üzenetére
Az ESP32-nek van saját time.h-ja, az jól működik, ahogy weiss is írta.
Itt jobban kirészletezve:
https://lastminuteengineers.com/esp32-ntp-server-date-time-tutorial/Vagy maga a program:
#include <WiFi.h>
#include "time.h"
const char* ssid = "xxxxx";
const char* password = "xxxxxxxx";
const char* ntpServer = "pool.ntp.org";
const long gmtOffset_sec = 3600;
const int daylightOffset_sec = 3600;
void printLocalTime()
{
struct tm timeinfo;
if(!getLocalTime(&timeinfo)){
Serial.println("Failed to obtain time");
return;
}
Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S");
}
void setup()
{
Serial.begin(115200);
//connect to WiFi
Serial.printf("Connecting to %s ", ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println(" CONNECTED");
//init and get the time
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
printLocalTime();
}
void loop()
{
delay(1000);
printLocalTime();
} -
-
Új hozzászólás Aktív témák
Hirdetés
- OTP Bank topic
- Milyen okostelefont vegyek?
- Geri Bátyó: B550 szűk keresztmetszet, de mi és miért?
- Milyen videókártyát?
- HiFi műszaki szemmel - sztereó hangrendszerek
- Vezetékes FEJhallgatók
- Counter-Strike: Global Offensive (CS:GO) / Counter-Strike 2 (CS2)
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- E-roller topik
- Facebook és Messenger
- További aktív témák...
- HP Elitebook 840 G3 laptop (15,6FHD/I5-G8/8GB/256SSD/Magyar/Win11)
- AMD Ryzen 5 5500 - GTX 1080Ti 11Gb - MSI B450 Max
- HP Zbook 15 G3 laptop (15,6FHD/I7-G6/16GB/256SSD/AMD2GB/MagyarVilágítós/Win11)
- Apple iPhone 13 128GB, Kártyafüggetlen, 1 Év Garanciával
- Apple iPhone 13 Pro 128GB, Kártyafüggetlen, 1 Év Garanciával
- Bomba ár! Dell Latitude E6500 - Intel P8600 I 3GB I 160GB I DVDROM I 15,4" WXGA+ I Garancia!
- Beszámítás! Apple Watch SE 2024 44mm Cellular okosóra garanciával hibátlan működéssel
- iKing.Hu - Xiaomi 14 Ultra - Ultra White - Használt, karcmentes
- Xbox Game Pass Ultimate kedvező áron, egyenesen a Microsoft-tól! - AUTOMATA BOLT
- ÁRGARANCIA! Épített KomPhone Ryzen 5 5600X 16/32/64GB RAM RX 7600 8GB GAMER PC termékbeszámítással
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged