Enkel Mätinsamling?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
jockwe
Inlägg: 142
Blev medlem: 24 februari 2009, 09:51:18
Ort: Göteborg

Re: Enkel Mätinsamling?

Inlägg av jockwe »

Har inte kollat ELFA men tycker det brukar bli lite dyrt.. Hittade dessa hos electrokit som borde funka?

https://www.electrokit.com/produkt/blue ... 6-seriell/
https://www.electrokit.com/produkt/utve ... mpatibelt/

Men du behöver ändå en mjukvara på datorn som tar emot seriell data från blåtanden. Skulle tro att det kodmässigt blir rätt likt ut det som behövs för att ta emot data seriellt från usb.

Ett annat alternativ kan vara att köra via wifi och en ESP8266. Har själv en temperaturlogger baserat på en sån med ESPeasy installerat. Den pratar MQTT med en raspberry men det går att subscriba på dataflödet från en dator med.
Borre
Inlägg: 4591
Blev medlem: 14 juni 2007, 15:43:50
Ort: Hälsingland

Re: Enkel Mätinsamling?

Inlägg av Borre »

Behöver du det trådlöst?
Om inte så krånglar du till det i onödan. Anslut bara Arduinon och öppna Serial monitor och datan rullar fram.
Användarvisningsbild
4kTRB
Inlägg: 19148
Blev medlem: 16 augusti 2009, 19:04:48

Re: Enkel Mätinsamling?

Inlägg av 4kTRB »

Men kan inte blåtanden lagra data i en fil?
, precis som när man för över från mobilen till datorn.
Det är väldigt enkelt i java att öppna och läsa filer.
Användarvisningsbild
4kTRB
Inlägg: 19148
Blev medlem: 16 augusti 2009, 19:04:48

Re: Enkel Mätinsamling?

Inlägg av 4kTRB »

Borre skrev:Behöver du det trådlöst?
Om inte så krånglar du till det i onödan. Anslut bara Arduinon och öppna Serial monitor och datan rullar fram.
Tänke väl att jag bygger en liten låda med värmeelement, tempsensor och ansluter en NTC.
Startar Arduinon - mäter temperaturen och beräknar NTC-motståndet och låter värmeelementet
bli varmare varpå jag mäter på nytt. Om jag kan ställa den prylen i tex kylskåpet så kan jag få
NTC-kurvan redan från låga temperaturer. Det vore praktiskt att slippa sladd.
jockwe
Inlägg: 142
Blev medlem: 24 februari 2009, 09:51:18
Ort: Göteborg

Re: Enkel Mätinsamling?

Inlägg av jockwe »

Nä en sån BT modul lägger sig som en COM port på datorn när den är ansluten, precis som en arduino gör. Så egentligen skulle du kunna börja utveckla med en arduino kopplad via usb och sen ifall det blir aktuellt med trådlöst koppla på en sån modul på arduinon utan att egentligen behöva koda om något på datorn.

Det var java du ville köra på dator-sidan va?
https://github.com/Fazecast/jSerialComm
Kanske är ett alternativ?
Användarvisningsbild
4kTRB
Inlägg: 19148
Blev medlem: 16 augusti 2009, 19:04:48

Re: Enkel Mätinsamling?

Inlägg av 4kTRB »

Det där har jag faktiskt sett förut.
Ensure that the Visual Studio C++ Compiler is installed on your system.
Jag kan givetvis detta för dåligt ännu men http://rxtx.qbang.org/wiki/index.php/Main_Page
där finns en färdig 64-bitar variant och bra exempel för enklare USB-funktioner.
Användarvisningsbild
SeniorLemuren
Inlägg: 8071
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: Enkel Mätinsamling?

Inlägg av SeniorLemuren »

4kTRB skrev:Men kan inte blåtanden lagra data i en fil?
, precis som när man för över från mobilen till datorn.
Det är väldigt enkelt i java att öppna och läsa filer.
Om du har Android så är det gjort på ett kick att göra en app som sparar mottagen data från BlueTooth som en textfil i din androdlur. Jag använder MIT App Inventor när jag gör mina appar. Obefintlig tröskel för att komma igång och göra appar.

Här är min app som tar emot data från braskaminen och ritar ett diagram. Den tar även emot SMS från en annan mobiltelefon och returnerar på ordern "braskamin" braskamindata via SMS till den andra mobilen i fall jag är utom räckhåll för Blue Tooth. Att även spara inkommen data i en fil är ett par rader till i appen.
braskamindiagram.jpg
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
4kTRB
Inlägg: 19148
Blev medlem: 16 augusti 2009, 19:04:48

Re: Enkel Mätinsamling?

Inlägg av 4kTRB »

Liten omväg, från Arduino till en fil på mobilen och sen vidare till datorn och där kan mitt java-program
läsa filen.

Kan man inte hoppa över steget med mobilen frågas?
Användarvisningsbild
SeniorLemuren
Inlägg: 8071
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: Enkel Mätinsamling?

Inlägg av SeniorLemuren »

Jo visst kan du det. Under förutsättning att du har en dator med Blue Tooth. Det brukar finnas på de flesta laptopdatorer. Om det inte finns så kan man ju hänga på en på USB-porten.
jockwe
Inlägg: 142
Blev medlem: 24 februari 2009, 09:51:18
Ort: Göteborg

Re: Enkel Mätinsamling?

Inlägg av jockwe »

4kTRB skrev:Det där har jag faktiskt sett förut.
Ensure that the Visual Studio C++ Compiler is installed on your system.
Jag kan givetvis detta för dåligt ännu men http://rxtx.qbang.org/wiki/index.php/Main_Page
där finns en färdig 64-bitar variant och bra exempel för enklare USB-funktioner.

Men du behöver väl inte bygga jSerialComm själv? Finns färdiga releaser att länka till.
Användarvisningsbild
4kTRB
Inlägg: 19148
Blev medlem: 16 augusti 2009, 19:04:48

Re: Enkel Mätinsamling?

Inlägg av 4kTRB »

Tackar!
Jag har köpt en Arduino Uno och så laddade jag hem jSerialComm som jag labbat med en bra stund nu.

Har fått det att lira med Java så jag kan låta Arduinon skicka data med Serial.write och sedan
lyckas jag på något vis få upp data som skickas i konsolen på Eclipse. Det är långt ifrån
självklart hur det fungerar mer i detalj men jag kan i vilket fall skapa en tvåradig tabell i
Arduinon och få upp samma i konsolen i Eclipse.

En sak till jag inte hajar är att om jag startar om java-programmet innan Arduinon skrivit klart
tabellen (jag kan inte ha IDE-monitorn igång samtidigt) är att tabellen i Eclipse konsolen
börjar skrivas ut på nytt från START tills p når 100 och com-porten stängs.

Arduinokoden

Kod: Markera allt

int n = 0;
int p = 0;
int o = 0;

void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(13, OUTPUT);
  Serial.begin(19200);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB
  }  
}
void loop() {
      Serial.write("START\n");
      while(p<100){
        Serial.write("O");
        Serial.write(" ");
        Serial.print(o);
        Serial.write(" ");
        Serial.write("P");
        Serial.write(" ");
        Serial.print(p);
        Serial.write('\n');      
        delay(400);
        p = p+2;
        o = p+o+p; 
      }                
  Serial.end();
}
Tabellen som skrivs ut i Monitorn på Arduino IDE:et

Kod: Markera allt

