Hasičská časomiera pre 2 útoky - Arduino a LCD displej

Pochváľte sa ostatným čo zaujímave ste vyrobili alebo práve vyrábate!

Moderátori: psichac, Moderátori

martinius96

Hasičská časomiera pre 2 útoky - Arduino a LCD displej

Príspevok od používateľa martinius96 » 07 Sep 2017, 14:32

Zdravím, vytvoril som hasičskú časomieru s použitím mikrokontroléra Arduino UNO, LCD displej 20x4 cez I2C modul, 4 tlačidlá.
Tlačidlo 1 spúšťa časovač, spúšťa aj pri zapauzovaní času
Tlačidlo 2 --> zastavenie času pre ľavý útok
Tlačidlo 3 --> zastavenie času pre pravý útok
Tlačidlo 4 --> vynulovanie časovača aj v priebehu počítania času
https://www.youtube.com/watch?v=7KeruFwBVKc
Plánujem to ešte rozšíriť s počítaním na tisíciny sekundy
Obrázok
Obrázok
Obrázok

Používateľov profilový obrázok
jirka.jirka.
Ultimate člen
Ultimate člen
Príspevky: 1537
Dátum registrácie: 17 Okt 2008, 00:00
Bydlisko: Uherské Hradiště
Kontaktovať používateľa:

Re: Hasičská časomiera pre 2 útoky - Arduino a LCD displej

Príspevok od používateľa jirka.jirka. » 07 Sep 2017, 14:36

Plánujem to ešte rozšíriť s počítaním na tisíciny sekundy
No, tak ukaž kód. Rádi se podíváme, určitě bude ještě co vylepšovat, můžeme poradit. Nebo se sami něco naučit. Protože takhle přesné (tisíciny) už vyžaduje přesné nastavení přerušení. Nebo si to aspoň myslím.
0

Používateľov profilový obrázok
Kado
Power user
Power user
Príspevky: 1625
Dátum registrácie: 02 Sep 2007, 00:00
Bydlisko: PB
Vek: 40

Re: Hasičská časomiera pre 2 útoky - Arduino a LCD displej

Príspevok od používateľa Kado » 07 Sep 2017, 15:08

ako trigrujes eventy od jednotlivych vonkajsich podnetov, (v tvojom pripade tlacidla), v akych casovych usekoch pocita casovac? to je HW casovac abo nejaky free running counter (neviem ci take nieco ma atmega)?
0
Návrh zapojení s jednočipovými mikropočítačmi, tvorba programového vybavenia pre mikropočítače
http://www.jk-elektronika.info/index.html

predaj !!
http://svetelektro.com/modules.php?name ... 54#p549154

Používateľov profilový obrázok
Najgel
Ultimate člen
Ultimate člen
Príspevky: 1695
Dátum registrácie: 02 Júl 2010, 00:00
Bydlisko: Námestovo, Žilina(škola)
Vek: 29

Re: Hasičská časomiera pre 2 útoky - Arduino a LCD displej

Príspevok od používateľa Najgel » 07 Sep 2017, 16:13

V praxi nepoužiteľné. Ako chceš snímať terče ? Potrebuješ aspoň 80m káblu, ak chceš stopky na nejakom stanovišti, ďalej je problém snímať signál na takú vzdialenosť, sú tam už oneskorenia. V reálnom nasadení na tisícini zabudni.

Riešil som takúto vec, a stretol som sa s mnohými problémami, momentálne mám rozrobenú už 3. verziu HW.
0
Keď neodpisujem tak tu nie som, alebo som a neodpisujem :D

MPLAB & PIC
Texas Instruments DSP TMS320Fxxxxx
Tevo Tarantula 3D
Ponúkam 3D tlač.
Ponúkam návrh a vývoj elektroniky na zákazku.

UNIZA 5.ročník

Používateľov profilový obrázok
Kado
Power user
Power user
Príspevky: 1625
Dátum registrácie: 02 Sep 2007, 00:00
Bydlisko: PB
Vek: 40

Re: Hasičská časomiera pre 2 útoky - Arduino a LCD displej

Príspevok od používateľa Kado » 07 Sep 2017, 17:15

