Stránka 1 z 1

Arduino ide

Napsal: 23 bře 2021, 12:25
od Marek19111973
LiquidCrystal sensor anemometer arduino

Re: Arduino ide

Napsal: 23 bře 2021, 13:32
od martinius96
Zobral som ukážkový kód z triviálneho príkladu Hello World pre displej v Arduino IDE.
Výpis na displej som dostal za výpis na UART a nahradil som len Serial.print() za lcd.print(), nič viac + lcd.clear(), aby displej vymazalo pred novým zápisom + prechod z prvého riadku na druhý cez nastavenie kurzora.

Prekopíroval som inicializáciu, zmenil som vývody, nakoľko v ukážkovej implementácii displej využíva D2 a D3 vývody Arduina (ktoré sú jedinými vývodmi s podporou INTERUPT-u - prerušenia, teda potom by sa nedal pripojiť ten anemometer).
Zapojenie je v programe s označením vývodu displeja a označením vývodu Arduina.
Program je kompatibilný pre displej 16x2 i 20x4. Nakoľko sa výpis realizuje len na dva riadky.

Kód: Vybrat vše

//More Information at: https://www.aeq-web.com/
//Version 2.0 | 11-NOV-2020
#include <LiquidCrystal.h>
const int rs = 12, en = 11, d4 = 7, d5 = 6, d6 = 5, d7 = 4;

//Zapojenie dátových vodičov
//Displej ==> Arduino
//RS      ==> D12
//RN      ==> D11
//D4      ==> D7
//D5      ==> D6
//D6      ==> D5
//D7      ==> D4

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
const int RecordTime = 3; //Define Measuring Time (Seconds)
const int SensorPin = 3; //Define Interrupt Pin (2 or 3 @ Arduino Uno)

int InterruptCounter;
float WindSpeed;

void setup()
{
  Serial.begin(9600);
  lcd.begin(16, 2); //rozmer displeja 16x2, možne nahradiť za 20x4 --> PROGRAM POUZIVA 16 stlpcov a 2 riadky!!!
}

void loop() {
  meassure();
  Serial.print(F("Wind Speed: "));
  Serial.print(WindSpeed); //Speed in km/h
  Serial.print(F(" km/h - "));
  Serial.print(WindSpeed / 3.6); //Speed in m/s
  Serial.println(F(" m/s"));
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print(WindSpeed); //Speed in km/h
  lcd.print(F(" km/h"));
  lcd.setCursor(0, 1);
  lcd.print(WindSpeed / 3.6); //Speed in m/s
  lcd.print(F(" m/s"));
}

void meassure() {
  InterruptCounter = 0;
  attachInterrupt(digitalPinToInterrupt(SensorPin), countup, RISING);
  delay(1000 * RecordTime);
  detachInterrupt(digitalPinToInterrupt(SensorPin));
  WindSpeed = (float)InterruptCounter / (float)RecordTime * 2.4;
}

void countup() {
  InterruptCounter++;
}

Re: Arduino ide

Napsal: 23 bře 2021, 13:37
od Marek19111973
odskousim zatim dekuji
Dam vedet

Re: Arduino ide

Napsal: 24 bře 2021, 08:36
od pavel1tu
martinius96 píše:
23 bře 2021, 13:32
Zobral som ....
Proti principu měření se ohradím (ale spíše jako vylepšení třeba do budoucna - já to takto také zatím provozuji).
Sám jsem si tímto prošel a jsou zde lidé co se meteorologií a měřením zabývají a nasměrovali nejen mne k přesnějšímu měření a to o dost, když jsem to porovnával (2 anemometry vedle sebe).
Počítání impulzů za nějakou dobu
- čím menší vítr, tím větší nepřesnost
- nezískáš tím nárazový vítr

Já se dopracoval (ale kod nemám učesaný, jen ze stolu) po postrčení pár lidmi zde:
- měřím 20s, nebo 30 pulzů (mám napevno zatím pole na 30 hodnot) - to se asi ještě upraví (cyklus měření meteostanice je každých 5 minut, bo jede z baterek) během toho změřím, zpracuji i všechny ostatní měřené hodnoty
- ukládám časy v ms (plán předělat na m/s) mezi jednotlivými otáčkami anemometru
- nejkratší a nejdelší čas budu zahazovat - zatím nedělám
- 2 nejkratší (pokud proběhlo alespoň 5 pulzů) zprůměruji na "nárazový" vítr
- z ostatních vypočítám průměr a vše odešlu na základnu

U snímače s napájením
- měřím neustále, ale ukládám přepočtené na m/s (jen při odesílání všechny interupty zatím zakazuji a měření přeruším, nevím jestli to, nebo jiná chyba mi sem tam neodeslalo data - většinou když hodně foukalo)
- ukládám min/průměr/max a jednou za 5 min odesílám

PS: berte to jen jako nápad na přesnější měření

Bohužel to nemám ani za rok dodělané, momentálně bujuji s jinými věcmi.

Re: Arduino ide

Napsal: 25 bře 2021, 13:05
od Marek19111973
super funguje co jsem dlužen

Re: Arduino ide

Napsal: 25 bře 2021, 13:41
od martinius96
Nič.
Zvládol by si to i sám.
Stačilo si len pozrieť ukážkový príklad z Arduino IDE a nakopírovať tie časti do tvojho programu.