- Gigabyte alaplap topik
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- AMD Ryzen 9 / 7 / 5 / 3 5***(X) "Zen 3" (AM4)
- A Microsoft átépítette a ROG Ally-t
- Samsung LCD és LED TV-k
- TCL LCD és LED TV-k
- Milyen belső merevlemezt vegyek?
- Házimozi belépő szinten
- Milyen videókártyát?
- Szünetmentes tápegységek (UPS)
-
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
-
lanszelot
addikt
válasz
DigitXT #19849 üzenetére
Nagyon szépen köszönöm a választ mindenkinek.
Mint írtam a kérdés nem a programra irányult.
Tehát, ha jól értem, a program futása nem soronként történik, hanem több szálon, tehát akár több sor is tud futni egy időben. És itt van amit rosszul gondoltam. Mert ezt sehol se írták le./ahol én néztem: c++ alapok, arduino alapok/ -
lanszelot
addikt
válasz
DigitXT #19845 üzenetére
Először is köszönöm szépen a választ.
Mint írtam, már #19815 óta nem a programról van szó, hanem csak általános programozási kérdéseket tettem fel.
Valószínű nem jól fogalmazok, ezért elnézést kérek.Itt az a program az érzékelőhöz aminél a négyzet nem működött. /de nem erről kérdeztem/
#include <Adafruit_SSD1306.h>
#include <splash.h>
uint32_t lastms= 0;
bool blink = true;
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire);
void setup() {
Serial.begin(9600);
// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // Address 0x3C for 128x32
display.display();
delay(2000);
}
void loop() {
int sensorValue = analogRead(A0);
int isgas = digitalRead(2);
String gas;
delay(1000);
display.clearDisplay(); //this line to clear previous logo
display.setTextSize(2); /*text size 3*/
display.setCursor(3,0); // ez tartja egy helyben a szöveget
display.setTextColor(WHITE); //without this no display
display.print("Gasmeter");
display.setTextSize(1); /*text size 2*/
display.setCursor(0,50); // ez tartja egy helyben a szöveget
display.setTextColor(WHITE); //without this no display
display.print("CO2 = ");
display.print(sensorValue);
display.print(" PPM ");
if (sensorValue < 90) {
gas = "No Gas";
}else{
gas = " Gas";
if (millis() - lastms > 4000) {
lastms = millis();
if (blink)
display.drawRoundRect(80, 47, 40, 15, 2, WHITE);
else
display.drawRoundRect(80, 47, 40, 15, 2, BLACK);
blink = !blink;
}
}
display.print(gas);
display.display(); //to shows or update your TEXT
}
pont ezért nem szúrtam be, mert lehetetlen ide berakni
Mint láthatod, nincs benne semmi az "if" -en kívül -
lanszelot
addikt
válasz
DigitXT #19816 üzenetére
Ez a kijelző.
Nem frissítési turpisság.
És nem írja felül semmi. Ha egymásra iratok vmit, mind a kettő ott van egymáson. Nem takarja ki.
Az érték folyamatosan változik.
A fehér a loop futtatási idejét tartja, a fekete a beírt értéket.
Pl 200 nál szinte egyformán váltanak, hisz 0.2s. 8000 nél pedig a fekete 8s míg a fehér ugyanannyi mint volt 200 nál. De írhatok be bármilyen számot.
Biztos hogy vmilyen bug, hogy páratlan futásokkor miért nullázódik. Valami a lastms alap ertéke miatt lesz. Csak én nagyon kezdő vagyok. Nem tudom miért. -
-
-
Nyirike
csendes tag
válasz
DigitXT #10958 üzenetére
Szia. Pont ebbe a hibába futottam. VR sensort kéne olvasnom de csak négyszög jelet olvas a cucc. A gond az hogy a VR szenzor tud néha 50 voltot is kiadni az olvasó meg max 18-t képes és négyszöget persze. Neten találtam https://sirhclabs.com/product/vr-to-hall-sensor-converter/ megoldást ami olcsó is de Amerikából. Gondolom szállítással együtt már nagyon nem éri meg. Meg jó lenne hamar megoldani, hogy tudjak haladni.
Neked mi volt a megoldásod erre? A MAX9924-t olvastam én is több helyen de SMD-vel én sem vagyok jóban
-
ratkaics
senior tag
válasz
DigitXT #12388 üzenetére
Az érzékelők:
Olajnyomás: Alacsony nyomás esetén "test"-re záró "olajgomba".Vízhőmérséklet: NTC ellenállás, vagy valami hasonló megoldható a vízkörben.
Sebességmérés: Mondjuk valami mágneses elven működő impulzus jeladó, mint a bringákon. De a GPS is szóba jöhetne akár.
Feszültségmérés: Ez talán megoldható.
A fordulatszám mérést a pl a TrailTech valahogy úgy oldja meg, hogy a gyertyapipára kell rátekerni 8-9 menetet egy vezetékből és valahogy abból találja ki, hogy mekkora a fordulatszám. Ez nem tudom még pontosan, hogyan működhet...
-
zsolti_20
senior tag
válasz
DigitXT #12233 üzenetére
Koszonom a reszletes hozzaszolast.
Igen igazad van 1-2 dologot tisztaba kell tenni.
A sajat kod mar megvan es mukodik is. A teljes szoftver ami az arduinoban van nem masolgattam hanem magamtol irtam. Ezzel nincs is problema. A problema a hardverekhez tartozo konyvtarakkal van amik licencesek.
A kovetkezo lepes az less hogz atnezetem ezeket a licenceket egy hozza erto emberrel aztan megirom itt a tapasztaltakat.
Eleg sok kiegeszito sort ad hozza a szoftverem mert ettol less egz specialis teruletre letrehozott eszkoz/eszkozok.
Igen epithetnek maguknak is, cask valakinek ez a munkahoz kell igy nincs se ereje se energiaja ezzel foglalkozni.
Mielott egy ilyen helyre kerul hosszu tesztelesen megy at eles kornyezetben. Barmi hiba van azt javitani tudom. (egyik ilyen eszkoz mar tobb mint fel eve mukodik hiba nelkul, de most inkabb a licenc dolog erdekelne).
Nem tudom miert de en olyan ember vagyok hogy ha az alapokat megtanulom akkor arra sajat elmebol tudok epiteni. Igy eleg cask a pelda kodokat megtanulnom es kepes vagyok nagyon ossze tett kodsorokat alkotni sajat elmebol. Nincs is gondom a tiszta uttal de elotte tudnom kellene hogy is mukodik ez a tiszta ut pontosan. -
zsolti_20
senior tag
válasz
DigitXT #12168 üzenetére
Köszönöm,ma lesz egy ksi időm neki állok próbálgatni hogy melyik mire való inkább.
Egy másik kérdésem is lenne, lehetséges olyat megoldani, hogy egy led 1 mp-t világítson és egy 1 mp-t ne, de ne legyen össze köttetésben a fő kóddal? Hanem csak nyomja a led villogást a forráskódtól függetlenül.
-
Bogyo72
csendes tag
válasz
DigitXT #12150 üzenetére
Megvannak a tesztek, hibát hibára halmoztam!
Írtam, hogy gettextbounds-nál növeltem a törlendő szélességet, csak azt nem figyeltem, hogy ha a kezdő x koordinátát előrébb hozom, akkor a szélességet kétszer annyival kell növelni. Így ugyan az elején nőtt a terület, de végén a gond megmaradt. [kép] Itt kicsit csalóka, de törlés vége az utolsó karakter végénél van.
Javítottam a hibát, de ettől mégsem lett jobb. [kép]
A számok felülírása, saját magukkal pedig azért nem működött, mivel a bufer változót rossz helyen hoztam létre, így ha kapott is értéket mindig kinullázódott mielőtt kiírattam volna.
Ez is megoldva. és láss csodát működik, nem szemetel, nincsenek fura összecsúszások. -
Bogyo72
csendes tag
válasz
DigitXT #12148 üzenetére
Természetesen a teljes változó értékét íratom ki mindig, így valóban törölnie kellene. De majd csinálom a tesztet, plusz lehet teszek a törlés és új kiírás közé némi szünetet, hogy lássam tényleg mi történik.
A gettextbounds-nál éppen ezért növeltem a befoglaló téglalap szélességét, hogy biztosan töröljön, mégis ott maradnak a fölös pixelek. Itt meg megpróbálok nem háttérszínű törlést, hogy akkor hogyan viselkedik. -
_q
addikt
válasz
DigitXT #12081 üzenetére
Mind a kettő, értékelésekben is megmérték és én is megmértem egy opus BT-vel. 3200-3400 mAh-t tudott mind a kettő, amit vettem. [link]
11.11 akcióban 2 db vásárlásával 750 Ft-ból is kihozható darabja.
(#12080) nyirzoz
Nekem is így néz ki, a napelemet nem kötöttem rá. Viszont az aksi és az ESP közé ment a DC-DC konverter. Te miért nem tettél oda? Ki tudnád tolni vele a működési időt. -
Janos250
őstag
válasz
DigitXT #11889 üzenetére
"az Arduino-féle String implementáció egy nagy sz"
"nem igazán ajánlott használni."
Így igaz. A nagybetűs String valóban gyengécske, de azt is mondjuk meg, hogy mit érdemes használni:
a kisbetűs string viszont jó.
Ismét mondom, hogy nem ötegapám UNO, NANO, MEGA lapja az, amit érdemes használni, hanem valami korszerűbb,
ami - mondhatni - nem drágább, de sokkal többet tud, és az UNO-ra, stb.-re írt programok símán áttehetők rá,
ha nincs benne valami nagyon hardware közeli dolog.
Mint már többször mondtam, én mostanság az ESP32-t használom.
5 dollárért megvehető postával együtt.
https://www.banggood.com/Geekcreit-30-Pin-ESP32-Development-Board-WiFibluetooth-Ultra-Low-Power-Consumption-Dual-Cores-ESP-32-ESP-32S-Board-p-1461896.html?rmmds=search&cur_warehouse=CN
Vagy az UNO mintájára:
https://www.banggood.com/LILYGO-TTGO-ESP32-WiFi-bluetooth-Board-4MB-Flash-UNO-D1-R32-Development-Board-p-1163967.html?rmmds=search&cur_warehouse=CN
Megnéztem a régi Arduino String osztályát. Bizony elég sok tagfüggvény nincs benne, ami a C++ -ban benne van. Példának az appendet vettem,
hogy a részletesebb infók netről megtekinthetők legyenek.
Ha már itt tartottam, még pár - szintén netről szedett - példát is beleraktam.
A mostani C++11 számos olyan dolgot is tartalmaz, amit az ősrégiek nem.
Használhatjuk az alábbiakat:#include <array>
#include <atomic>
#include <chrono>
#include <condition_variable>
#include <forward_list>
#include <future>
#include <initializer_list>
#include <mutex>
#include <random>
#include <ratio>
#include <regex>
#include <scoped_allocator>
#include <system_error>
#include <thread>
#include <tuple>
#include <typeindex>
#include <type_traits>
#include <unordered_map>
#include <unordered_set>
Ezek közül is raktam be példákat. Hogy miért jobb pl. az array, achrono
, athread
használata? Mert ez szabványos, bárhol ugyanígy fut, nem olyasmit tanulunk meg, amit máshol nem tudunk használni.
Íme:
Eredetileg ez egyetlen program lenne, de PH szerkesztője valamiért darabokra szedte.#define __cplusplus 201103L
#include <iostream>
#include <string>
#include <sstream>
#include <array>
#include <iterator>
#include <chrono>
#include <ctime>
#include <thread>
//ESP32 Dev Module
void setup() {
//http://www.cplusplus.com/reference/string/string/append/
std::string str;
std::string str2="Writing ";
std::string str3="print 10 and then 5 more";
// used in the same order as described above:
str.append(str2); // "Writing "
str.append(str3,6,3); // "10 "
str.append("dots are cool",5); // "dots "
str.append("here: "); // "here: "
str.append(10u,'.'); // ".........."
str.append(str3.begin()+8,str3.end()); // " and then 5 more"
// str.append<int>(5,0x2E); // "....."
std::cout << str << '\n';
/*
//A String (nagy S) a regi Arduino string kezelese
// ebben nincs append, forditasi hibat jelez
String xstr;
String xstr2="Writing ";
String xstr3="print 10 and then 5 more";
// used in the same order as described above:
xstr.append(xstr2); // "Writing "
xstr.append(xstr3,6,3); // "10 "
xstr.append("dots are cool",5); // "dots "
xstr.append("here: "); // "here: "
xstr.append(10u,'.'); // ".........."
xstr.append(xstr3.begin()+8,xstr3.end()); // " and then 5 more"
*/
//Ez is egy netrol vett pelda
//https://stackoverflow.com/questions/2066184/how-to-use-c-string-streams-to-append-int
std::stringstream stream("Something ");
stream.seekp(0, std::ios::end);
stream << 12345;
std::cout << stream.str();
// C++11 array
//https://en.cppreference.com/w/cpp/container/array
// construction uses aggregate initialization
std::array<int, 3> a1{ {1, 2, 3} }; // double-braces required in C++11 prior to the CWG 1270 revision
// (not needed in C++11 after the revision and in C++14 and beyond)
std::array<int, 3> a2 = {1, 2, 3}; // never required after =
std::array<std::string, 2> a3 = { std::string("a"), "b" };
// container operations are supported
std::sort(a1.begin(), a1.end());
std::reverse_copy(a2.begin(), a2.end(),
std::ostream_iterator<int>(std::cout, " "));
std::cout << '\n';
// ranged for loop is supported
for(const auto& s: a3)
std::cout << s << ' ';
// C++11 chrono
//https://en.cppreference.com/w/cpp/chrono
auto start = std::chrono::system_clock::now();
std::cout << "f(42) = " << fibonacci(42) << '\n';
auto end = std::chrono::system_clock::now();
std::chrono::duration<double> elapsed_seconds = end-start;
std::time_t end_time = std::chrono::system_clock::to_time_t(end);
std::cout << "finished computation at " << std::ctime(&end_time)
<< "elapsed time: " << elapsed_seconds.count() << "s\n";
// C++11 thread
//https://en.cppreference.com/w/cpp/thread
//https://thispointer.com/c-11-multithreading-part-1-three-different-ways-to-create-threads/
std::thread threadObj1(thread_function);
std::thread threadObj2(thread_function);
if(threadObj1.get_id() != threadObj2.get_id())
std::cout<<"Both Threads have different IDs"<<std::endl;
std::cout<<"From Main Thread :: ID of Thread 1 = "<<threadObj1.get_id()<<std::endl;
std::cout<<"From Main Thread :: ID of Thread 2 = "<<threadObj2.get_id()<<std::endl;
threadObj1.join();
threadObj2.join();
}
void loop() {
}
// mert a chrono minta hasznalja
long fibonacci(unsigned n)
{
if (n < 2) return n;
return fibonacci(n-1) + fibonacci(n-2);
}
//// mert a thread minta hasznalja
void thread_function()
{
std::cout<<"Inside Thread :: ID = "<<std::this_thread::get_id()<<std::endl;
}
-
-
zsolti_20
senior tag
válasz
DigitXT #11920 üzenetére
Igen valami ilyesmire gondoltam ahogz ossze foglaltad.
if gomb 1 megnyom
ugras a void kuldesbe
if gomb 2 megnyom
ugras void kuldes2void kuldes()
{
radio.begin();
radio.openWritingPipe(addresses[1]);
radio.setPALevel(RF24_PA_MIN);
radio.stopListening();
const char text[] = "Hello World";
radio.write(&text, sizeof(text));
delay(1000);
}
void kuldes2()
{
radio.begin();
radio.openWritingPipe(addresses[2]);
radio.setPALevel(RF24_PA_MIN);
radio.stopListening();
const char text[] = "Hello World";
radio.write(&text, sizeof(text));
delay(1000);
}valahogz igy gondoltam, de sporolni szeretnek kicsit.
-
zsolti_20
senior tag
válasz
DigitXT #11916 üzenetére
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>RF24 radio(7, 8); // CE, CSN
const byte addresses[][6] = {"00001", "00002", "00003", "00004", "00005"};
void setup() {}
void loop()
{radio.begin();
radio.openWritingPipe(addresses[1]);
radio.setPALevel(RF24_PA_MIN);
radio.stopListening();
const char text[] = "Hello World";
radio.write(&text, sizeof(text));
delay(1000);
}
Ez kb a teljes kod. Es egz gombnyomassal szeretnem az osszes cimre elkuldeni anelkul hogz mindegyik cimhez kulon voidot hoznek letre. -
Janos250
őstag
válasz
DigitXT #11895 üzenetére
Valóban, nem kicsit tud többet. Van rajta oprendszer (freeRTOS), két magos, igy ténylegesen párhuzamosan programozható, gyakorlatilag akárhány taskot indithatsz prioritással, az oprendszer kezeli. Tudja a C++11 párhuzamos programozását is. Nagyon sok hardware periféria kezelője van. 240 Mhz-en jár mindkét mag. Olyan számlálója is van a többi mellett, ami 80 Mhz-el jár, amivel már elég pontos időzités érhető el. Én nagyon kedvelem.
-
zsolti_20
senior tag
válasz
DigitXT #11897 üzenetére
Közben elő szedtem a megámat és hát kicsit jobb helyzet:
"Vázlat használ 27806 bájt (10%) -ot a program tárhelyből. A maximum 253952 bájt.
A globális változók 1731 bájt (21%)-ot használnak a dinamikus memóriából, 6461 bájtot hagyva a helyi változóknak. A maximum 8192 bájt."
Nanon ez 87% volt. Mostmár csak azt kell kitalálnom, hogy oldjam meg a forrasztást a nanohoz. Alaplap aljához forrasszak? Vagy készítsek egy sheildet? A problémám hogy ebben az esetben nincs fix forrasztás csak érintkezés. És nem tudom ez mennyire biztos. UNO-nál nem volt az. -
op9
aktív tag
válasz
DigitXT #11780 üzenetére
Mégis találtam hasonlót.
De az ára...Köszi a segítségeket!
De ha esetleg lenne valakinek elfekvőben, akkor szóljon! -
op9
aktív tag
-
tonermagus
aktív tag
válasz
DigitXT #11735 üzenetére
Szóval én azt feltételezem, hogy az a motor amit belinkeltem és az üresjárati áramfelvétele 1-2A, terhelés hatására megnöveli az áramfelvételét akár 25A-re (ezen videó szerint) és ez pedig kicsinálja az L298N-t. Ez így van?
Ha igen milyen H-híd van, ami elbír 20-30A-t és esetleg megbirkózik a bekapcsoláskor jelentkező ennél is magasabb A-al?
-
tonermagus
aktív tag
válasz
DigitXT #11719 üzenetére
Köszönöm a válaszokat!
Akkor megnyugodtam hogy nem a kapcsolással van a gond, hanem egyszerűen a 9V-os elem nem bírja a tempót. Ennek nagyon örülök, mert ezt a 9V-os elemet csak a próbára tettem bele, nyilván 11,1 V-os 3S liPo-val fogom meghajtani a motort.
Viszont ha már a liPo-nál tartunk: ez a L289N-en van egy jumper. Ha 12V alatti a betáp akkor bent lehet hagyni mert így előállítja az 5V-ot amiről meg tudom táplálni az arduino-t. Viszont a 11,1 3S-es liPonak csak a névleges feszültsége 11,1. Teljesen feltöltve ~12,8V körül mozog. Ez azt jelenti hogy ezzel ki is nyírom a L289N-t?
-
zsolti_20
senior tag
válasz
DigitXT #11690 üzenetére
Nem tudom mit ronthatok el.
DateTime now = RTC.now();
filename[0] = (now.year()/1000)%10 + '0'; //To get 1st digit from year()
filename[1] = (now.year()/100)%10 + '0'; //To get 2nd digit from year()
filename[2] = (now.year()/10)%10 + '0'; //To get 3rd digit from year()
filename[3] = now.year()%10 + '0'; //To get 4th digit from year()
filename[4] = now.month()/10 + '0'; //To get 1st digit from month()
filename[5] = now.month()%10 + '0'; //To get 2nd digit from month()
filename[6] = now.day()/10 + '0'; //To get 1st digit from day()
filename[7] = now.day()%10 + '0'; //To get 2nd digit from day()sprintf(masodik, "%s%02d%02d%02d.TXT",konyvtar, now.day(),now.month(),now.year());
sprintf(filename, "%s%02d%02d%02d.TXT",konyvtar2, now.day(),now.month(),now.year());És kiíratásnál az egyik ezt mutatja:
konyvtar/03092019.TXT
Másik pedig ezt:
konyvtar2/03092019.konyvtar/03092019.TXTAzt szeretném hogy kiíratásnál ez legyen:
konyvtar/03092019.TXT
konyvtar2/03092019.TXTDe valamiért egybe olvasztotta őket.
-
zsolti_20
senior tag
válasz
DigitXT #11687 üzenetére
És meglett a probléma!!!
Ez volt a helyes sprintf:
a myName a könyvtár neve pl asd/
sprintf(filename, "%s%02d%02d%02d.TXT",myName, now.minute(),now.month(),now.year());
Köszi mindent.
Nem hittem volna, hogy egy ilyen viszonylag egyszerű dologgal eleszek kb 10 órán keresztül.
-
zsolti_20
senior tag
válasz
DigitXT #11687 üzenetére
Akárhogy próbálom ezzel is ugyanúgy lefagy az egész.
char data[100];
char* myName = "asd/";
char filename[] = "00000000.TXT";
char* Name = filename;sprintf(data, "%s%s", myName,Name);
if (writeFile.open(data, O_RDWR | O_CREAT | O_AT_END))
{
Serial.println("WWW");
writeFile.close();
}És módosítottam az idő lekérésnél is ahogy írtad.
SZERK.:
sprintf(data, "%s%u", myName,Name);-ra módosítva létrehozza a fájlt fagyás nélkül de a file neve 270 lesz az időpont helyett. OMG?! -
zsolti_20
senior tag
-
zsolti_20
senior tag
válasz
DigitXT #11676 üzenetére
Tudtam, hogy nem szabad szabad ennyire örülni.
Beépítettem a főkódba és most megvan a sprintf, de amint használni akarom, kifagy az egész. Ha változó helyett megadok neki egy stringet pl "kecske.TXT" akkor lefut a kód. Talán a konvertálásnál kellene valamit csinálni? Nem megfelelő neki a string ilyen formában?
-
zsolti_20
senior tag
válasz
DigitXT #11669 üzenetére
Ez is fura, hogy a a filename változó nevén létre tudja hozni, de ha ugy adom meg hogy:
string var1 = filename;
string var2 = "kecske";
string x = var1 + var2;akkor a string x-el sem hozza létre a fájlt.
Persze, itt a kód részlet:
String var1 = filename;
String var2 = "kecske/";
String comb = "";
comb = var2 + var1;
//Check file name exist?
int str_len = comb.length() +1;
char char_array[str_len];
comb.toCharArray(char_array, str_len);
Serial.println(str_len);
Serial.println(char_array); -
zsolti_20
senior tag
-
zsolti_20
senior tag
válasz
DigitXT #11660 üzenetére
De nem értem miért működik a kód ha nem adok meg neki mappát. Amint próbálom megadni neki hogy az asd nevű mappában keresse a változót csak ezt a hibakódot kapom:
"no matching function for call to 'SDLib::SDClass::exists(const char [5], char [13])'"viszont ha kiveszem az asd-ot és csak a változó nevét adom meg akkor hibátlanul működik.
-
-
-
válasz
DigitXT #11230 üzenetére
Azért lett udp, mert gyorsabban reagál. Ha éppen reagál akkor tényleg... Fél méter sincs a telefon meg a Wemos között. Még esetleg másik wifi csatornával kipróbálom, hátha azért van ennyi csomagvesztés mert az alap 1-es telített. Bár csak 3 van rajta a 20 konkurens wifiből.
Egyébként nem jó az elgondolásom, mert a RoboRemo csúszkánál meg giroszkópnál se sima számokat küld, hanem el kell nevezni legalább egy betűvel az adott 'csatornát'. Szóval ha maradok az enyémnél akkor le kell vagdosni az első betűt, és utána számmá alakítani.
Ha Vargalex javaslatát követem, akkor meg nem tudom a sebességet átküldeni. Csak string-ként tudja fogadni a csomagokat, és utána abból kell kibányászni a számokat. -
Teasüti
nagyúr
válasz
DigitXT #10956 üzenetére
Nem is értem, hogy az mire jó, de sebaj.
Resetelni a fokozatjelzőt.fontos(abb) paramétereket is nézhetnél,
Igazad van. Olvastam a cikket. Végül is van létjogosultsága. Utána nézek majd miből állna egy ilyen beavatkozás.Injektort nézem épp a bekötési diagrammon. Közvetlenül a computer-be van kötve mind a négy, külön-külön. Hát elképzelésem sincs ott miféle kommunikáció zajlik.
Ez lehet nem a beolvasok egy négyszögjelet kategória.Arról nem is beszélve, hogy a service manual nem tárgyalja a computer működését és felprogramozását. Injektortérkép nélkül meg mire mennék?
Fordulatszámnál én is sokat agyaltam hogy kéne számolni az impulzusokat.
Én végül arra jutottam, hogy a felfutó és lecsengő éleket is figyelem (kétszer annyi jelem van így, ami nagyon nem mindegy a minimálisan mérhető sebesség közelében) és 250 ms-enként összegzem, majd extrapolálom a kapott értéket emberi mértékegységre és súlyozott átlagolom az utolsó 1 másodperc méréseit. Így kapok egy nem túl pontatlan 250 ms-es frissítési frekvenciát.
Ennél jobb ötletem nincs impulzus számlálásra.Egy másik megközelítés, ha a periódusidőt méred. Ez instant eredményt ad és a hardveres RMT modul szerintem elég precíz is hozzá, hogy jó legyen. PCNT-t könnyebb volt kivitelezni; majd ilyenekkel akkor foglalkozom, ha már nem lesz más dolgom.
-
Teasüti
nagyúr
válasz
DigitXT #10954 üzenetére
Ha az világít fordulaton,
akkor a motornak már reszeltek.
Ugyan már! Nem áll be a motor azonnal.
Olaj nélkül is elmegy egy-két percet, mire besül.
Ha észreveszi az ember a jelzést és félreáll visszarakni az olajszűrőt ami lelazult 100 méterrel korábban, akkor az ég adta világon semmi baj nem történik. Tudom, már jártam így - régen egy autóval.
Valamint a motorolaj hívők közé se tartozom, hiába veszem a full szinti csökkentett hideg oldali viszkozitást.
De ha lehet ne csináljunk motoros topikot itt, így is okkal hanyagolom azt a topikot! -
Teasüti
nagyúr
válasz
DigitXT #10951 üzenetére
Azokhoz nem értek.
Olajnyomás... szerintem a piros lámpa a műszeregységen bőven elég a feladatra. Többet arról nekem user-ként nem kell tudnom.
Fogyasztást hogy kell mérni? Mármint milyen hardver kell ahhoz? Injektor, jah.TPMS szenzoron gondolkodok még amúgy, de az istenért nem találok motor felnihez valót, hát még olyat ami hack-elhető... Szelepsapkás meg gagyi, olyan nem kell.
-
Teasüti
nagyúr
válasz
DigitXT #10945 üzenetére
Uhh, sztem ezt nem akartad megkérdezni!
Tervben van egy logout-os cikk belőle, majd talán két év múlva lesz esedékes a fejlesztés üteméből következtetve.
Én "csak" hármat használok ebből, viszont a nyákot úgy terveztem és gyártattam le, hogy az egyik az ADC2-n van. Álmomban nem gondoltam volna, hogy ilyen alapvető funkció fog megszívatni.Gépjárművet okosítok, pontosabban a motoromat automatizálom kicsit.
Ehhez felhasználtam az ESP32 összes létező portját - beleértve a strapping pin-eket is -, valamint I2C csatornán még vagy 6 másik eszközt. Köztük szenzor modulok, egy numerikus kijelző, egy saját tervezésű gpio extender amin van még +16 db ki- és bemenet az ESP sajátjain felül.Dióhéjban csak - mert szerintem a többiek már unják:
1. Onnan indult az egész projekt, hogy ws2812b ledszalagokat raktam a motorra a karácsonyfa hatásért, és mert a Halálos Iramban, valamint az NFS Underground 1 és 2 nagy hatással volt a gyerekkoromra. Ez lefoglal 6 lábat, 6 csatornán 10 szalag van bekötve. Köztünk az egyik egy shift assistant feladatot lát majd el a műszerfalon. A többi csak eye candy.Aztán ha már mikrovezérlő, akkor elkezdtem azon filózni miket tudnék művelni vele.
Innen jöttek az alábbiak:2. Terveztem egy smart féklámpa panelt a gyári ledek helyett, amin pwm vezérléssel tudok előállítani nagyjából 2000 lument (úgy 45 wattnyi 5830-as piros ledekkel). Ennek redundáns vezérlése van health&safety megfontolásból, egy opcionális külső pwm jel és egy belső 555 vezérlés, amik közt automatikusan átkapcsol, ha külső pwm jelet kap. Ez a lámpa kapott még egy aktív hűtést és egy termisztoros hőérzékelést, ami a ventilátorokat kapcsolja. (Elvileg a normál féklámpa fényerőhöz tartozó ~20% kitöltési tényezőnél még nem annyira forrósodnak a ledek, de jobb a békesség.)
3. Beolvasom a motor sebességszenzorát és tacho szenzorát. A sebességjel a féklámpa algoritmusához kell. Hasonlóan mint mindenféle figyelemfelkeltő smart féklámpánál, amikben gyorsulásérzékelő van (aminek a zajos jele egy határ szar, össze-vissza villog az összes ilyen megoldás, ezért én csináltam egy jobbat). Meg az elektromos láncolajozóhoz - ugye álló helyzetben nem akarok olajat köpködni... (Ez utóbbit megfejelem még egy esőérzékelővel is az intenzívebb olajozáshoz).
Ezen felül saját sebességjelet fogok előállítani, mert úgy +8%-ot csal az órám. Ezt fogom kalibrálni GPS méréssel. Ez volna az ún. speed-o-healer funkció, ami általában nem olcsó külön megvenni.
Azok szoktak ilyet használni, akik a gyáritól eltérő gumiméretet raknak fel. Engem csak simán zavar a 8%, úgy gondolom eléggé felnőtt vagyok már ahhoz, hogy el tudjam dönteni mennyivel akarok menni.
A tacho szenzorból meg azt állapítom meg, hogy jár-e a motor. Illetve a led szalagok effektezéséhez fog még jól jönni. Jah meg a shift assistant-hoz és a fokozat jelzőhöz a numerikus kijelzőn.4. Egy-egy perifériát kapcsolok még relével; úgy, mint a hűtőventilátor (a gyári hőkapcsoló 106 foknál kapcsol, én kicsit lejjebb szeretnék - ehhez ugye be kell olvasnom a hőmérsékletet is), a tompított fényszóró (gyárilag mindig világít; én automatikusan szeretném kapcsolni a környezeti fényviszonyoknak megfelelően, mint némely modern autóknál), a duda (tetszik az ilyen vészfékezéses automatikus duda az autóknál, ezt implementálom a motoromra is; na meg riasztóként is működhet), a kill switch (csak egy bizonyára felesleges security funkció lesz, amivel meg tudom szakítani a gyújtást).
5. Monitorozom az összes vezérlőszervet a kormányon. Rákapcsolódok az indexekre, a fékkapcsolóra, a kuplungra, az Neutral jelzőre, stb. Ezek az inputok mindenféle dologra jók lesznek. Pl. tervben van saját index készítése/nyomtatása, amiket egy-egy Attiny85 fog vezérelni autonóm módon, opcionális külső vezérléssel mint a féklámpa esetén. A vezérelt indexek pedig spéci ws2813a ledek lesznek.
Ezeken kívül két ledes gombot teszek még a kormányra, amire közvetlenül programozhatok gyorsan elérhető funkciókat, hogy ne kelljen a telefont buzerálni menet közben (mert hogy ez az egész hóbelevanc BT-n keresztül lesz távvezérelve egy MIT App Inventoros alkalmazással).6. Egy kicsi 5v-os buzzer-rel emlékeztetőt szeretnék alkotni, illetve automatikus deaktiválás egy adott türelmi idő után ha fent felejteném az indexeket. Ez a giroszkópikus adatokra épülő automata index funkció is elég drágán megy a piacon... Vmint mindenféle hangjelzésre jó lesz az még.
7. Numerikus kijelző, amin mindenféle adatot fogok megjeleníteni. Pl. GPS sebesség, dőlésszög (a giro szenzorból), fokozat kijelzés, stb.
8. GPS modul csatlakoztatása UART-n, amivel egyrészt a speed-o-healer-t kalibrálom, másrészt sms-es távvezérlésre ad lehetőséget. Ezt védelmi funkcióra szánom, vagyis parkoláskor ha a gyorsulásérzéklő kapást jelez, akkor küld nekem egy üzenetet. Illetve egy-egy parancsszóra reagáljon is, pl. sms nyomkövetés kezdeményezése, gyújtás megszakítása, riasztó aktiválása, stb.
9. Akkufeszültség monitorozó (pont ez került az ADC2-re), ami kezdeményezhet egy automatikus áramtalanítást akár a vezérlőn (bistabil relé a főkapcsoló, amit egyik oldalról a gyújtás kapcsol, másik oldalról a mikrovezérlő), ha egy adott feszültség alá merülne.
Egyéb kérdés?
-
DigitXT
félisten
válasz
DigitXT #10835 üzenetére
Na kivittem a kütyüt a fészerbe. Rá az éles órára: valóban 90 körül akadt meg a
mutató. Utána persze én sem tudtam visszavinni nullába, mert én is beleírtam a
programomba, hogy ha (elvileg) már végállásban van, ne próbálkozzon tovább.
Pedig egy kis erőltetéssel át lehetett volna billenteni, de nyilván ez nem opció...Szétszed, összerak, és a lényeg: TESZTEL! Nem hogy elindulok, aztán kiderül.
-
Teasüti
nagyúr
válasz
DigitXT #10830 üzenetére
Épp kérdezni akartam miféle műszeregység az, amit visszafelé lehet tekerni, vagy átfordítani?
Mert amúgy ez valid eljárás, hogy ha órát cserélnek, akkor azt egy jelgenerátorra kötve állítják be a korábbi km állásra. Én magam is megcsináltam a saját kis arduinós speed-o-healer-emet, bár még nem teszteltem. -
Új hozzászólás Aktív témák
Hirdetés
- Gigabyte alaplap topik
- GTA VI
- Audi, Cupra, Seat, Skoda, Volkswagen topik
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- BestBuy ruhás topik
- Milyen légkondit a lakásba?
- Kazy Computers - Fehérvár - Megbízható?
- Windows 11
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Le Mans Ultimate
- További aktív témák...
- GIGABYTE GeForce RTX 4060 EAGLE OC 8G (GV-N4060EAGLE OC-8GD
- TP-Link Archer AX73 AX5400 Router
- ÚJ TP-Link Archer AX55 AX3000 Router
- Intel Core i5-14600K 14-Core 3.4GHz LGA1700 Box (BX8071514600K) Processzor
- Brutál ERŐMŰ! Lenovo P710 / 2x Xeon E5 (44 mag!) / 256GB DDR4 / 2x 512 SSD / 8TB HDD / ASUS 1660 6GB
- BESZÁMÍTÁS! MSI B450 TomaHawk R5 3600 16GB DDR4 512GB SSD RX5500 XT 8GB Rampage SHIVA TT 530W
- iKing.Hu - Xiaomi 14 Ultra - Ultra White - Használt, karcmentes
- Lenovo ThinkPad L16 Gen 1 - 16" WUXGA IPS - Ultra 5 135U - 16GB - 512GB - Win11 - 2,5 év gari
- BESZÁMÍTÁS! Gigabyte B450M R5 5600X 16GB DDR4 512GB SSD RTX 3060 12GB Rampage SHIVA Seasonic 520W
- BESZÁMÍTÁS! Asus TUF B365M i7 9700F 16GB DDR4 512GB SSD RTX 3060Ti 8GB Rampage SHIVA Zalman 600W
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged