Vítejte na Elektro Bastlírn?
Nuke - Elektro Bastlirna
  Vytvořit účet Hlavní · Fórum · DDump · Profil · Zprávy · Hledat na fóru · Příspěvky na provoz EB

Vlákno na téma KORONAVIRUS - nutná registrace


Nuke - Elektro Bastlirna: Diskuzní fórum

 FAQFAQ   HledatHledat   Uživatelské skupinyUživatelské skupiny   ProfilProfil   Soukromé zprávySoukromé zprávy   PřihlášeníPřihlášení 

Snímáni otáček Arduino Uno

 
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
djkennny



Založen: Jul 12, 2011
Příspěvky: 32
Bydliště: Vrchlabí

PříspěvekZaslal: st říjen 22 2014, 23:36    Předmět: Snímáni otáček Arduino Uno Citovat

Ahoj, potřebuji snímat obdélníkový signál ze čtyř snímačů otáček. Potřebuji spočítat počet otáček za 15ms,vypsat na SD a funkci opakovat. Vše mam, ale nejsem schopen hodnoty po vypsání vymazat a opakovat. Pomůže mi někdo?

Tady je obsah bez nefunkčních pokusů:

#include <WProgram.h>
#include <Wire.h>
#include <DS1307.h>
#include <SD.h>



int rtc[7];


const int chipSelect = 4;

void setup()
{


Serial.begin(9600);

Serial.print("Inicializace SD karty...");

pinMode(4, OUTPUT);

if (!SD.begin(chipSelect)) {
Serial.println("\nKarta nenalezena...");


return;
}
Serial.println("\nKarta inicializovana...");

}
void loop()
{
RTC.get(rtc,true);
char cas[20];




sprintf(cas, "%4d-%02d-%02d %02d:%02d:%02d",rtc[6],rtc[5],rtc[4],rtc[2],rtc[1],rtc[0]);

String dataString = ""; // inicializuje proměnou pro data
dataString = cas; // čas do proměné data
dataString = dataString + ";"; // vhodný oddělovač
dataString = dataString + String(digitalRead(0));
dataString = dataString + ";"; // vhodný oddělovač
dataString = dataString + String(digitalRead(1));
dataString = dataString + ";"; // vhodný oddělovač
dataString = dataString + String(digitalRead(2));
dataString = dataString + ";"; // vhodný oddělovač
dataString = dataString + String(digitalRead(3));

// otevře soubor data.csv
File dataFile = SD.open("data.csv", FILE_WRITE);

// když soubor existuje zapíše do něj
if (dataFile) {
// samotný zápis - zapíše a skočí na nový řádek
dataFile.println(dataString);
dataFile.close();

Serial.print("Zapisuji do souboru data - ");
Serial.println(dataString);
}
// při chybě vypíše hlášku
else {
Serial.println("Chyba - nemohu otevrit soubor !!!");
}
// Čeká 20 sekund
delay(15);

}
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
frpr666



Založen: Dec 28, 2009
Příspěvky: 1051

PříspěvekZaslal: ne říjen 26 2014, 16:59    Předmět: Citovat

Chtělo by to napsat jaká je předpokládaná max. frekvence otáček z čidla, např. 6000 rpm odpovídá 100Hz.
Osobně bych nejdříve bych odladil čtení frekvence, tak že si připojím např. 4ks NE555. a výsledek n1,n2,n3,n4 zapisovat na sér. port. Až by mě šlapalo toto, tak pak bych se pouštěl do SD karty.
Pokud budu mít 4 čidla např. na portu PORTD, tak v přerušení např. 1ms
budu budu počítat nástupné hrany.

kód:

// preruseni kazdych 1ms
// http://playground.arduino.cc/Main/MsTimer2
//
void preruseni_1ms( void)
{
  temp= PIND;
  flags = temp & (~temp_old);
  temp_old=temp;

  if (status==RUN)
  {
    if (flags&0x01) // PIND0
    {
      n1++;
    }
    if (flags&0x02) // PIND1
    {
      n2++;
    }
    if (flags&0x04) // PIND2
    {
      n3++;
    }
    if (flags&0x08) // PIND3
    {
      n4++;
    }
    status_cnt--;
    if (0==status_cnt)
    {
      status=CPL;
    }
  }
}

// funkce 'spusti mereni'
void start_mereni( void)
{
  if (status!=RUN)
  {
    {
      n1=0,n2=0,n3=0,n4=0
    };
    status_cnt=1000;
    status=RUN;
  }
}

// funkce 'vytiskne hodnoty na uart' kazdou vterinu
void cti_mereni( void)
{
  if (status==CPL)
  {
    arr[0]=n1;
    arr[1]=n2;
    arr[2]=n3;
    arr[3]=n4;

    start_mereni();

    Serial.write(arr);
  }
}
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
AB1



Založen: Nov 23, 2009
Příspěvky: 312

PříspěvekZaslal: po říjen 27 2014, 5:59    Předmět: Citovat

citace:
Potřebuji spočítat počet otáček za 15ms,vypsat na SD a funkci opakovat.

Periodě 15 ms odpovídá kmitočet (a rozlišení) 1/0,015 = 66,67 Hz (4000 ot/min).

Kolik impulsů za otáčku dává čidlo?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
djkennny



Založen: Jul 12, 2011
Příspěvky: 32
Bydliště: Vrchlabí

PříspěvekZaslal: út listopad 18 2014, 21:50    Předmět: Citovat

Děkuji za odpovědi, neměl jsem teď čas na dodělání, ale asi jste mě navedli dobrým směrem Smile Každopádně 15ms je nesmysl, to by ani karta nepobrala... Už mam i vyrobené zubové kroužky, jako jsou třeba u ABS, takže vemu počet zubů za otáčku a nějaký přijatelný čas a dám vědět jak to dopadlo Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra.
Nemůžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Nemůžete připojovat soubory k příspěvkům
Můžete stahovat a prohlížet přiložené soubory

Powered by phpBB © 2001, 2005 phpBB Group
Forums ©
Nuke - Elektro Bastlirna

Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.


PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Čas potřebný ke zpracování stránky 0.11 sekund