Arduino - projekti, ideje, savjeti, problemi izdvojena tema

poruka: 1.365
|
čitano: 442.085
|
moderatori: DrNasty, pirat, XXX-Man, Lazarus Long, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
Ova tema je sadržajno povezana sa sljedećim temama: Uvod u elektrotehniku (istosmjerna struja)
14 godina
odjavljen
offline
Re: Arduino - projekti, ideje, savjeti, problemi
mbaksa kaže...

Koristiš analogni ili digitalni hall senzor?

 

Analogni.

Kakav bi još mogao biti?

Istu stvar bi i s digitalnim morao radit(zaštitu da bi dva puta prepozna okretaj)

 

@Sad koristim ovu "forumu".

Prema vremenu jednog okretaja on računa koliko će napraviti okretaja do kraja sekunde, i onda prema tome računa.

 

float _brzina = (1000.00 / float(_vrijeme - _brzina_vrijeme)) * _OPSEG_KOTACA * 3.6;

 

_vrijeme - _brzina_vrijeme : vremenska razlika između sadašnjeg, i prošlog okretaja(koliko je vremena prošlo).

 

Za sad mi najbolje djeluje formula koja svake sekunde računa brzinu na način da broji koliko puta magnet prođe pored senzora, i taj broj pomnoži s opsegom kotača i s 3.6.

 

Poruka je uređivana zadnji put ned 15.1.2017 16:47 (Dex.pwn).
17 godina
moderator
online
Re: Arduino - projekti, ideje, savjeti, problemi

Kako je analogni spajaš ga na analogni ulaz - a tu nema interruptova niti imaju smisla.

 

Znači imaš ulaz oko 512 koji ti znači da nema magneta u blizini.

 

Pomakneš magnet iznad senzora pa očitaš vrijednost - ona će biti ili nešto viša ili nešto niža, ovisno kako si okrenuo magnet.

 

Izračunaš razliku, znači oduzmeš jedan broj od drugog. Ako ti je razlika negativna, pomnožiš s -1 - dakle da dobiš apsolutnu vrijednost. Recimo da ti je razlika 100. Da bi bio siguran da bi se svaki put aktivirao, uzmeš da ti razlika mora biti recimo veća od 60. A da za povratak u inicijalno stanje razlika mora biti recimo manja od 20.

 

Pa u loopu imaš očitanje. Računaš razliku. Imaš bool varijablu registriranProlaz.

 

if (!registriranProlaz && (razlika > 60)) {

  registriranProlaz = true;

  // radi sad s tim što hoćeš - uključi u računanje brzine

} else if (registriranProlaz && (razlika < 20)) registriranProlaz = false;

14 godina
odjavljen
offline
Re: Arduino - projekti, ideje, savjeti, problemi
mbaksa kaže...

Kako je analogni spajaš ga na analogni ulaz - a tu nema interruptova niti imaju smisla.

 

Znači imaš ulaz oko 512 koji ti znači da nema magneta u blizini.

 

Pomakneš magnet iznad senzora pa očitaš vrijednost - ona će biti ili nešto viša ili nešto niža, ovisno kako si okrenuo magnet.

 

Izračunaš razliku, znači oduzmeš jedan broj od drugog. Ako ti je razlika negativna, pomnožiš s -1 - dakle da dobiš apsolutnu vrijednost. Recimo da ti je razlika 100. Da bi bio siguran da bi se svaki put aktivirao, uzmeš da ti razlika mora biti recimo veća od 60. A da za povratak u inicijalno stanje razlika mora biti recimo manja od 20.

 

Pa u loopu imaš očitanje. Računaš razliku. Imaš bool varijablu registriranProlaz.

 

if (!registriranProlaz && (razlika > 60)) {

  registriranProlaz = true;

  // radi sad s tim što hoćeš - uključi u računanje brzine

} else if (registriranProlaz && (razlika < 20)) registriranProlaz = false;

 

 

Kod kojeg si napisao već imam napisanog.

Nije da mi detektira dva puta magnet, već čudno računa brzinu, tipa jednom izračuna 25, nakon toga je 40.

Za sad mi najbolje djeluje formula koja svake sekunde računa brzinu na način da broji koliko puta magnet prođe pored senzora, i taj broj pomnoži s opsegom kotača i s 3.6.

 

Poruka je uređivana zadnji put ned 15.1.2017 16:49 (Dex.pwn).
17 godina
moderator
online
Re: Arduino - projekti, ideje, savjeti, problemi
Dex.pwn kaže...
Kod kojeg si napisao već imam napisanog.

Da vidim.

14 godina
odjavljen
offline
Re: Arduino - projekti, ideje, savjeti, problemi
mbaksa kaže...
Dex.pwn kaže...
Kod kojeg si napisao već imam napisanog.

Da vidim.

 http://pastebin.com/8Rjr97Wq

 

Radi svoj posao.

17 godina
moderator
online
Re: Arduino - projekti, ideje, savjeti, problemi

Ak radi, super.

14 godina
odjavljen
offline
Re: Arduino - projekti, ideje, savjeti, problemi
mbaksa kaže...

Ak radi, super.

 

Kad sve stavim na bajk, moram testirati tu brzinu. Ne mogu ovako testirati.

Hvala :)

17 godina
moderator
online
Re: Arduino - projekti, ideje, savjeti, problemi
BTW nije promijer nego promjer.
15 godina
offline
Arduino - projekti, ideje, savjeti, problemi

Probaj nesto ovog tipa:

if(hall>od odredene vrijednosti){

  time = millis() - time;//trenutno - staro

  brzina = opseg/time;

  //i ako nece ok radit stavis jos delay par ms ili cak

 while(registrira_hall>od_odredene_vrijednosti)

 {}

}

//vrtit ce petlju tako dugo dok ne prestane registrirat halla

// i onda jos provjeris 

if(millis()-time<1000){ // ovo 1000 mozes probati promjeniti i isprobati kolko je neka realna vrijednost

 brzine = 0; // ako 1sec ne registrira kotac onda vraca brzinu na 0

 

 

I u setupu inicijaliziras time varijablu na millis().

Nakon prvog okretaja ce ti bit brzina skoro pa 0 i to ti ne bi trebalo radit neke probleme.(mala udaljenost/jako puno vremena).

Tako ces najrealnije dobiti brzinu jer svaki okretaj on izracunava brzinu, a ne svake sekunde.

 

EDIT:

Jedini problem ce ti biti ako je hall u polozaju registracije onda ce ostati u petlji i nece ti raditi registracija tipka za zmigavce i slicno.(mozes rjesiti interruptima)

 

EDIT2:

I dretve su moguce rjesenje, ali je to ipak overkill za tvoje znanje.

Poruka je uređivana zadnji put ned 15.1.2017 19:27 (CroNk3r).
Moj PC  
1 0 hvala 1
17 godina
moderator
online
Re: Arduino - projekti, ideje, savjeti, problemi

Koliko sam ja iščitao iz njegovog koda, njemu je problem što mu broji okretaje i onda kad ih nema jer nije implementirao histerezu. On sad tvrdi da njegov kod radi traženi posao, iako je napisao da ne radi (da mu "krivo računa"), no kad stavi na kotač vidjet će da ne radi (a ako će kojim slučajem raditi, to će biti pukom srećom, odnosno time što će mu se petlja odvijati nedovoljno brzo da uhvati false positive).

8 godina
neaktivan
offline
Arduino - projekti, ideje, savjeti, problemi

Pozdrav!

Napravio sam mali bežićni punjač za laptop koji naravno radi (moguće ga koristiti i za mobitel) :)

Ne želim objašnjavat jer nisam neki govornik.

Al' evo slike ! :D

