Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Raspberry Pi-sensor en actuatorbediening

Meestal werk je als programmeur met gegevens op schijf, en als je geluk hebt, teken je afbeeldingen op het scherm. Dit in tegenstelling tot fysiek computergebruik, waarmee je als programmeur kunt werken met gegevens die vanuit de echte wereld worden gedetecteerd en apparaten kunnen besturen die zich in de echte wereld verplaatsen.

Doel

Gebruik een Raspberry Pi om de accelerometerwaarde in te lezen en een servomotor te besturen.

Definities

  • Raspberry Pi
    • Kleine Linux-computer van $ 35 met 2 USB-poorten, HDMI-uitgang, Ethernet en vooral...
  • GPIO-pinnen
    • Invoer-/uitvoerpinnen voor algemeen gebruik
    • Dit is het onderdeel dat 'physical computing' echt mogelijk maakt. U als programmeur kunt op elke pin de spanning hoog of laag instellen, zo praat u met actuatoren. Ook kunt u per pin aflezen wat de spanning op dat moment is. Zo praten sensoren met je terug. Het is belangrijk op te merken dat elke pin een binaire toestand vertegenwoordigt, je kunt alleen een 0 of een 1 uitvoeren, niets ertussenin.

In dit artikel zal ik vier basis Python-projecten bespreken om de hardwaremogelijkheden van de Raspberry Pi te demonstreren. Die projecten zijn:

  • Knipper een LED.
  • Lees een pot.
  • Gegevens streamen.
  • Bedien een servo.

Knipper een LED.

Een LED is een Light Emitting Diode. Een diode is een circuitelement dat stroom in de ene richting laat stromen, maar niet in de andere. Lichtgevend betekent … het straalt licht uit. Uw typische LED heeft een stroom nodig in het bereik van 10-30 mA en zal ongeveer 2-3 volt dalen. Als u een LED rechtstreeks op de GPIO van uw Pi aansluit, zal deze veel meer dan 30 mA opwekken en zal uw LED (en mogelijk uw Pi) waarschijnlijk braden. Om dit te voorkomen moeten we een weerstand plaatsen. Als je wiskunde wilt doen, kun je de juiste weerstand berekenen met behulp van de volgende vergelijking:

R =(Vs - Vd) / I

Maar als je geen wiskunde wilt doen, kies dan een weerstand tussen 500-1500 ohm. Zodra je al je circuitelementen (LED en weerstand) hebt verzameld

De code is ook vrij eenvoudig. Maar eerst moet je RPi.GPIO installeren. (Het kan voorgeïnstalleerd zijn op uw besturingssysteem.)

tijd importeren uit itertools import cycleimport RPi.GPIO as ioio.setmode(io.BCM)io.setup(12, io.OUT)o =cycle([1, 0]) terwijl True:io.output (12, o .next()) tijd.slaap(0.5)

De belangrijkste regels zijn in feite:

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

Deze coderegels stellen pin 12 in als uitgang en geven vervolgens een 1 (3,3 volt) af. Voer de bovenstaande code uit die op het circuit is aangesloten en u zou uw LED elke halve seconde aan en uit moeten zien knipperen.

Lees een pot.

Een pot is een afkorting voor potentiometer, wat een variabele weerstand is. Dit is gewoon een mooi woord voor knop. Door aan de knop te draaien, heb je in feite invloed op de weerstand, die de spanning over de pot beïnvloedt. (V =IR , herinneren?). Het veranderen van de spanning ten opzichte van een fysieke waarde is hoeveel sensoren werken, en deze klasse van sensoren staat bekend als een analoge sensor . Weet je nog dat ik zei dat de GPIO-pinnen alleen een binaire staat kunnen vertegenwoordigen? We zullen de hulp van wat meer silicium moeten inroepen om die analoge spanningswaarde om te zetten in een binaire stroom bits die onze Pi aankan.

Dat stuk silicium wordt een analoog-naar-digitaalomzetter (ADC) genoemd. Degene die ik leuk vind, heet MCP3008, het heeft 8 10-bits kanalen, wat betekent dat we 8 sensorwaarden kunnen lezen met een resolutie van 1024 elk (2^10). Dit zal onze ingangsspanning van 0 – 3,3 volt toewijzen aan een geheel getal tussen 0 en 1023.

Ik heb de Pi veranderd in vluchtige gele labels om het diagram te vereenvoudigen