a ake bolo oneskorenie na 80m vedeni?
0
Návrh zapojení s jednočipovými mikropočítačmi, tvorba programového vybavenia pre mikropočítače
http://www.jk-elektronika.info/index.html

predaj !!
http://svetelektro.com/modules.php?name ... 54#p549154

martinius96

Re: Hasičská časomiera pre 2 útoky - Arduino a LCD displej

Príspevok od používateľa martinius96 » 07 Sep 2017, 18:05

Sú tam tlačidlá, nie snímače terčov. Tlačidlá stláča "rozhodca" ;) Počítadlo používa millis.

Používateľov profilový obrázok
Najgel
Ultimate člen
Ultimate člen
Príspevky: 1695
Dátum registrácie: 02 Júl 2010, 00:00
Bydlisko: Námestovo, Žilina(škola)
Vek: 29

Re: Hasičská časomiera pre 2 útoky - Arduino a LCD displej

Príspevok od používateľa Najgel » 07 Sep 2017, 19:56

Kado napísal:a ake bolo oneskorenie na 80m vedeni?
Čo som meral, tak mi to reaguje takmer okamžite, nábeh na úroveň som mal za 500uS, ale t prevažne kvôli môjmu HW, aby som aj eliminoval zákmity. Takže oneskorenie na linke nie nie až také veľké, ospravedlňujem sa za dezinformáciu.
0
Keď neodpisujem tak tu nie som, alebo som a neodpisujem :D

MPLAB & PIC
Texas Instruments DSP TMS320Fxxxxx
Tevo Tarantula 3D
Ponúkam 3D tlač.
Ponúkam návrh a vývoj elektroniky na zákazku.

UNIZA 5.ročník

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: Hasičská časomiera pre 2 útoky - Arduino a LCD displej

Príspevok od používateľa peterple » 07 Sep 2017, 20:11

Nuž keď to prezentuješ ako výrobok tak čo sa čuduješ.
Ja to tiež hodnotím ako veľký posun v prezentovaní k lepšiemu.
S milis() asi tisícinovú presnosť neurobíš. To už chce aby to bežalo na prerušeniach. Výhoda je že tu ani nemusíš robiť debouncicg. Prvý pulz tlačítka štart to spustí. Prvý pulz na vstupe stop tlačítka (snímača) to zastaví. Tak som to robil pre našich hasičov kedysi v dávnej minulosti. Presnosť im stačila na stotiny.

Najgel: prečo sú tisíciny nereálne?

Kado: Free runnig timer na AVR urobíš. Aj 8 aj 16 bitový. Aj s korektným odchytením stavu. Viem nie je to veľa ale spolu s pretečením a s tým že tie stopky nič iného nerobia to nie je problém.

Najgel: prečo eliminovať zákmity?
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

Používateľov profilový obrázok
boraicho
Ultimate člen
Ultimate člen
Príspevky: 12406
Dátum registrácie: 03 Feb 2007, 00:00
Bydlisko: Prešov
Vek: 35
Kontaktovať používateľa:

Re: Hasičská časomiera pre 2 útoky - Arduino a LCD displej

Príspevok od používateľa boraicho » 07 Sep 2017, 20:25

čo je free runing timer?
0
"Aj nevinne vyzerajúca súčiastka, môže byť príčinou nefunkčnosti zariadenia a tou kondenzator 100% je"
3D REBEL II + PLA + PETG
CNC 1810 na DPS

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: Hasičská časomiera pre 2 útoky - Arduino a LCD displej

Príspevok od používateľa peterple » 07 Sep 2017, 20:30

volne bežiaci časovač, ktorého stav si odchytíš kedy chceš. V podstate aj tá milis() by sa na to dala zneužiť. Len tam čarujú aby to čo najpresnejšie vyšlo na jednu milisekundu.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

martinius96

Re: Hasičská časomiera pre 2 útoky - Arduino a LCD displej

Príspevok od používateľa martinius96 » 07 Sep 2017, 23:19

Tak neži v Milke aby si si ma doberal.

-- Spojený príspevok 07 Sep 2017, 23:29 --

Tu je kód, nie celý.. Potrebujem následovné. Vypisovať tisíciny sekundy, avšak neviem ako to dopasovať do existujúceho kódu.
Momentálne to funguje tak, že mám jedno desatinné miesto za sekundami, potrebujem však 3.
Vedeli by ste mi s tým pomôcť? Ďakujem, pravdepodobne treba rozšíriť tenth, alebo pridať viacero premenných pre tie desatinné miesta?
Naposledy upravil/-a martinius96 v 08 Sep 2017, 01:25, upravené celkom 1 krát.

martinius96

Re: Hasičská časomiera pre 2 útoky - Arduino a LCD displej

Príspevok od používateľa martinius96 » 08 Sep 2017, 00:17

Respektíve to skusme tu na banalnom príklade s jednym tlačidlom, ktoré spustí/pauzuje prebiehajúci čas.

Kód: Vybrať všetko

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

#define I2C_ADDR    0x3F  // Define I2C Address where the PCF8574A is
                          // Address can be changed by soldering A0, A1, or A2
                          // Default is 0x27

// map the pin configuration of LCD backpack for the LiquidCristal class
#define BACKLIGHT_PIN 3
#define En_pin  2
#define Rw_pin  1
#define Rs_pin  0
#define D4_pin  4
#define D5_pin  5
#define D6_pin  6
#define D7_pin  7

LiquidCrystal_I2C lcd(I2C_ADDR,
                      En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin,
                      BACKLIGHT_PIN, POSITIVE);

const int spustacresettlacidlo = 12;     //The pin for spustacresettlacidlo

long lastPressedspustacresettlacidlo = 0;    //Last millisecond we pressed spustacresettlacidlo

boolean run = false;         //Should the system run?

int spustacresettlacidloState = LOW;      //The value the spustacresettlacidlo reads
int spustacresettlacidloCurrState = LOW;  //The last value of spustacresettlacidlo



long timer = 0; //The timer

int second = 0;
int minute = 0;
int tenth = 0;

 
void setup() {
  lcd.begin(20, 4);                // intialise the LCD.
     lcd.setBacklight(HIGH); // Turn on backlight, LOW for off
  pinMode(spustacresettlacidlo, INPUT);
  lcd.setCursor(0,0);
  lcd.print("00:00:0 L");
   lcd.setCursor(0,1);
   lcd.print("00:00:0 P");

}

void tickClock() {
  Serial.println(millis() /10);
  if((timer - millis()/100) >= 100 || timer == 0) {
    tick();
    timer = millis()/100;
  }
}

void loop() {
  tickClock(); //Start ticking the clock
  spustacresettlacidloState = digitalRead(spustacresettlacidlo);
  checkStart();
}

void checkStart() {
  if(spustacresettlacidloState != spustacresettlacidloCurrState) {    //Check if the button state has changed
    if(spustacresettlacidloState == HIGH && (millis()-lastPressedspustacresettlacidlo) > 100 || lastPressedspustacresettlacidlo == 0) {
      lastPressedspustacresettlacidlo = millis();
      run = !run; //Switch the running state
    }    
  }
  spustacresettlacidloCurrState = spustacresettlacidloState;    //Set the current state equals the button state
}


void tick() {
  if(run) {
    updateLCD();
    
    
    
    if(tenth == 9) {
      tenth = 0;
      
      if(second == 59) {
        second = 0;
        minute++;
        
      } else {
        second++;
      }
    } else {
    tenth++;
    }
  }
}