Te što mislite o tome da napravim Mini PC koji se može prenositi i koriste se baterije :) ? Nešto kao laptop. 

 

Gabriel
 
0 0 hvala 0
14 godina
odjavljen
offline
Re: Arduino - projekti, ideje, savjeti, problemi
mbaksa kaže...

Koliko sam ja iščitao iz njegovog koda, njemu je problem što mu broji okretaje i onda kad ih nema jer nije implementirao histerezu. On sad tvrdi da njegov kod radi traženi posao, iako je napisao da ne radi (da mu "krivo računa"), no kad stavi na kotač vidjet će da ne radi (a ako će kojim slučajem raditi, to će biti pukom srećom, odnosno time što će mu se petlja odvijati nedovoljno brzo da uhvati false positive).

 

Krvo si skužio. Registrira jednom. Kad pomaknem magnet, i ponovno ga približim, opet uhvati(znači radi kako treba). Problem je (sad) iskreno ne znam ni ja gdje. Javim se kad testiram na bajku brzinu, ovako sam testirao rukom

14 godina
offline
Arduino - projekti, ideje, savjeti, problemi

Pokušavam napraviti VU metar problem mi je što kada očitavam signal od kojeg bi htio napraviti ADC dobivam konstantno nulu. Spojio sam ground konektor kabla na GND arduina a jedan kanal na analogni ulaz(i očitavam sa analogRead taj pin)međutim koliko god ja pojačao zvuk na računalu preko kojeg šaljem signal i dalje preko serial.printa vidim da nema signala. Ima li netko ideju zašto je tome tako? Treba li mi neki međusklop za takvo nešto?

Ako nisi zadovoljan sobom okreči ju ponovno
Moj PC  
0 0 hvala 0
10 godina
offline
Re: Arduino - projekti, ideje, savjeti, problemi
@Dex.pwn, jesi li razumio sta sam ti ja napisao? Ne mozes tako mjeriti brzinu, uvijek ces imati odstupanja. Ne mozes ni brojati prolaze u sekundi jer ce ti rezolucija biti mala, ti mozes imati 3 o/s ali i 3,2 o/s a i dalhe ce ti brojac biti na 3. Trebas mjeriti vrijeme jednog okretaja i na osnovu toga racunati brzinu.
 
0 0 hvala 0
17 godina
moderator
online
Re: Arduino - projekti, ideje, savjeti, problemi
Dex.pwn kaže...
mbaksa kaže...

Koliko sam ja iščitao iz njegovog koda, njemu je problem što mu broji okretaje i onda kad ih nema jer nije implementirao histerezu. On sad tvrdi da njegov kod radi traženi posao, iako je napisao da ne radi (da mu "krivo računa"), no kad stavi na kotač vidjet će da ne radi (a ako će kojim slučajem raditi, to će biti pukom srećom, odnosno time što će mu se petlja odvijati nedovoljno brzo da uhvati false positive).

 

Krvo si skužio. Registrira jednom. Kad pomaknem magnet, i ponovno ga približim, opet uhvati(znači radi kako treba).

Kak znaš da registrira samo jednom?

 

Ako ti očitanje malo oscilira, aktivirat će ti ga više puta. Nemaš mehanizam protiv toga. A ako ti ga aktivira više puta, rezultat je pogrešna (prevelika) brzina. A tebe muči pogrešna brzina, ne?

 

Umjesto da se mučiš s "pogrešnom brzinom" (koja je ispravna ako imaš višestruka pogrešna očitanja!), prvo se osiguraj da ne može doći do višestrukih pozitivnih očitanja (false positivea). Ako nakon toga imaš problema s krivim mjerenjem brzine, onda kreni to rješavat. Nemoj pokušavati rješavati posljedicu bez da si uklonio potencijalni uzrok!

16 godina
odjavljen
offline
Arduino - projekti, ideje, savjeti, problemi

A zašto ne bi samo mjerio vrijeme između dva hita i na osnovu toga računao brzinu?

Ovaj forumaš je netolerantan prema osobama svih nacionalnosti, rasa i spolnog opredjeljenja te smatra da svaka osoba ima pravo biti ugnjetavana zbog svojih glupih mišljenja.
Moj PC  
0 0 hvala 0
17 godina
moderator
online
Re: Arduino - projekti, ideje, savjeti, problemi
zelenbic kaže...

Pokušavam napraviti VU metar problem mi je što kada očitavam signal od kojeg bi htio napraviti ADC dobivam konstantno nulu. Spojio sam ground konektor kabla na GND arduina a jedan kanal na analogni ulaz(i očitavam sa analogRead taj pin)međutim koliko god ja pojačao zvuk na računalu preko kojeg šaljem signal i dalje preko serial.printa vidim da nema signala. Ima li netko ideju zašto je tome tako? Treba li mi neki međusklop za takvo nešto?

Imam slični problem, nisam ga još išao riješiti, istraživao nešto jesam - trebao bi koristiti neki sklop, recimo nešto poput ovog.

17 godina
moderator
online
Re: Arduino - projekti, ideje, savjeti, problemi
Sum_of_all_fears kaže...

A zašto ne bi samo mjerio vrijeme između dva hita i na osnovu toga računao brzinu?

Da, trebao bi tako.

 

 

Ja inače pričam o ovome: uvjet za okidanje mu je pin_brzina > brzina_senzor. Recimo da je brzina_senzor 600. Vrti petlju, magnet se približava senzoru, u jednom trenutku bude očitanje 601 i uhvatilo. Ako očitanje odmah ne bude raslo, nego recimo padne na 509 (sasvim normalne oscilacije kod analognog očitanja), "oduhvatit će", i već idući trenutak kad očitanje ponovno pređe 600 imat će još jedno okidanje u istom krugu - imat će dvostruku brzinu u tom trenutku. Čist na račun analognog očitanja, koje uvijek malo hoda sim-tam.

 

 

Poruka je uređivana zadnji put ned 15.1.2017 20:59 (mbaksa).
14 godina
odjavljen
offline
Re: Arduino - projekti, ideje, savjeti, problemi
LunKraljPonoci kaže...
@Dex.pwn, jesi li razumio sta sam ti ja napisao? Ne mozes tako mjeriti brzinu, uvijek ces imati odstupanja. Ne mozes ni brojati prolaze u sekundi jer ce ti rezolucija biti mala, ti mozes imati 3 o/s ali i 3,2 o/s a i dalhe ce ti brojac biti na 3. Trebas mjeriti vrijeme jednog okretaja i na osnovu toga racunati brzinu.

 

Trenutno koristim taj način. Ostale načine koje sam napisao su mi između /*, i */ 

 

 

mbaksa kaže...
Dex.pwn kaže...
mbaksa kaže...

Koliko sam ja iščitao iz njegovog koda, njemu je problem što mu broji okretaje i onda kad ih nema jer nije implementirao histerezu. On sad tvrdi da njegov kod radi traženi posao, iako je napisao da ne radi (da mu "krivo računa"), no kad stavi na kotač vidjet će da ne radi (a ako će kojim slučajem raditi, to će biti pukom srećom, odnosno time što će mu se petlja odvijati nedovoljno brzo da uhvati false positive).

 

Krvo si skužio. Registrira jednom. Kad pomaknem magnet, i ponovno ga približim, opet uhvati(znači radi kako treba).

Kak znaš da registrira samo jednom?

 

Ako ti očitanje malo oscilira, aktivirat će ti ga više puta. Nemaš mehanizam protiv toga. A ako ti ga aktivira više puta, rezultat je pogrešna (prevelika) brzina. A tebe muči pogrešna brzina, ne?

 

