Skocz do zawartości

Chronograf kodowanie


betepok

Pomocna odpowiedź

Zgadzam się energia to przekręt 🙂 Błąd poprawiony.

Co do odległości między czujnikami starałem się ustawić jak najbardziej dokładnie. Nie zmienia to faktu, że poza suwmiarką i starannością wykonania mogło się coś przesunąć.

Sposób obliczeń w oparciu o bazową stronę

"Calc for 60mm =

((60mm/2.54)/12)×1000000= 196850"

W moim przypadku było niecałe 100mm więc przyjąłem wynik "328083" - W większości przykładów, które spotkałem w sieci wynik zaokrąglany jest do "333333" staram się rozszyfrować dlaczego.

Korci mnie porównanie z prawdziwym chronografem.

Link do komentarza
Share on other sites

"..staram się rozszyfrować dlaczego"

Nie rozczulaj mnie. Przecież przeliczania czasu na prędkość to chyba w podstawówce uczą.

v=s/t

Jeżeli długość odcinka pomiarowego wyrazisz w metrach a czas w mikrosekundach to wynik dostajesz w milionach metrów na sekundę, np:

v=0.1m/500µs=0.0002

Jeżeli chcesz to zamienić na m/s musisz wynik pomnożyć przez milion:

0.0002*1000000=200m/s

A upraszczając, dla bazy 10cm możesz odpowiednią stałą od razu zdefiniować sobie gdzieś w programie:

K = 100000

i liczyć:

v[m/s] = K / t[µs]

Gdybyś chciał zmienić bazę pomiarową s na jakąś inną długość, musisz policzyć nową stałą:

K = 10000 * s[cm]

Czyli dajmy na to dla innego chronometru z odcinkiem pomiarowym 17.5cm masz stałą:

K = 10000 * 17.5 = 175000

i wtedy dla zmierzonego czasu np. 875us dostajesz:

v = K/t = 175000 / 875 = 200m/s

Jeśli wynik chcesz pokazywać również w calach/sekundę, stopach/minutę czy milach/godzinę to po prostu wyznaczasz (lub znajdujesz w internecie) odpowiedni współczynnik przeliczeniowy i mnożysz. Co tu jest do rozszyfrowywania???

  • Lubię! 1
Link do komentarza
Share on other sites

Zastanawiałem się w jaki sposób dopisać kod do ustawiania wagi pocisku.

Menu na trzech przyciskach (set, up, down)

Przeczytałem kursy podstawowe. Jest kilka punktów zaczepienia. Na przykład pomyślałem o takim rozwiązaniu

  while (digitalRead(7) == HIGH) {} //Jeśli  przycisk "set" jest wciśnięty 

weight_settings(); // kod ustawiający wagę "+", "-"

 while (digitalRead(7) == HIGH) {} //Jeśli przycisk "set" jest wciśnięty to program już nie wyjdzie bo się zatrzyma na najbliższej pętli :(

Serial.println("I am waiting for a shot - YOU can shoot!");

while(digitalRead(firstsensor_1) == 0);

while(digitalRead(firstsensor_1));
time1 = micros();  


while(digitalRead(secoundsensor_2));
time2 = micros();   

printserial();

Albo takim

int wybor;

void setup() {
 Serial.begin(9600); 
 pinMode (switchPin_plus, INPUT_PULLUP);
pinMode (switchPin_minus, INPUT_PULLUP);
pinMode (switchPin_set, INPUT_PULLUP);
}

void loop() {

 if(digitalRead(switchPin_set)) { // i tutaj o zgrozo jaki warunek?!
   wybor =   //error w głowie brak pomysłu :(
 }

switch (wybor) {
   case 1:
     Serial.println("Ustawienia Wagi");
       weight_settings();
   break;
     case 2:
Serial.println("I am waiting for a shot - YOU can shoot!");

while(digitalRead(firstsensor_1) == 0);

while(digitalRead(firstsensor_1));
time1 = micros();  


while(digitalRead(secoundsensor_2));
time2 = micros();   

printserial();

   break;
 } 

Witki mi opadają. Proszę o jakąś podpowiedź.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Witam,

Nie chce zakładać nowego tematu więc zapytam tutaj,
Chciałem zrobić sobie coś podobnego (tyle, że do asg) do zrobienie bramek użyłem:

-Nadajnik IR 5mm 940nm LIRED5B-940-H https://botland.com.pl/szukaj?controller=search&orderby=position&orderway=desc&search_query=Nadajnik+IR+5mm+940nm+LIRED5B-940-H+&submit_search=

-Odbiornik podczerwieni TSOP2236 - 36 kHz https://botland.com.pl/odbiorniki-podczerwieni/181-odbiornik-podczerwieni-tsop2236-36khz-.html?search_query=Odbiornik+podczerwieni+TSOP2236+-+36+kHz+&results=6

I teraz pytanie: kiedy przesuwam przez bramki powoli np. palec, karton itp. wszystko jest ok natomiast jeśli zrobię to szybko nic się nie dzieje nie ma żadnego odczytu czy to może być wina komponentów jakie użyłem?

kod wygląda tak: (praktycznie kopia tego co już się tutaj znalazło)

#include <Wire.h>

#define sensor1 2
#define sensor2 3

unsigned long time1;
unsigned long time2;
float fps, elap;
int czujnik1;
int czujnik2;

void setup() {
Serial.begin(9600);

pinMode (sensor1, INPUT);
pinMode (sensor2, INPUT);
digitalWrite(sensor1, HIGH);
digitalWrite(sensor2, HIGH);
}

void loop() {

Serial.println("Wal...");


while(digitalRead(sensor1) == 0);

while(digitalRead(sensor1));
time1 = micros();
while(digitalRead(sensor2));
time2 = micros();


printserial();


}


void printserial(){
elap = time2 - time1;
fps = 328083/elap;
Serial.println(fps );

} 

Tak wiem temat trochę stary nie widziałem sensu zakładania nowego, za wszelką podpowiedź z góry dziękuję.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.