Archiv der Kategorie: Raspberry Pi

Raspberry Pi 1

Raspberry Pi 1 Model B+

Übersicht

Name Raspberry Pi 1.0/A+/B+  
Anzahl/CPU
ARM1176JZF-S
Takt (MHz)700
Kerne1
Digital IOs / Pins17 - 26
Analog inputs0
PWM2
SPI1
Flash Speicher micro SD Karte
SRam (KB)256/512
EEPROM (KB)-
WiFi-
Verschlüsselung-
Bluetooth-
UART1
I2C1
Ethernet10/100 MBit
Videonormal
Sound3,5 Klinke Stereo
USB1-2
Betriebsspannung [V]5
Eingangsspannung5
Strom (mA) / Standby (mA)80-160
Größe l x b x h93 x 63,5 x 17
Gewicht [g]31

Quellen

Raspberry Pi 1 Model B+

https://de.wikipedia.org/wiki/Raspberry_Pi

https://www.pidramble.com/wiki

Raspberry PI 2.0

Raspberry Pi 2 Model B

Übersicht

Name Raspberry Pi 2.0/B  
Anzahl/CPU
ARM Cortex-A7 / ARM Cortex-A53
Takt (MHz)900
Kerne4
Digital IOs / Pins26
Analog inputs0
PWM2
SPI1
Flash Speicher micro SD Karte
SRam (KB)1024
EEPROM (KB)-
WiFi-
Verschlüsselung-
Bluetooth-
UART1
I2C1
Ethernet10/100 MBit
Videonormal
Sound3,5 Klinke Stereo
USB4
Betriebsspannung [V]5
Eingangsspannung5
Strom (mA) / Standby (mA)200-450
Größe l x b x h93 x 63,5 x 20
Gewicht [g]40

Quellen

Raspberry Pi 2 Model B

https://de.wikipedia.org/wiki/Raspberry_Pi

https://www.pidramble.com/wiki

Raspberry Pi Zero W

Der kleine Bruder des Raspberry kommt mit einer WLan Karte und reduzierten Schnittstellenumfang. Er bestitzt einen Mini-HDMI Anschluss und einen Micro USB Anschluss für Periferie wie Mouse, Tastatur, USB-Festplatten usw.. Die GPIO-Pins müssen beim Zero W selbst aufgelötet werden. Wie unten zu sehen ist, gibt es ein Standardgehäuse mit passenden Ausparungen.

 

Daten im Überblick

Name Raspberry Pi zero
  
Anzahl/CPU
ARM1176JZF-S
Takt (MHz)1000
Kerne1
Digital IOs / Pins26
Analog inputs0
PWM2
SPI1
Flash Speicher micro SD Karte
SRam (KB)512
EEPROM (KB)-
WiFi2,4 GHz, 802.11 b/g/n
VerschlüsselungWEB / WPA2 / TKIP /AES
Bluetooth4.1
UART1
I2C1
Ethernet-
VideoMicro
SoundHDMI digital
USB-
Betriebsspannung [V]5
Eingangsspannung5
Strom (mA) / Standby (mA)80-120
Größe l x b x h65 x 31 x 5
Gewicht [g]9

Pining

Das Pinning ist mit dem Raspberry Pi 2 B+ gleich.

Headless Installation

Raspberry Pi Zero W – Headless Installation

Quellen

https://raspberry.tips/raspberrypi-tutorials/raspberry-pi-modell-b-plus-gpio-pins-worksheet/

https://de.wikipedia.org/wiki/Raspberry_Pi

Raspberry Pi Zero W – Headless Installation

Hier findet ihr eine Anleitung zur Erstinstallation des Raspberry Pi Zero W ohne Monitor und Tastatur mit Hilfe eines Windows PCs. Der Vorteil den Pi Zero W „Kopflos“ (aus dem eng. Headless) zu betreiben ist, dass man die ganzen Adapter für HDMI und USB erstmal nicht braucht. Ausserdem muss man nicht einen extra Monitor besorgen oder den eigenen dauernd umschalten.

Es gibt viele ausführliche Berschreibungen im Netzt, auch für andere Betriebssysteme wie Linux und MAC OS, weshalb ich mich hier nur auf die Esenz beschränke. Ich habe einige gute Anleitungen, auch für andere Betreibssystem unter den Quellen gelinkt.

Benötigt wird

Installation

Erst einmal das Raspbian Image downloaden hier. Mit Hilfe des Programms Etscher wird das Raspbian Image dann an die richtigen Stellen auf der SD Karte geschrieben. Etscher kann hier gedownloaded werden. Nach dem Download das Installationsprogramm ausführen und danach das Programm starten.

Schritte:

  1.  Image auswählen
  2. als Ziel die SD-K selektieren
  3.  den Knopf Flash! betätigen

Der eigentliche Schreibvorgang dauert eine Weile. Wenn Etscher fertig ist, die SD-Karte kurz aus dem Slot nehmen und wieder einstecken. Etscher wirft nach dem flashen die SD-Karte software- technisch aus.

Mit dem Explorer das boot Laufwerk öffnen. (Achtung der Rest der SD Karte ist nicht ohne weiteres unter Windows einsehbar.

Mit dem Editor eine Datei wpa_supplicant.conf im boot Verzheichnis erstellen und darauf achten, dass Windows nicht die Endung .txt anhängt. In sie werden die WLAN Verbindungsdaten geschrieben:

[gistpen id=“368″]

Bitte die ssid und das den Key durch die eigenen WLAN Daten ersetzen.

Für den automatischen Start des SSH-Servers, der eine spätere Netzwerkverbindung zum Pi ermöglicht, bedarf es nur einer einfachen Datei mit dem namen ssh. (Auch hier darauf achten dass Windows kein .txt anhängt.

Das wars für den ersten Start. Die SD-Karte in den Raspberry stecken und einschalten. Es kann etwas dauern bis der Pi sich mit dem WLan verbunden hat, also etwas Geduld.

Um eine SSH Verbindung zum Raspberry aufzubauen, benötigt man seine Adresse oder den Namen unter dem er im Netzwerk angemeldet ist. Ich habe in meinem WLan Accesspoint (z.B. Fritzbox) nachgesehen wie die Adresse lautet.  (Es ist auch möglich den Namen zu verwenden „raspberrypi“. (Da ich aber noch einen Pi im Netz habe würde das bei mir nicht funktionieren).

Zur Verbindung muss das Programm Putty gestartet werden , der Namen oder die Adresse des Raspberry eingegeben werden und der Open Knopf gedrückt werden.

Der initiale Benutzer ist pi und das Passwort raspberry, beide in der geöffneten Konsole eingeben.

Nun kann der Raspberry nach Belieben angepasst werden. Als erstes sollte jedoch das pi Passwort geändert werden. Der Befehl hierfür lautet passwd.

Viel Spaß damit!

Quellen

https://core-electronics.com.au/tutorials/raspberry-pi-zerow-headless-wifi-setup.html

https://www.heise.de/make/meldung/Raspberry-Pi-Zero-W-Bluetooth-und-WLAN-Update-fuer-Mini-Himbeere-3637499.html

https://www.heise.de/ct/artikel/Raspberry-Pi-Das-richtige-Modell-und-Betriebssystem-die-schoensten-Projekte-3303489.html

Raspbian

Raspberry Pi Zero W ausprobiert

Raspberry Pi Zero W

 

Raspberry PI 3

Der Raspberry Pi 3 ist im Februar 2016 erschienen und löst seinen Vorgänger mit neuen Komponenten ab. Neben einer integrierten WLan Karte besitzt er einen ARM Cortex-A53 Prozessor. Die vier Kerne werden mit 1200 MHz getaktet wird.  Der Arbeitsspeicher ist mit 1024 MB doppelt so groß.

Daten im Überblick

Name Raspberry Pi 3.0  
Anzahl/CPU
ARM Cortex-A53
Takt (MHz)1200/1400
Kerne4
Digital IOs / Pins26
Analog inputs0
PWM2
SPI1
Flash Speicher micro SD Karte
SRam (KB)1024
EEPROM (KB)-
WiFi2,4 GHz 80.11, b/g/n
VerschlüsselungWEB / WPA2 / TKIP /AES
Bluetooth4.1/4.2
UART1
I2C1
Ethernet10/100/100 MBit
Videonormal
Sound3,5 Klinke Stereo
USB-
Betriebsspannung [V]5
Eingangsspannung5
Strom (mA) / Standby (mA)260-730
Größe l x b x h93 x 63,5 x 20
Gewicht [g]40

Headless setup

https://caffinc.github.io/2016/12/raspberry-pi-3-headless/

Aufbau der Platine und Pinout

Pinning für Programmiersprachen

Java

Quellen

Raspberry Pi 3 Model B

https://de.wikipedia.org/wiki/Raspberry_Pi

http://www.pi4j.com

 

Raspberry PI + Servo

Ansteuerung eines Standard Servos mit dem Raspberry PI 3.

Für die spätere Verwendung auf einem Roboter soll der Servo in +/- Grad mit Bezug zur Mittelstellung gesteuert werden.

Weiterhin soll für den Servo, da die beiden Hardware PWMs schon für einen anderen Zweck verwendet werden, der Software PWM zur Anwendung kommen.

Auf die Funktionsweise eines Servos gehe ich hier nicht ein, dies kann bei Bedarf bei http://rn-wissen.de/wiki/index.php/Servos oder anderen Websites nachgelsen werden.


Hardware

PI3 (oder älter bitte auf die richtigen Pins achten)
Standard-Servo
Diverse Kabel ( Vorgefertigte Pin-Header Kabel)


Aufbau

GPIOs

  • Ansteuerung des Servos GPIO 27

(Die GPIOs gelten nur in Verbindung mit pi4j und wirePi)

 

Plan

 


Software

Entwicklungsumgebung

Als Entwicklungsumgebung verwende ich BlueJ auf dem PI selbst. Hiermit habe ich die folgenden Klassen erstellt.


Code

Erste Testklasse

Hier die erste Testklasse welche alle Positionen des Servos mal abfährt.

[gistpen id=“232″]

Servo-Klasse

Klasse zur Steuerung des Servos. Die zwei wichtigsten Methoden sind:

  • setPos – Setzen der Position, Wertebereich von posMin bis posMax wobei (posMax-posMin+1)  die Mittelstellung ist.
  • setDeg – Diese Methode projeziert die eingegebende Gradzahl auf die möglichen positionen (sehr ungenau 🙁 )

[gistpen id=“228″]

Test-Klasse

Klasse mit Main-Methode zum Testen des Servos. In der Main-Methode werden alle Positionen abgefahren wobei die Positionierung über den Winkel relativ zur 0 Position erfolgt.

[gistpen id=“230″]


Tips

Das Positionieren über die PI4j Lib ist sehr ungenau für die 180° Bewegungspielraum des Servos stehen gerade mal rund 20 (+-2) Positionen zur Verfügung. Das sind rund 9° pro Position.  Evtl. sollte man vorher testen welche Positionen für den Aktuellen Zweck am besten geeignet sind. Sollte der genaue Winkel wichtig sein, ist es besser diesen vorab zu messen als ihn über die setDeg Methode berechnen zu lassen.

Es gibt noch weitere Lib’s (Servoblast, … ) die evtl genauer sind, evtl müsste man auch überlegen die Programmiersprache zu wechseln und dann den Ensprechenden Code über das Nativ-Interface anzusprechen bzw. irgendwie anders 😉 .


Einen anderen Weg gehen …

Ich habe versucht den Software PWM innerhalb eines Threads laufen zu lassen, jedoch ohne Erfolg. Der Servo weigert sich zu funktionieren.  Über die Ursache hierfür bin ich mir noch im unklaren ich nehme allerdings an, dass hierdurch der Timer zerschossen wird.

Nach diversen Tests mit unterschiedlichen Frequenz-Einstellungen habe ich mich entschlossen ServoBlaster od.  besser die PI variante (PiBits) zu verwenden. Die Installation gestaltet sich einfach wie folgt.

[gistpen id=“257″ ]

Jetzt muss der ServoBlaster nur noch über Java angesprochen werden. Hier ein einfaches Beispiel zum testen.

… kommt noch

Die Implementierung in anständigen Klassen sieht dann wie folgt aus.

… kommt noch


Tips für den neuen Weg

Wenn die exec Funktion von Java nix macht ist hier ein guter Link zum Bugfixing.

http://www.javaworld.com/article/2071275/core-java/when-runtime-exec—won-t.html

Weiterhin könnte es helfen nicht die Println Methode zu verwenden, da zumindest mein PI den Abschluss der Zeile nicht richtig interpretieren konnte. (Beispiel „5=100\n)“ sollte funktionieren).

 

Quellen

http://razzpisampler.oreilly.com/ch05.html
https://github.com/Pi4J/pi4j/blob/master/pi4j-example/src/main/java/MaestroServoExample.java
https://www.bluej.org/raspberrypi/ServoMotor.html
https://phyks.me/2015/05/controlling-servomotors-on-a-raspberry-pi.html
http://rn-wissen.de/wiki/index.php/Servos
https://github.com/richardghirst/PiBits/tree/master/ServoBlaster

Raspberry Pi Servo Motor Steuerung

Between 0 and 1 – PWM with Raspberry Pi

 


Anhang

Pin-Belegung

 

Pi4J + BlueJ

Da ich am liebsten im Java programmiere, verwende ich die Bibliothek Pi4J zur Ansteuerung der GPIOs am Raspberry Pi 2 und 3.

Auf die Installation der Bibliothek werde ich nicht näher eingehen, da dies auf den folgenden Webseiten schon erschöpfend beschrieben wurde.

http://pi4j.com/install.html
http://pi4j.com/utility/pi4j.html
http://www.forum-raspberrypi.de/Thread-tutorial-ansteuerung-der-gpio-ports-mit-pi4j

Auch wichtig zu wissen ist, dass Pi4J auf der wiringPI Bibliothek aufbaut und diese natürlich mit installiert werden muss.

Als Entwicklungsumgebung verwende ich BlueJ, weil man hier auch gleich noch ein Klassendiagramm mit bekommt.

Also Doku gibts genug, warum dann dieser Beitrag?

Ich möchte nach und nach eine kleine FaQ erstellen mit den Problemen die ich während der Nutzung dieser beiden Tools hatte, habe und haben werde.

Die Ports machen nix

In der alten Version vom BlueJ, scheint in den Einstellungen das Flag zur Auführung als Root nicht richtig initialisiert zu sein. Nach dem Start von BlueJ einfach das Flag entfernen und wieder rein machen dann gehts. Dieses Problem scheint in der aktuellen Version behoben zu sein.

Sollte es dann immer noch nicht klappen einfach mal die IOs auf der Console testen. Hilfe gibts hier oder hier.

Soweit ich weiss muss man zur Ansteuerung der GPIOs root (od. sudo) rechte besitzen. Der Benutzer pi ist ensprechend gut ausgestattet und eignet sich am Besten für erste Tests. (Man soll sich ja nicht mehr als root anmelden ;( ).

Nach dem Upgrade geht nix mehr

Ich habe meinen Raspberry auf die neuste Version aktualisiert. Hierbei wurde auch der Kernel auf die Version 4.9.32 aktualisiert. Danach gingen die GPIOs nicht mehr. Ein Downgrade des Kernels auf die Version 4.4.50 hat das Problem erstmal gelöst. Hilfe hierzu gibt es hier und hier.

Software PWM beim Servo

Für ca. 180° stehen beim Software PWM leider nur 20 Stellungen/Schritte für den Servo zur Verfügung was ca. 9° pro Schritt entspricht.
Weiterhin gibt es durch andere Funktionen im Betriebssystem oft gewackel am Servo (jitter). Man sollte ihn so programmieren, dass die entsprechende Stellung angefahren wird und dann den PWM wieder ausschalten.

Eine bessere Möglichkeit ist natürlich einen Hardware PWM zu verwenden, wenn man noch einen frei hat ;).

Andere Bibliotheken die besser funktionieren sollen habe ich noch nicht getestet hier eine kleine Auflistung, diese müssten dann gegebenen Falls mit dem Java Native Interface angesteuert werden:

Weiteres zu PWM [1] [2] [3]

Weiter Probleme werden sicherlich folgen ….

Raspberry PI 3 + Motorsteuerung

Ziel ist es mit dem Raspberry PI 3 unter Zuhilfenahme einer Motorbrücke, 2 Gleichstrommotoren zu betreiben.

Dies soll später genutzt werden um einen zweirädrigen Roboter anzutreiben.


Hardware

PI3 (oder älter bitte auf die richtigen Pins achten)
Motorbrücke L9110s
2x DC Motor
Diverse Kabel ( Vorgefertigte Pin-Header Kabel)


Testaufbau

GPIOs am Raspberry

  • Motor1 Richtung GPIO 26
  • Motor1 Geschwindigkeit GPIO 1
  • Motor2 Richtung GPIO 24
  • Motor3 Geschwindigkeit GPIO 23

(Die GPIOs gelten nur in Verbindung mit pi4j und wirePi)

Plan


Software

Entwicklungsumgebung

Als Entwicklungsumgebung verwende ich BlueJ auf dem PI selbst. Hiermit habe ich vier Klassen erstellt. Diese werden im folgenden Abschnitt kurz erklärt.


Code

Da ich anfänglich ein paar Probleme hatte und die Motorbrücke nicht wie erwartet reagierte, habe ich mich langsam an das Thema herangetastet.

Digitale Ansteuerung

Zuerst habe ich eine kleine Testklasse geschrieben, welche die Motoren digital ansteuert. Hiermit konnte ich die richtige Verkabelung sicherstellen. Mit diesem Test ist noch keine Geschwindigkeitsregulierung möglich.

[gistpen id=“197″]

PWM Ansteuerung

Als nächstes habe ich eine Testklasse erstellt, die den Hardware PWM benutzt und ebenfalls die Richtungen wechselt.

[gistpen id=“205″]

Funktionalität in Klasse gepackt

Als letzten Schritt habe ich eine Klasse Drive zur Steuerung beider Motoren und die dazu gehörende Testklasse erstellt.

Drive Klasse

Klasse zur Steuerung der zwei Motoren.

[gistpen id=“207″]

Test-Drive Klasse

Klasse zum Testen der Motoren. Diese testet, wie auch im vorhergehenden Beispiel,  unterschiedliche Geschwindigkeiten und Richtungen.

[gistpen id=“209″]

 


Tips

Motoren drehen nicht in die richtige Richtung

Sollten die Motoren nicht in die richtige Richtung drehen, einfach die polarität am Anschluss an der Motorbücke vertauchen bis es passt. Sollte das nicht möglich sein, die Methoden forwardLeft/Right() und backwardLeft/Right() entsprechend anpassen.

Raspberry rebooted bei Aktivierung/Betrieb der Motoren

Sollte beim Einschalten/Betrieb der Motoren der Raspberry neu booten, kann dies am hohen Stromverbrauch der Motoren liegen. Dann sollte man überlegen die Motoren entweder über eine zusätzliche Spannungsquelle zu versorgen oder zumindest die Motoren mit einer Spule zu entstören. Condensatoren können zusätzlich Spannungspitzen abfangen.

Mehr zur Entstörung:

http://www.bnhof.de/~ho1645/entstoer.htm
https://www.mikrocontroller.net/articles/Motoransteuerung_mit_PWM

Schaltung mit zusätzlicher Spannungsquelle:

Hier wird der L9110 mit einem LiPo versorgt, wichtig ist es die Masse des Lipo mit der des Raspberries zu verbinden, sonst funktioniert es nicht. Der Lipo sollte im Bereich 3.7v und < 12V liegen (Beschränkung des L9910).

 


Quellen

Beispiel auf GitHub
PI4j Webseite
PWM + Motoren allgemein beim RoboterNetz

Einige andere Webseiten waren auch noch nützlich, einfach mal Google bemühen.


Anhang

Pin-Belegung

http://www.pi4j.com

Mit dem Raspberry PI 3 den Entfernungsmesser US-100 ansteuern

Ansteuerung eines Ultraschall-Entfernungsmessers US-100 mit dem Raspberry PI3 ( oder früher). Ich habe nur Tutorials für den SR-04 gefunden, dieser wird allerdings analog zum US-100 eingebunden.


Hardware

PI3 (oder älter bitte auf die richtigen Pins achten)
US-100 ( Ultraschallsensor)
Brot-Board (zum leichteren Aufbau)
Diverse Kabel ( Vorgefertigte Pin-Header Kabel)


Aufbau

Der US-100 arbeitet mit 3.3V womit man ihn direkt am Raspberry betreiben kann.

Verdrahtung

  • Trigger Pin am GPIO 28
  • Echo Pin an den GPIO 25

(Die GPIOs gelten nur in Verbindung mit pi4j und wirePi)

 


Software

Entwicklungsumgebung

Als Entwicklungsumgebung verwende ich BlueJ auf dem PI selbst. Hiermit habe ich zwei Klassen erstellt.


Code

Distance-Klasse

Klasse zur Steuerung des US-015, mit den Methoden

  • getDistanceMM – Entfernung in Millimetern
  • getDistanceCM – Entfernung in Zentimetern

[gistpen id=“156″]

Test-Klasse

Klasse mit Main-Methode zum Testen der Distance-Klasse. In der Main-Methode wird alle 5 Sekunde ein neuer Wert vom Sensor abgefragt und auf die Console geschrieben.

[gistpen id=“158″]

Tips

Bei größerer Beanspruchung des PI ist zu beachten, dass Java die zeitlichen Abfolgen nicht garantiert. Somit kann es zu verfälschten oder keinen Ergebnissen bei der Messung kommen.

Quellen

https://www.modmypi.com/blog/hc-sr04-ultrasonic-range-sensor-on-the-raspberry-pi

http://t1m0b0t.blogspot.de/2014/04/using-ultrasonic-range-sensor-on.html

http://www.lediouris.net/RaspberryPI/HC-SR04/readme.htmlhttps://github.com/OlivierLD/raspberry-pi4j-samples/tree/master/RangeSensor

http://pi4j.com/pins/model-3b-rev1.html

Interfacing HC-SR04 Ultrasonic Sensor with Raspberry Pi

 

Entfernung messen mit Ultraschallsensor HC-SR04 – Raspberry Pi

Anhang

Pin-Belegung