Om met de chip te praten, hebben we een python-pakket nodig met de naam Spidev. Voor meer informatie over het pakket en hoe het werkt met de MCP3008, bekijk deze geweldige blogpost

Als spidev is geïnstalleerd en het circuit is gebouwd, voert u het volgende programma uit om live sensorwaarden te lezen en af ​​te drukken naar stdout.

import spidev import timespi =spidev.SpiDev()spi.open(0,0)def readadc(adcnum):indien niet 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)

De belangrijkste onderdelen zijn deze twee regels:

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

Ze sturen het leescommando en extraheren de relevante geretourneerde bits. Zie de blogpost die ik hierboven heb gelinkt voor meer informatie over wat hier aan de hand is.

Gegevens streamen.

Om gegevens over de kabel te streamen, gebruiken we de ØMQ-netwerkbibliotheek en implementeren we het REQUEST/REPLY-patroon. ØMQ maakt het supereenvoudig om een ​​client en server in Python op te zetten. Het volgende is een volledig werkend voorbeeld.

Server

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

Klant

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('Ben je thuis?') message =socket.recv() print bericht

Nu kunnen we eigenschappen en email gebruiken om een ​​mooie gebruikersinterface te maken aan de kant van de klant. Bekijk de acc_plot-demo in de github-repo om een ​​voorbeeld te zien van de Pi-streaminggegevens over de draad die door een client moeten worden geplot.

Bedien een servo

Servo's zijn (vaak kleine) motoren die je naar bepaalde standen kunt rijden. Voor een bepaalde servo kunt u bijvoorbeeld de aandrijfas instellen van 0 tot 18o graden, of ergens daartussenin. Zoals je je kunt voorstellen, kan dit voor veel taken handig zijn, niet in de laatste plaats robotica.

De asrotatie wordt geregeld door Pulse Width Modulation (PWM) waarin u informatie codeert tijdens de duur van een hoogspanningspuls op de GPIO-pinnen. De meeste hobbyservo's volgen een standaard pulsbreedte-betekenis. Een puls van 0,5 ms betekent dat u naar uw min-positie gaat en een puls van 2,5 ms betekent dat u naar uw max-positie gaat. Herhaal deze puls nu elke 20 ms en je bestuurt een servo.

De pulsbreedte is veel belangrijker dan de frequentie

Dit soort timings zijn niet mogelijk met Python. In feite zijn ze niet echt mogelijk met een modern besturingssysteem. Een interrupt kan op elk moment binnenkomen in uw besturingscode, waardoor een langer dan gewenste puls en een jitter in uw servo ontstaat. Om aan de timingvereisten te voldoen, moeten we de leuke wereld van kernelmodules betreden. ServoBlaster is een kernelmodule die gebruikmaakt van de DMA-besturingsblokken om de CPU volledig te omzeilen. Na het laden opent de kernelmodule een apparaatbestand op /dev/servoblaster waarnaar u positiecommando's kunt schrijven.

Ik heb hier een kleine objectgeoriënteerde laag omheen geschreven die de servobesturing eenvoudiger maakt. Je kunt mijn bibliotheek hier vinden:

https://github.com/jminardi/RobotBrain

Sluit de servo eenvoudig aan op 5v en aard op uw Pi en sluit vervolgens de besturingsdraad aan op pin 4.

De python-code is vrij eenvoudig:

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)

Het enige wat u hoeft te doen is een servo te instantiëren en de bijbehorende set() . aan te roepen methode met een drijvende-kommawaarde tussen 0 en 1. Bekijk de servo_slider-demo op github om te zien hoe servobesturing via het netwerk wordt geïmplementeerd.

Voor meer details:Raspberry Pi-sensor en actuatorbesturing


Productieproces

  1. MQTT-communicatie tussen NodeMCU en Raspberry Pi 3 B+
  2. Raspberry Pi Temperature Logger
  3. Meet temperaturen met een 1-draads DS18B20-sensor en Raspberry Pi
  4. Python- en Raspberry Pi-temperatuursensor
  5. Raspberry Pi-weerstation
  6. Ultrasone sensor (HC-SR04) + Raspberry Pi
  7. Bewegingssensor met Raspberry Pi
  8. Raspberry Pi Bodemvochtsensor
  9. Raspberry Pi digitale Hall-sensor in JAVA
  10. Raspberry Pi temperatuur- en lichtsensor
  11. Spraak- en sms-lichtsensor met Raspberry Pi en Twilio