Umjesto da se mučiš s "pogrešnom brzinom" (koja je ispravna ako imaš višestruka pogrešna očitanja!), prvo se osiguraj da ne može doći do višestrukih pozitivnih očitanja (false positivea). Ako nakon toga imaš problema s krivim mjerenjem brzine, onda kreni to rješavat. Nemoj pokušavati rješavati posljedicu bez da si uklonio potencijalni uzrok!

 

Serial.println("lalalalala");

 

Sum_of_all_fears kaže...

A zašto ne bi samo mjerio vrijeme između dva hita i na osnovu toga računao brzinu?

 

Ako misliš kao i Lun, to već koristim. 

 

 

 

@ Baksa, evo printa.

http://pastebin.com/NUneM7n1

Za cijeli prolazak kroz loop je potrebno oko 90 do 100 ms. Da se kotač okrene deset puta u sekundi, to je 80 km/h(nemoguće u Slavoniji).

 

 

Poruka je uređivana zadnji put ned 15.1.2017 21:30 (Dex.pwn).
17 godina
moderator
online
Re: Arduino - projekti, ideje, savjeti, problemi
Dex.pwn kaže...
@ Baksa, evo printa.

http://pastebin.com/NUneM7n1

Za cijeli prolazak kroz loop je potrebno oko 90 do 100 ms. Da se kotač okrene deset puta u sekundi, to je 80 km/h(nemoguće u Slavoniji). 

Loš kod opravdavati sporošću loopa (koji je ujedno spor zbog lošeg koda!), tim više što sam ti objasnio kako da kod napišeš kak spada, je... Ono... Ne znam što da ti kažem.

14 godina
odjavljen
offline
Re: Arduino - projekti, ideje, savjeti, problemi

Ne kažem da je loše napisan. Napisao sam to samo kao informaciju.

17 godina
moderator
online
Re: Arduino - projekti, ideje, savjeti, problemi
Dex.pwn kaže...

Ne kažem da je loše napisan. Napisao sam to samo kao informaciju.

LOL ja kažem da je tvoj kod loše napisan, tvoj algoritam. To kak si napravio se tako jednostavno ne radi, čak i kad bi ti program u tvojim tipičnim uvjetima ispravno radio. Napisao sam kako se radi. Ali dobro, što mene briga ako ti želiš naučiti loše programirati...

14 godina
odjavljen
offline
Re: Arduino - projekti, ideje, savjeti, problemi

Ev spustio sam prolazak na nekih 50-ak ms u idleu(bez obzira radi li ekran, LED-ice ili nešto drugo).

Moram pronaći još neke načine kako da smanjim vrijeme kad pritisnem tipkala(koji dodaju oko 20-ak ms).

14 godina
odjavljen
offline
Arduino - projekti, ideje, savjeti, problemi

P.S.

Problem je u ažuriranju ekrana.

Primjer jedan

 

void _ekran_svjetla()
{
    display.setCursor(110, 13);
    display.setTextSize(1);
    display.println("S");
    display.display();
}

 

To uzme cca 20 ms.

Bez tog je doslovno nula

 

display.display() stvara tih 20 ms.

Ne mogu ispod toga ići.

Inače bude ispod 5 ms.

Poruka je uređivana zadnji put ned 15.1.2017 23:17 (Dex.pwn).
 
0 0 hvala 0
17 godina
moderator
online
Re: Arduino - projekti, ideje, savjeti, problemi

Sadržaj se na ekran ispisuje samo kad treba, samo kad se promijene vrijednosti koje se ispisuju na ekran. Ako recimo brzinu računaš svaku sekundu, onda se ekran nema što osvježavati više od jednom u sekundi.

 

Za to si napraviš bool varijablu osvjeziEkran i na kraju loopa imaš

 

if (osvjeziEkran) {

  -- ispis sadrzaja na ekran

  osvjeziEkran = false;

}

 

 

 

I onda unutar loopa, umjesto da varijablama automatski daješ nove vrijednosti, provjeriš je li nova vrijednost različita od postojeće(stare). Ako je različita:

 

