Arduinot oskab keegi progeda?
#1
Olemas on siis : veemõõtja impulss väljundiga, Arduino Duemilanove või Leonardo,eth. shield Wiznet w5100 poe ja sd kaart,tulekul on DS1307 RTC. Tahaks teha veemõõtjale weebi graafiku.Olen otsinud netist aga ei sobi 1 ega teine valmis asi.
Vasta
#2
Siin on Arduino kood veemõõtja jaoks: http://www.adafruit.com/products/828
Vasta
#3
seal on tegemist hoopis teise asjaga.Mul veemõõtja lühistab kontakti iga liitri tagant.Leidsin miski pulse counteri.Sinna vaja lcd juurde aretada ja ka teha liitrid rahaks ning kuidagi ka külge panna eth shield ning andmed veebi serverisse ja graafikuks.Mul on tunne,et raspberriga oleks seda odavam teha aga arduino ja asjad juba olemas.Homme saan DS1307 kiibi kätte (vast).Mingi skeem on trigeriga aga ma ei saa aru milleks see sinna veel ?
http://www.instructables.com/id/Water-me...ting-Code/
Vasta
#4
see veemõõtja lugemine on kõige lihstam asi su setupis. Lao Arduino jupid kokku ja saa omal mingi veebiserver konfitud sinna, kasutades üht sajast näitekoodist, mis selle kohta netis on arduinole. Sisendiks võid kasutada mingit suvalist nuppu, siis ei pea liitreid katsetades kraanist alla laskma. Nupuvajutust võid lugeda kas external interruptiga või siis lihastlt while tsüklis ootad sisendimuutust.

Seda aega saaksid sa ka tegelikult ju äkki "veebist" küsida, ei peaks RTC'ga jamama. Lihtsalt mõte.
Vasta
#5
(11-02-2013, 02:44 PM)bloody-orc Kirjutas: see veemõõtja lugemine on kõige lihstam asi su setupis. Lao Arduino jupid kokku ja saa omal mingi veebiserver konfitud sinna, kasutades üht sajast näitekoodist, mis selle kohta netis on arduinole. Sisendiks võid kasutada mingit suvalist nuppu, siis ei pea liitreid katsetades kraanist alla laskma. Nupuvajutust võid lugeda kas external interruptiga või siis lihastlt while tsüklis ootad sisendimuutust.

Seda aega saaksid sa ka tegelikult ju äkki "veebist" küsida, ei peaks RTC'ga jamama. Lihtsalt mõte.

see skript on mul kuskil olemas mis loeb sisendi muutust.Koju jõuan töölt siis hakkan kohe katsetama.
Katsetan seda. GND ja PIN 2 kokku ei toimunud midagi.
/*
Тупо регистрируем замыкания контактов
*/

int pin = 2; // 2-й цифровой пин, нулевое прерывание
long counter = 0; // счётчик импульсов

void setup() {
// Настраиваем последовательный интерфейс, для вывода информации
Serial.begin(9600);

//Настраиваем цифровой вход
pinMode(pin, INPUT); // Сюда будем подключать подтягивающий резюк
digitalWrite(pin, HIGH); // "Подключаем" подтягивающий резистор (реализован внутри ATmega)
attachInterrupt(0, count, FALLING); // задаём обработчик прерывания 0 (2-й пин).
// прерывание будет при изменении уровня с HIGHT на LOW
// вызывать функицю count
}

void loop(){
// основной рабочий цикл

Serial.println(counter); // выводим в консоль значение счётчика
}


void count(){
// вызывается прерыванием 0 от 2-го цифрового входа
counter++; // ясен перец, увеличиваем переменную. Утекло ещё 5 литров
}
Vasta
#6
http://pastebin.com/kHM0PbJD

Töötab ilusti aga lcd peal ei saanud veel proovida kuna pole teist.Ei taha termomeetrit lahti võtta.Sinna oleks vaja lisada tarbitud vee maksumus.Kant vett maksab meil 2,76 €
Vasta
#7
Kood mis töötab aga väike küsimus : Kuidas saab panna rea 0,00 EUR-i 5 kohta peale koma kui liitri hind on 0,00276 €-i ?


#include "LiquidCrystal.h"
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

// which pin to use for reading the sensor? can use any pin!
#define FLOWSENSORPIN 2


// count how many pulses!
volatile uint16_t pulses = 0;
// track the state of the pulse pin
volatile uint8_t lastflowpinstate;
// you can try to keep time of how long it is between pulses
volatile uint32_t lastflowratetimer = 0;
// and use that to calculate a flow rate
volatile float flowrate;
// Interrupt is called once a millisecond, looks for any pulses from the sensor!
SIGNAL(TIMER0_COMPA_vect) {
uint8_t x = digitalRead(FLOWSENSORPIN);

if (x == lastflowpinstate) {
lastflowratetimer++;
return; // nothing changed!
}

if (x == HIGH) {
//low to high transition!
pulses++;
}
lastflowpinstate = x;
flowrate = 1000.0;
flowrate /= lastflowratetimer; // in hertz
lastflowratetimer = 0;
}

void useInterrupt(boolean v) {
if (v) {
// Timer0 is already used for millis() - we'll just interrupt somewhere
// in the middle and call the "Compare A" function above
OCR0A = 0xAF;
TIMSK0 |= _BV(OCIE0A);
} else {
// do not call the interrupt function COMPA anymore
TIMSK0 &= ~_BV(OCIE0A);
}
}

void setup() {
Serial.begin(9600);
Serial.print("Flow sensor test!");
lcd.begin(16, 2);

pinMode(FLOWSENSORPIN, INPUT);
digitalWrite(FLOWSENSORPIN, HIGH);
lastflowpinstate = digitalRead(FLOWSENSORPIN);
useInterrupt(true);
}

void loop() // run over and over again
{
lcd.setCursor(0, 0);
lcd.print(pulses, DEC); lcd.print("Liitrit");


Serial.println(pulses, DEC); Serial.print("Liitrit ");


float liters = pulses;
liters *= 0.00276;



Serial.print(liters); Serial.println(" EUR-i");
lcd.setCursor(0, 1);
lcd.print(liters); lcd.print(" EUR-i");

delay(100);
}
Vasta
#8
arvuta ühikutes millisent, 0,00276 on 276 millisenti.

Enne näitamist ümardad või kärbid. Täpsus kaduma ei lähe.
Vasta


Alamfoorumi hüpe:


Kasutaja, kes vaatavad seda teemat: 1 külali(st)ne