Loggning av vattenmätare
-
- EF Sponsor
- Inlägg: 544
- Blev medlem: 8 december 2006, 11:18:14
- Ort: Tågarp, Svalöv
Re: Loggning av vattenmätare
Jag tycker i alla fall inte att det är en modifikation, snarare utsmyckning.
Nästa steg är att göra en centralenhet med LabView.
Nästa steg är att göra en centralenhet med LabView.
Re: Loggning av vattenmätare
I värsta fall får man väl köpa en begagnad vattenmätare och be en VVS firma att skruva på den efter kommunens..
-
- EF Sponsor
- Inlägg: 544
- Blev medlem: 8 december 2006, 11:18:14
- Ort: Tågarp, Svalöv
Re: Loggning av vattenmätare
Koden i MikroC till PIC:en är tillräckligt bra nu, (tror jag).
Planen är att använda några EWRF3022 från swech på samma nät, så jag har lagt in mjukvaruadressering samt CRC16.
Planen är att använda några EWRF3022 från swech på samma nät, så jag har lagt in mjukvaruadressering samt CRC16.
Kod: Markera allt
// med sleep
#include <built_in.h>
#define MASTER_ADDRESS 0x30
#define DEVICE_ADDRESS 0x31
#define FRAME_LENGTH 10
#define READ_COUNTER 0x41
#define SLEEP_FOR 0x53
unsigned short cmd_frame[FRAME_LENGTH], cmd_i=0, first_run=1; // Format: {Recipient, Caller, Command, Val0,Val1,Val2,Val3,Val4, CRC_hi,CRC_lo}
unsigned int sleep=0;
unsigned int CRC16_byte(unsigned char message, unsigned int remainder)
{
unsigned char k;
static unsigned int polynom=0xA001; // 0x8005 baklänges
for(k=0;k<8;k++)
{
asm{
RRF FARG_CRC16_byte_message, 1 // Kompilator specifik kod, inga interrupt tillåtna
RRF FARG_CRC16_byte_remainder+1, 1
RRF FARG_CRC16_byte_remainder, 1
}
if (STATUS.C) remainder^=polynom;
}
return remainder;
}
void execute_cmd()
{
unsigned short reply_frame[10],i,counts_l_of;
unsigned int counts,check_value;
if (DEVICE_ADDRESS==cmd_frame[0])
{
check_value=0;
for(i=0;i<FRAME_LENGTH-2;i++) //crc16 check vektorn
{
check_value=CRC16_byte(cmd_frame[i],check_value);
}
check_value=CRC16_byte(0,check_value); //två rundor med nollor
check_value=CRC16_byte(0,check_value);
if ((Hi(check_value)==cmd_frame[8])&&(Lo(check_value)==cmd_frame[9]))
{
if (READ_COUNTER==cmd_frame[2])
{
counts_l_of=TMR1L;
Hi(counts)=TMR1H;
Lo(counts)=TMR1L;
if (Lo(counts)<counts_l_of) //om overflow kan ha inträffat mellan Hi och Lo avläsning
{
Hi(counts)=TMR1H; // läs in igen
}
reply_frame[0]=cmd_frame[1];
reply_frame[1]=DEVICE_ADDRESS;
if (first_run)
{
reply_frame[2]='U';
first_run=0;
}
else reply_frame[2]='V';
reply_frame[3]=counts/10000 + 48;
reply_frame[4]=counts/1000%10 + 48;
reply_frame[5]=counts/100%10 + 48;
reply_frame[6]=counts/10%10 + 48;
reply_frame[7]=counts%10 + 48;
check_value=0;
for(i=0;i<FRAME_LENGTH-2;i++) //beräkna crc16
{
check_value=CRC16_byte(reply_frame[i],check_value);
}
check_value=CRC16_byte(0,check_value);
check_value=CRC16_byte(0,check_value);
reply_frame[8]=Hi(check_value); //lägg till CRC16
reply_frame[9]=Lo(check_value);
for (i=0;i<10;i++) UART1_write(reply_frame[i]); //returnera värde och CRC16
}
else if (SLEEP_FOR==cmd_frame[2]) // lägg in sleep värde i sleep
{
reply_frame[0]=cmd_frame[1];
reply_frame[1]=DEVICE_ADDRESS;
reply_frame[2]='V';
for(i=3;i<8;i++)
{
sleep=10*sleep+(cmd_frame[i]-48);
reply_frame[i]=cmd_frame[i];
}
check_value=0;
for(i=0;i<FRAME_LENGTH-2;i++) //beräkna crc16
{
check_value=CRC16_byte(reply_frame[i],check_value);
}
check_value=CRC16_byte(0,check_value);
check_value=CRC16_byte(0,check_value);
reply_frame[8]=Hi(check_value); //lägg till CRC16
reply_frame[9]=Lo(check_value);
for (i=0;i<10;i++) UART1_write(reply_frame[i]); //returnera värde och CRC16
}
}
}
}
void config()
{
OSCCON=0b01110110; //sätt oscillator
//ställ in portar
/*test*/PORTC=0b00000000;
/*test*/TRISC=0b11110000;
/*test*/ANSEL=0b00001111;
TRISA=0b00111111;
TRISB=0b01101111;
PORTB.B4=1;
ANSELH=0b11110011;
UART1_Init(9600); //initiera UART
TMR1L=0; // nolla timer1
TMR1H=0;
T1CON=0b00000111; //aktivera timer1 osynkad
PR2=249; //aktivera timer2 för uart timeout
T2CON=0b00100010; //100Hz (efterföljande UART byte måste komma inom 10ms)
PIR1=0; //nolla interrupt
}
void main()
{
unsigned short cmd_i=0,i=0;
config();
while(1)
{
if (sleep)
{
PORTB.B4=0; // söv ewrf
/*test*/PORTC.B0=1;
TMR2=0; //starta tmr2
PIR1.TMR2IF=0;
T2CON.TMR2ON=1;
while (sleep)
{
i=100;
while (i)
{
if (PIR1.TMR2IF)
{
i--;
PIR1.TMR2IF=0;
}
}
sleep--; //om 100 tmr2 interrupt sleep-- (ca 1Hz);
}
T2CON.TMR2ON=0; //stäng av TMR2
PORTB.B4=1; // väck ewrf
/*test*/PORTC.B0=0;
}
if(UART1_data_ready())
{
cmd_frame[cmd_i]=UART1_read();
cmd_i++;
/*test*/PORTC.B1=0;
TMR2=0;
PIR1.TMR2IF=0;
T2CON.TMR2ON=1;
if(FRAME_LENGTH==cmd_i) //om frame är full
{
T2CON.TMR2ON=0;
execute_cmd();
cmd_i=0;
}
}
if(PIR1.TMR2IF) //nolla frame-index om UART-byte inte kommer inom 10 ms
{
cmd_i=0;
T2CON.TMR2ON=0;
/*test*/PORTC.B1=1;
}
}
}
Re: Loggning av vattenmätare
TomasL: Det handlar ju om en kamera med 1 pixels upplösning. Hur skulle en kamera kunna klassas som ett problem. Är den för närsynt?
Re: Loggning av vattenmätare
Problemet är nog att kommunens representant inte vet vad det är som är monterat ovanpå vattenmätaren, och då ska det bort!
Hade det varit en webkamera 50 cm över mätaren går det nog bra.
Men som sagt, kontrollanten för vattenkvalitén verkade ju inte bry sig om det, men det kanske inte är en av de som läser av.
Kul bygge!
Hade det varit en webkamera 50 cm över mätaren går det nog bra.
Men som sagt, kontrollanten för vattenkvalitén verkade ju inte bry sig om det, men det kanske inte är en av de som läser av.
Kul bygge!
Re: Loggning av vattenmätare
Skulle inte det gå att ha någon slags lasermätare monterat i taket istället?
En liten billig laser som riktas mot mätaren och en sensor som känner av det reflekterade ljuset. Då slipper man ha något monterat på mätaren.
En liten billig laser som riktas mot mätaren och en sensor som känner av det reflekterade ljuset. Då slipper man ha något monterat på mätaren.
Re: Loggning av vattenmätare
Bilden på vattenmätaren är rätt så intresant......
Klart exempel på "hur man INTE installera en vattenmätaren"
Allmät krävs det 10* rördiameter raksträcka med samma diameter som
mätaren före mätare och 5*rördiameter efter mätaren.....
Klart exempel på "hur man INTE installera en vattenmätaren"
Allmät krävs det 10* rördiameter raksträcka med samma diameter som
mätaren före mätare och 5*rördiameter efter mätaren.....
Re: Loggning av vattenmätare
Haha,, har tänkt mig något liknande för vattenmätar'n! coolt att det funkar!
-
- EF Sponsor
- Inlägg: 544
- Blev medlem: 8 december 2006, 11:18:14
- Ort: Tågarp, Svalöv
Re: Loggning av vattenmätare
Jag har fått ihop fungerande kod i LabView RT som jag kör på en sbRIO-9631 ( http://sine.ni.com/nips/cds/view/p/lang/en/nid/205894 )
Frontpanelen är avläser jag i webläsare.
Det återstår lite finpolering samt loggning på ftp-server, men annars i stort sett klar.
Frontpanelen är avläser jag i webläsare.
Det återstår lite finpolering samt loggning på ftp-server, men annars i stort sett klar.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Re: Loggning av vattenmätare
Aha cool!
Det finns "apparater" för alla tänkbara applikationer.
Var köper man denna optiska detektorpryl?
Sökningar med google ger en väldans massa datablad. Men jag hittar inget enkelt sätt att köpa den i sverige...
/Knut
Det finns "apparater" för alla tänkbara applikationer.
Var köper man denna optiska detektorpryl?
Sökningar med google ger en väldans massa datablad. Men jag hittar inget enkelt sätt att köpa den i sverige...
/Knut
-
- EF Sponsor
- Inlägg: 544
- Blev medlem: 8 december 2006, 11:18:14
- Ort: Tågarp, Svalöv
Re: Loggning av vattenmätare
Sensorn köpte jag från farnell och sen satte jag ihop den med egenkomponerad signalbehandling.
//A
//A
- Lennart Aspenryd
- Tidigare Lasp
- Inlägg: 12607
- Blev medlem: 1 juli 2011, 19:09:09
- Ort: Helsingborg
Re: Loggning av vattenmätare
Kunskap är makt. Detta gäller särskilt om det gäller förbrukning av något man annars inte kan kontrollera lätt.
Jag var länge förundrad över vattenmätarens bakåtrullning, och förstår den fortfarande inte!
Men har man hus ska man ha koll på El, vatten och sopor.
Hur många vet att vattenmätaren ligger för grund för avloppsdebitering av det du vattnar gräsmattan med?
Kul projekt som verkligen kan utvecklas säger Lasp
Jag var länge förundrad över vattenmätarens bakåtrullning, och förstår den fortfarande inte!
Men har man hus ska man ha koll på El, vatten och sopor.
Hur många vet att vattenmätaren ligger för grund för avloppsdebitering av det du vattnar gräsmattan med?
Kul projekt som verkligen kan utvecklas säger Lasp
- tecno
- Inlägg: 27248
- Blev medlem: 6 september 2004, 17:34:45
- Skype: tecnobs
- Ort: Sparreholm, Södermanland N 59° 4.134', E 16° 49.743'
- Kontakt:
Re: Loggning av vattenmätare
http://www.ifm.com/ifmuk/web/dsfs!OF5025.html
Jag tänker testa en reflex givare modell större som den i länken

En ytterligare funktion till min 'pellets' mätare, kanske man ska fundera på att lägga till en funktion ytterligare dvs elmätaren.
Jag tänker testa en reflex givare modell större som den i länken

En ytterligare funktion till min 'pellets' mätare, kanske man ska fundera på att lägga till en funktion ytterligare dvs elmätaren.
Re: Loggning av vattenmätare
Aha där var en "källa" jag inte kollat. Tack!barbarossa skrev:Sensorn köpte jag från farnell och sen satte jag ihop den med egenkomponerad signalbehandling.
//A
Egenkomponerad signalbehandling? Hur mycket krävs det? Enligt databladet verkar det som om man skulle klara sig med en enklare nivådetektering? Behövs det mera filtrering för att kunna driva en räknare?
/Knut
-
- EF Sponsor
- Inlägg: 544
- Blev medlem: 8 december 2006, 11:18:14
- Ort: Tågarp, Svalöv
Re: Loggning av vattenmätare
Jag kör bara några väl valda motstånd till IR LED och fototransistorn i sensorn och sedan en op-förstärkare som schmitt trigger innan räknaren på PIC16F690.
Jag har för mig att jag kör ca 5 mA i IR-LED:en för att få ut livslängden och sedan ca 50 kOhm i serie med fototransistorn.
OPB732 är kopplad på J1
Jag har för mig att jag kör ca 5 mA i IR-LED:en för att få ut livslängden och sedan ca 50 kOhm i serie med fototransistorn.
OPB732 är kopplad på J1
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.