Lefordítod, feltöltöd, Futatod!
Arduino autós projekt: fedélzeti comp. építése
Ez készkapu48 írta:Teszt!
Lefordítod, feltöltöd, Futatod!
Itthon a kis meleg szobában működik.
Ránézésre legalább.
Stopperrel mérem az időt, meddig nyomom a gombot, majd az LCD kikapcsolását is (ez lenne a kimenő impulzus), 1.84-ede ahogy terveztem.
Kód: Egész kijelölése
#include <LiquidCrystal.h>
LiquidCrystal lcd(4, 5, 6, 7, 8, 9);
int LED = 13;
int GOMB = 3;
int nyomas = 0;
long ido_1;
long ido_2;
long ido_3=0;
void setup(){
pinMode(GOMB, INPUT);
pinMode(LED, OUTPUT);
digitalWrite(LED, HIGH);
}
void loop() {
ido_1=0;
while (digitalRead(GOMB) == LOW){
if (ido_1==0){
nyomas=1;
ido_1 = micros();
} //Amíg a gomb nyomva van, addig itt maradunk, de csak az első alkalommal veszünk mintát az induló időből
}
ido_2 = micros();
ido_2 = ido_2 - ido_1; //Itt már elengetemn a gombot, aktuális idő mérése, végből - a kezdeti:= eltelt idő
if (nyomas ==1){ //Ha volt gombnyomás, akkor
lcd.clear();
lcd.print(ido_2/1000000, DEC); //kiírom az idejét másodpercpben
lcd.print(",");
lcd.print(ido_2/100000%100000, DEC);
lcd.print(ido_2/10000%10000, DEC);
nyomas=0;
ido_1=micros();
while (ido_3 <= ido_2/1.84){ //majd a mért idő 1.84-ed résznyi idejére kikapcsolom az LCD világítását
ido_3 = micros();
ido_3 = ido_3 - ido_1;
digitalWrite(LED, LOW);
}
ido_3=0;
}
digitalWrite(LED, HIGH); //Itt meg vissza. Ha pl kb 18mp-ig nyomom a gombot, akkor elengedés után 10 mp-ig sötét a kijelző, majd megjelenik a 18
}(az persze kérdés, hogy a kocsiban mekkora egy impulzus ideje, meg hogy ezzel a Móricka módszerrel mekkora a legkisebb jel amit le tudok mérni
A kérdés jó. Ez sehogy.Robert írta:Tipp:
Egymás utáni impulzusok esetén ez hogyan működik? Torlódás? Elcsúszás?
Akkor lehet gond, ha éppen "adásban" van, mert addig hiába jön új jel, nem tart figyelő ciklusban a program (gondolom ezért kéne inkább megszakításokkal csinálni. Bár ekkor is torlódás lenne, s egy idő után el kéne dobni pár jelet, hogy szinkronba kerüljek)
Viszont ha a jelek közti szünet, nem kisebb mint a jel 1.84-ede, vagyis van időm "adni", akkor nincs gond.
Vagy másik megoldási ötlet: eltolt fázis:
-jön a jel, elkezdem mérni, megvan az adat.
-megvárom a következő jelet, mikor az megjön, akkor kezdek párhuzamosan adni az előző 1.84-ét, miközben mérem az újat
(kéne egy mobil szkóp, amivel meg lehet nézni a kocsi jelét minimális (alapjárat) és maximális (pl 7000 rpm) esetén)
Gondolom, 4 ütemű motor üzemanyag befecskendezést akarsz mérni?
Esetleg előzetes számításokat tudnál csinálni, hogy tudjad, milyen jelekre számíthatsz.
Nem vagyok ebben szakember. (Bocs ha butaságot írok!)
De én így gondolnám:
1 fordulat ideje = 1sec/fordulatszám
1fok elfordulás idő = 1 fordulat ideje/360
Minden második fordulat sűrítés felső holtpontja előtt van a befecskendezés.
Esetleg meg lehetne mérni, vagy lehet, hogy szakemberek ismerik, hogy hány fokot fordul a főtengely a befecskendezés alatt?
Sac: Befecskendezési idő = 1fok elfordulás idő * Befecskendezés alatt megtett szögfordulat.
Két befecskendezés között eltelt idő = 1 fordulat ideje * 2 - Befecskendezési idő

Esetleg előzetes számításokat tudnál csinálni, hogy tudjad, milyen jelekre számíthatsz.
Nem vagyok ebben szakember. (Bocs ha butaságot írok!)
De én így gondolnám:
1 fordulat ideje = 1sec/fordulatszám
1fok elfordulás idő = 1 fordulat ideje/360
Minden második fordulat sűrítés felső holtpontja előtt van a befecskendezés.
Esetleg meg lehetne mérni, vagy lehet, hogy szakemberek ismerik, hogy hány fokot fordul a főtengely a befecskendezés alatt?
Sac: Befecskendezési idő = 1fok elfordulás idő * Befecskendezés alatt megtett szögfordulat.
Két befecskendezés között eltelt idő = 1 fordulat ideje * 2 - Befecskendezési idő
Helyén való Kapu48 gondolatmenete, csak akkor lehet befecskendezés, amikor a szívó szelep nyitva van. Az pedig időben korlátos, és csak két kanyaronként per henger. Ha mind a négy henger befecskendezését nézzük akkor is fél fordulatonkén jöhet egy befecskendezés. Viszont a fél fordulaton belül akár több részletben is mehet a befecskendezés. Ahogyan a vezérlést megalkották a gyárban. Érdekes feladvány, annyi biztos.
Ha direkt befecskendezésű variáció, akkor sokkal kisebb az idő ami a befecskendezésre jut, mert ott akkor tolják be az anyagot, amikor már zárva vannak a szelepek, és sűrítési fázis van.
Engem az is elgondolkodtat, hogy mit lehet kezdeni a gyújtási szikra okozta elektronikus zajjal. Mennyire fogja vajon megbonyolítani a feledat megoldást. Feltéve persze, hogy benzin motorról beszélünk.
Ha direkt befecskendezésű variáció, akkor sokkal kisebb az idő ami a befecskendezésre jut, mert ott akkor tolják be az anyagot, amikor már zárva vannak a szelepek, és sűrítési fázis van.
Engem az is elgondolkodtat, hogy mit lehet kezdeni a gyújtási szikra okozta elektronikus zajjal. Mennyire fogja vajon megbonyolítani a feledat megoldást. Feltéve persze, hogy benzin motorról beszélünk.
Nos, mivel régebbi gk-ról van szó, én a szelepnyitást, valamint a direktbefecskendezést, rész-spricceket kihagynám.
Ahogy a gyújtásnál is volt a parazitaszikrás megoldás, úgy a befecskendezésnél is csináltak olyat, hogy az egyszerre mozgó hengerek elé egyszerre fecskendeztek be.
Annyi idő alatt nem csapódott ki a benzin a szívócsőfalra.
(Vagy csak tojtak rá
)
Indításnál pedig egyszerre fecskendezett mind, mert az -adott esetben kritikusan - leeső feszültség, az indítómotor zaj, plusz egyéb extrémnek nevezhető körülmény miatt nem bízták az elektronikára a precíz számítgatást. Ha már járt a motor, akkor lehetett vele művészkedni.
Nos, ha van egy impulzusszélességünk, akkor el lehet rajta indulni, de mindenképp érdemes az egész motor felépítését vizsgálni. Ugyanis pl. az üzemanyagnyomás csak a Grimm testvéreknél konstans, a gyakorlatban kompenzálni kell, sőt, van amikor direkt változik- hirtelen nagy terhelés esetén. Ez nem feltétlen elektronikus úton van megoldva - ld. szívócsővákuum.
Tehát tisztában kell lenni az adott motor működésével és, ha minden - de legalábbis a legtöbb- esetben tudjuk:
- befecskendezési impulzusszélesség
- üzemanyagnyomás
változó értékeit, valamint az állandók közül azt, hogy az injektor adott nyomáson, adott idő alatt mennyi üzemanyagot enged át, csak akkor fogunk tudni közelítően jó értékeket számítani.
Ez rettentő sok próbálgatást fog jelenteni (bár ez szerintem a szépsége a dolognak).
Ha ez megvan akkor már csak az alapjárat, valamint a tolóüzem kérdését kell kezelni, de ez inkább megjelenítési- , mint számítási probléma.
Úgyhogy lényeg a lényeg: általánosan működő, univerzális eszközre nem látok megoldási lehetőséget, de egy adott motorra össze lehet hozni.
Ami persze állítgatás után sokezer másikhoz is jó lesz, de nem mindhez.
Ahogy a gyújtásnál is volt a parazitaszikrás megoldás, úgy a befecskendezésnél is csináltak olyat, hogy az egyszerre mozgó hengerek elé egyszerre fecskendeztek be.
Annyi idő alatt nem csapódott ki a benzin a szívócsőfalra.
(Vagy csak tojtak rá
Indításnál pedig egyszerre fecskendezett mind, mert az -adott esetben kritikusan - leeső feszültség, az indítómotor zaj, plusz egyéb extrémnek nevezhető körülmény miatt nem bízták az elektronikára a precíz számítgatást. Ha már járt a motor, akkor lehetett vele művészkedni.
Nos, ha van egy impulzusszélességünk, akkor el lehet rajta indulni, de mindenképp érdemes az egész motor felépítését vizsgálni. Ugyanis pl. az üzemanyagnyomás csak a Grimm testvéreknél konstans, a gyakorlatban kompenzálni kell, sőt, van amikor direkt változik- hirtelen nagy terhelés esetén. Ez nem feltétlen elektronikus úton van megoldva - ld. szívócsővákuum.
Tehát tisztában kell lenni az adott motor működésével és, ha minden - de legalábbis a legtöbb- esetben tudjuk:
- befecskendezési impulzusszélesség
- üzemanyagnyomás
változó értékeit, valamint az állandók közül azt, hogy az injektor adott nyomáson, adott idő alatt mennyi üzemanyagot enged át, csak akkor fogunk tudni közelítően jó értékeket számítani.
Ez rettentő sok próbálgatást fog jelenteni (bár ez szerintem a szépsége a dolognak).
Ha ez megvan akkor már csak az alapjárat, valamint a tolóüzem kérdését kell kezelni, de ez inkább megjelenítési- , mint számítási probléma.
Úgyhogy lényeg a lényeg: általánosan működő, univerzális eszközre nem látok megoldási lehetőséget, de egy adott motorra össze lehet hozni.
Ami persze állítgatás után sokezer másikhoz is jó lesz, de nem mindhez.
A kód mások által megírva, kész, és működik. Ott az első hozzászólásban. Ez nem kérdés.
Csak nem átírni akarom, hanem megérteni s újra megírni, úgy hogy számomra fontos adatokat írjon ki!
Régebbi kocsikról van szó, enyém is egy 1986-os 8 szelepes Ford CVH motor, eredetileg ke-jet befecsivel ami át lett építve EFI-re.
A benzin nyomás adott, az ECU pedig kapcsolt negatívval vezérli az injektorokat, az összes teendő lemérni a vezérelt időt, ebből megvan mennyi a benya fogyás. Leírva tök egyszerű, megcsinálni már nem az
Mint írtam, a kódban ott tartok, hogy kész a saját BIG_NUM függvényem, az már megy, s elkezdtem csinálni az idő mérést, de itt most pihi van, várom a tanfolyam további leckéit
Az ígért saját nagy betűs (majdnem) órám:
(nem pontos, be se lehet állítani, de tök jól néz ki és az enyém
)
Csak nem átírni akarom, hanem megérteni s újra megírni, úgy hogy számomra fontos adatokat írjon ki!
Régebbi kocsikról van szó, enyém is egy 1986-os 8 szelepes Ford CVH motor, eredetileg ke-jet befecsivel ami át lett építve EFI-re.
A benzin nyomás adott, az ECU pedig kapcsolt negatívval vezérli az injektorokat, az összes teendő lemérni a vezérelt időt, ebből megvan mennyi a benya fogyás. Leírva tök egyszerű, megcsinálni már nem az
Mint írtam, a kódban ott tartok, hogy kész a saját BIG_NUM függvényem, az már megy, s elkezdtem csinálni az idő mérést, de itt most pihi van, várom a tanfolyam további leckéit
Az ígért saját nagy betűs (majdnem) órám:
(nem pontos, be se lehet állítani, de tök jól néz ki és az enyém
Kód: Egész kijelölése
#include <LiquidCrystal.h>
LiquidCrystal lcd(4, 5, 6, 7, 8, 9);
byte custchar[8][8] = {
{
B11111,
B11111,
B11111,
B00000,
B00000,
B00000,
B00000,
B00000
}, {
B00000,
B00000,
B00000,
B00000,
B00000,
B11111,
B11111,
B11111
}, {
B11111,
B11111,
B11111,
B00000,
B00000,
B00000,
B11111,
B11111
}, {
B00111,
B01111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111
}, {
B11100,
B11110,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111
}, {
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B01111,
B00111
}, {
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11110,
B11100
}, {
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111
}
};
byte bignums[10][2][3] = {
{
{3, 0, 4},
{5, 1, 6}
},{
{0, 4, 32},
{1, 7, 1}
},{
{2, 2, 4},
{5, 1, 1}
},{
{0, 2, 4},
{1, 1, 6}
},{
{5, 1, 7},
{32, 32, 7}
},{
{7, 2, 2},
{1, 1, 6}
},{
{3, 2, 2},
{5, 1, 6}
},{
{0, 0, 7},
{32, 7, 32}
},{
{3, 2, 4},
{5, 1, 6}
},{
{3, 2, 4},
{1, 1, 6}
}
};
void loadchars() {
lcd.command(64);
for (int i = 0; i < 8; i++)
for (int j = 0; j < 8; j++)
lcd.write(custchar[i][j]);
lcd.home();
}
void printbigchar(byte digit, byte col, byte row, byte symbol = 0) {
if (digit > 9) return;
for (int i = 0; i < 2; i++) {
lcd.setCursor(col, row + i);
for (int j = 0; j < 3; j++) {
lcd.write(bignums[digit][i][j]);
}
lcd.write(" ");
}
if (symbol == 1) {
lcd.setCursor(col + 3, row + 1);
lcd.write(44);
} else if (symbol == 2) {
lcd.setCursor(col + 3, row);
lcd.write(46);
lcd.setCursor(col + 3, row + 1);
lcd.write(46);
}
lcd.setCursor(col + 4, row);
}
void setup() {
pinMode(13, OUTPUT);
lcd.begin(16,2);
loadchars();
digitalWrite(13, 1);
}
int h = 15;
int m = 5;
int s = 0;
void loop() {
for (s=0;s<60;s++){
printbigchar(h/10, 0, 0);
printbigchar(h%10, 4, 0, 2);
printbigchar(m/10, 8, 0);
printbigchar(m%10, 12, 0);
lcd.setCursor(15,0);
lcd.print(s/10, DEC);
lcd.setCursor(15,1);
lcd.print(s%10, DEC);
delay(1000);
}
if (s==60){
s=0;
m++;
}
if (m==60){
m=0;
h++;
}
if (h==24) h=0;
}
Kezdő Arduinosként, de jó 30 év elektronikai, és kb. 25 év programozási (főleg Z80- és hasonlók) tapasztalattal mögöttem pár észrevétel.
Volkov legyen szerencséd az autós projekthez. Én is ebben utazok, egy régi mezőgazdasági gép személyében. Azért gondold át az 1.84-es osztást. Csak int, és long tipust látok, viszont valódi tizedessel (float konctanssal) akarsz osztani. Esetleg egy trükk, sokkal gyorsabb ("akár 7000-es fordulat"-ot írtatok), és nem csonkít 2 tizedes osztás helyett egy egésszel.
x=y/1.84 helyett x=y*25/46
Ha Pi-vel kell számolnom, használni szoktam x=y*22/7 (Pi - (22/7 = 0.00126)képletet, egész jól közelít, és maradhatok egész számoknál. Ha kevés a pontossága, lehet keresni jobb számpárt is.
Szorzáskor belépnek új helyiértékek, növeli az értékes helyiértékeket. Osztáskor van miből csonkolni, és nem kell float tipusra váltani. Bár nem tudom mennyire fontos a pontosság, de float is 32 biten tárolja az értéket, csak néhány bitet elrabol a mantissza ábrázolására, de a memóriában így is 32 biten marad!
A másik észrevételem elektronikával kapcsolatban, gondolom sokaknak ez már ismerős. Ha gépjárműre kell tervezni akkor sose gondolj normális tápra, mindig ingadozik, zajos, stb. benzinesnél ezt meg kell toldani a 20-30KV nagyságú impulzusokkal, ami ha a motoron akarsz babrálni gyújtáskábel közelsége miatt 1:1 áttételű légmagos trafónak is tekinthető. Motortérbe elektronika csak ami fontos, illetve érzékelők, amit csak lehet árnyékolva, a többit utastérbe, műszerfal mögött. Vagy annyira megterheled hogy az impulzusokat zavarhatár alá szorítsd, vagy optocsatis leválasztást mellett döntesz. Erősítő, szűrő, minden csak a mérendő impulzusaidat fogja formálni, persze sajt elképzelései alapján. Utána neked a formált, torzított impulzussal kéne dolgozni. Járműelektronikában el lehet felejteni a laborkörnyezetet. Minden zajos, minden brummos, minden változik, még a Pi és a Boltzmann sem állandó! A felverődő eső, hólé, stb is sok bajt tud okozni. Én minden csatornára optót rakok, az elég nagy terhelésű, és zajt is szépen kivédi.
Volkov legyen szerencséd az autós projekthez. Én is ebben utazok, egy régi mezőgazdasági gép személyében. Azért gondold át az 1.84-es osztást. Csak int, és long tipust látok, viszont valódi tizedessel (float konctanssal) akarsz osztani. Esetleg egy trükk, sokkal gyorsabb ("akár 7000-es fordulat"-ot írtatok), és nem csonkít 2 tizedes osztás helyett egy egésszel.
x=y/1.84 helyett x=y*25/46
Ha Pi-vel kell számolnom, használni szoktam x=y*22/7 (Pi - (22/7 = 0.00126)képletet, egész jól közelít, és maradhatok egész számoknál. Ha kevés a pontossága, lehet keresni jobb számpárt is.
Szorzáskor belépnek új helyiértékek, növeli az értékes helyiértékeket. Osztáskor van miből csonkolni, és nem kell float tipusra váltani. Bár nem tudom mennyire fontos a pontosság, de float is 32 biten tárolja az értéket, csak néhány bitet elrabol a mantissza ábrázolására, de a memóriában így is 32 biten marad!
A másik észrevételem elektronikával kapcsolatban, gondolom sokaknak ez már ismerős. Ha gépjárműre kell tervezni akkor sose gondolj normális tápra, mindig ingadozik, zajos, stb. benzinesnél ezt meg kell toldani a 20-30KV nagyságú impulzusokkal, ami ha a motoron akarsz babrálni gyújtáskábel közelsége miatt 1:1 áttételű légmagos trafónak is tekinthető. Motortérbe elektronika csak ami fontos, illetve érzékelők, amit csak lehet árnyékolva, a többit utastérbe, műszerfal mögött. Vagy annyira megterheled hogy az impulzusokat zavarhatár alá szorítsd, vagy optocsatis leválasztást mellett döntesz. Erősítő, szűrő, minden csak a mérendő impulzusaidat fogja formálni, persze sajt elképzelései alapján. Utána neked a formált, torzított impulzussal kéne dolgozni. Járműelektronikában el lehet felejteni a laborkörnyezetet. Minden zajos, minden brummos, minden változik, még a Pi és a Boltzmann sem állandó! A felverődő eső, hólé, stb is sok bajt tud okozni. Én minden csatornára optót rakok, az elég nagy terhelésű, és zajt is szépen kivédi.
Szia!Gyurci írta: Volkov legyen szerencséd az autós projekthez. Én is ebben utazok, egy régi mezőgazdasági gép személyében. Azért gondold át az 1.84-es osztást. Csak int, és long tipust látok, viszont valódi tizedessel (float konctanssal) akarsz osztani. Esetleg egy trükk, sokkal gyorsabb ("akár 7000-es fordulat"-ot írtatok), és nem csonkít 2 tizedes osztás helyett egy egésszel.
x=y/1.84 helyett x=y*25/46
Ha Pi-vel kell számolnom, használni szoktam x=y*22/7 (Pi - (22/7 = 0.00126)képletet, egész jól közelít, és maradhatok egész számoknál. Ha kevés a pontossága, lehet keresni jobb számpárt is.
A másik észrevételem elektronikával kapcsolatban, gondolom sokaknak ez már ismerős. Ha gépjárműre kell tervezni akkor sose gondolj normális tápra, mindig ingadozik, zajos, stb. benzinesnél ezt meg kell toldani a 20-30KV nagyságú impulzusokkal, ami ha a motoron akarsz babrálni gyújtáskábel közelsége miatt 1:1 áttételű légmagos trafónak is tekinthető. Motortérbe elektronika csak ami fontos, illetve érzékelők, amit csak lehet árnyékolva, a többit utastérbe, műszerfal mögött. Vagy annyira megterheled hogy az impulzusokat zavarhatár alá szorítsd, vagy optocsatis leválasztást mellett döntesz. Erősítő, szűrő, minden csak a mérendő impulzusaidat fogja formálni, persze sajt elképzelései alapján. Utána neked a formált, torzított impulzussal kéne dolgozni. Járműelektronikában el lehet felejteni a laborkörnyezetet. Minden zajos, minden brummos, minden változik, még a Pi és a Boltzmann sem állandó! A felverődő eső, hólé, stb is sok bajt tud okozni. Én minden csatornára optót rakok, az elég nagy terhelésű, és zajt is szépen kivédi.
Az osztós trükk nagyon jó tipp, köszönöm!
Ami a kocsit illeti:
ezekről tudok/tudtam.
De ebben a projektben nem kell túrkálni a motortérben, minden az utastérben lévő motorvezérlőről jön majd.
A sebesség jel is, meg az injektor vezérlő jel is.
Tápot 9V-ra fogom belőni fix-en, így hiába "ugrál" 11.8-14V ig a feszkó, mindig 9-ről fog menni az Arduino.
(vagy 5V-ra, és akkor USB-s tápját használom majd, kiderül még)
Közben megjött kínából a teszt panelem meg a kábelek, összeállt az első hsz-ben linkelt cucc, kezdődik a tesztelés
A "Mi legyen ha nincs szkópom" kérdésen gondolkodtam.
Van a következő gondolatmenetben hiba?
-a kocsiban a jel 0-14V közt lehet, ellenállás feszültség osztóval leosztom pl. a negyedére
-arduino-val mérem meghatározott időközönként
-kiküldöm serial-ra a mért értéket
-bemásolom pl. excel-be, és csinálok belőle grafikont
Van a következő gondolatmenetben hiba?
-a kocsiban a jel 0-14V közt lehet, ellenállás feszültség osztóval leosztom pl. a negyedére
-arduino-val mérem meghatározott időközönként
-kiküldöm serial-ra a mért értéket
-bemásolom pl. excel-be, és csinálok belőle grafikont
Féltem a notim belső hangkártyáját, ezért kínából rendeltem occsó USB hangkeltőt, meg töltöttem le egy FREE szkóp progit, mikrofonnal már ki is próbáltam: működik.Robert írta:A tüske rövid idejű, és max. 150V.
Nem tudod megmérni. Ennél egy hangkártya + PC is jobb....
Lehet, hogy amatőr kérdés, de inkább kérdezek mint füstöt gyártsak:
olvastam, hogy a hangkari max 0.7V-ot "szeret".
Elég ha a bemenő jelet fesz. osztóval engedem rá?
Kocsinál maradva:
bemenő max 15V, mérni szeretnék max 0,5V-ot:
akkor: 14,5K illetve 0,5K.
A bemenetre én tennék még egy z-diódát a védelem miatt, hogy letörje a nagy feszültség csúcsokat. De ha ragaszkodol a 0.7V-hoz, akkor két sorba kötött dióda, párhuzamosan téve a bemenetre is megfogja a csúcsokat.
Az osztód arányait tekintve jó, de valamelyik ellenállást helyettesítsd egy potméterrel, és akkor könnyen tudsz kalibrálni is.
Az osztód arányait tekintve jó, de valamelyik ellenállást helyettesítsd egy potméterrel, és akkor könnyen tudsz kalibrálni is.
