Inhoudsopgave:
- Benodigdheden
- Stap 1: Bouwen
- Stap 2: Camera
- Stap 3: Bewaken
- Stap 4: Decoreren
- Stap 5: Programmeren
- Stap 6: De Raspberry PI voorbereiden
- Stap 7: Software
- Stap 8: Programmeren - Cameravoorbeeld
- Stap 9: Programmeren - Big Dome-drukknop
- Stap 10: Post op Twitter
- Stap 11: Enkele elementen combineren
- Stap 12: Bedrading
- Stap 13: De MagicBox
Video: RaspberryPI-fotocamera - MagicBox - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-31 10:23
Een tijdje geleden had ik het gekke idee om een fotografische machine te maken van een Raspberry PI. In mijn stad was er een kleine show waar mensen zouden gaan en laten zien wat ze maakten of hadden gemaakt met behulp van elektronica, computers, enz… Ik was als een Maker Faire van een arme man, maar op een lokaal niveau.
Er kwam er een aan, en samen met mijn vrouw bouwen we dit ding.
Hoe werkt het ?
Je drukt op de blauwe knop - deze begint te knipperen - en na 3 seconden wordt er een foto gemaakt. Aan de andere kant van de camera bevindt zich een monitor waarop wordt afgeteld en nadat de foto is gemaakt, de preview van de foto.
Je kunt er nu voor kiezen om het naar Twitter en Facebook te sturen of te annuleren en het opnieuw te proberen. Het is zo simpel.
Alles is geprogrammeerd in Python, gebruikmakend van de PI framebuffer - er wordt geen Xorg, geen GUI gebruikt.
Hier is een video van het project in werking
Benodigdheden
- Raspberry PI (ik gebruik versie 2)
- Raspberry PI-camera (met versie 1)
- 3x Big Dome-drukknoppen
- TFT/LCD-monitor met VGA/HDMI
- MDF
- Metalen scharnieren, schroeven, enz..
- Elektrisch gereedschap
- Vrije tijd en veel plezier
Stap 1: Bouwen
Het bouwen was leuk. Veel knippen, schilderen en boren.
Ik gebruikte MDF-panelen voor het bouwen van de basisstructuur van de camera. Ze zijn licht en gemakkelijk om mee te werken. Het was ook een houtsoort die de lasermachine van het plaatselijke Fablab kon zagen.
De toegang tot de bedrading binnenin werd gemaakt door de monitorzijde, met behulp van hydraulische scharnieren, zodat ze konden helpen de monitor op te tillen.
Stap 2: Camera
Camera
De camera is een doos met de volgende afmetingen: 60cm x 40cm x 30cm De jouwe kan kleiner, groter zijn, het is aan jou. Moet alleen passen voor de monitor die u gaat gebruiken. De MDF-panelen zijn met een laser uitgesneden bij het plaatselijke Fablab. Er zijn 3 gaten aan de achterkant nodig - twee grote dome-drukknoppen en een voor de monitor. Aan de voorkant 2 gaten - een voor een grote dome-drukknop en een andere - kleinere - voor de Raspberry PI-camera. Ik heb geen specifieke afmetingen - stel je een camera voor en gebruik die.
Stap 3: Bewaken
Toezicht houden op
De monitorsteun is gemaakt door kleine stukjes hout toe te voegen om hem binnen zijn afmetingen te ondersteunen.
Het werd van de plastic behuizing gestript en met schroeven op zijn plaats vastgezet. Om het optillen te vergemakkelijken, werden twee hydraulische scharnieren (gebruikt) gebruikt.
Stap 4: Decoreren
Omdat ik de stijl van mijn Fuji X-T30 erg leuk vind, gingen we iets soortgelijks doen.
Eerst hebben we het bedekt met schuim en vervolgens hebben we het zwart gespoten. Na het lakken hebben we aluminiumfolie toegevoegd voor de zilveren delen en deze ingepakt
Om de lens te simuleren, hebben we gewoon een ronde Tupperware gebruikt waar we een klein gaatje hebben gemaakt voor de Raspberry PI-cameramodule.
Stap 5: Programmeren
Het programmeren van de camera was een uitdaging, maar het was super leuk.
Er is geen GUI - deze draait op de CLI en draait op Python versie 3.
Ik begon eerst met het testen en programmeren van de knoppen, daarna nam ik foto's met behulp van de reeds geleverde tools en de Python API. Ik ging toen verder met het overlappen van foto's in de camera-uitvoer (voor het aftellen) en vervolgens om te communiceren met Twitter en Facebook.
Nadat ik me daarmee op mijn gemak voelde, heb ik, als een puzzel, alle stukjes in elkaar gezet. Hier gaan we met hetzelfde proces. Begin langzaam en klein en ga naar snel en groot.
Laten we eerst beginnen met het configureren van de Raspberry PI
Stap 6: De Raspberry PI voorbereiden
Ik ga niet uitleggen hoe je Raspbian op de Raspberry PI moet installeren - er zijn veel tutorials die er zijn, zelfs op de officiële website van Raspberry PI.
U hoeft er alleen SSH-toegang toe te hebben, of u kunt hem op een monitor aansluiten en een toetsenbord en muis aansluiten.
OPMERKING: Wanneer u begint met de Raspberry PI-camera, moet u deze op een monitor hebben aangesloten. Tot daar kunnen alle stappen met SSH worden gemaakt.
Na het opstarten in uw Raspberry PI, moeten we de Raspberry PI-camera inschakelen. Laten we daarvoor de raspi-config tool gebruiken.
sudo raspi-config
- Kies optie 5 - Interface-opties
- Kies P1 - Schakel verbinding met de Raspberry PI-camera in/uit
- Zeg ja
- voor OK
- Kies Voltooien
- Kies Ja om nu opnieuw op te starten
Na de herstart kunnen we doorgaan
Stap 7: Software
We hebben een aantal Python-bibliotheken nodig om te installeren. Dit is bijgewerkt voor de nieuwste Raspbian-versie - Buster
Laten we eerst Python 3 als standaard instellen. Volg deze link om te weten hoe je het SYSTEEM WIDE moet instellen
Bibliotheken:
- python-pil.imagetk om afbeeldingen te manipuleren
- python-rpi.gpio om toegang te krijgen tot de GPIO PINS
- python-picamera om toegang te krijgen tot de Raspberry PI Camera
- Tweepy om de foto te delen op Twitter
- facebook-sdk om te delen op een facebookpagina
sudo apt-get install python3-pil.imagetk python3-rpi.gpio python3-picamera python3-tweepy python3-pip
Gebruik Python pip om facebook-sdk. te installeren
sudo pip3 installeer facebook-sdk
Stap 8: Programmeren - Cameravoorbeeld
Een van de eisen die ik aan dit project stelde, was dat dit programma in CLI-modus moest draaien. We moeten dus het camerabeeld op de console weergeven. Laten we hiervoor Python Picamera gebruiken. Laten we daarna pil.imagetk gebruiken om een overlay bovenop het cameravoorbeeld weer te geven
Ons kleine programma (we gaan kleine programma's ontwikkelen tot één grote aan het eind) zal het cameravoorbeeld weergeven.
#!/usr/bin/env python
import time import picamera from time import sleep camera = picamera. PiCamera() # Stel de gewenste resolutie in camera.resolution = (1280, 1024) camera.framerate = 24 camera.start_preview() try: while (True): sleep(1) behalve (KeyboardInterrupt, SystemExit): print ("Exiting…") camera.stop_preview()
Om het te proberen, voer het gewoon uit
python cameraPreview.py
Bekijk een voorbeeld van de camera met afbeeldingen bovenaan
Omdat ik wilde dat er werd afgeteld voordat de foto werd gemaakt, had ik afbeeldingen nodig die het cameravoorbeeld overlappen.
Maak een PNG-afbeelding (of gebruik de afbeeldingen hier - sla ze op in de opslagmap van de scripts) - en stel de achtergrond transparant in. Ik heb een PNG-afbeelding gemaakt met het nummer 1 met een resolutie van 256x512 pixels. Ik noemde het 1-p.webp" />
De volgende code overlapt 1-p.webp
import picamerafrom PIL import Image from time import sleep with picamera. PiCamera() as camera: camera.resolution = (1920, 1080) camera.framerate = 24 camera.start_preview() # load image img = Image.open('1-p.webp
Probeer het:
python imageOverlay.py
Laten we nu een aftelling maken met overlay-afbeeldingen. Zoals je de 1.png-afbeelding hebt gemaakt, maak je nog twee afbeeldingen met 2 en 3 erin.
Gebruik daarna gewoon de volgende code:
importeer picamera
from PIL import Afbeelding van time import sleep met picamera. PiCamera() als camera: camera.resolution = (1280, 1024) camera.framerate = 24 camera.start_preview() # load image img1 = Image.open('3.png') img2 = Image.open('2.png') img3 = Image.open('1.png') # create pad = Image.new('RGB', (((img1.size[0] + 31) / / 32) * 32, ((img1.size[1] + 15) // 16) * 16,)) pad.paste(img1, (0, 0)) o = camera.add_overlay(pad.tobytes(), size=img1.size) o.alpha = 128 o.layer = 3 sleep(2) #remove vorige overlay camera.remove_overlay(o) pad.paste(img2, (0, 0)) o = camera.add_overlay(pad. tobytes(), size=img2.size) o.alpha = 128 o.layer = 3 sleep(2) # verwijder vorige overlay camera.remove_overlay(o) pad.paste(img3, (0, 0)) o = camera. add_overlay(pad.tobytes(), size=img3.size) o.alpha = 128 o.layer = 3 slaap (2)
Voer het nu uit:
python imageOverlayCounter.py
En zie het aftellen
Wow - Veel code en geen foto gemaakt… Laten we dat oplossen door alles te combineren - preview camera, aftellen en een foto maken
import picamerafrom PIL import Image from time import sleep def overlayCounter(): # load image img1 = Image.open('3.png') img2 = Image.open('2.png') img3 = Image.open('1. png') # create pad = Image.new('RGB', (((img1.size[0] + 31) // 32) * 32, ((img1.size[1] + 15) // 16) * 16,)) # plak de overlay - 3 pad.paste(img1, (0, 0)) o = camera.add_overlay(pad.tobytes(), size=img1.size) o.alpha = 128 o.layer = 3 sleep(1) # Verwijder vorige overlay camera.remove_overlay(o) # plak de overlay - 2 pad.paste(img2, (0, 0)) o = camera.add_overlay(pad.tobytes(), size=img2.size) o.alpha = 128 o.layer = 3 sleep(1) #remove vorige overlay camera.remove_overlay(o) # plak de overlay - 3 pad.paste(img3, (0, 0)) o = camera.add_overlay(pad. tobytes(), size=img3.size) o.alpha = 128 o.layer = 3 sleep(1) camera.remove_overlay(o) camera = picamera. PiCamera() camera.resolution = (1280, 1024) camera.framerate = 24 camera.start_preview() overlayCounter() camera.capture('testingCounter.jpg') camera.stop_preview()
Probeer het:
python afbeeldingWithTimer.py
En hier hebben we Yoda
Stap 9: Programmeren - Big Dome-drukknop
De grote koepeldrukknop is een grote ronde knop - met een diameter van ongeveer 100 mm en een kleine LED. Er staat dat hij werkt op 12V, maar de 3,3v van de Raspberry PI is genoeg om hem op te lichten
Gebruik het schema om te testen
De code:
van RPi import GPIO
takeButton = 17 ledButton = 27 GPIO.setmode(GPIO. BCM) GPIO.setup(takeButton, GPIO. IN, GPIO. PUD_UP) GPIO.setup(ledButton, GPIO. OUT) #Light led GPIO.output(ledButton, True) # Blokkeerfunctie GPIO.wait_for_edge(takeButton, GPIO. FALLING) print ("Button Pressed") GPIO.output(ledButton, False) GPIO.cleanup()
Enige uitleg van de code Een van de manieren om waarden van GPIOS te krijgen is door middel van interrupts (anders is polling) - randdetectie.
De rand is de naam van de overgang van HOOG naar LAAG (dalende flank) of LAAG naar HOOG (stijgende flank). Als de pincode nergens aan is gekoppeld, is elke lezing ongedefinieerd. Een oplossing is om een pull-up/down-weerstand in de pincode te hebben. De Raspberry PI maakt het mogelijk om pull-up/down-weerstanden te configureren via software.
De lijn
GPIO.setup(takeButton, GPIO. IN, GPIO. PUD_UP)
configureert die pincode om precies dat te doen - pull up
Waarom optrekken? Welnu, de grote koepeldrukknop heeft 2 pincodes - druk om te breken of druk om te maken (net als de kleine drukknoppen die vaak worden geleverd met Arduino/Raspberry PI-kits). Ik heb het aangesloten op de "push to make"-pincode van de knop. Wanneer ingedrukt, wordt het circuit gesloten en wordt de elektriciteit doorgelaten (normaal open).
De lijn
GPIO.wait_for_edge (takeButton, GPIO. FALLING)
zal wachten (de uitvoering van het script wordt effectief onderbroken) totdat het het vallen van de pincode detecteert - als u de knop loslaat, wordt de stroomtoevoer onderbroken en gaat de pincode van 3.3v naar 0v
De LED-pincode is alleen om de LED op de knop op te lichten
Meer informatie over push-schakelaars van Arduino Tutorials, Wikipedia over push-to-make of push-to-break en GPIO-onderbrekingen
Laten we nu een drukknop combineren met de camera - Maak alleen een foto als de knop wordt ingedrukt
import picamerafrom time import sleep from RPi import GPIO from PIL import Image # OPMERKING: Dit is wat de annuleerknop in het hoofdprogramma zal zijn # Ik gebruik het hier voor de duidelijkheid in de video takeButton = 24 ledCancel = 5 GPIO.setmode(GPIO. BCM) GPIO.setup(takeButton, GPIO. IN, GPIO. PUD_UP) GPIO.setup(ledCancel, GPIO. OUT) def onLeds(): GPIO.output(ledCancel, True) sleep(1) def offLeds (): GPIO.output(ledCancel, False) # Functie om image def overlayCounter(): #load images img1 = Image.open('3.png') img2 = Image.open('2.png') img3 = Image.open('1.png') # Maak een overlay # Gebruikt met img1 omdat ze allemaal hetzelfde pad hebben = Image.new('RGB', (((img1.size[0] + 31) // 32) * 32, ((img1.size[1] + 15) // 16) * 16,)) # plak de overlay - 3 pad.paste(img1, (0, 0)) ov = camera.add_overlay(pad.tobytes (), size=img1.size) ov.alpha = 200 # laag is 3 omdat cameravoorbeeld op laag 2 staat ov.layer = 3 sleep(1) camera.remove_overlay(ov) # plak de overlay - 2 pad.paste(img2, (0, 0)) ov = camera.add_overlay(pad.tobytes(), size=img2.size) ov.alpha = 200 # laag is 3 omdat cameravoorbeeld op laag 2 staat ov.layer = 3 sleep(1) camera.remove_overlay(ov) # plak de overlay - 1 pad.paste(img3, (0, 0)) ov = camera.add_overlay(pad.tobytes(), size=img3.size) ov.alpha = 200 # laag is 3 omdat cameravoorbeeld is op laag 2 ov.layer = 3 sleep(1) camera.remove_overlay(ov) camera = picamera. PiCamera() camera.resolution = (1280, 1024) camera.framerate = 24 camera.start_preview() GPIO.wait_for_edge(takeButton, GPIO. FALLING) onLeds() overlayCounter() camera.capture('pushTesting.jpg') camera.stop_preview() offLeds() GPIO.cleanup()
Een beetje code-uitleg
Het start het cameravoorbeeld en wacht daar tot er op een knop wordt gedrukt. Nadat de knop is ingedrukt, gaat de LED branden en begint het aftellen. Bij het bereiken van het einde wordt de foto gemaakt en gaat de LED uit
Stap 10: Post op Twitter
Nu gaan we Python gebruiken en een tweet tweeten!:) Je hebt een afbeelding nodig om te plaatsen - kies verstandig.
Eerst moeten we toegang krijgen tot de twitter-API en daarvoor moeten we een APP maken. Ga naar https://apps.twitter.com en maak een nieuwe applicatie aan.
U moet een ontwikkelaarsaccount aanvragen - vul enkele vragen in en bevestig uw e-mailadres. Daarna kunt u een nieuwe APP maken.
Nadat u de APP heeft gemaakt, navigeert u naar Sleutels en Tokens en Genereer een Toegangstoken en Toegangstokengeheim. Er wordt een venster weergegeven met de toetsen SLECHTS EENMAAL KOPIEER DIE EN BEWAAR ZE VOOR LATER.
Gebruik de volgende code om een foto naar je Twitter-account te sturen. Vergeet niet in te vullen:
- gebruikers sleutel
- consumer_secret
- toegangstoken
- access_token_secret
twitterbericht is de tekst die in de tweet moet worden verzonden.
jpg_foto_to_send is een foto die aan de tweet wordt toegevoegd. Zorg dat je een afbeelding hebt in dezelfde map als het Python-script en verander de naam in de code.
import tweepy # Twitter instellingen def get_api(cfg): auth = tweepy. OAuthHandler(cfg['consumer_key'], cfg['consumer_secret']) auth.set_access_token(cfg['access_token'], cfg['access_token_secret']) tweepy. API(auth) # Send to twitter def sendToTwitter(): cfg = { "consumer_key": "", "consumer_secret": "", "access_token": "", "access_token_secret": "" } api = get_api(cfg) # Statusbericht tweet = "Twitterbericht" status = api.update_with_media ("jpg_foto_to_Send", tweet) sendToTwitter()
Controleer uw Twitter-feed voor uw tweet.
Hier is de Tweet
Of hieronder:
#RaspberryPI MagicBox. Maak foto's, bekijk ze en stuur ze naar Twitter en Facebook. Aangedreven door Raspberry PI. @@Raspberry_Pi#RaspberryPI#RaspberryPIProject
- Bruno Ricardo Santos (@feiticeir0) 29 februari 2020
Stap 11: Enkele elementen combineren
Laten we nu de Big Dome-drukknop combineren, erop drukken, aftellen, een foto maken en beslissen of we deze naar twitter willen sturen.
We zullen nog een overlay-afbeelding toevoegen en alle drie de drukknoppen gebruiken. Wanneer de foto is gemaakt, lichten alle 3 de LED's van de knoppen op.
We voegen nog een afbeelding toe, die de pictogrammen toont om op sociale netwerken te plaatsen
SelectOption-p.webp
Aenviar-p.webp
In de video wordt niet de blauwe drukknop (voorkant van de camera) getoond, maar de LED brandt en begint te knipperen zodra deze wordt ingedrukt.
De code is bijgevoegd als je dat liever hebt
Dit is de laatste testcode voor het hoofdprogramma.
# coding=utf-8 import picamera import _thread import subprocess as sp from time import sleep from RPi import GPIO from PIL import Image import threading # Twitter import tweepy # Facebook import facebook # Button om foto te nemen takeButton = 17 # SocialNetwork Button socialNetworkButton = 23 # Annuleren Picture cancelButton = 24 # LED-knop Foto maken takePicButtonLed = 27 # LED-knop Post naar sociaal netwerk postSNLed = 22 # LED annuleren-knop cancelButtonLed = 5 GPIO.setmode(GPIO. BCM) GPIO.setup (takeButton, GPIO. IN, GPIO. PUD_UP) GPIO.setup(socialNetworkButton, GPIO. IN, GPIO. PUD_UP) GPIO.setup(cancelButton, GPIO. IN, GPIO. PUD_UP) GPIO.setup(takePicButtonLed, GPIO. OUT) GPIO.setup(postSNLed, GPIO. OUT) GPIO.setup(cancelButtonLed, GPIO. OUT) # Twitter-instellingen def get_api(cfg): auth = tweepy. OAuthHandler(cfg['consumer_key'], cfg['consumer_secret']) auth.set_access_token(cfg['access_token'], cfg['access_token_secret']) return tweepy. API(auth) # Send to twitter def sendToTwitter(): cfg = { "con sumer_key": "", "consumer_secret": "", "access_token": "", "access_token_secret": "" } api = get_api(cfg) # Statusbericht tweet = "MagicBox instructable testen. #MagicBox #RaspberryPI #Raspberry #Instructables" status = api.update_with_media("pushTesting.jpg", tweet) # Facebook AOth def get_api_facebook(cfg): graph = facebook. GraphAPI(cfg['access_token']) # Get page token to post als de pagina. Je kunt # het volgende overslaan als je als jezelf wilt posten. resp = graph.get_object('me/accounts') page_access_token = Geen voor pagina in resp['data']: if page['id'] == cfg['page_id']: page_access_token = page['access_token'] graph = facebook. GraphAPI(page_access_token) return graph # Send to facebook def sendToFacebook(): #Waarden voor toegang cfg = { "page_id": "", "access_token": "" } api = get_api_facebook(cfg) caption = "Ondertitel de afbeelding" albumid = "" api.put_photo(image=open("pushTesting.jpg", "rb"), caption="Ondertitel de afbeelding ") # Alleen licht TakePicButtonLed def alleenTakePicLed(): GPIO.output(takePicButtonLed, True) GPIO.output(postSNLed, False) GPIO.output(cancelButtonLed, False) # Alleen licht Annuleren en SocialNetwork-knop def annulerenPostLEDS(): GPI O.output(takePicButtonLed, False) GPIO.output(postSNLed, True) GPIO.output(cancelButtonLed, True) # Knipperen neem foto-LED terwijl aftellen def countingTimerPicture(): GPIO.output(takePicButtonLed, True) sleep(0.5) GPIO.output(takePicButtonLed, False) sleep(0.5) GPIO.output(takePicButtonLed, True) sleep(0.5) GPIO.output(takePicButtonLed,False) sleep(0.5) GPIO.output(takePicButtonLed, True) sleep(0.5) GPIO.output(takePicButtonLed, False) # Blink postSNLed tijdens het posten op sociale netwerken def blinkPosting(stop_event): # Start while (not stop_event.is_set()): print ("off") GPIO.output(postSNLed, False) sleep(0.5) print ("on") GPIO.output(postSNLed, True) sleep(0.5) def timer(): GPIO.output(takePicButtonLed, True) sleep(1) GPIO.output(postSNLed, True) sleep(1) GPIO.output(cancelButtonLed, True) sleep(1) def showAllLeds(): GPIO.output(takePicButtonLed, True) GPIO.output(postSNLed, True) GPIO.output(cancelButtonLed, True) # Geef een voorbeeld weer op laag 1 def displayPreview(imgName): # Aangezien de PIL-beeldshow onzin is # gebruiken we de overlay van de camera om # het voorbeeld weer te geven img = Image.open(imgName) padding = Image.new('RGB', (((img.size[0] + 31) // 32) * 32, ((img.size[1] + 15) // 16) * 16,)) padding.paste(img, (0, 0)) ov = camera.add_overlay(padding.tobytes(), size=img.size) ov.layer = 1 # Toon een voorbeeld op laag 3 def displayPreview3(imgName): # Aangezien de PIL-beeldshow een crapp is # gebruiken we de overlay van de camera om # het voorbeeld weer te geven img = Image.open(imgName) padding = Image.new('RGB', (((img.size[0] + 31) // 32) * 32, ((img.size[1] + 15) // 16) * 16,)) padding.paste(img, (0, 0)) ov = camera.add_overlay(padding.tobytes(), size=img.size) ov.alpha = 150 ov.layer = 3 return ov # Function overlaySocialNetwork def overlaysn(): imgsn = Image.open('SelectOption.png') # Create Overlay pad = Image.new('RGB', (((imgsn.size[0] + 31) // 32) * 32, ((imgsn.size[1] + 15) // 16) * 16,)) # Plak de overlay pad.paste(imgsn, (0, 0)) ov = camera.add_overlay(pad.tobytes(), size=imgsn.size) ov.alpha = 100 ov.layer = 3 return ov # Functie voor overlay image def overlayCounter(): #load images img1 = Image.open('3.png') img2 = Image.open('2.png') img3 = Image.open('1.png') # Maak een overlay # Gebruikt met img1 omdat ze allemaal hetzelfde formaat pad hebben = Image.new('RGB', (((img1.size[0] + 31) // 32) * 32, ((img1.size[1] + 15) // 16) * 16,)) # plak de overlay - 3 pad.paste(img1, (0, 0)) ov = camera.add_overlay(pad.tobytes(), size=img1.size) ov.alpha = 200 # laag is 3 omdat cameravoorbeeld op laag 2 staat ov.layer = 3 sleep(1) camera.remove_overlay(ov) # plak de overlay - 2 pad.paste(img2, (0, 0)) ov = camera.add_overlay(pad.tobytes(), size=img2.size) ov.alpha = 200 # laag is 3 omdat cameravoorbeeld op laag 2 staat ov.layer = 3 sleep(1) camera.remove_overlay(ov) # plakken de overlay - 1 pad.paste(img3, (0, 0)) ov = camera.add_overlay(pad.tobytes(), size=img3.size) ov.alpha = 200 # laag is 3 omdat cameravoorbeeld op laag 2 staat ov.layer = 3 sleep(1) camera.remove_overlay(ov) # Hoofdfunctie # Scherm wissen zodat de opstartberichten niet aanwezig zijn # waarschijnlijk zou het beter zijn om dit in bash te doen tmp = sp.call('clear', shell=True) camera = picamera. PiCamera() camera.resolution = (1280, 1024) camera.framerate = 24 camera.brightness = 55 camera.sharpness = 0 camera.contrast = 0 #camera.exposure_co mpensation = 0 #camera.exposure_mode = 'auto' #camera.meter_mode = 'average' # Test hier probeer: while (True): camera.start_preview() #Show LED Only for Take Picture onlyTakePicLed() # Wacht tot de knop wordt genomen Afbeelding GPIO.wait_for_edge(takeButton, GPIO. FALLING) # Start een draad om te tellen met de LED's terwijl de afbeeldingen worden getoond # Kan waarschijnlijk worden gebruikt in de overlayCounter-functie, # omdat het ook timers heeft om de afbeeldingen te tonen, maar de led-effecten zou niet # hetzelfde zijn _thread.start_new_thread (countingTimerPicture, ()) # Toon de foto-overlay in de camera picture overlayCounter() # Toon alle LED's tijdens het maken van de foto showAllLeds() camera.capture('pushTesting.jpg') camera. stop_preview() #display image displayPreview('pushTesting.jpg') # Show overlay oo = overlaysn() # Toon LED's om te annuleren of te posten op sociale netwerken cancelPostLEDS() GPIO.add_event_detect(socialNetworkButton, GPIO. FALLING) GPIO.add_event_detect(cancelButton, GPIO. FALLING) while (True): if GPIO.event_detecte d(socialNetworkButton): camera.remove_overlay(oo) GPIO.output(cancelButtonLed, False) o = displayPreview3('Aenviar.png') #print "Social Networks Button" sendToTwitter() sendToFacebook() camera.remove_overlay(o) break if GPIO.event_detected(cancelButton): #print "Geannuleerd" camera.remove_overlay(oo) break # reset GPIOS GPIO.remove_event_detect(socialNetworkButton) GPIO.remove_event_detect(cancelButton) GPIO.remove_event_detect.(stoptakeButton print) "Afgesloten…") #offLeds() GPIO.cleanup()
Stap 12: Bedrading
De bedrading is gewoon de bedrading van de Big Dome-drukknoppen naar de Raspberry PI.
Volg gewoon het Fritzing Schema.
De aansluitingen zijn:
VerbindingRPI GPIO PIN GND Groene drukknopGND (#3) GND Gele drukknopGND (#9) GND Blauwe drukknopGND(#39) Foto maken (blauwe drukknop "Push to make")17 (BCM) Posten op sociale netwerken (Groene druk) Knop "Push to make")23 (BCM) Annuleren (Gele Drukknop "Push to make")24 (BCM) Blauwe Drukknop LED27 (BCM) Groene Drukknop LED22 (BCM) Gele Drukknop LED5 (BCM)
De krimpkous heeft ook een kleurcode
- Zwart is GND-aansluitingen
- Geel zijn "push to make" verbindingen
- Blauw zijn LED-aansluitingen
GPIO. BCM-nummers versus GPIO. BOARD-verbindingen
Aangezien mijn connecties BCM zijn, denk ik dat het nu een goed moment is om erover te praten en het verschil tussen BCM en BOARD.
Het belangrijkste verschil is hoe u verwijst naar de GPIO-pincodes, die op hun beurt bepalen hoe u de verbindingen tot stand brengt. GPIO.board zal de pincodes verwijzen naar het nummer dat op elke GPIO-lay-out op internet is afgedrukt.
GPIO. BCM verwijst naar de pincodes zoals de Broadcom SOC ze ziet. Dit zal waarschijnlijk veranderen met nieuwere versies van de Raspberry PI.
Op de pinout.xyz-site zijn de bordnummers die direct naast de pinnen en wordt zo naar de BCM verwezen - BCM X (waarbij X het nummer is)
Stap 13: De MagicBox
De bijgevoegde code bij deze stap is de laatste.
Je kunt het draaien op raspberry PI boot, zonder zelfs maar in te loggen. Om dat te doen, maakt u gewoon dit kleine script in de map waarin u de code hebt geplaatst - verander de paden dienovereenkomstig
#!/bin/bash
cd /home/pi/magicbox python MagicBox.py
Maak het uitvoerbaar
chmod +x start_magicbox.sh
Noem het nu in /etc/rc.local, net voor de exit 0-instructie
sudo vi /etc/rc.local
/home/pi/magicbox/start_magicbox.sh &
opslaan en afsluiten.
Nu, bij elke herstart, wordt het Python-programma uitgevoerd
OPMERKING: Alle afbeeldingsbestanden moeten in dezelfde map staan als het script. Je moet hebben:
- 1.png
- 2.png
- 3.png
- Aenviar.png
- SelecteerOption.png
Je kunt al deze bestanden krijgen op de github van MagicBox.
Aanbevolen:
Motoriseer uw RaspberryPi: 6 stappen
Motoriseer uw RaspberryPi: deze instructies voegen wielen toe aan uw Raspberry pi, zodat u uw project kunt nemen waar nog geen transistor is geweest. Deze tutorial zal u door het technische gedeelte leiden van het besturen van de motoren via het Wi-Fi-netwerk. Aangezien dit proj
Hoe te beginnen met RaspberryPi: 9 stappen
Hoe te beginnen met RaspberryPi: in deze instructable laat ik je zien hoe je op een andere manier met RashpberryPi kunt beginnen
Een goedkope IoT-luchtkwaliteitsmonitor op basis van RaspberryPi 4: 15 stappen (met afbeeldingen)
Een goedkope IoT-luchtkwaliteitsmonitor op basis van RaspberryPi 4: Santiago, Chili tijdens een winterse milieunoodsituatie hebben het voorrecht om in een van de mooiste landen ter wereld te wonen, maar helaas zijn het niet allemaal rozen. Chili heeft tijdens het winterseizoen veel last van luchtverontreiniging, ma
Temperatuur bewaken en opnemen met Bluetooth LE en RaspberryPi 9 stappen (met afbeeldingen) Antwoorden op al uw "Hoe?"
Monitor en registreer temperatuur met Bluetooth LE en RaspberryPi: deze instructie gaat over het samenstellen van een multi-node temperatuurbewakingssysteem met Bluetooth LE-sensorbug van Blue Radios (BLEHome) en RaspberryPi 3B Dankzij de ontwikkeling van de Bluetooth LE-standaard is er nu direct beschikbaar