Lisävarusteita Raspberry Pi:hin

(0 comments)

Tein erästä projektia varten Raspberry Pi:stä demolaitteen, jolla pystyy demoamaan verkon yli luettavia ja ohjattavia sensoreita ja laitteita. Lisävarusteina on srf02-ultraäänianturi ja RC-servo. Lisäksi rakensin napin, jolla RPi:n voi ajaa alas hallitusti ja välttää muistikortin tiedostojärjestelmän leviämisen.

 

Sammutusnappi

Sammutusnapin tekemiseen löytyy netistä ohjeita vaikka kuinka, mutta paras (ja yksinkertaisin) on täältä löytyvä ohje. RPi:n raudan kakkosversiosta on löydetty uusi 8-napainen liitin nimeltään P5. Vakiona siinä on pelkät reiät joten siihen täytyy itse juottaa piikkirima.P5:stä löytyy 4 GPIO:ta, 3.3V, 5V ja kaksi maata.

Yllä näkyvät nastat yhdistämällä saadaan vedettyä GPIO31 maihin ja sen pystyy tunnistamaan yksinkertaisella ylläolevalta sivulta löytyvällä python-ohjelmalla. Ohjelman saa helposti käynnistymään bootissa lisäämällä se root-käyttäjän croniin. Vastuksia yms ei tarvita- riittää että vetää johdot painonapista k.o nastoihin.

 

Ultraäänianturi

srf02 on edullinen ja kätevä UÄA, joka on suosittu monissa robotiikkajutuissa. Anturi tottelee sekä SPI:tä että I2C:ta. Halusin käyttää I2C:ta, koska en ollut sitä koskaan aiemmin käyttänyt ja se kuuluu hakkerin yleistietoon.

+5V:n pystyi kytkemään suoraan RPi:n 5V-ulostuloon. Samoin I2C:n SDA ja SCL-linjat löytyvät sellaisenaan RPi:sta. Mode-nastan voi jättää kytkemättä I2C:ta käytettäessä (sillä saisi valittua SPI:n). Koodit tein pythonilla, sillä sille löytyy helpot ja kivat kirjastot tarvittavien temppujen tekemiseen. Anturia luetaan näin:

 

# Alustetaan i2c:

i2c = smbus.SMBus(1)

# Lähetetään lukukomento (81) laitteelle (laitteen osoite 0x75)

i2c.write_byte_data(0x75, 0, 81)

# Odotellaan datasheetissä määritellyn verran eli 0.07 sekuntia

sleep(0.07)

# Luetaan mittaustulokesn ylempi tavu osoitteesta 2

r2 = self.i2c.read_byte_data(0x75, 2)

# Luetaan mittaustulokesn alempi tavu osoitteesta 3

r3 = self.i2c.read_byte_data(0x75, 3)

# Lasketaan lopullinen tulos senttimetreinä
r = r2*256 + r3


 

Servon ohjaus

Servohan haluaa sisäänsä 5V, maan, ja sopivasti värähtelevän PWM-signaalin. PWM-signaalin täytyy olla 5V mikä aiheuttaa RPi:n kanssa hieman ongelmia, sillä sen kaikki digitaaliulostulot ovat 3.3V. Tämän vuoksi tarvittiin PNP-transistori, jolla ohjataan 5V jännitettä 3.3V GPIO-pinnillä. Tässä kohtaa tapahtui pieni moka, sillä käyttämäni piiri toimii siten että se vetää ulostulon alas, kun transistori johtaa. Eli signaali on käänteinen GPIO:n ulostuloon nähden. Normaalisti käyttämäni servoblaster-kirjasto ei tätä kelpuuta ja ohjaus ei toiminut ollenkaan. Löysin kuitenkin servoblasterista forkatun, PWM-ledien ohjaukseen tarkoitetun kirjaston nimeltään pi-blaster. Pi-blaster toimii hyvin samantyylisesti, mutta siinä on komentorivioptio "invert" joka kääntää PWM-signaalin käänteiseksi. Sitä käyttämällä servo heräsi henkiin ja homma alkoi pelittää. Säädön aikana tosin tuhosin yhden servon ylikuumenemiseen - kannattaa olla varovainen jos antaa servolle vääränlaista signaalia. RC-servoa ohjatessa pi-blasteriin pitää konffata CYCLE_TIME_US 20000 ja järkevät arvot ovat suurinpiirtein alueella 0.03-0.1. Näiden selvittyä servon ohjaus on kohtuu helppoa:

echo 1=0.07 > /dev/pi-blaster

pistää servon suurinpiirtein keskelle. Sama pythoniksi:
call(["echo 1=" + str(servopos) + " > /dev/pi-blaster"], shell=True)

Lopputuloksena tästä projektista oli, että I2C on helpompaa kuin kuvittelin ja sitä on turha pelätä. Kannattaa myös muistaa, että osa I2C-laitteista haluaa 3.3V eikä 5V ja tämä selviää datasheetista (UÄA ei ollut ensimmäinen sensori jota koitin käyttää). Servoja ohjatessa kannattaa etsiä sellainen kytkentä, joka ei käännä signaalia. PWM-ledejä yms ohjatessa tällä ei ole merkitystä. Sammutusnappi taas on liki pakollinen joka raspissa, jossa ei ole käyttöliittymää ja sen tekeminen on P5:n avulla niin triviaalia että se kannattaa aina tehdä.

 

Currently unrated

Comments

There are currently no comments

New Comment

required

required (not published)

optional

required

Recent Posts

Archive

2021
2020
2019
2018
2017
2016
2015
2014
2013
2012
2011

Categories

Tags

Authors

Feeds

RSS / Atom