START
O 0 P 0
O 4 P 2
O 12 P 4
O 24 P 6
O 40 P 8
O 60 P 10
O 84 P 12
O 112 P 14
O 144 P 16
O 180 P 18
O 220 P 20
O 264 P 22
O 312 P 24
O 364 P 26
O 420 P 28
O 480 P 30
O 544 P 32
O 612 P 34
O 684 P 36
O 760 P 38
O 840 P 40
O 924 P 42
O 1012 P 44
O 1104 P 46
O 1200 P 48
O 1300 P 50
O 1404 P 52
O 1512 P 54
O 1624 P 56
O 1740 P 58
O 1860 P 60
O 1984 P 62
O 2112 P 64
O 2244 P 66
O 2380 P 68
O 2520 P 70
O 2664 P 72
O 2812 P 74
O 2964 P 76
O 3120 P 78
O 3280 P 80
O 3444 P 82
O 3612 P 84
O 3784 P 86
O 3960 P 88
O 4140 P 90
O 4324 P 92
O 4512 P 94
O 4704 P 96
O 4900 P 98
Användarvisningsbild
4kTRB
Inlägg: 19148
Blev medlem: 16 augusti 2009, 19:04:48

Re: Enkel Mätinsamling?

Inlägg av 4kTRB »

Så här blir det i Eclipse-konsolen utan att jag har stoppat programmet och startat det på nytt.

Jag tycker det verkar som när Arduinon skriver till porten så lagras data i en buffert som jag
sedan läser med java-programmet även om jag startar java lite senare.

Kod: Markera allt

Antal tillgängliga seriella portar: 4
===========================================
HUAWEI Mobile Connect - 3G Modem öppen = false
HUAWEI Mobile Connect - 3G Application Interface (COM4) öppen = false
HUAWEI Mobile Connect - 3G PC UI Interface (COM5) öppen = false
Arduino Uno (COM9) öppen = false
Arduino Uno (COM9) öppnad = true
FlowControl 0
ReadTimeout 1500
START
O 0 P 0
O 4 P 2
O 12 P 4
O 24 P 6
O 40 P 8
O 60 P 10
O 84 P 12
O 112 P 14
O 144 P 16
O 180 P 18
O 220 P 20
O 264 P 22
O 312 P 24
O 364 P 26
O 420 P 28
O 480 P 30
O 544 P 32
O 612 P 34
O 684 P 36
O 760 P 38
O 840 P 40
O 924 P 42
O 1012 P 44
O 1104 P 46
O 1200 P 48
O 1300 P 50
O 1404 P 52
O 1512 P 54
O 1624 P 56
O 1740 P 58
O 1860 P 60
O 1984 P 62
O 2112 P 64
O 2244 P 66
O 2380 P 68
O 2520 P 70
O 2664 P 72
O 2812 P 74
O 2964 P 76
O 3120 P 78
O 3280 P 80
O 3444 P 82
O 3612 P 84
O 3784 P 86
O 3960 P 88
O 4140 P 90
O 4324 P 92
O 4512 P 94
O 4704 P 96
O 4900 P 98

port stängd: true
Kom gärna med tips, t.ex det där med serialPort.setComPortTimeouts(SerialPort.TIMEOUT_SCANNER, 2500, 0);
, finns det någon särskild vits med att utnyttja den raden?

Kod: Markera allt

import java.util.Scanner;
import com.fazecast.jSerialComm.SerialPort;

public class SerialMainScanner {

	public static void main(String[] args) {

		boolean AUnoFlag = false;
		int AUnoIndex = -1;
		SerialPort serialPort;
		Scanner arduinoScanIn = null;

		SerialPort[] sp = SerialPort.getCommPorts();
		System.out.println("Antal tillgängliga seriella portar: "+sp.length);
		System.out.println("===========================================");
		for(int j=0;j<sp.length;j++) {
			System.out.println(sp[j].getDescriptivePortName()+" öppen = "+sp[j].isOpen());
			if(sp[j].getDescriptivePortName().contains("Arduino Uno")){
				AUnoFlag = true;
				AUnoIndex = j;
			}
		}
		if(AUnoFlag) {
			serialPort = sp[AUnoIndex];
			serialPort.openPort(); 						// Open connection
			serialPort.setBaudRate(19200);
			serialPort.setComPortTimeouts(SerialPort.TIMEOUT_READ_SEMI_BLOCKING, 1500, 0);
			//serialPort.setComPortTimeouts(SerialPort.TIMEOUT_SCANNER, 2500, 0);
			
			System.out.println(serialPort.getDescriptivePortName()+ " öppnad = "+serialPort.isOpen());			
			System.out.println("FlowControl "+serialPort.getFlowControlSettings());
			System.out.println("ReadTimeout "+serialPort.getReadTimeout());

			if((serialPort.bytesAvailable()>0)) {
				try
				{
					arduinoScanIn = new Scanner(serialPort.getInputStream());
				}
				catch(Exception  e)
				{
					e.printStackTrace();
				}
				arduinoScanIn.useDelimiter(" ");				
				System.out.println(arduinoScanIn.findInLine("START"));
				arduinoScanIn.nextLine();
				while(arduinoScanIn.hasNextLine())
				{
					try
					{
						String line = arduinoScanIn.nextLine();
						System.out.println(line);
					}
					catch(Exception e)
					{
						arduinoScanIn.close();
						e.printStackTrace();
					}					
				}
				System.out.println();
				arduinoScanIn.close();
			}

			serialPort.closePort();
			System.out.println("port stängd: "+!serialPort.isOpen());
		}
	}
}