void updateLCD() {
  //
   lcd.setCursor(0,0);
  if(minute < 10) {      // If hour does not have 2 digits
    lcd.print("0");
  }
  lcd.print(minute, DEC);
  lcd.print(":");

  if(second < 10) {    // If minute does not have 2 digits
    lcd.print("0");
  }
  lcd.print(second, DEC);
  lcd.print(":");

  lcd.print(tenth, DEC); 
  //
  lcd.setCursor(0,1);
  if(minute < 10) {      // If hour does not have 2 digits
    lcd.print("0");
  }
  lcd.print(minute, DEC);
  lcd.print(":");

  if(second < 10) {    // If minute does not have 2 digits
    lcd.print("0");
  }
  lcd.print(second, DEC);
  lcd.print(":");

  lcd.print(tenth, DEC); 
}
Nejaké tipy ako dostať 3 desatinné miesta za sekunkami?
Ja tomu chápem následovne:
Mám čas napr 00:00:9 - čiže to je 900ms, hoci mi to zobrazí 9 ale môže tam byť 938ms. Čiže za tou 9-tkou (desatinou) bežia stotiny a tesíciny, ktoré tu 9-tku inkrementujú už následne na sekundu, čiže sa bavíme o stovkách milisekúnd?. Potrebujem len tie stovky zobraziť a čas tam zastaviť normálne ako doteraz. Nič viac nepotrebujem. Chcem to takýmto štýlom. Prerušenia nebudú teda potrebné ak tomu rozumiem správne. Prípadne potom urobím nejaký odpočet, nakoľko mám pri tlačidlách 100ms stlačenie tlačidla, určite postačí aj 30 alebo 50 ms pri millise.

MiroH
Stály člen
Stály člen
Príspevky: 176
Dátum registrácie: 13 Dec 2009, 00:00
Bydlisko: Nitra
Vek: 60

Re: Hasičská časomiera pre 2 útoky - Arduino a LCD displej

Príspevok od používateľa MiroH » 08 Sep 2017, 08:55

Ak už nechceš prerušenie, tak pracuj s micros (), je to lepšie riešenie ako deliť millis. Neskúšal som to, je to iba tip. Ja by som to riesil prerušením a mal by som to pod kontrolou.
0

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: Hasičská časomiera pre 2 útoky - Arduino a LCD displej

Príspevok od používateľa peterple » 08 Sep 2017, 20:22

ešte raz sa všetkých dvoch pýtam:
Na čo je tam ten debouncing? Aby to bola ešte väčšia náhoda ako doteraz?

Ten kód si nemal ukazovať. Potom by si mohol prípadného zákazníka uvrtať do toho že to meria presne povedzme na milisekundu. Takto ale ak sa tomu bude rozumieť tak uvidí že je to podobný prevziaty kus kódu ako ten cyklo simulátor. A tie tvoje dorábky majú zvyčajne efekt znižujúci hodnotu pôvodného riešenia.

Na to aby to meralo s presnosťou na milisekundu sú prerušenia nutné. Myslíš že Kado sa pýtal len tak?
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

Používateľov profilový obrázok
Kado
Power user
Power user
Príspevky: 1625
Dátum registrácie: 02 Sep 2007, 00:00
Bydlisko: PB
Vek: 40

Re: Hasičská časomiera pre 2 útoky - Arduino a LCD displej

Príspevok od používateľa Kado » 08 Sep 2017, 20:39

martinius96: ak by si chcel, mozem ti s tym pomoct, mam tu na stole jedno starsie 32bit DSP od Texas Instruments, jeho interne PLL (z PLL su napajane systemove hodiny) bezi na 60Mhz, ma aj free run counter 32bit, jeden tik je 16,6ns :D, s tym by sme pomerali kadečo :D
0
Návrh zapojení s jednočipovými mikropočítačmi, tvorba programového vybavenia pre mikropočítače
http://www.jk-elektronika.info/index.html

predaj !!
http://svetelektro.com/modules.php?name ... 54#p549154

martinius96

Re: Hasičská časomiera pre 2 útoky - Arduino a LCD displej

Príspevok od používateľa martinius96 » 08 Sep 2017, 20:41

Potrebujem iba aby sa odčítal čas 100ms, na ten je nastavené tlačidlo. Neviem nájsť žiaden tutoriál ani s tým timerom ani iným spôsobom pre tisíciny. Neviem nájsť nič vhodné.

alidedko
Ultimate člen
Ultimate člen
Príspevky: 3963
Dátum registrácie: 04 Feb 2013, 22:04
Bydlisko: U alibabky v Poprade
Vek: 32

Re: Hasičská časomiera pre 2 útoky - Arduino a LCD displej

Príspevok od používateľa alidedko » 08 Sep 2017, 20:53

Neviem, ci sa na to riesia arduinko kniznice.

V Ccku by si sa mal poobzerat po timeroch a interruptoch.
0
Motto: Nikto nie je tak velky, aby sa nevosiel do truhly.

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok