Hirdetés

2024. április 28., vasárnap

Gyorskeresés

Téma összefoglaló

Téma összefoglaló

  • Utoljára frissítve: 2023-03-11 00:46:52

LOGOUT.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.

Összefoglaló kinyitása ▼

Hozzászólások

(#19001) Aryes válasza Aryes (#19000) üzenetére


Aryes
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.

(#19002) JozsBiker válasza weiss (#18999) üzenetére


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.

(#19003) rita7107 válasza Aryes (#19000) üzenetére


rita7107
aktív tag

Köszönöm Neked, és janos250 segítségét! :R
Neki indulok, mert tanulni sosem késő, és sosem szégyen!

(#19004) weiss válasza JozsBiker (#19002) üzenetére


weiss
addikt

Az is lehet, hogy az Uno/Nano 10 bites ADC-je ide kevés lesz. A ZMCT103C 5 A-ig mér, a szkóp meg 0,3-at fogyaszt, az csak 1/16-a a skálának.

I did nothing, the pavement was his enemy!

(#19005) LustaDick123 válasza rita7107 (#19003) üzenetére


LustaDick123
tag

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/

(#19006) razorbenke92 válasza weiss (#19004) üzenetére

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...

(#19007) weiss válasza razorbenke92 (#19006) üzenetére


weiss
addikt

Í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!

(#19008) razorbenke92 válasza weiss (#19007) üzenetére

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...

(#19009) JozsBiker válasza razorbenke92 (#19008) üzenetére


JozsBiker
aktív tag

Köszi hogy foglalkoztok vele! :R
É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.

(#19010) Janos250 válasza JozsBiker (#19009) üzenetére


Janos250
őstag

É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.

(#19011) Aryes válasza JozsBiker (#19009) üzenetére


Aryes
nagyúr

Egyáltalán milyen értékek jönnek a szenzorból egy egyszerű szinusz hullám mérésekor, min, max, nullátmenet pillanatában?

(#19012) Gergosz2 válasza JozsBiker (#18965) üzenetére


Gergosz2
veterán

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 és ADC_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így ADC_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

(#19013) JozsBiker válasza Aryes (#19011) üzenetére


JozsBiker
aktív tag

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.

(#19014) Janos250 válasza Gergosz2 (#19012) üzenetére


Janos250
őstag

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.

(#19015) JozsBiker válasza Gergosz2 (#19012) üzenetére


JozsBiker
aktív tag

Így egy az egyben futtatva ( ill. csak a soros port sebességét átírva egy emberi értékre :) ) folyamatosan 0 -t ír ki, áramtól függetlenül. Majd eljátszok a két beállítandó értékkel.

(#19016) Janos250 válasza Gergosz2 (#19012) üzenetére


Janos250
őstag

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.

(#19017) Gergosz2 válasza JozsBiker (#19015) üzenetére


Gergosz2
veterán

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

(#19018) JozsBiker válasza Gergosz2 (#19017) üzenetére


JozsBiker
aktív tag

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.

(#19019) Gergosz2 válasza JozsBiker (#19018) üzenetére


Gergosz2
veterán

Átírtam a változót, 0 Ampernél folyamatosan 0,88 -at ír

Akkor az ofset-et kéne állítani, mert 512-n lesz.

Nokia 6030 Hardcore User // I Panic Restaurant by Taito

(#19020) JozsBiker válasza Gergosz2 (#19019) üzenetére


JozsBiker
aktív tag

Kísérletezgetek, köszi!

(#19021) Gergosz2 válasza Gergosz2 (#19019) üzenetére


Gergosz2
veterán

Ajj, szóval mert nem 512n lesz. Sorry fáradok

[ Szerkesztve ]

Nokia 6030 Hardcore User // I Panic Restaurant by Taito

(#19022) Aryes válasza Gergosz2 (#19021) üzenetére


Aryes
nagyúr

Akkor lehet meg is van a mérési hiba eredeti oka. Helyes offset-tel talán a "tapasztalati tényezőre" se lesz majd végül szükség. :DDD

(#19023) Wolfram válasza ReFleXx (#18900) üzenetére


Wolfram
aktív tag

Olyan megoldást keresek ahol az új kódot nem kell preparálni (belefűzni az OTA kezelést), a micropython-os megoldás ilyen? Egyébként ha minden igaz az ESP32-nek van natív OTA támogatása, de a tényleges megoldások amiket eddig láttam agyon vannak bonyolítva. :U

(#19024) ReFleXx válasza Wolfram (#19023) üzenetére


ReFleXx
addikt

ha beleirod hogy bootolasnal menjen fel wifi, akkor onnantol siman frissited rajta a kodot remotebol wifin keresztul akar a vilag masik felerol is.

2020-as dakota közmondás: "Intel a csórók AMD-je"

(#19025) section9


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.

(#19026) Wolfram válasza section9 (#19025) üzenetére


Wolfram
aktív tag

60-100 euro az ali-n, mire használod?

(#19027) section9 válasza Wolfram (#19026) üzenetére


section9
őstag

Valami megbízhatóbb retailernek jobban örülnék. Mivel világszinten hiánycikk ezért inkább nem kockáztatnék, hogy nem-e klónt sóznak rám.

Teensy Audio Libraryvel kísérleteznék.

(#19028) Gergosz2 válasza JozsBiker (#19020) üzenetére


Gergosz2
veterán

Megyen?

Nokia 6030 Hardcore User // I Panic Restaurant by Taito

(#19029) t72killer


t72killer
titán
LOGOUT blog

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.

(#19030) Wolfram válasza section9 (#19027) üzenetére


Wolfram
aktív tag

66db raktáron: [link]

[ Szerkesztve ]

(#19031) section9 válasza Wolfram (#19030) üzenetére


section9
őstag

Nagyon köszi! :R

(#19032) tibi-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.

(#19033) Aryes válasza tibi-d (#19032) üzenetére


Aryes
nagyúr

Szerintem az utóbbi, UDP kapcsolattal. A weblap lassú és rugalmatlan.

(#19034) Janos250 válasza tibi-d (#19032) üzenetére


Janos250
őstag

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.

(#19035) tibi-d válasza Janos250 (#19034) üzenetére


tibi-d
tag

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 ]

(#19036) Wolfram válasza tibi-d (#19035) üzenetére


Wolfram
aktív tag

websocket, használom már egy ideje ESP8266-on, tökéletesen működik.

Janos250: websocket nincs a http felett, csak azzal indít, utánna egy valódi full duplex TCP kapcsolat lesz belőle.

(#19037) Janos250 válasza tibi-d (#19035) üzenetére


Janos250
őstag

"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.

(#19038) Janos250 válasza Wolfram (#19036) üzenetére


Janos250
őstag

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.

(#19039) olli


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 !

(#19040) Aryes válasza olli (#19039) üzenetére


Aryes
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 ]

(#19041) olli válasza Aryes (#19040) üzenetére


olli
tag

[link]

Ez az eredeti kód, hogyan oldjam meg a kalibrálást az lcd gombok nélkül?

Átraktam a próba topikba.

[ Módosította: Intruder2k5 ]

By cool !

(#19042) Aryes válasza olli (#19041) üzenetére


Aryes
nagyúr

Lyally :Y
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 ]

(#19043) olli válasza Aryes (#19042) üzenetére


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 !

(#19044) Wolfram


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. :U

(#19045) Aryes válasza olli (#19043) üzenetére


Aryes
nagyúr

Kezdetnek a serial sebességét:
Serial.begin(9600)
írd át minél gyorsabbra, mert lassítja a futást. 115200 szerintem pont megteszi, persze a serial monitort ne felejtsd átállítani.
Szerintem ezzel nyersz annyi időt, hogy ne hibázzon.

(#19046) Wolfram válasza Wolfram (#19044) üzenetére


Wolfram
aktív tag

(#19047) ViZion válasza Wolfram (#19044) üzenetére


ViZion
félisten

Te minden hibát IS elő tudsz hozni ezeken a kis jószágokon! :R
:D

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

(#19048) Wolfram válasza ViZion (#19047) üzenetére


Wolfram
aktív tag

Veszek egy ilyet: [link] és mindjárt lenyugszom. :DDD

(#19049) ViZion válasza Wolfram (#19048) üzenetére


ViZion
félisten

NE! Ezt keresed: [link] ;] :D

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

(#19050) JozsBiker válasza Gergosz2 (#19012) üzenetére


JozsBiker
aktív tag

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.

Copyright © 2000-2024 PROHARDVER Informatikai Kft.