-
GAMEPOD.hu
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
-
Wolfram
aktív tag
Ezeket a beágyazott fájl tömböket hogy gyártják -> (PROGMEM) [link] ?
Van valamilyen export/import generátor amit használnak hozzá, vagy ezt mindenki házilag csinálja? -
Szancsó
aktív tag
válasz Wolfram #19051 üzenetére
Vannak rá honlapok: régebben találtam használhatót, csak nem mentettem el, de most ráguglizva leltem egy érdekeset: https://gchq.github.io/CyberChef
Itt a fenti tömböt bemásolva és bal oldalt az input formátumot megadva (From decimal, Gunzip) visszafejtette rendesen HTML-re.
(Visszafelé is megvan minden parancs megfelelője.)[ Szerkesztve ]
My story is one of many thousands, and the world will not suffer if it ends too soon.
-
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.[ Szerkesztve ]
Nokia 6030 Hardcore User // I Panic Restaurant by Taito
-
JozsBiker
aktív tag
válasz Gergosz2 #19055 üzenetére
Számomra új dolgot olvastam az ACS712 modul leírásában. 5A -es modul esetén a felbontás 185 mV/A. Ez azt jelenti, hogy 5 A (RMS ?) terhelés esetén a kimenő feszültsége 2,5 - 5 * 0,185 és 2,5 + 5 * 0,185 V között változik, azaz 1,575 - 3,425 V között. Vagyis nem húzza szét a teljes 0 - 5 V tartományra. Ekkor viszont ha jól gondolom az 5 A -nek megfelelő 5 * 0,185 V -ra is csak 189,4 -es tartomány jut az 1023 -ból. Ez talán változtat a számítási módon.
0 terhelés esetén 2,5 V az ACS712 kimenete ezért az ADC_OFFSET -et nem bántottam. A soros kimeneten is 0,0 -t írt aminek először örültem, de aztán rájöttem hogy az ADC_GAIN = 0,0 miatt.
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. A képletbe behelyettesítve: (5/1023)* 2 /(2.6-2.5) = 0,09775. Ezzel az értékkel 0 terhelés esetén sem 0 -t ír a sorosra.
Terhelés nélkül:
0.25
0.16
0.19
0.17
0.23
Bekapcsolva az izzót:
1.31
1.36
1.39
1.45
1.39
1.39 -
weiss
addikt
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.
I did nothing, the pavement was his enemy!
-
-
Wolfram
aktív tag
Mikro feszültségű hálózat (ki)építésének van szakirodalma?
Amikor a lakásban sok eszközt telepít az ember, elég gyorsan kifogy a konnektorból, valamilyen saját elektromos hálózat kellene. -
nagyúr
válasz Wolfram #19076 üzenetére
Hogy mekkora a veszteség, az elsősorban a felvett áramerősségtől függ. Kis áramfelvételnél viszont a légköri zavarra lesz nagyon érzékeny a cucc.
Esetleg talán egy köztes megoldás: 12V-os vezeték, és helyben egy konverter? Ezzel a káposzta is jóllakik, meg a kecske is megmarad. Valamilyen LED tápot lehetne használni erre. -
Wolfram
aktív tag
Lehet valahogy domain nevet adni lokális hálózaton egy lapnak? (pl.: 192.168.10.111 -> nappali.smarthome.hu, 192.168.10.112 -> konyha.smarthome.hu stb)
-
daninet
veterán
Sziasztok!
Motor sebességet akarok vezérelni egy enkóderrel. Ez így elég egyszerű, megy is a dolog. A gondom az, hogy első indításnál szeretném ha finoman felpörögne nem pedig ráadná a kakaót és szétcsavarná a motort. Ez is egyszerű elméletben, void start-ba egy for loop és annyi.
Viszont a következő a gondom:
Áram alá helyezem a tápot, egy fél másodpercre megindul a motor teljes sebességgel, majd megáll és akkor kezd el a void setup-ban levő első for loop lefutni.
Gyanítom nem szoftver eredetű a gond, az elektronikából eredhet inkább, a kódban nem látok gondot (majd megerősítitek).
A motor H híd 0-5Vot kér a sebesség beállításához, 10%tól mozdul meg a motor. Arduval csinálok PWM-et és egy RC taggal fix feszültséggé alakítom ( a kondi és az ellenállás az ardura van direk forrasztva nem tudom mennyire látszik)A kis zöld bigyó egy 5V step-down konverter mert 19V a táp ami a motort is hajtja (laptop táp a háttérben)
/A képen már nincs rajta az enkóder mert beépítettem már a végső dobozába, a szürke és fehér kábel volt az/
Miért vegyem meg, ha 3x annyiért, 3x annyi idő alatt megépíthetem? ´¯`·.¸¸.·´¯`·.¸><(((º>
-
daninet
veterán
Van, az egy RC (resistor capacitor) tag ebben a felállásban [link] 47uF kondi és egy 1k ellenállás
dew28: utánanézek
Wolfram: nem találtam adatlapot, ezt vettem
Miért vegyem meg, ha 3x annyiért, 3x annyi idő alatt megépíthetem? ´¯`·.¸¸.·´¯`·.¸><(((º>
-
tibi-d
tag
Tudnátok-e néhány linket mellékelni, hogy hol lelhető fel információ ESP32-re írható, tableten megjeleníthető grafikus felület szerkesztésével kapcsolatban, nem túl bonyolult leírás formájában. Ezt megfogalmazni sem volt egy piskóta feladat. Köszi
[ Szerkesztve ]
-
JozsBiker
aktív tag
válasz Gergosz2 #19063 üzenetére
Először is 0 terhelésnél a kép ( AC állásban van a szkóp ):
Eléggé szőrös, de kis nyomozás után megállapítottam hogy a tápfeszültségtől ilyen. ( Számítógép USB portjára van rádugva az UNO és azon lóg az ACS712, próbáltam 47 aztán 100 nanos kondival javítani a helyzetet, de nem sok látszatja volt. ) Kíváncsiságképpen megnéztem hogy ezekből a "szőrökből" mit érzékel az UNO. Nyersen beolvasva az A0 -t 509 és 517 között szórnak az értékek, vagyis ennyi hibája egész biztos lesz. Ez azért elgondolkodtató, mert ez az AD átalakítás szempontjából 0,0626 V -nak felel meg, ami az ACS712 -nél már marha sok, hiszen ott 0,185 V felel meg 1 A -nek, vagyis a 0,626 V kb. 0,3 A mérési pontatlanságot jelent ha jól számoltam :-(.A programod a következőket írja ( ADC_GAIN 0.09775 ): 0.17 - 0.20 - 0.24 - 0.16 - 0.16 - 0.21 - 0.14 - 0.17 - 0.26 - 0.18 - 0.19 - 0.20 - 0.19 - 0.23 - 0.18 - 0.18 - 0.17 - 0.20 - 0.22 - 0.16 ...
Bekapcsolva a terhelést ( műszer szerint 0,3 A ):
1.30 - 1.29 - 1.29 - 1.31 - 1.30 - 1.25 - 1.26 - 1.31 - 1.35 - 1.35 - 1.33 - 1.37 - 1.34 - 1.41 - 1.40 - 1.23 - 1.19 - 1.21 - 1.24 - 1.23 ... -
ViZion
félisten
19076 Wolfram
Ahogy Aryes írta, led tápokat keress, vannak brutál példányok is. Viszont a zavar az zavar... igaz nálam nem tápra, hanem GPIO-ra adott 3,3 V-ot zavarta a 230 V közelsége, a lakásban meg van wifi, telefonok 4G, mittudomén. De majd kiderül, elsőre én a legtávolabbin kísérleteznék, minimális befektetéssel. Csak van oka, hogy nincs mindenhol ilyesmi.Lehet valahogy domain nevet adni lokális hálózaton egy lapnak?
igen, vagy a routeredben vagy windowsban ac:\Windows\System32\Drivers\etc\hosts
ezt így kimásolod az asztalra, szerkeszted, és visszarakod, felülírva az eredetit. Esetleg egy flushdns is kellhet.
Linuxon Debian/Buguntunálsudo nano /etc/hosts
Fedoránál megint variáltak, vi a szerkesztő, utálom.Hold on, trying to give a fuck... Nope, not Happening • Powered by Fedora Linux • "Az élet olyan sz@r, szerencsére a felén már túl vagyok" Al Bundy
-
nagyúr
válasz tibi-d #19089 üzenetére
Egy rém egyszerű példa kód Janos250 kolléga jóvoltából.
Ezt könnyen tudod módosítani, a felület pedig egyszerű HTML, csak arra figyelj, hogy ha JS-t, CSS-t használsz, lehetőleg integráld bele az oldalba, ne külön fájlként töltsd fel, csak komplikálja a dolgokat -
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
[ Szerkesztve ]
Nokia 6030 Hardcore User // I Panic Restaurant by Taito
-
Janos250
őstag
válasz tibi-d #19089 üzenetére
Ha pontosabban tudnánk, hogy mit akarsz, akkor jobban tudnánk ajánlani megfelelő módszert.
Vezérelni akarsz valamit?
Mérési adatokat akarsz megjeleníteni?
Vagy mit?Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Wolfram
aktív tag
Janos250 hozzászólásának az alján: "Ezt használtam fel:
https://randomnerdtutorials.com/esp32-web-server-arduino-ide/"
-
Janos250
őstag
A kérdéséből ítélve, lehet, az is túl bonyolult.
Lehet, hogy kihagyva a hibakezeléseket, egyszerűen sor olvasássalWEBserverClient.readStringUntil('\n')
beolvasni a tablet böngészőjéből érkező sorokat
például PC Firefox ezt küldi:GET /?t=125 HTTP/1.1
Host: 192.168.0.140
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:109.0) Gecko/20100101 Firefox/109.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: hu-HU,hu;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflateConnection: keep-alive
Upgrade-Insecure-Requests: 1Ha vezérelni akar, akkor ki tudja szedni azt, amit a hívásban
(pl: http://192.168.0.140/?t=125)
odaírt, és megcsinálja, amit akar.
Vagy a lapra gombokat, stb. rak, miegymás.
Lehet, holnap - ha nem jut addig előbbre - írok egy egyszerúbbet.[ Szerkesztve ]
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Új hozzászólás Aktív témák
- Anglia - élmények, tapasztalatok
- Konzolokról KULTURÁLT módon
- BestBuy ruhás topik
- Milyen billentyűzetet vegyek?
- 3D nyomtatás
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Kihívás a középkategóriában: teszten a Radeon RX 7600 XT
- NVIDIA GeForce RTX 4080 /4080S / 4090 (AD103 / 102)
- Microsoft Excel topic
- Fujifilm X
- További aktív témák...
- 1151 V2 CPU-k / I5-8500 / I5-8400 / BESZÁMÍTOK!
- Intel i5-10400 hatmagos processzor + doboz + gyári új hűtő
- Nintendo Switch játékok (ง '-' )ง Budapest Nyugatinál
- Fekete Sony PlayStation 5 Cover (Lemezes változat)
- Samsung Galaxy S23 Ultra 5G 256GB Dual SIM Phantom Black Gyárilag független Csere/beszámítás is!