-
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
-
Saua
tag
Az "engedély" lenne a változó ami csak egyszer engedi lefutni a blink függvényt. A blink függvény lefutásakor LOW értéket vesz fel, és ezt kellene valahogy felvegye a loop -ban levő engedély változó, hogy ne induljon újra és újra a függvény.
Nem működik ..... ha a hőmérséklet nagyobb vagy kisebb mint a beállított érték akkor nem fut le a blink függvény.
[ Szerkesztve ]
-
Tankblock
aktív tag
Hello,
Milyen gyakran mérsz? Valamennyit fog mozogni, mondjuk én 5 percenként mérek, de így sem látok nagy kilengéseket, pl légnyomás ugyanannyi órákon keresztül is és a levegőnedvesség is....
Adafruitos könyvtárat használok :
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>Release the Beast....
-
Bazs87
tag
kérlek erősítsetek meg vagy cáfoljatok, de a tapasztalatom az, hogy az olcó pici kínai szenzorok sajnos nem túl pontosak. A DHT11 elvileg kalibrált szenzor mért hőmérsékletei több szenzornál +/- 2 fok különbséget tudnak kb. Ha nem valamilyen komolyabb szabályzást akarsz megvalósítani, akkor tanácsolom, hogy egy időig gyűjts adatokat, átlagolj, majd pedig a végső átlagolt idővel dolgozz (pl másodpercenként 1 értéket adj ki ciklikusan, 1 mp alatt pedig olvass folyamatosan és dobáld egy array-be, amit a végén átlagolsz, küldesz/logolsz, majd ürítesz és kezdet újra)
RTC: valszeg velem van a baj, de többet is próbáltam és pár hónap után mind sikeresen elcsúszott 5-10-20 perceket folyamatos táp mellett. Amint szükségem lesz 3 dolgon gondolkodom, ami megoldhatja a problémám: 1. NTP serverről idő szinkronizálás (valamilyen egyszerűbb socketes lib csak van hozzá)
2. DCF77 rádiós óra
3. routerből vagy a belső hálózatból valahogy kihúzni az aktuális időt (ez lenne a legjobb, de még nem mélyedtem el benne, persze úgy, hogy ne kelljen semmilyen pc-nek ehhez futnia folyamatosan) -
Honkydoo
őstag
Ekkora a mintavételezési frekvencia amivel az ADC-ből olvasni fogok:
unsigned int sampleRate = 22050;
A setup részben ez van:
timer1Start = UINT16_MAX - (F_CPU / sampleRate);
Így néz ki a kódrészlet:
ISR(TIMER1_OVF_vect) {
TCNT1 = timer1Start;
signal = AudioHacker.readADC();
fft_input[i] = signal; // put real data into even bins
fft_input[++i] = 0;
if (i == 511){
i = 0;
cli();
fft_window(); // window the data for better frequency response
fft_reorder(); // reorder the data before doing the fft
fft_run(); // process the data in the fft
fft_mag_log(); // take the output of the fft
sei();
}
}Az fft_input egy tömb amiben jelen esetben az elő érték egy egész a második érték 0.
Az a kérdés, hogy vajon elég gyorsan ki tudja e számolni az arduino az energia szinteket, vagy egymásra fognak e csúszni a műveletek?
"Légy olyan, mint bárki más, tégy olyat, mint senki más."
-
Vladi
nagyúr
most megint lovagolni fogtok a szavakon...
De részemről vevő vagyok konyhakész hardveres debounce megoldásra, lehetőleg olcsó és breakout board formájában csavaros rögzítéssel.
Nem félünk! Nem félünk! Itthon vagyunk e földön. Nem félünk! Nem félünk! Ez nem maradhat börtön!
-
vargalex
félisten
1 db - mérés alapján kb. 2000 mAh-s - Li-Ion cellát notebook akkuból bontva.
Alex
-
Tomi8822
tag
// Date and time functions using a DS3231 RTC connected via I2C and Wire Lib
#include <Wire.h>
#include <RTClib.h>
#include <Time.h>
#include <TimeAlarms.h>
RTC_DS1307 RTC;
// Start Time
int sHour = 11;
int sMinute =30;
int sSecond = 0;
// End Time
int eHour = 11;
int eMinute = 30;
int eSecond = 4;
int lightRelay = 2;
int lightRelay2 = 3;
int lightRelay3 = 4;
int lightRelay4 = 5;
int lightRelay5 = 6;
int lightRelay6 = 7;
void setup() {
// Set the relay to off immediately
digitalWrite(lightRelay, HIGH);
Serial.begin(9600);
Wire.begin();
RTC.begin();
// Set the pinmode
pinMode(lightRelay, OUTPUT);
// Notify if the RTC isn't running
if (! RTC.isrunning()) {
Serial.println("RTC is NOT running");
}
// Get time from RTC
DateTime current = RTC.now();
DateTime compiled = DateTime(__DATE__, __TIME__);
if (current.unixtime() < compiled.unixtime()) {
Serial.println("RTC is older than compile time! Updating");
RTC.adjust(DateTime(__DATE__, __TIME__));
}
// Use RTC time to set the start time
setTime(sHour, sMinute, sSecond, current.day(), current.month(), current.year());
time_t s = now();
// Use RTC time to set the end time
setTime(eHour, eMinute, eSecond, current.day(), current.month(), current.year());
time_t e = now();
// Use RTC time to set the current time
setTime(current.hour(), current.minute(), current.second(), current.day(), current.month(), current.year());
time_t n = now();
// Test if grow light should be on
if (s <= n && n <= e) {
digitalWrite(lightRelay, LOW); // Sets the grow light "on"
}
Alarm.alarmRepeat(sHour, sMinute, sSecond, LightOn);
Alarm.alarmRepeat(eHour, eMinute, eSecond, LightOff);
}
void loop() {
DateTime now = RTC.now();
setTime(now.hour(), now.minute(), now.second(), now.day(), now.month(), now.year());
Serial.print("Current time: ");
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
Serial.println();
Alarm.delay(1000);
}
void LightOn() {
Serial.println("Turning Light On");
digitalWrite(lightRelay, LOW);
}
void LightOff() {
Serial.println("Turning Light Off");
digitalWrite(lightRelay, HIGH);
}Csak annyit szeretnék hogy a hat relét adott időben be majd ki kapcsolni külön külön
[ Szerkesztve ]
-
tvamos
nagyúr
Ahol eddig is tanították a ucontrollereket, ott most már arduinok vannak, vagy legalábbis hasonló boardok.
Az jo lehet, nalunk azt tanitjak a gyereknek, hogy Margaretakerekes nyomtato, meg ilyesmi. Tobbet erne, ha aznap egy oraval tovabb alhatna!.."Mindig a rossz győz, és a jó elnyeri méltó büntetését." Voga János
-
Janos250
őstag
Tudok olyan helyet, ahol nagyjából akkoriban törölték még a Neptunból is (oktatási adminisztrációs program) azt a választható tárgyat, aminek keretében PIC-kel olvastak egyszerűbb szenzorokat, vezéreltek mintaként ledeket, lámpákat, szervo és léptető motorokat.
"Erre csak a villamosmérnököknek van szüksége", mondták. Ma, ha egy mérésnél a készülék fűtését telefonról (ESP8266) vezérlik, és ott olvassák le az adatokat, arra, mint értelmetlen hibbant, különcködő ötletre tekintenek az intézménynél. Érdekes, hogy leginkább a tanítottak éreznek rá ennek az ízére.Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Ja, tök jó, nekünk elektroműszerész szakközépben, kb. ugyanabban az időszakban, kb. említés szintjén volt a mikorporofesszor, egy fogalmatlan hülye előadásában.
Infó szakon minimális assembly (mind a kettőn, amit elvégeztem).
Komolyan, ha középiskolában szabadidőmben nem programozok, sehol se lennék.Mutogatni való hater díszpinty
-
Janos250
őstag
Eléggé sztochasztikusan.
Az elsőt a core0-ra teszi, a másodikat a core1-re, a többit meg hasraütésszerűen.
Az xTaskCreate mindenképpen rugalmasabb, mert tudsz stack méretet, prioritást adni."Tök jó, viszont ez ha jól értem csak érdekességképpen készül, nem azért mert csak így tudsz megvalósítani valamit?"
Igen, az xTaskCreate-el ugyanezt meg lehet valósítani, mert ő is ezzel oldja meg.
Viszont a szállal az szabványos, máshol megírt program is futtatható, illetve az itteni átvihető máshova is, míg az xTaskCreate csak a freeRTOS-t használó rendszeren van. A szabványosság miatt kerestem a konzolra írást (cout) is.[ Szerkesztve ]
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
_q
addikt
A delayt csak próba miatt tettem bele, nem szép, de rá akartam jönni hol csúszik el a dolog. A kijelzős részt nem teljesen jól írtam le, úgy gondoltam, hogy egy timerrel számolom a 2 másodpercet és az megszakításként változtatna egy változót, ami mondjuk egy if szerkezeten belül végrehajtaná a kijelzést.
Ha már itt tartunk ESP32-re van jó timer leírás megszakítással egybekötve? Uno-hoz jól le van írva több helyen is hogy timer0 millis és delay-ért felelős, timer1 és timer 2 pedig szabadon használható. Mi a helyzet ESP32 esetében?
(#8544) aryes
Igen mert amiket próbáltam nem működött, ezért nem is tettem bele, csak a kódot magát hogy látszódjon amiből kiindulnék. -
Gergosz2
veterán
-
Teasüti
nagyúr
Az nem automatikusan kerül lefoglalásra?
Úgy tudom a globális változók kerülnek a ram elejére. A fent maradó terület úgy tudom a stack, amit a lokális változók használnak. De ezen mit növeljek, amikor a fordító szerint 1500 bájt szabadon van hagyva a memóriából?
Ez egy igen primitív program, futtattam már olyanokat is, amik a tár 100%-át foglalták és több mint kétharmad ram-ot és vígan futottak.Amúgy volt egy szemantikai hiba:
char data[8];
tömb méretét megnöveltem, de még így is produkálja a hibákat.[ Szerkesztve ]
-
kjocoka
csendes újonc
Az a baj, hogy azt honnét tudom meg, mert ezekben állítólag nincs mac cím, nekem kell beírni valamit.
Azt jó lenne tudni, hogy akkor miért működik az Arduino minta progival?
Ez a típus van nekem : https://www.indiamart.com/proddetail/enc28j60-ethernet-lan-network-module-for-arduino-13121572433.htmlez a mintaprogram egyből működik, semmit nem kell átírni rajta:
// Arduino demo sketch for testing the DHCP client code
//
// Original author: Andrew Lindsay
// Major rewrite and API overhaul by jcw, 2011-06-07
//
// Copyright: GPL V2
// See http://www.gnu.org/licenses/gpl.html
#include <EtherCard.h>
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };
byte Ethernet::buffer[700];
void setup () {
Serial.begin(57600);
Serial.println(F("\n[testDHCP]"));
Serial.print("MAC: ");
for (byte i = 0; i < 6; ++i) {
Serial.print(mymac[i], HEX);
if (i < 5)
Serial.print(':');
}
Serial.println();
if (ether.begin(sizeof Ethernet::buffer, mymac) == 0)
Serial.println(F("Failed to access Ethernet controller"));
Serial.println(F("Setting up DHCP"));
if (!ether.dhcpSetup())
Serial.println(F("DHCP failed"));
ether.printIp("My IP: ", ether.myip);
ether.printIp("Netmask: ", ether.netmask);
ether.printIp("GW IP: ", ether.gwip);
ether.printIp("DNS IP: ", ether.dnsip);
}
void loop () {}[ Szerkesztve ]
-
kjocoka
csendes újonc
Igen kiír mindent, ip, dns,.stb, de csak a soros portra.
[testDHCP]
MAC: 74:69:69:2D:30:31
Setting up DHCP
My IP: 192.168.1.6
Netmask: 255.255.255.0
GW IP: 192.168.1.1
DNS IP: 192.168.1.1Mikor viszont rá teszem a TFT progit nem akar működni. Csak a sima szöveget írja ki, az elején, utánna már nem megy a progi tovább.
Amugy a TFT progit innét szedegettem: http://forum.arduino.cc/index.php?topic=312916.0
[ Szerkesztve ]
-
Janos250
őstag
Csak egy tipp:
Próbáld meg, várni, amíg a millis éppen vált!
Ugyanis millinként megszakít 6-7 microra, ha letilrod a megszakítást, akkor kb egy microra.
Csak hab a tortán, hogy a ccount csak 32 bites, így kb 17 secenként átfordul.Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
OK, sietve írtam. 1024 és 950 körüli értékek jönnek, delay-jel is. A fényerő változására alig változik, aztán néha 1-1 másodpercre felugrik 1024-re, vagy leesik 950-960 köré az analóg lábról olvasott érték. Fura. Csináltam már ilyet, csak nincs meg a rajz, hogy akkor hogy működött (és akkor is valamiért megás ellenállás volt rajta, s sorba volt kötve az egész.....???? De akkor is nagyon kis szórású értékek voltak, arra emlékszem.
Mutogatni való hater díszpinty
-
ecaddsell
aktív tag
Bár lehet jó eséllyel meg tudnám csinálni (legalábbis az esetek egy részére), de ez nem annyira triviális mert a kondi a jelalakot is torzítja.
Szóval méretezni kell zavaró és kívánatos jeltől függően stb. A zavaró jel meg gombtól, öregedéstől stb. is függhet (meg encodernél forgatás sebessége miegymás).
A SW-ben 1 változót sokkal gyorsabban változtatok mint a kondit újraforrasztom.Példának okáért gyorsan összedobtam a gomb kódját a lenti logikának (mivel most per pill. még fordítani sem tudom, szóval lehet nemcsak hibás is, hanem esélyes, hogy már a fordító sem eszi meg), nekem ez sokkal gyorsabb mint forrasztgatni, tárolós szkópon nézegetni a lehetséges hibákat stb.
(Alsó rész init-be megy, meg GPIO-t változókat stb. be kell állítani).
#include <pthread.h>
#define ROTE_SW GPIO_NUM_xx
#define RENC1_STPLIM 6
typedef struct {
gpio_num_t swpin;
uint16_t step;
} roteswT;
roteswT rote1par;
pthread_t rotethrdsw1;
void* roteswbgrd(void* pars){
roteswT* swpar = (roteswT*) pars; // switch parameters
gpio_num_t swbut = swpar->swpin;
uint32_t bcount;
while (1){
if(digitalRead(swbut) == LOW)
{
bcount = 0;
for(int i=0; i<20; i++){
delayMicroseconds(100);
if(digitalRead(swbut) == LOW) bcount++;
}
if(bcount>=6){
swpar->step = (swpar->step +1) % RENC1_STPLIM;
delay (300);
}
}
delay (5); // could pthread_cond_wait() for interrupt from pin
}
} // roteswbgrd
pinMode(ROTE_SW, INPUT);
rote1par.swpin = ROTE_SW;
rote1par.step = 0;
pthread_create(&rotethrdsw1, NULL, roteswbgrd, (void*) &rote1par);Az encoder számláló része persze kicsit húzósabb és ami dühítő, hogy a HW akár tudhatná is (nagyon közel van hozzá)...
-
Teasüti
nagyúr
Az egy 5V-os chip és a devkit nyákterve alapján csak 5V-ról kap áramot (usb vagy külső stabilizált táp). Ha áramtalanítani akarod, akkor 3V-ról kell betáplálni a modult.
Egyébként magát az IC-t lehetne altatni, de nem értem a nyákterven hova van kötve az a láb. Vmi "active" net label van rajta, de nem látom sehol máshol ezt a címkét. Lehet fixen fel/le van húzva.
[ Szerkesztve ]
-
Tankblock
aktív tag
A többi board mind 1 magos ha jól sejtem, az ESP32 meg 2 core. Mivel mind a 2ről el lehet érni igy gondolom van restriction. Az ESP-IDF alatt is structúrán keresztül lehetett definálni ha jól emlékszem.
Bőven megfelelő a sebessége. Nézegesd inkább a példaprogramokat amit az ESP-IDF mellé kapsz. Az sokat fog segiteni. Az arduino erre a layerre húz rá még egyet.
Release the Beast....
-
MrChris
nagyúr
Nem is erőltettem, 64szeres, durva is lenne azoktól a miniatűr fogaktól ha átvinnék és kibírnák.
A Nema17-t néztem ki, nagyon sok helyütt találkozom vele. Ez valami szabvány, vagy egy gyártó terméke?tvamos: lötyizik rendesen. Csak egy irányba lesz forgatva talán összefeszül. De ide-oda mozgatásra valszeg nem a legprecízebb. Másfél buszjegy ára.
-
fpeter84
senior tag
Mert Te találtál bármi leírást, példakódot, library-t a témához? Én csak annyit hogy még az IDF-be sincsen rendesen implementálva az egész, nemhogy arduino alá... Az egyetlen amit találtam az a lenti linken lévő deep sleep, de nekem nem ez a része kellene az RTC-nek, hanem azt szeretném tudni hogy két indítás között mennyi idő telt el...
-
fpeter84
senior tag
Nekem az az érzésem, hogy a SimpleTime-ban használt getLocalTime valami szoftveres RTC lehet, mert ha berakom plusszba a printLocalTime() -ot rögtön a serial init / wifi csatlakozás közé, akkor szerintem úgy kéne működnie hogy első körben normális a Failed to obtain time, de ha egyszer megtörtént a szinkronizálás, akkor egy reset után ki kéne tudnia írni az időt, de ugyanúgy Failed to obtain time marad... Azért még kísérletezek vele, hátha rájövök a nyitjára...
Új hozzászólás Aktív témák
- Ingyenes vagy akciós szoftverek
- OLED TV topic
- CASIO órák kedvelők topicja!
- Redmi Note 13 Pro 5G - nem százas, kétszázas!
- Autós topik
- Ülésezik a hardveregylet
- Gumi és felni topik
- A Watch7-tel debütálhat a Samsung vércukormérője
- HTPC (házimozi PC) topik
- Oppo Find X5 Pro - megtalálták
- További aktív témák...