top of page

Raspberry Pi mit Ultraschallsensor und MySQL Datenbankanbindung

Hallo Leute,

heute möchte ich euch mein Hochschulprojekt vorstellen! Es handelt sich um einen Ultraschallsensor der mit einem Raspberry Pi den Abstand von einem Objekt zum Sensor in cm messen kann. Die Messungen werden 10mal wiederholt und anschließend der Median ermittelt. Der Messwert wird in einem dynamischen Array gespeichert. Zusätzlich ist der Sensor auf einem Schrittmotor montiert, der sich in beliebige Richtung drehen kann. Dieser wird ebenfalls vom Raspberry Pi angetrieben. Da der Schrittmotor den Vorzug hat, das er die Einzelschritte mitzählt, kann einfach ein Inkrementalgeber integriert werden. Dadurch ist es mögich beliebig viele Punkte im Kreis anzufahren. Beispielsweise kann der der Sensor alle 4x90° Verfahren werden und kehrt nach den Messungen zurück (-360°) in die Ausgangsposition. Dies ist auch notwendig, da der Sensor mit vier Flachbandkabel verdrahtet ist und diese sich nicht unendlich verdrehen lassen. Das Skript kann über die Shell des Raspberry Pis aufgerufen und die Messwerte ausgegeben werden. Optional werden die Daten in eine MySQL Datenbank importiert. Dafür habe ich ein Softwaretool in C# geschrieben, die die Messdatenbank öffnet und verwalten kann. Ihr könnt das Programm als Beispielprogramm verstehen und gerne beliebig weiterentwickeln und unten am Ende des Blogs von meiner Dropbox runterladen. Schreib mir doch eine Email oder Kommentar wenn euch dieser Blog geholfen hat euer Problem zu lösen! Viel Spaß weiterhin beim lesen und viele Grüße.


euer Flo

Video beim Vermessen eines Tennisballs:

https://dl.dropboxusercontent.com/u/15052327/Ultraschallsensor%20mit%20Raspberry%20Pi.mp4

Hier das Vereinfachte Python Skript:

import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO_TRIGGER = 4 GPIO_ECHO = 17 GPIO.setup(GPIO_TRIGGER, GPIO.OUT) GPIO.setup(GPIO_ECHO, GPIO.IN) def distanz(): GPIO.output(GPIO_TRIGGER, True) time.sleep(0.00001) GPIO.output(GPIO_TRIGGER, False) StartZeit = time.time() while GPIO.input(GPIO_ECHO) == 0: StartZeit = time.time() while GPIO.input(GPIO_ECHO) == 1: StopZeit = time.time() TimeElapsed = StopZeit - StartZeit distanz = (TimeElapsed * 34300) / 2 return distanz try: while True: abstand = distanz() abstand = abstand-1 print ("Gemessene Entfernung = %.lf cm" %abstand) except KeyboardInterrupt: print ("Messung wurde erfolgreich gestoppt!") GPIO.cleanup()

MySQL Connector Version: 1.0 Autor: Florian Gerstner Erstellt am: 11.11.2015 Beschreibung: Der MySQL Connector verbinden sich automatisch mit einer MySQL Datenbank Erstellt in einer Login Tabelle einen Connect Insert Ruft diese Tabelle mit einem Select Befehl ab und zeigt die Tabelle in einem DataGridView an Was wird alles benötigt: 1. Das MySQL Connector Tool installieren 2. Für eine Verbindung wird eine MySQL Datenbank für Raspberry Pi benötigt 3. Es muss ein zusätzlicher MySQL Benutzer angelegt werden 4. Es muss eine Login Tabelle erstellt werden 5. Es muss ein MySQL ODBC Treiber installiert und in Windows eingerichtet werden. 1. MySQL Connector installieren unter Windows. Installieren wie jede Windows Anwendung Es handelt sich um eine .Net Anwendung 2. MySQL installieren: In die MySQL Shell eingeben apt-get install mysql-server mysql-client php5-mysql Passwort festlegen Als nächstes müsst ihr das root Passwort festlegen Neustart Wenn die Installation abgeschlossen ist führen wir einen Neustart aus. sudo restart Nun ist der MySQL Server installiert und läuft auf eurem Raspberry Pi Bis jetzt wurde nur der MySQL-Daemon so konfiguriert, dass er Anfragen auch an den Netzwerk-Schnittstellen entgegen nimmt. Für den Zugriff auf die MySQL-Datenbank wird ein MySQL-Benutzer benötigt welcher vom Client-System zugreifen darf. In diesem Beispiel wollen wir einen neuen Benutzer erstellen. Dazu öffnen Sie auf dem MySQL-Server eine MySQL-Shell. pi@raspberrypi ~ $ mysql -u root -p mysql 3. Zusätzlicher MySQL Benutzer Mit dem folgenden Befehl wird jetzt der Benutzer pi erstellt, welcher sich nur vom Client mit dem Domainnamen raspberrypi512.home.lan anmelden darf. Anstelle des Domainnamen können Sie auch die IP-Adresse Ihres Clients angeben. mysql> CREATE USER 'pi'@'raspberrypi512.home.lan' IDENTIFIED BY 'StrengGeheim'; Da es in diesem Beispiel noch keine Datenbank auf dem MySQL-Server gibt erstellen wir eine mit dem Namen remote_db. Sollten Sie bereits eine Datenbank angelegt haben, können Sie diesen Schritt überspringen. mysql> CREATE DATABASE remote_db; Als nächstes werden die Zugriffsrechte für die MySQL-Datenbank festgelegt. In diesem Fall werden dem Benutzer pi für Zugriffe vom Remote-Client raspberrypi512.home.lan mit dem Passwort StrengGeheim alle Rechte auf die Datenbank und den darin enthaltenen Tabellen erteilt. mysql> GRANT ALL ON remote_db.* TO pi@'raspberrypi512.home.lan' IDENTIFIED BY 'StrengGeheim'; Nachdem Sie die Zugriffsrechte angepasst haben können Sie die MySQL-Shell wieder schließen. mysql> QUIT Zum Überprüfen der Konfiguration öffnen Sie jetzt auf dem Remote-Client eine MySQL-Verbindung zu Ihrem Datenbank-Server und lassen sich zum Beispiel alle Datenbanken anzeigen. pi@raspberrypi512 ~ $ mysql -u pi -h raspberrypi.home.lan -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 80 Server version: 5.5.28-1 (Debian) Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> QUIT Bye 4. Tabelle anlegen: MySQL anmelden und Passwort eingeben In die MySQL Shell eingeben: SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | remote_db | +--------------------+ 3 rows in set (0.01 sec) CREATE DATABASE test; SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | remote_db | | test | +--------------------+ 3 rows in set (0.01 sec) USE TEST; SHOW TABLES; CREATE TABLE IF NOT EXISTS Login (ID INTEGER PRIMARY KEY, Info Varchar(50), Datum DATE, Uhrzeit time, Ort Varchar(50)); SHOW TABLES; DESCRIBE Login; Select * From Login; CREATE TABLE IF NOT EXISTS Login (ID INTEGER PRIMARY KEY, Info Varchar(50), Datum DATE, Uhrzeit time, Ort Varchar(50)); INSERT INTO Login VALUE (1,'TEST1',2015-11-11','08:08:08','Deutschland'); 5. MySQL ODBC Treiber installieren ODBC Treiber installieren siehe Ordner ODBC WIndows>Systemsteuerung>Verwaltung>ODBC Treiber ODBC Treiber von MYSQL auswählen IP Adresse von Raspberry Pi + Login Name + Passwort eingeben Jetzt wird im Dropdownmenü die Datenbanknamen angezeigt Datenbankname Test auswählen Verbindungsname nach Belieben einstellen Wenn alles geklappt hat kann jetzt auch unter Open Office unter Datenbank öffnen ODBC Treiber und Verbindungsname eine Verbindung auf die DB erstellt werden In Open Office können weitere Tabellen, Abfragen usw. erstellt werden. Jetzt können Sie den MySQL Connector Verwenden Das Programm kann unter folgenden Link von meiner Dropbox runtergeladen werden:

https://www.dropbox.com/sh/nydmkayetsxfk4e/AAAkMb_szJK1gDaNLF2OoqyCa?dl=0

Source CODE C# für MySQl Conncector 1.0 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.OleDb; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using MySql.Data.MySqlClient; using System.Data.Odbc; using MySql.Data.Types; using System.Threading; using System.Xml.Linq; using System.Xml.XPath; using System.Xml; namespace MySQLConnector { public partial class Form1 : Form { private string server; private string database; private string uid; private string password; private string connectionString; private Random Rnd = new Random(); private string Datum = (System.DateTime.Now.ToShortDateString()); private string Datum_mysql = (System.DateTime.Now.Year + "-" + System.DateTime.Now.Month + "-" + System.DateTime.Now.Day); private string Zeit = System.DateTime.Now.ToShortTimeString(); public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { server = textBox1.Text; database = textBox2.Text; uid = textBox3.Text; password = textBox4.Text; int b = Rnd.Next(0, 1000); connectionString = "SERVER=" + server + ";" + "DATABASE=" + database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";"; MySqlConnection connection = new MySqlConnection(connectionString); MySqlCommand command; connection.Open(); MessageBox.Show("Verbindung wurde erfolgreich hergestellt", "MySQL Information", MessageBoxButtons.OK, MessageBoxIcon.Information); command = connection.CreateCommand(); command.CommandText = "CREATE TABLE Login2 VALUES ("; command.CommandText = "INSERT INTO Login VALUES(" + b + ",'MySQL Database','" + Datum_mysql + "','" + Zeit + "','Heimstetten');";// SQL Befehle erstellen command.ExecuteNonQuery(); command.CommandText = "select * from Login order by Uhrzeit desc;"; //Alle Datensätze aus der Spalte Person hinzufügen MySqlDataReader reader = command.ExecuteReader(); //Daten aus der Tabelle auslesen //Daten in einer Tabelle/GridView löschen for (int i = 0; i < reader.FieldCount; i++) dataGridView1.Columns.Add( reader.GetName(i), reader.GetName(i)); while (reader.Read()) // Solange durch die Datentabelle springen bis kein Inhalt mehr in der Tabelle ist und in der Textbox anzeigen { object[] row = new object[reader.FieldCount]; //ein Array erstellen die unsere Zeilen& Spaltennamen beinhaltet for (int i = 0; i < reader.FieldCount; i++) row[i] = reader[i]; dataGridView1.Rows.Add(row); } reader.Close(); // Den Reader wieder been // Ausführen einer nichtSelect Anfrage connection.Close(); } private void button2_Click(object sender, EventArgs e) { dataGridView1.Columns.Clear(); } private void label5_Click(object sender, EventArgs e) { } private void button3_Click(object sender, EventArgs e) { MySqlConnection connection = new MySqlConnection(connectionString); MySqlCommand command; connection.Open(); MessageBox.Show("Möchten Sie die Tabelleninhalt wirklich löschen", "Tabelle löschen", MessageBoxButtons.OK, MessageBoxIcon.Information); command = connection.CreateCommand(); command.CommandText = "TRUNCATE TABLE Login;";// SQL Befehle erstellen command.ExecuteNonQuery(); MessageBox.Show("Tabelleninhalt wurde erfolgreich gelöscht!"); connection.Close(); } } }

 RECENT POSTS: 
 SEARCH BY TAGS: 
Noch keine Tags.
bottom of page