Folk har spurt meg om interessante applikasjoner for Raspberry Pi, og om Raspberry Pi er en Arduino morder av noe slag. Svaret på det andre spørsmålet er nei; faktisk er det en Arduino augmenter. Dette blogginnlegget svarer på det første spørsmålet med et annet spørsmål: Hva med en Haunted House lydeffekter maskin?
En ny revisjon av tidlig frigjøring av Komme i gang med Raspberry Pi kom ut i fredags. Jeg leste Matt Richardsons kapittel om bruk av Pygame med GPIO-pinnene på Pi, som inkluderte en enkel Sound Sample-spiller. Jeg tilpasset hans eksempel for å jobbe med en Arduino som snakker til Pi over en seriell forbindelse; denne skjelettet (ahem) hookup kunne lett bli innlemmet i en slags Halloween installasjon. Jeg bestemte meg for å bruke Arduino for å lese innspillingene fordi den ikke er mer robust og kan håndtere et bredere utvalg av innganger. Også, det er mange eksisterende Haunted House utløse demoer ute i naturen som bruker Arduino.
Først må du forberede utløserkretsen. Følgende eksempel bruker tre svingbrytere, men du kan erstatte de med noen form for på / av-inngang. I et hjemsøkt hus (eller verandabasert trick-or-treater-installasjon), ville en PIR-sensor være nyttig for utløsing basert på nærhet.
Her er grunnleggende skjematisk:
De 10k motstandene kan erstattes av Arduino sine egne interne trekkmotstander, hvis du vet hvordan du gjør det.
Jeg koblet Arduino til Raspberry Pi ved hjelp av en USB-kabel. Mens jeg hadde Pi hektet inn i en skjerm, fant jeg ut at jeg bare kunne koble Arduino via USB-kontakten min Mac-tastatur, og den fikk nok strøm fra det til arbeidet. Hvis du har en eldre Raspberry Pi med polyfuser som begrenser strømmen på USB-porten (se for å se om du har 2 små grønne sikringer merket "1104" ved siden av USB-porter), kan du trenge et eksternt hub eller kjøre Pi-hodet å frigjøre en USB-port.
Deretter laster du opp følgende skisse til Arduino:
// PiTalk.ino // Leser tre digitale innganger. Disse kan være noen form for // bryter eller (for Halloween) PIR sensorer. byte onState [3] = {0, 0, 0}; // lagre tilstanden til hver stift ugyldig oppsett () {Serial.begin (9600); // Åpne seriell tilkobling pinMode (2, INPUT); // Sett disse tre pinnene for å lese pinMode (3, INPUT); // Hver har en 10k pullup eksternt pinMode (4, INPUT); // så en utløser er LOW} tomromsløyfe () {for (int i = 0; i <3; i ++) {// Iterate over pins hvis (digitalRead (i + 2) == LOW) {// Sjekk om utløst hvis (onState [i] == 0) {// Bare utløst? Serial.write (i + 2); // Send pinnummeret påState [i] = 1; // men bare en gang}} ellers {onState [i] = 0; // Ikke utløst}} forsinkelse (20); }
Du kan bruke datamaskinen til å laste opp programmet, eller du kan laste ned og installere Arduino IDE direkte på Raspberry Pi (som beskrevet i neste utgave av Komme i gang med Raspberry Pi).
Når Arduino er programmert, åpne Leafpad-tekstredigereren på Raspberry Pi og skriv inn dette Python-programmet, tilpasset Matt's Sound Sample Player:
# playSounds.py import pygame.mixer fra tid import søvn fra sys import exit import seriell pygame.mixer.init (44000, -16, 1, 1024) soundA = pygame.mixer.Sound ("Scream.wav") soundB = pygame .mixer.Sound ("WilhelmScream.wav") soundC = pygame.mixer.Sound ("CastleThunder.wav") soundChannelA = pygame.mixer.Channel (1) soundChannelB = pygame.mixer.Channel (2) soundChannelC = pygame.mixer .Kanel (3) skriv ut "Sampler Ready." serialFromArduino = serial.Serial ("/ dev / ttyACM0", 9600) serialFromArduino.flush () mens True: prøv: val = ord (serialFromArduino.read ()) print (val) hvis (val == 2): soundChannelA.play (soundA) if (val == 3): soundChannelB.play (lydB) hvis (val == 4): soundChannelC.play (soundC) val = 0 sleep (.01) unntatt KeyboardInterrupt: exit
Lagre det som playSounds.py. Før du kjører skriptet, må du sannsynligvis installere Python seriemodulen. For å gjøre det, skriv inn:
sudo apt-get install python-seriell
Hvis du kjører den nyeste Raspbian, har du sannsynligvis alt du trenger for å få dette til å løpe. Åpne LXTerminal og skriv:
python playSounds.py
Hvis du får en feil som Pygame ikke er installert, skriver du:
sudo apt-get oppdatering sudo apt-get install python-pygame
Du trenger også noen lydfiler som skal spilles. Jeg valgte tre fra Internet Archive: et generisk skrik, en Wilhelm Scream, og den klassiske Castle Thunder-prøven.
Når du trykker på knappene, spiller hver lyd en gang; Pygame's mixer vil til og med spille alle tre samtidig hvis du har flere trick-or-treaters som invaderer verandaen din.