Användarvisningsbild
4kTRB
Inlägg: 19148
Blev medlem: 16 augusti 2009, 19:04:48

Re: Enkel Mätinsamling?

Inlägg av 4kTRB »

Jag undrar om det finns någon som kan förklara följande:

Arduino-koden nedan ska ju avsluta efter 100 genomgångna värden.
Det hela avslutas med Serial.end();

loop, vad jag förstår kör koden på nytt men inte ges väl värdet på celsius på nytt 24?
while loopen ska ju hoppas över och så verkar vara fallet.

Men om jag stänger fönstret Serial Monitor och startar det igen så får jag en ny tabell.
Startar alltså monitorn Arduinon på samma sätt som man trycker på reset-knappen på
Arduino-kortet?
Kommentaren är hämtad från ett exempel som följer med IDE...
// the setup function runs once when you press reset or power the board

Kod: Markera allt



// the setup function runs once when you press reset or power the board
int celcius = 24;
int ohm = 500;

void setup() {
  Serial.begin(19200);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB
  }  
}
void loop() {
      Serial.write("START\n");
      while(celcius < 100){
        Serial.print(celcius);
        Serial.write(" ");
        Serial.print(ohm);
        Serial.write('\n');      
        delay(100);
        celcius++;
        ohm = -5.9*celcius+635;        
      } 
      //delay(1);
      Serial.write("End from Aurdino!\n");               
      Serial.end();      
}

Kod: Markera allt

START
24 500
25 487
26 481
27 475
28 469
29 463
30 458
31 452
32 446
33 440
34 434
35 428
36 422
37 416
38 410
39 404
40 399
41 393
42 387
43 381
44 375
45 369
46 363
47 357
48 351
49 345
50 340
51 334
52 328
53 322
54 316
55 310
56 304
57 298
58 292
59 286
60 281
61 275
62 269
63 263
64 257
65 251
66 245
67 239
68 233
69 227
70 222
71 216
72 210
73 204
74 198
75 192
76 186
77 180
78 174
79 168
80 163
81 157
82 151
83 145
84 139
85 133
86 127
87 121
88 115
89 109
90 104
91 98
92 92
93 86
94 80
95 74
96 68
97 62
98 56
99 50
End from Aurdino!
Mr Andersson
Inlägg: 1404
Blev medlem: 29 januari 2011, 21:06:30
Ort: Lapplandet

Re: Enkel Mätinsamling?

Inlägg av Mr Andersson »

> Startar alltså monitorn [om] Arduinon på samma sätt som man trycker på reset-knappen på Arduino-kortet?

Ja. Det är skitdumt, men så är det designat.
Borre
Inlägg: 4591
Blev medlem: 14 juni 2007, 15:43:50
Ort: Hälsingland

Re: Enkel Mätinsamling?

Inlägg av Borre »

Startar alltså monitorn Arduinon på samma sätt som man trycker på reset-knappen på
Arduino-kortet?
Ja, när du öppna serial monitor resetas Arduinon.
Skriv svar