stara=nova;

osvjeziEkran = true;

10 godina
offline
Re: Arduino - projekti, ideje, savjeti, problemi
@Dex.pwn, kada sam pitao jesi li razumio, mislio sam na interrupt.
 
0 0 hvala 0
14 godina
offline
Re: Arduino - projekti, ideje, savjeti, problemi
mbaksa kaže...
zelenbic kaže...

Pokušavam napraviti VU metar problem mi je što kada očitavam signal od kojeg bi htio napraviti ADC dobivam konstantno nulu. Spojio sam ground konektor kabla na GND arduina a jedan kanal na analogni ulaz(i očitavam sa analogRead taj pin)međutim koliko god ja pojačao zvuk na računalu preko kojeg šaljem signal i dalje preko serial.printa vidim da nema signala. Ima li netko ideju zašto je tome tako? Treba li mi neki međusklop za takvo nešto?

Imam slični problem, nisam ga još išao riješiti, istraživao nešto jesam - trebao bi koristiti neki sklop, recimo nešto poput ovog.

 Spojio sam po ovoj shemi i sad dobivam stalno vrijednosti oko 500 +/- 15. Neznam jesam dobro prenio shemu u eagle nisu mi baš jasne sve oznake 

Ako nisi zadovoljan sobom okreči ju ponovno
17 godina
moderator
online
Re: Arduino - projekti, ideje, savjeti, problemi
zelenbic kaže...
mbaksa kaže...
zelenbic kaže...

Pokušavam napraviti VU metar problem mi je što kada očitavam signal od kojeg bi htio napraviti ADC dobivam konstantno nulu. Spojio sam ground konektor kabla na GND arduina a jedan kanal na analogni ulaz(i očitavam sa analogRead taj pin)međutim koliko god ja pojačao zvuk na računalu preko kojeg šaljem signal i dalje preko serial.printa vidim da nema signala. Ima li netko ideju zašto je tome tako? Treba li mi neki međusklop za takvo nešto?

Imam slični problem, nisam ga još išao riješiti, istraživao nešto jesam - trebao bi koristiti neki sklop, recimo nešto poput ovog.

 Spojio sam po ovoj shemi i sad dobivam stalno vrijednosti oko 500 +/- 15. Neznam jesam dobro prenio shemu u eagle nisu mi baš jasne sve oznake 

Nisam "na ti" sa shemama, no čini mi se da si zamijenio audio ulaz i izlaz.

 

EDIT: Valjda sam te ja krivo skužio. Tebi je "analog out" izlaz iz sklopa, ja sam na to gledao kao na ulaz u Arduino.

 

Poruka je uređivana zadnji put pon 16.1.2017 18:44 (mbaksa).
14 godina
offline
Arduino - projekti, ideje, savjeti, problemi

mislim da sam skurio te analogne pinove sad sam probao sa analogRead očitat napon sa ardunio pločice (5V) i i dalje dobivam neke random brojeve. Ima li neki način da zasigurno testiram?

Ako nisi zadovoljan sobom okreči ju ponovno
Moj PC  
0 0 hvala 0
17 godina
moderator
online
Re: Arduino - projekti, ideje, savjeti, problemi
zelenbic kaže...

mislim da sam skurio te analogne pinove sad sam probao sa analogRead očitat napon sa ardunio pločice (5V) i i dalje dobivam neke random brojeve. Ima li neki način da zasigurno testiram?

Ne mora biti da si ih skurio. Prije bih rekao da je nešto drugo posrijedi.

 

Spojiš poznata stanja u analogni ulaz. Znači gnd, pa bi ti onda trebalo očivavati 0, pa vcc pa bi ti onda trebalo očitavati 1023.

Ova tema je sadržajno povezana sa sljedećim temama: Uvod u elektrotehniku (istosmjerna struja)
Nova poruka
E-mail:
Lozinka:
 
vrh stranice