Geiger counter
Jump to navigation
Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Sparkfun SEN-09848 Geiger counter (ce compteur est remplacé par le SEN-11345)
Usage
- Générateur aléatoire
- Drone PRI (Prévention des Risques Industriels)
- RobAIR-Wifibot
Source code
Linux
screen /dev/ttyUSB0 9600
Processing
Code Processing pour visualiser les particules recues.
/** * Geiger Counter * * Read data from the serial port ("0" "1") from SEN-09848 and change the color * of a rectangle when a switch connected to the Geiger Counter * SEN-09848 http://www.sparkfun.com/products/9848 . */ import processing.serial.*; Serial myPort; // Create object from Serial class int val; // Data received from the serial port int fg=0; int serialPortPos=1; // 0 on my PC is the Modem port. int counter0=0; int counter1=0; void setup() { size(200, 200); String portName = Serial.list()[serialPortPos]; myPort = new Serial(this, portName, 9600); } void draw() { if ( myPort.available() > 0) { // If data is available, val = myPort.read(); // read it and store it in val background(255); // Set background to white if(val=='0') { counter0++; } else { counter1++; } if(fg==0) { fg=204; } else { fg=0; } fill(fg); text((counter0+counter1)+":"+counter0+":"+counter1,8,height-6); long timestamp=System.currentTimeMillis(); println(timestamp+"="+new Date(timestamp)); } rect(50, 50, 100, 100); }
Python with MQTT and Mosquitto
#!/usr/bin/python # # publish the number of particles detected by an USB geiger counter evert second # using MQTT # Author: Didier Donsez # 2013/08/20 # # TODO # threading.Timer(period, on_second, (a,b)).start() => call on_second(a,b) # improve concurrency control with https://github.com/littlehedgehog/base/blob/master/atomicinteger.py # import serial import mosquitto import os import sys import threading # python publishgeiger.py test.mosquitto.org /dev/tty.usbserial-A700eD9k geiger/particulesPerSecond broker=sys.argv[1] #broker = "test.mosquitto.org" port = 1883 serialdev=sys.argv[2] # = '/dev/tty.usbserial-A700eD9k' topic=sys.argv[3] # = 'geiger/particulesPerSecond' period = 1.0 cpt = 0 def on_second(): global period, cpt, topic print(cpt) mqttc.publish(topic , cpt) cpt = 0 timer = threading.Timer(period, on_second) timer.start() #MQTT callbacks def on_connect(mosq, obj, rc): if rc == 0: print("Connected successfully.") else: raise Exception("Can not connect to MQTT broker") def on_disconnect(mosq, obj, rc): print("Disconnected successfully.") def on_publish(mosq, obj, mid): print("Message "+str(mid)+" published.") def on_subscribe(mosq, obj, mid, qos_list): print("Subscribe with mid "+str(mid)+" received.") def on_unsubscribe(mosq, obj, mid): print("Unsubscribe with mid "+str(mid)+" received.") #called on exit #close serial, disconnect MQTT def cleanup(): print "Ending and cleaning up" ser.close() mqttc.disconnect() try: print "Connecting... ", serialdev #connect to serial port ser = serial.Serial(serialdev, 9600, timeout=20) except: print "Failed to connect serial" #unable to continue with no serial input raise SystemExit("Failed to connect serial") try: ser.flushInput() #create an mqtt client mypid = os.getpid() client_uniq = "geigercounter-"+str(mypid) mqttc = mosquitto.Mosquitto(client_uniq) #attach MQTT callbacks mqttc.on_connect = on_connect mqttc.on_disconnect = on_disconnect mqttc.on_publish = on_publish mqttc.on_subscribe = on_subscribe mqttc.on_unsubscribe = on_unsubscribe #connect to broker mqttc.connect(broker, port, 60) timer = threading.Timer(period, on_second) timer.start() while mqttc.loop() == 0: c = ser.read() cpt = cpt + 1 pass # handle list index error (i.e. assume no data received) except (IndexError): print "No data received within serial timeout period" cleanup() # handle app closure except (KeyboardInterrupt): print "Interrupt received" cleanup() except (RuntimeError): print "uh-oh! time to die" cleanup()