Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Raspberry Pi Sensor- und Aktuatorsteuerung

Typischerweise arbeiten Sie als Programmierer mit Daten auf Diskette, und wenn Sie Glück haben, zeichnen Sie Bilder auf den Bildschirm. Dies steht im Gegensatz zu Physical Computing, das es Ihnen als Programmierer ermöglicht, mit Daten aus der realen Welt zu arbeiten und Geräte zu steuern, die sich in der realen Welt bewegen.

Ziel

Verwenden Sie einen Raspberry Pi, um den Beschleunigungsmesserwert einzulesen und einen Servomotor zu steuern.

Definitionen

In diesem Artikel gehe ich auf vier grundlegende Python-Projekte ein, um die Hardwarefähigkeiten des Raspberry Pi zu demonstrieren. Diese Projekte sind:

Blinken Sie eine LED.

Eine LED ist eine Leuchtdiode. Eine Diode ist ein Schaltungselement, das Strom in eine Richtung fließen lässt, aber nicht in die andere. Lichtemittierend bedeutet … es emittiert Licht. Ihre typische LED benötigt einen Strom im Bereich von 10-30 mA und fällt um etwa 2-3 Volt ab. Wenn Sie eine LED direkt an den GPIO Ihres Pi anschließen, liefert sie viel mehr als 30 mA und wird wahrscheinlich Ihre LED (und möglicherweise Ihren Pi) braten. Um dies zu verhindern, müssen wir einen Widerstand setzen. Wenn Sie rechnen möchten, können Sie den entsprechenden Widerstand mit der folgenden Gleichung berechnen:

R =(Vs - Vd) / I

Aber wenn Sie nicht rechnen möchten, wählen Sie einen Widerstand zwischen 500-1500 Ohm. Sobald Sie alle Ihre Schaltungselemente (LED und Widerstand) gesammelt haben

Der Code ist auch ziemlich einfach. Aber zuerst müssen Sie RPi.GPIO installieren. (Es könnte auf Ihrem Betriebssystem vorinstalliert sein.)

import timefrom itertools import cycleimport RPi.GPIO as ioio.setmode(io.BCM)io.setup(12, io.OUT)o =cycle([1, 0])während True:io.output(12, o .next()) time.sleep(0.5)

Die wichtigsten Zeilen sind im Wesentlichen:

io.setup(12, io.OUT)io.output(12, 1)

Diese Codezeilen richten Pin 12 als Ausgang ein und geben dann eine 1 (3,3 Volt) aus. Führen Sie den obigen Code aus, der mit dem Stromkreis verbunden ist, und Sie sollten sehen, wie Ihre LED jede halbe Sekunde blinkt.

Lies einen Topf.

Ein Pot ist die Abkürzung für Potentiometer, das ein variabler Widerstand ist. Dies ist nur ein schickes Wort für Knopf. Grundsätzlich beeinflussen Sie durch Drehen des Reglers den Widerstand, der die Spannung am Poti beeinflusst. (V =IR , merken?). Die Änderung der Spannung relativ zu einem physikalischen Wert ist die Funktionsweise vieler Sensoren. Diese Sensorklasse wird als analoger Sensor bezeichnet . Erinnern Sie sich, als ich sagte, dass die GPIO-Pins nur einen binären Zustand darstellen können? Wir müssen etwas mehr Silizium hinzuziehen, um diesen analogen Spannungswert in einen binären Bitstrom umzuwandeln, den unser Pi verarbeiten kann.

Dieses Stück Silizium wird als Analog-Digital-Wandler (ADC) bezeichnet. Der, den ich mag, heißt MCP3008, er hat 8 10-Bit-Kanäle, dh wir können 8 Sensorwerte mit einer Auflösung von jeweils 1024 (2^10) auslesen. Dadurch wird unsere Eingangsspannung von 0 – 3,3 Volt auf eine ganze Zahl zwischen 0 und 1023 abgebildet.

Ich habe das Pi in kurzlebige gelbe Etiketten umgewandelt, um das Diagramm zu vereinfachen

Um mit dem Chip zu kommunizieren, benötigen wir ein Python-Paket namens spidev. Weitere Informationen zum Paket und seiner Funktionsweise mit dem MCP3008 finden Sie in diesem großartigen Blogpost

Wenn spidev installiert und die Schaltung gebaut ist, führen Sie das folgende Programm aus, um Live-Sensorwerte zu lesen und auf Standardausgabe auszudrucken.

import spidev import timespi =spidev.SpiDev()spi.open(0,0)def readadc(adcnum):wenn nicht 0 <=adcnum <=7:return -1 r =spi.xfer2([1, ( 8+adcnum)<<4, 0]) adcout =((r[1] &3) <<8) + r[2] return adcoutwhile True:val =readadc(0) print val time.sleep(0.5)

Die wichtigsten Teile sind diese beiden Zeilen:

r =spi.xfer2([1, (8+adcnum)<<4, 0])adcout =((r[1] &3) <<8) + r[2]

Sie senden den Lesebefehl und extrahieren die entsprechenden zurückgegebenen Bits. Weitere Informationen darüber, was hier vor sich geht, finden Sie in dem oben verlinkten Blogbeitrag.


Daten streamen.

Um Daten über das Kabel zu streamen, verwenden wir die ØMQ-Netzwerkbibliothek und implementieren das REQUEST/REPLY-Muster. ØMQ macht es supereinfach einen Client und Server in Python einzurichten. Das Folgende ist ein vollständiges Arbeitsbeispiel.

Server

import zmqcontext =zmq.Context()socket =context.socket( zmq.REP)socket.bind('tcp://*:1980')while True:message =socket.recv() print message socket.send ("Ich bin hier")

Kunde

import zmqcontext =zmq.Context()socket =context.socket( zmq.REQ)a ='tcp://192.168.1.6:1980'socket.connect(a)for request in range(10):socket. send('Bist du zu Hause?') Nachricht =socket.recv() Nachricht drucken

Jetzt können wir Traits und Enaml verwenden, um auf der Clientseite eine hübsche Benutzeroberfläche zu erstellen. Sehen Sie sich die Acc_plot-Demo im Github-Repository an, um ein Beispiel für die Pi-Streaming-Daten über das Kabel zu sehen, die von einem Client geplottet werden sollen.


Steuerung eines Servos

Servos sind (oft kleine) Motoren, die Sie in bestimmte Positionen fahren können. Zum Beispiel können Sie für ein bestimmtes Servo möglicherweise die Antriebswelle von 0 bis 18o Grad oder irgendwo dazwischen einstellen. Wie Sie sich vorstellen können, könnte dies für viele Aufgaben nützlich sein, nicht zuletzt für die Robotik.

Die Wellendrehung wird durch die Pulsweitenmodulation (PWM) gesteuert, bei der Sie Informationen in der Dauer eines Hochspannungsimpulses an den GPIO-Pins codieren. Die meisten Hobby-Servos folgen einer Standard-Pulsbreitenbedeutung. Ein 0,5-ms-Puls bedeutet, dass Sie zu Ihrer minimalen Position gehen, und ein 2,5-ms-Puls bedeutet, dass Sie zu Ihrer maximalen Position gehen. Wiederholen Sie diesen Impuls nun alle 20 ms und Sie steuern ein Servo.

Die Pulsbreite ist viel kritischer als die Frequenz

Diese Art von Timings sind mit Python nicht möglich. Tatsächlich sind sie mit einem modernen Betriebssystem nicht wirklich möglich. In Ihrem Steuercode kann jederzeit ein Interrupt auftreten, der einen längeren Impuls als gewünscht und einen Jitter in Ihrem Servo verursacht. Um die Timing-Anforderungen zu erfüllen, müssen wir uns in die lustige Welt der Kernel-Module begeben. ServoBlaster ist ein Kernelmodul, das die DMA-Steuerblöcke nutzt, um die CPU vollständig zu umgehen. Beim Laden öffnet das Kernel-Modul eine Gerätedatei unter /dev/servoblaster in die Sie Positionsbefehle schreiben können.

Ich habe eine kleine objektorientierte Schicht darum geschrieben, die die Servosteuerung einfacher macht. Sie finden meine Bibliothek hier:

https://github.com/jminardi/RobotBrain

Verbinden Sie einfach das Servo mit 5V und Masse an Ihrem Pi und verbinden Sie dann das Steuerkabel mit Pin 4.

Der Python-Code ist ganz einfach:

import timeimport numpy as npfrom robot_brain.servo import Servoservo =Servo(0, min=60, max=200)for val in np.arange(0, 1, 0.05):servo.set(val) time.sleep( 0.1)

Alles, was Sie tun müssen, ist ein Servo zu instanziieren und dessen set() . aufzurufen Methode mit einem Gleitkommawert zwischen 0 und 1. Sehen Sie sich die servo_slider-Demo auf github an, um zu sehen, wie die Servosteuerung über das Netzwerk implementiert wird.

Für weitere Details:Raspberry Pi Sensor- und Aktorsteuerung


Herstellungsprozess

  1. MQTT-Kommunikation zwischen NodeMCU und Raspberry Pi 3 B+
  2. Himbeer-Pi-Temperaturlogger
  3. Messen Sie Temperaturen mit einem 1-Draht-DS18B20-Sensor und Raspberry Pi
  4. Python- und Raspberry Pi-Temperatursensor
  5. Raspberry Pi Wetterstation
  6. Ultraschallsensor (HC-SR04) + Raspberry Pi
  7. Bewegungssensor mit Raspberry Pi
  8. Raspberry Pi Bodenfeuchtigkeitssensor
  9. Raspberry Pi digitaler Hall-Sensor in JAVA
  10. Raspberry Pi Temperatur- und Lichtsensor