Gamma ionizing radiation detection with Raspberry

Raspberry projects

Gamma ionizing radiation detection with Raspberry

Messaggio da leggereda root » 10/01/2019, 13:04

Immagine

Immagine

Immagine

Vendor page:
https://www.cooking-hacks.com/documentation/tutorials/geiger-counter-radiation-sensor-board-arduino-raspberry-pi-tutorial

Geiger board schematic
https://www.cooking-hacks.com/media/cooking/images/documentation/geiger_counter_arduino_radiation_sensor_board/radiation_board_v5.pdf

Raspberry software installing instructions:
https://circulosmeos.wordpress.com/2014/04/21/radiation-detection-with-raspberry-pi/

Demonstrative video
https://www.youtube.com/watch?v=vm97_wn2Pac

Arduino version software:
https://circulosmeos.wordpress.com/2014/10/17/radiation-detection-with-arduino-cumulative-counter-2/

Important Notes:

the geiger tube is UV light and alfa ray sensitive, to avoid false readings you need to completely cover it with some black electrical tape.
The buzzer is quite noisy (one buzz per count), if you want to reduce noise, put a piece of black electrical tape to cover the central hole.

My device images:
asterisk/software/raspberry/geiger_counter1.jpg
asterisk/software/raspberry/geiger_counter2.jpg
Maurizio
Avatar utente
root
Amministratore
 
Messaggi: 428
Iscritto il: 10/04/2012, 10:55
Località: Turin

Improving consistency of the data

Messaggio da leggereda root » 11/01/2019, 21:55

I modified the source code to have one reading every minute, because the original value = "1 reading every 10 seconds" does not give consistent values

su - root
cd /root/geiger_tube
nano /geiger_tube.c


Codice: Seleziona tutto
/*
 *  ------Geiger Tube board (Raspberry Pi + arduPi library Code) Example------
 *
 *  Explanation: This example shows how to get the signal from the Geiger Tube
 *  in Arduino, we use one of the Arduino interrupt pins (PIN2).
 *  We count the time (ms) between two pulses of the Geiger tube.
 *
 *  Copyright (C) 2011 Libelium Comunicaciones Distribuidas S.L.
 *  http://www.libelium.com
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see .
 *
 *  Version:      0.1
 *  Implementation:   Anartz Nuin Jiménez
 *  Version:      0.2
 *                  20140420 by circulosmeos (circulosmeos.wordpress.com)
 *                  arduPi v1.5 adapted and safe loop
 */

#include "arduPi.h"

// Not needed since arduPi v1.5
//SerialPi Serial;
//WirePi Wire;
//SPIPi SPI;

// Conversion factor - CPM to uSV/h
#define CONV_FACTOR 0.00812

int geiger_input = 2;
long count = 0;
long timePreviousMeassure = 0;
long countPerMinute = 0;
float radiationValue = 0.0;

void countPulse();

void setup(){
   pinMode(geiger_input, INPUT);
   digitalWrite(geiger_input,HIGH);
   attachInterrupt(2,countPulse, FALLING);
}

void loop(){

  if (millis()-timePreviousMeassure > 60000){

    timePreviousMeassure = millis();

   //detachInterrupt for accesing securely to count variable
   detachInterrupt(2);

   countPerMinute = 1*count;
   radiationValue = countPerMinute * CONV_FACTOR;

   fprintf(stderr,"CPM=");
   fprintf(stderr,"%d\n",countPerMinute);
   fprintf(stderr,"%f",radiationValue);
   fprintf(stderr," uSv/h\n");

   count = 0;

   attachInterrupt(2,countPulse,FALLING);
   
   delay(60000);
  }
}

void countPulse(){
  count++;
}

int main (){
   setup();
   while(1){
      loop();
   }
   return (0);
}


COMPILATION:
===========

Codice: Seleziona tutto
g++ -lrt -lpthread geiger_tube.c arduPi.cpp -o geiger_tube


setting permissions:

Codice: Seleziona tutto
chmod 755 geiger_tube
Maurizio
Avatar utente
root
Amministratore
 
Messaggi: 428
Iscritto il: 10/04/2012, 10:55
Località: Turin

example1: put the readings into a file

Messaggio da leggereda root » 11/01/2019, 22:01

Script to put the readings into a file to be shown in a web page:

print_rad2file.sh
Codice: Seleziona tutto
/root/geiger_tube/geiger_tube 2>&1 | awk '{ print strftime("%c: "), $0; fflush(); }' | tee /var/www/rad/$( date '+%d-%m-%Y' ) &

note: the name of the generated file is the current date, ex: /var/www/rad/12-01-2019

the script starts and goes to background, to change the date in the file name with the current date (otherwise it keeps the date of the first run), you should stop and restart the script at midnight every day, by doing the following:

crontab -e
Codice: Seleziona tutto
0 0 * * * killall geiger_tube
0 1 * * * /bin/sh /root/print_rad2file.sh


then configure Apache to point to "/var/www/rad".

example of what is shown in a browser by pointing it to http://localhost/rad:
Index of /rad
Name Last modified Size Description
[<] Parent Directory -
[?] 11-01-2019 2019-01-11 20:36 166
[?] 12-01-2019 2019-01-12 23:36 466
[?] 13-01-2019 2019-01-13 23:36 366
-------------------------------------------------------------------
Apache/2.4.10 (Raspbian) Server at 192.168.1.83 Port 80


click on file name (date) to open it:

ven 11 gen 2019 20:45:23 CET: CPM=9
ven 11 gen 2019 20:45:23 CET: 0.073080 uSv/h
ven 11 gen 2019 20:46:23 CET: CPM=5
ven 11 gen 2019 20:46:24 CET: 0.040600 uSv/h
ven 11 gen 2019 20:47:24 CET: CPM=5
ven 11 gen 2019 20:47:24 CET: 0.040600 uSv/h
ven 11 gen 2019 20:48:24 CET: CPM=6
ven 11 gen 2019 20:48:24 CET: 0.048720 uSv/h
ven 11 gen 2019 20:49:24 CET: CPM=11
ven 11 gen 2019 20:49:24 CET: 0.089320 uSv/h
ven 11 gen 2019 20:50:24 CET: CPM=6
ven 11 gen 2019 20:50:24 CET: 0.048720 uSv/h
ven 11 gen 2019 20:51:24 CET: CPM=7
ven 11 gen 2019 20:51:24 CET: 0.056840 uSv/h
ven 11 gen 2019 20:52:24 CET: CPM=9
ven 11 gen 2019 20:52:24 CET: 0.073080 uSv/h
ven 11 gen 2019 20:53:24 CET: CPM=11
ven 11 gen 2019 20:53:24 CET: 0.089320 uSv/h
ven 11 gen 2019 20:54:24 CET: CPM=2
ven 11 gen 2019 20:54:24 CET: 0.016240 uSv/h
ven 11 gen 2019 20:55:24 CET: CPM=7
ven 11 gen 2019 20:55:24 CET: 0.056840 uSv/h
ven 11 gen 2019 20:56:24 CET: CPM=5
ven 11 gen 2019 20:56:24 CET: 0.040600 uSv/h
ven 11 gen 2019 20:57:24 CET: CPM=9
ven 11 gen 2019 20:57:24 CET: 0.073080 uSv/h
ven 11 gen 2019 20:58:24 CET: CPM=10
ven 11 gen 2019 20:58:24 CET: 0.081200 uSv/h
ven 11 gen 2019 20:59:24 CET: CPM=9
ven 11 gen 2019 20:59:24 CET: 0.073080 uSv/h
ven 11 gen 2019 21:00:24 CET: CPM=8
ven 11 gen 2019 21:00:24 CET: 0.064960 uSv/h

Note:
CPM = counts per minute
uSv/h = microSievert per hour
Maurizio
Avatar utente
root
Amministratore
 
Messaggi: 428
Iscritto il: 10/04/2012, 10:55
Località: Turin

example2: redirect output to csv file

Messaggio da leggereda root » 12/01/2019, 7:36

To redirect output to csv file in "comma-delimited" format [unix-time,date,time,value,unit of measure]

example:
Codice: Seleziona tutto
1547278704,2019-01-12,08:38:24,0.024360,uSv/h

note: unix-time (unique value) is needed to avoid duplicates when importing data to mysql (see next post "example3")


First of all I modified the source code to put a "comma" between data and uSv/h, also I commented out the CPM section, since I don't need the CPM value,
than I modfied the script to put "commas" instead of spaces in the output.

modified source code:

su - root
cd /root/geiger_tube
nano measure.c


Codice: Seleziona tutto
/*
 *  ------Geiger Tube board (Raspberry Pi + arduPi library Code) Example------
 *
 *  Explanation: This example shows how to get the signal from the Geiger Tube
 *  in Arduino, we use one of the Arduino interrupt pins (PIN2).
 *  We count the time (ms) between two pulses of the Geiger tube.
 *
 *  Copyright (C) 2011 Libelium Comunicaciones Distribuidas S.L.
 *  http://www.libelium.com
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see .
 *
 *  Version:      0.1
 *  Implementation:   Anartz Nuin Jiménez
 *  Version:      0.2
 *                  20140420 by circulosmeos (circulosmeos.wordpress.com)
 *                  arduPi v1.5 adapted and safe loop
 */

#include "arduPi.h"

// Not needed since arduPi v1.5
//SerialPi Serial;
//WirePi Wire;
//SPIPi SPI;

// Conversion factor - CPM to uSV/h
#define CONV_FACTOR 0.00812

int geiger_input = 2;
long count = 0;
long timePreviousMeassure = 0;
long countPerMinute = 0;
float radiationValue = 0.0;

void countPulse();

void setup(){
   pinMode(geiger_input, INPUT);
   digitalWrite(geiger_input,HIGH);
   attachInterrupt(2,countPulse, FALLING);
}

void loop(){

  if (millis()-timePreviousMeassure > 60000){

    timePreviousMeassure = millis();

   //detachInterrupt for accesing securely to count variable
   detachInterrupt(2);

   countPerMinute = 1*count;
   radiationValue = countPerMinute * CONV_FACTOR;

//   fprintf(stderr,"CPM ");
//   fprintf(stderr,"%d\n",countPerMinute);
   fprintf(stderr,"%f",radiationValue);
   fprintf(stderr," uSv/h\n");

   count = 0;

   attachInterrupt(2,countPulse,FALLING);
   
   delay(60000);
  }
}

void countPulse(){
  count++;
}

int main (){
   setup();
   while(1){
      loop();
   }
   return (0);
}


compile:

Codice: Seleziona tutto
g++ -lrt -lpthread measure.c arduPi.cpp -o measure


setting permissions:

Codice: Seleziona tutto
chmod 755 measure


new script to be executed:

Codice: Seleziona tutto
measure 2>&1 | awk '{ print strftime("%s %Y-%m-%d %H:%M:%S"), $0; fflush(); }'  | sed -e 's/\s\+/,/g;w /var/www/rad/readings.csv' &
Maurizio
Avatar utente
root
Amministratore
 
Messaggi: 428
Iscritto il: 10/04/2012, 10:55
Località: Turin

example3: insert data from csv file into MySQL DB

Messaggio da leggereda root » 12/01/2019, 9:51

Create database name: "data" > table name: "letture_radiazioni" with the following coloumns:

unix_time (int11)
date (date)
time (time)
value (decimal(10,6)
unit (text)

UNIQUE KEY = 'unix_time` to avoid importing duplicates

or you can just import my msql_dump :D :

data.sql
Codice: Seleziona tutto
-- MySQL dump 10.13  Distrib 5.5.62, for debian-linux-gnu (armv8l)
--
-- Host: localhost    Database: data
-- ------------------------------------------------------
-- Server version   5.5.62-0+deb8u1

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Table structure for table `letture_radiazioni`
--

DROP TABLE IF EXISTS `letture_radiazioni`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `letture_radiazioni` (
  `unix_time` int(11) DEFAULT NULL,
  `date` date DEFAULT NULL,
  `time` time DEFAULT NULL,
  `value` decimal(10,6) DEFAULT NULL,
  `unit` text,
  UNIQUE KEY `unix_time` (`unix_time`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `letture_radiazioni`
--

LOCK TABLES `letture_radiazioni` WRITE;
/*!40000 ALTER TABLE `letture_radiazioni` DISABLE KEYS */;
INSERT INTO `letture_radiazioni` VALUES (1547276291,'2019-01-12','07:58:11',0.040600,'uSv/h'),(1547276351,'2019-01-12','07:59:11',0.081200,'uSv/h'),(1547276411,'2019-01-12','08:00:11',0.089320,'uSv/h'),(1547276471,'2019-01-12','08:01:11',0.056840,'uSv/h'),(1547276531,'2019-01-12','08:02:11',0.064960,'uSv/h'),(1547276591,'2019-01-12','08:03:11',0.073080,'uSv/h'),(1547276651,'2019-01-12','08:04:11',0.056840,'uSv/h'),(1547276711,'2019-01-12','08:05:11',0.073080,'uSv/h'),(1547276771,'2019-01-12','08:06:11',0.032480,'uSv/h'),(1547276831,'2019-01-12','08:07:11',0.089320,'uSv/h'),(1547276891,'2019-01-12','08:08:11',0.097440,'uSv/h'),(1547276951,'2019-01-12','08:09:11',0.064960,'uSv/h'),(1547277011,'2019-01-12','08:10:11',0.064960,'uSv/h'),(1547277071,'2019-01-12','08:11:11',0.064960,'uSv/h'),(1547277131,'2019-01-12','08:12:11',0.073080,'uSv/h'),(1547277191,'2019-01-12','08:13:11',0.064960,'uSv/h'),(1547277251,'2019-01-12','08:14:11',0.073080,'uSv/h'),(1547277311,'2019-01-12','08:15:11',0.040600,'uSv/h'),(1547277371,'2019-01-12','08:16:11',0.064960,'uSv/h'),(1547277431,'2019-01-12','08:17:11',0.064960,'uSv/h'),(1547277491,'2019-01-12','08:18:11',0.064960,'uSv/h'),(1547277551,'2019-01-12','08:19:11',0.056840,'uSv/h'),(1547277611,'2019-01-12','08:20:11',0.056840,'uSv/h'),(1547277671,'2019-01-12','08:21:11',0.089320,'uSv/h'),(1547277731,'2019-01-12','08:22:11',0.048720,'uSv/h'),(1547277791,'2019-01-12','08:23:11',0.064960,'uSv/h'),(1547277851,'2019-01-12','08:24:11',0.056840,'uSv/h'),(1547277911,'2019-01-12','08:25:11',0.016240,'uSv/h'),(1547277971,'2019-01-12','08:26:11',0.048720,'uSv/h'),(1547278031,'2019-01-12','08:27:11',0.064960,'uSv/h'),(1547278091,'2019-01-12','08:28:11',0.089320,'uSv/h'),(1547278151,'2019-01-12','08:29:11',0.040600,'uSv/h'),(1547278211,'2019-01-12','08:30:11',0.073080,'uSv/h'),(1547278271,'2019-01-12','08:31:11',0.105560,'uSv/h'),(1547278704,'2019-01-12','08:38:24',0.040600,'uSv/h'),(1547278764,'2019-01-12','08:39:24',0.048720,'uSv/h'),(1547278824,'2019-01-12','08:40:24',0.064960,'uSv/h');
/*!40000 ALTER TABLE `letture_radiazioni` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Dumping events for database 'data'
--

--
-- Dumping routines for database 'data'
--
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2019-01-12  8:41:11


script to read the "readings.csv" file and insert data into mysql:

import_csv2sql.sh
Codice: Seleziona tutto
mysql -uUSER -pPASSWOD --local_infile=1 data -e "LOAD DATA LOCAL INFILE '/var/www/rad/readings.csv' INTO TABLE letture_radiazioni FIELDS TERMINATED BY ',' enclosed by '\"'"

note: change USER and PASSWORD with your db credentials


launch the above script every minute:
crontab -e

Codice: Seleziona tutto
*/1 * * * * /bin/sh /root/import_csv2sql.sh
Maurizio
Avatar utente
root
Amministratore
 
Messaggi: 428
Iscritto il: 10/04/2012, 10:55
Località: Turin

example4: plot data into a graph (web page)

Messaggio da leggereda root » 12/01/2019, 10:42

Work in progress ...

It will be ready very soon :D
Maurizio
Avatar utente
root
Amministratore
 
Messaggi: 428
Iscritto il: 10/04/2012, 10:55
Località: Turin

Re: Beta and Gamma ionizing radiation detection with Raspber

Messaggio da leggereda root » 12/01/2019, 22:50

First test to plot data in a web page, I used python, pandas and ploty.

https://plot.ly/~pilovis/6/utext-uusvh- ... ix-time/#/

X axis = Unix time
Y axis = Radiation value (uSv/h)

That's not what I want, but it is a good starting point :D

the code I used:

plot_graph.py
Codice: Seleziona tutto
import MySQLdb
conn = MySQLdb.connect(host="localhost", user="pilovis", passwd="SECRET", db="data")
cursor = conn.cursor()
cursor.execute('select unix_time, date, time, value, unit from letture_radiazioni');
rows = cursor.fetchall()
import pandas as pd
df = pd.DataFrame( [[ij for ij in i] for i in rows] )
df.rename(columns={0: 'unix_time', 1: 'date', 2: 'time', 3: 'value', 4: 'unit'}, inplace=True);
df = df.sort(['value'], ascending=[1]);
import plotly.plotly as py
from plotly.graph_objs import *
py.sign_in('pilovis', 'SECRET')
unit = df['unit']

trace1 = Scatter(
     x=df['unix_time'],
     y=df['value'],
     text=unit,
     mode='markers'
)
layout = Layout(
     xaxis=XAxis( type= 'linear', title='unix_time' ),
     yaxis=YAxis( type= 'linear', title='uSv/h' )
)
data = Data([trace1])

fig = Figure(data=data, layout=layout)
py.iplot(fig, filename='radiation')
Maurizio
Avatar utente
root
Amministratore
 
Messaggi: 428
Iscritto il: 10/04/2012, 10:55
Località: Turin

Re: Beta and Gamma ionizing radiation detection with Raspber

Messaggio da leggereda root » 15/01/2019, 12:08

After two full days of testing I decided to increase the measurement time from 1 minute to 10, this gives more consistent data results.

Codice: Seleziona tutto
/*
 *  ------Geiger Tube board (Raspberry Pi + arduPi library Code) Example------
 *
 *  Explanation: This example shows how to get the signal from the Geiger Tube
 *  in Arduino, we use one of the Arduino interrupt pins (PIN2).
 *  We count the time (ms) between two pulses of the Geiger tube.
 *
 *  Copyright (C) 2011 Libelium Comunicaciones Distribuidas S.L.
 *  http://www.libelium.com
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see .
 *
 *  Version:      0.1
 *  Implementation:   Anartz Nuin Jiménez
 *  Version:      0.2
 *                  20140420 by circulosmeos (circulosmeos.wordpress.com)
 *                  arduPi v1.5 adapted and safe loop
 */

#include "arduPi.h"

// Not needed since arduPi v1.5
//SerialPi Serial;
//WirePi Wire;
//SPIPi SPI;

// Conversion factor - CPM to uSV/h
#define CONV_FACTOR 0.00812

int geiger_input = 2;
long count = 0;
long timePreviousMeassure = 0;
long countPerMinute = 0;
float radiationValue = 0.0;

void countPulse();

void setup(){
   pinMode(geiger_input, INPUT);
   digitalWrite(geiger_input,HIGH);
   attachInterrupt(2,countPulse, FALLING);
}

void loop(){

  if (millis()-timePreviousMeassure > 600000){

    timePreviousMeassure = millis();

   //detachInterrupt for accesing securely to count variable
   detachInterrupt(2);

   countPerMinute = count/10;
   radiationValue = countPerMinute * CONV_FACTOR;

//   fprintf(stderr,"CPM ");
//   fprintf(stderr,"%d\n",countPerMinute);
   fprintf(stderr,"%f",radiationValue);
   fprintf(stderr," uSv/h\n");

   count = 0;

   attachInterrupt(2,countPulse,FALLING);
   
   delay(600000);
  }
}

void countPulse(){
  count++;
}

int main (){
   setup();
   while(1){
      loop();
   }
   return (0);
}
Maurizio
Avatar utente
root
Amministratore
 
Messaggi: 428
Iscritto il: 10/04/2012, 10:55
Località: Turin

Re: Gamma ionizing radiation detection with Raspberry

Messaggio da leggereda root » 17/01/2019, 22:46

To have just the "date time readingvalue unit" printed out, substituting commas with spaces and readingvalue with just three decimals,

example: 2019-01-17 21:18:11 0.040 uSv/h

this the modified file:

nano printout-html.sh

Codice: Seleziona tutto
#!/bin/bash
while :
do
/usr/bin/tail -n 1 /var/www/rad/readings.csv | cut --complement -c  1-11 | cut --complement -c  37-39 | sed -e 's/,/ /g' > /var/www/misura.txt
/bin/sleep 10
done
Maurizio
Avatar utente
root
Amministratore
 
Messaggi: 428
Iscritto il: 10/04/2012, 10:55
Località: Turin


Torna a Raspberry

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite