Hirdetés
- Apple Watch Sport - ez is csak egy okosóra
- Samsung Galaxy S23 Ultra - non plus ultra
- iPhone topik
- MG ZS EV menetpróba
- Nothing Phone (1) - nem semmi (2)
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- Samsung Galaxy Z Fold5 - toldozás-foldozás
- OnePlus 8T – fazonigazítás
- Redmi Note 13 Pro+ - a fejlődés íve
- Ezek a OnePlus 12 és 12R európai árai
-
Mobilarena
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
-
nagyúr
Ezt meg csak úgy itt hagyom: https://checkio.org
Nem C, de JS és Python feladatokat kell megoldani, közben rengeteget lehet tanulni.
Javascript és sok más oktató anyag egyébként van a https://hu.khanacademy.org/ oldalon. -
JozsBiker
aktív tag
UNO -t és Nano -t használok.
Az első verzióban ezzel próbálkoztam:void getMinMaxValue()
{
int sensorValue; //value read from the sensor
sensorMin = 1024;
sensorMax = 0;
uint32_t start_time = millis();
while((millis()-start_time) < 200)
{
sensorValue = analogRead(CURRENT_SENSOR);
if (sensorValue > sensorMax)
{
sensorMax = sensorValue;
}
if (sensorValue < sensorMin)
{
sensorMin = sensorValue;
}
}
}
Ezt hívtam meg a loop -ból aztán a Min -ből és Max -ból különbséget számoltam és azt szoroztam egy értékkel. Tiszta szinuszos jelalaknál jó is nyilván, csak a fogyasztók jó része nem olyan, ezért szeretném továbbgondolni.
-
LustaDick123
tag
válasz rita7107 #19003 üzenetére
Szia,
Kezdő vagyok én is a témában, csendes olvasója a topiknak. Én pár hónapja hasonló gondban voltam, mint te, annyi a különbség, hogy én elsősorban a gyerekeknek kerestem valami hasznos elfoglaltságot, ami relatíve gyors sikert jelent számukra és látványos.
Mivel nekem nem volt semmiféle eszközöm itthon így adta magát, hogy vásároljak valamiféle „kezdő szettet”, a választásom az Eleggo készlete lett: https://www.elegoo.com/products/elegoo-uno-most-complete-starter-kit
Ebben van egy csomó alaplecke, amivel megtanulható az egyes klasszikus szenzorok kezelése, idővel már kombinálhatóak egymással. A honlapról letölthető a CD-n adott manual is:
https://www.elegoo.com/blogs/arduino-projects/elegoo-uno-r3-project-the-most-complete-starter-kit-tutorial
Nyilván minden megvásárolható külön-külön is és van 1000 hasonló készlet a kínai webshopokban, kezdők számára teljesen jól használható egy ilyen készlet, talán így egyben olcsóbb is (európai amazonról rendelve pár nap alatt itt volt).
Ahogy a többiek is írták, ha elakadás van, akkor a Google a segítség, de sokat ötletet merítettünk az Arduino hivatalos oldaláról is: https://projecthub.arduino.cc/ -
őstag
A 10bit ADC az 5A méréshatárt 1024 részre osztja. Előjelesen 512-re. Az még 0,01A precizitás.
A gond egyértelműen a számolás menetével van. Ahogy korábban írtuk, a pillanatnyi csúcsok értékéből nem következik egyértelműen a folytonos áramfelvétel.
Itt vannak ezek a jelalakok. Egyértelműen belátható, hogy más más fogyasztás (és ezáltal folytonos áram) tartozik a piros-zöld-kék áramokhoz. A peak-to-peak mégis azonos mindnél, így a számolás ugyanazt fogja adni.
Azért írtam az RMS-t, mert az egy közelítő integrált fog adni a görbe alatti területekre (gyakolatilag kicsi hasábok területei lesznek, melyek magassága a pillanatnyi érték, szélessége a mintavételi idő.).
Kódban ez valahogy így nézne ki:
void Measure()
{
int mAmps=0;
uint32_t RMS=0; //ide jó sok nagy szám befuthat
int RMScount=0;
uint32_t start_time = millis();
int sensoValue;
while((millis()-start_time) < 200)
{
sensorValue = analogRead(CURRENT_SENSOR);
RMS+=sensorValue*sensorValue;
RMScount++;
}
RMS = RMS/RMScount;
RMS = sqrt(RMS);
RMS = RMS * tapasztalatitenyezo; //ha esetleg kéne, a szorzót meg lehet állapítani, talán lineáris is elég
}Egyébként ha akarsz rajta pontosítani, akkor érdemes tesztelgetni, hogy az ADC prescaler felgyorsításával javul e a pontosság. Ugyebár akkor a mérés maga pontatlanabb lesz, de a mérések mennyisége több lesz, így jobban közelíti a függvény alatti területet a pici téglalapok átlaga.
Szerk.: A csatolt kép lemaradt[ Szerkesztve ]
Mások számára a kondi fáradós, nekem farad-os...
-
weiss
addikt
válasz razorbenke92 #19006 üzenetére
Írta, hogy próbált másik módszert, és azzal sem volt jó. Személy szerint én kiíratnám a mért értékeket, és kézzel kiszámolnám, hogy egyáltalán jó-e az input.
[ Szerkesztve ]
I did nothing, the pavement was his enemy!
-
őstag
Oké, csak ő most mégis ezt a kódot dobta be, hogy szeretné továbbgondolni, ebben akartam segíteni.
A korábban linkelt másik kód önmagában nem fog működni, csak ha kalibrálja. Abban van egy konstans és egy elsőfokú korrekció, idő alapon integrál (feltételezi, hogy két mérés között más idő telik el).Ha tiszta jelalaknál jól működik, akkor én nem gyanakodnék a nyers adatra, inkább az utófeldolgozás kétséges.
Mások számára a kondi fáradós, nekem farad-os...
-
JozsBiker
aktív tag
válasz razorbenke92 #19008 üzenetére
Köszi hogy foglalkoztok vele!
Én is azt találtam az RMS érték számításra amit a #19006 -ban írtál: négyzetösszegek képzése, osztás a minták számával aztán gyökvonás. Érdekes lenne tudni hogy a kézi mérőműszerek is így számolnak-e :-). Szerintem is a feldolgozással lesz gond, talán valami nüansznyi dologgal szivatom magam. Mindenképp megírom ha jutok valamire. -
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.Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
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;
}[ Szerkesztve ]
Nokia 6030 Hardcore User // I Panic Restaurant by Taito
-
JozsBiker
aktív tag
-
Janos250
őstag
válasz Gergosz2 #19012 üzenetére
Lehet rosszul látom, de az integrálás után nem maradt le az N-el való osztás? Ez így nem másodrendű nyomaték, hanem négyzetösszeg lesz. Bár lehet, rosszul látom.
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Janos250
őstag
válasz Gergosz2 #19012 üzenetére
Közben ránéztem még egyszer, rájöttem, ott van.
Egyébként teszik a megoldásod. Bár van, amit én máshogy szoktam.
A memset és memcopy helyett én be szoktam vinni a deklarációt a loopba, kezdőértékkel. Miért? Tudja a fene, így szoktam.[ Szerkesztve ]
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
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
[ Szerkesztve ]
Nokia 6030 Hardcore User // I Panic Restaurant by Taito
-
JozsBiker
aktív tag
válasz Gergosz2 #19017 üzenetére
Mármint minek az amplitudója ? A ZMCT elvileg 5 A -es, ami - gondolom - azt jelenti, hogy 5A -es áramnál fog a kimenetén 0 -ig ill. 5 V -ig érni a szinusz hullám.
Átírtam a változót, 0 Ampernél folyamatosan 0,88 -at ír, 2,4 A -es terhelésnél (hajszárító ) felváltva ír 0,6 -t és 1,5 -öt.
-
Wolfram
aktív tag
-
section9
őstag
Itthon lehet valahonnan Teensy 4.1-et szerezni? Nem baj, ha várni kell rá vagy elö kell rendelni, de a legtöbb helyen "majd-egyszer-lesz™" módban vannak.
-
Ez a feladategyüttes vajon megoldható 2db wemossal?
#1: BT kapcsolat wemos#1-en ülő fülessel és telefonnal egyidőben
#2: ha jel jön a speaker jacken, akkor telóról szóló zene lenémít, jacken érkező (rádiós) kommunikáció totális kontrollt kap
#3: telós tartalmat wemos#2 továbbítja a rádió mikrofon jackje felé.miért nem veszem meg készen? 1: a rádióba dugós darabka nem kompatibilis a rádiómnal (nem fér el és máshogy van bekötve) 2: a kész cucc 90+£...
[ Szerkesztve ]
Mindig meglep milyen sokan hiszik el, hogy van ingyen ebéd.
-
tibi-d
tag
Szerintetek egy ESP32 és egy tablet közötti adatcserét melyik verzió támogatja jobban. Ha az ESP32-n létrehozott weblapon állítom be az adatokat, vagy egy android programban állítom be és átküldöm wifi-n. Az ESP-nek is kell küldeni adatot a tablet felé.
Köszi a tanácsokat. -
Janos250
őstag
válasz tibi-d #19032 üzenetére
Az androidos telefon nekem a táskában van kikapcsolva, és csak ha GPS, vagy net kell, akkor veszem elő, ezért arról nem tudok nyilatkozni.
A TCP önmagában elég gyors, de ha minden egyes forgalmazás után megszakítod a kapcsolatot, és mindig újra építed, az lassú. Ezt csinálja a TCP-re épülő http.
Ezért raktak a http fölé még egy réteget, hogy ne szakítsa meg a kapcsolatot, hanem tartsa fenn. Ez a websocket.
UDP gyors, de nincs ellenőrzés, hogy megjött-e az adat, vagy valaki útközben lenyelte.
Ha simán felépíted a WiFi-re épülő kapcsolatot, és nem szakítod meg, hanem fájlként írsz rá, olvasol róla, bármelyik C, C++ file-kezelő utasítással, akkor az - nekem úgy tűnt - elég jó sebességű.
WEB lapra írásnál nyomtatható karakterek kellenek, tehát bináris adat egyszerű átvitelénél WEB lapra, akkor base64 kódolás kell, ami 3 bármilyen byte-ból csinál 4 nyomtathatót. A túloldalon meg vissza.[ Szerkesztve ]
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
tibi-d
tag
válasz Janos250 #19034 üzenetére
Hogy konkrétumokat is írjak. Egy berendezést vezérel az ESP32. A HMI kapcsolatot oldaná meg a tablet. Amíg a berendezés üzemel, addig az ESP és a tablet között a kapcsolatnak folyamatosan meg kéne lennie, hogy a tableten kiadott parancsot a készülék végre tudja hajtani. A berendezésen lévő folyamatról a tableten állapot megjelenítést kellene létrehozni. Az adat cserét legrosszabb esetben is másodpercenként meg kéne valósítani.
[ Szerkesztve ]
-
Janos250
őstag
válasz tibi-d #19035 üzenetére
"a tableten állapot megjelenítést kellene létrehozni."
Ezért lenne előnyös a websocket, mert az közvetlenül a WEB lapra tud írni. Ha másodpercenként kellene újra felépíteni a kapcsolatot, az nem lenne előnyös. Van persze más is, ami nem szakítja meg a kapcsolatot, de ez a legegyszerűbb, vagy legalábbis legelterjedtebb.
Vagy esetleg AJAX, de inkább websocket.
A http fejlécében normál esetben ott van, hogy szakítsa meg a kapcsolatot.Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Janos250
őstag
válasz Wolfram #19036 üzenetére
OK. Én azért tekintettem fölötte lévőnek, mert http nélkül nincs websocket, és én eddig mindig a weblapra írásra használtam, miután itteni kollégák megtanítottak rá, hogy ezt jól lehet használni. :-)
Mivel a WiFi szerverre , és kliensre ül rá, közvetlenül azok is használhatók, de ahhoz nincsenek úgy készen a dolgok, mint a websockethoz.
Mellesleg, ha nem szakítod meg a kapcsolatot, a sima szerver is tud kérés nélkül küldeni. Most hirtelen nem jut eszembe, de valaki leírt egy konkrét esetet, ahol a szerver lesi a klienseket, és ha bármelyik ír, mindenkinek elküldi, hasonlóan az MQTT-hez.[ Szerkesztve ]
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
olli
tag
Sziasztok!
Energia mérőhöz az eredeti programban nyomógombos lcd szerepel, a gombokkal kalibrál. Az lcd az A0 lábon csatlakozik./* 0.1- Button Function */
int buttonRead;
buttonRead = analogRead (0); // Read analog pin A0. Pin A0 automatically assigned for LCD Display Button function (cannot be changed)
currentButtonMillis = millis();
if(currentButtonMillis - startButtonMillis >= 300)
{
//Right button is pressed
if (buttonRead < 60)
{
myGLCD.clrScr(); // Clear the screen (black)
myGLCD.setFont(BigFont);
myGLCD.setColor(0, 0, 255);
myGLCD.setBackColor(0, 0, 255);
myGLCD.print ("PRESS <SELECT> ",20,20);
myGLCD.print ("TO CALLIBRATE ",20,50);
}
// Up button is pressed
if (buttonRead < 200 && buttonRead > 60) // Press up button to go to upper page
{
page = page - 1 ;
if( page <=0)
{ page = 1;}
startButtonMillis = millis();
}
// Down button is pressed
if (buttonRead < 400 && buttonRead > 200) // Press down button to go to lower page
{
page = page + 1;
if (page >3)
{ page = 3;
}
startButtonMillis = millis();
}
// Left button is pressed
if (buttonRead < 600 && buttonRead >400)
{
myGLCD.clrScr(); // Clear the screen (black)
myGLCD.setFont(BigFont);
myGLCD.setColor(0, 0, 255);
myGLCD.setBackColor(0, 0, 255);
myGLCD.print ("PRESS <SELECT> ",20,20);
myGLCD.print ("TO CALLIBRATE ",20,50);
}
// Select button is pressed
if (buttonRead < 800 && buttonRead > 600)
{
currentOffsetRead = 1; // to activate offset for current
voltageOffsetRead = 1; // to activate offset for voltage
powerOffsetRead = 1; // to activate offset for power // set display words starting at upper left corner
myGLCD.print ("INITIALIZING..... ",20,120); // set display words starting at lower left corner
myGLCD.print ("WAIT 5 SEC ..... ",20,150);
}
}
A nyomógombos lcd hiányában kihagyható: // Offset will automatically callibrate when SELECT Button on the LCD Display Shield is pressed.
// If you do not have LCD Display Shield, look into serial monitor to add or minus the value manually and key in here.
Pontosan hogyan tudom módosítani az értéket?
Érintő képernyő + mega 2560 lesz az alap hardwer, az érintőképernyő
gombjaival ki lehet váltani a fizikai gombokat?
Pl. megoldás egy pwm lábon kiadni a feszültség szinteket az A0 lábra?By cool !
-
nagyúr
look into serial monitor to add or minus the value manually and key in here.
Pontosan hogyan tudom módosítani az értéket?Ezt a megadott kódrészletből nem lehet látni, azt a részt nem másoltad be.
Érintő képernyő + mega 2560 lesz az alap hardwer, az érintőképernyő
gombjaival ki lehet váltani a fizikai gombokat?Ki lehet, persze, de sokkal egyszerűbb lenne fizikai gombokkal kiváltani az eredeti gombokat. Eredetileg a kód szerint egy analóg lábra vannak kötve a gombok, valószínűleg ellenálláslétra segítségével különbözteti meg, hogy melyik gomb van lenyomva. Ezt 5 egyforma ellenállás segítségével le tudod modellezni, ha szeretnéd, vagy lehet úgy módosítani a kódot, hogy 1db gombot rákötve a select gombot érzékelje.
megoldás egy pwm lábon kiadni a feszültség szinteket az A0 lábra?
Ez több okból sem lenne megoldás.
[ Szerkesztve ]
-
nagyúr
Lyally
Legközelebb légyszi használd a kód beilleszthetése gombot vagy pastebin-t (vagy hasonlót).A select gomb nyomása ezt csinálja:
currentOffsetRead = 1; // to activate offset for current
voltageOffsetRead = 1; // to activate offset for voltage
powerOffsetRead = 1; // to activate offset for power
LCD.setCursor(0,0); /* set display words starting at upper left corner*/
LCD.print ("INITIALIZING..... ");
LCD.setCursor(0,1); /* set display words starting at lower left corner*/
LCD.print ("WAIT 5 SEC ..... ");Mi van, ha ezt a pár sort beteszed a setup-ba?
(Most nincs időm alaposabban megfejteni a kódot, hogy mit miért csinál.)[ Szerkesztve ]
-
olli
tag
Köszi, működik.
A következő lépés az áram és feszmérő szenzorok csatlakoztatása.
Jelenleg a glcd-re kiírja az adatokat, printeli serialra.
Sd kártyára is megírtam csv-be mentésre, együtt a printseriallal
hibázik.
Csökkenteni kellene a glcd-re kiírás, a serialprint, sd mentés számát, vagy elhagyni valamelyiket?By cool !
-
Wolfram
aktív tag
ESP8266/wemos D1 mini-n találtam megint egy hibát:
USB töltőn keresztül adom neki a tápot, és egyszerűen nem indul el? Mi lehet a gond? A kábel hosszát próbáltam rövidíteni, de 50cm-esen sem indul el, csak akkor ha megnyomom rajta a reset gombot. -
JozsBiker
aktív tag
válasz Gergosz2 #19012 üzenetére
Szia Gergosz2 !
Küzdök mint disznó a jégen :-), szeretnék kérdezni a fenti programoddal kapcsolatban.
- Leírnád pár szóban hogy a beállítandó paraméterekkel mit hogyan állítok ? ( ADC_OFFSET, ADC_GAIN, RMS_GAIN )
- Az interrupt kezelő rész fontos bele ? Mit csinál tulajdonképpen ?
- Műszer által 2,33 A -nek írt terhelőáramnál a következőket írja:2.93
0.30
2.93
0.29
2.93
0.28
2.93
0.31
2.93
0.31
2.92
...Az utasításokból számomra nem derül ki miért van ez a váltakozás, gondolom a működésből következik, de nem bírok rájönni az okára.
Köszi.
Új hozzászólás Aktív témák
- G.Skill 48 GB DDR5-7200 (2x 24 GB) 8400 + Alphacool ddr5 ram modul
- Macbook Pro 16" 2019 i9-9980H 64GB 1024GB AMD Radeon Graphics 5500M 8GB 3K Retina
- Asus G15 Zephyrus RTX 3070 15,6 4k 165HZ Ryzen9-5900HS 16gb ram 1TB ssd win11
- Újszerű iPad Air 3 2019 64GB Space Gray Cellular US-5016
- Dell XPS Precision 5530 i7-8850H 4.3GHz 16GB 512GB Nvidia Quadro P2000 (1650Ti) 4K IPS TouchScreen!