Мазмұны:

RaspberryPI фотокамерасы - MagicBox: 13 қадам (суреттермен)
RaspberryPI фотокамерасы - MagicBox: 13 қадам (суреттермен)

Бейне: RaspberryPI фотокамерасы - MagicBox: 13 қадам (суреттермен)

Бейне: RaspberryPI фотокамерасы - MagicBox: 13 қадам (суреттермен)
Бейне: Видеонаблюдение на raspberry pi motioneye 2024, Қараша
Anonim
Image
Image
Құру
Құру

Біраз уақыт бұрын менде Raspberry PI -ден фото машинаны жасау туралы ақылға қонымсыз идея пайда болды. Менің қалада адамдар электрониканы, компьютерді және т.

Біреуі келе жатыр, мен әйеліммен бірге бұл затты саламыз.

Бұл қалай жұмыс істейді?

Сіз көк түймені басасыз - ол жыпылықтай бастайды - және 3 секундтан кейін сурет түсіріледі. Камераның екінші жағында кері санауды көрсететін монитор бар және сурет түсірілгеннен кейін фотосуретті алдын ала қарау.

Енді сіз оны Twitter мен Facebook -ке жіберуді немесе бас тартып, қайталап көруді таңдай аласыз. Бұл өте қарапайым.

Барлығы Python -да бағдарламаланған, PI жақтау буферін қолданады - Xorg жоқ, GUI қолданылмайды.

Міне, жобаның жұмысының видеосы

Жабдықтар

  • Raspberry PI (мен 2 нұсқасын қолданамын)
  • Raspberry PI камерасы (1 нұсқасын қолдана отырып)
  • 3x үлкен күмбез түймелері
  • VGA/HDMI бар TFT/СКД мониторы
  • MDF
  • Металл ілмектер, бұрандалар және т.
  • Электр құралдары
  • Бос уақыт пен көптеген қызықтар

1 -қадам: Құру

Құру
Құру
Құру
Құру

Оны салу қызықты болды. Көптеген кесу, бояу және бұрғылау.

Мен камераның негізгі құрылымын жасау үшін MDF панельдерін қолдандым. Олар жеңіл және олармен жұмыс істеу оңай. Сонымен қатар, бұл жергілікті Fablab лазерлік машинасы кесетін ағаштың бір түрі.

Мониторды көтеруге көмектесу үшін оның ішіндегі сымдарға гидравликалық ілмектерді қолдана отырып, монитор жағынан кіруге болады.

2 -қадам: камера

Камера
Камера
Камера
Камера
Камера
Камера

Камера

Камера келесі өлшемдері бар қорап: 60см x 40см х 30см Сіздікі кішірек, үлкенірек болуы мүмкін, бұл сізге байланысты. Тек сіз пайдаланатын мониторды орналастыруыңыз керек. MDF панельдері жергілікті Fablab -те лазермен кесілген. Артқы жағында 3 тесік қажет - екі үлкен күмбез түймесі және біреуі монитор үшін. Алдыңғы жағында Raspberry PI камерасы үшін 2 тесік - біреуі үлкен күмбезді басу түймесі үшін, екіншісі - кішірек. Менде нақты өлшемдер жоқ - камераны елестетіп көріңіз.

3 -қадам: Монитор

Монитор
Монитор
Монитор
Монитор
Монитор
Монитор

Монитор

Монитордың тірегіне ағаштың кішкене бөліктері қосылып, оның өлшемдерін қолдайды.

Ол пластик корпусынан алынып, бұрандалармен бекітілген. Оны көтеруге көмектесу үшін екі гидравликалық топсалар қолданылды.

4 -қадам: безендіру

Безендіру
Безендіру
Безендіру
Безендіру
Безендіру
Безендіру
Безендіру
Безендіру

Маған Fuji X-T30 стилі қатты ұнайтындықтан, біз барып, ұқсас нәрсені жасадық.

Алдымен біз оны көбікпен жауып тастадық, содан кейін оны қара түске боядық. Бояудан кейін біз күміс бөлшектерге алюминий фольга қосып, оны орап қойдық

Объективті модельдеу үшін біз Raspberry PI камера модулінің отыруы үшін кішкене тесік жасаған кезде ғана дөңгелек Tupperware қолдандық.

5 -қадам: Бағдарламалау

Камераны бағдарламалау қиын болды, бірақ бұл өте қызықты болды.

GUI жоқ - бұл CLI -де жұмыс істейді және Python 3 нұсқасында жұмыс істейді.

Мен алдымен түймелерді тестілеуден және бағдарламалаудан бастадым, содан кейін берілген құралдар мен Python API көмегімен суретке түсіру. Содан кейін мен камераның шығысындағы суреттерді қабаттасуға көштім (кері санау үшін) және Twitter мен Facebook -пен өзара әрекеттесуге.

Мен мұның бәріне ыңғайлы болғаннан кейін, жұмбақ сияқты, мен барлық бөлшектерді жинадым. Мұнда біз дәл сол үрдіспен жүреміз. Баяу мен кішіден бастаңыз және жылдамдық пен үлкенге өтіңіз.

Алдымен, Raspberry PI конфигурациясын бастайық

6 -қадам: Raspberry PI дайындау

Raspberry PI дайындау
Raspberry PI дайындау
Raspberry PI дайындау
Raspberry PI дайындау
Raspberry PI дайындау
Raspberry PI дайындау

Мен Raspbian -ді Raspberry PI -ге қалай орнату керектігін түсіндірмеймін - бұл жерде көптеген оқулықтар бар, тіпті Raspberry PI ресми сайтында.

Сіз оған SSH кіруіңіз керек немесе оны мониторға қосып, пернетақта мен тінтуірді қосыңыз.

ЕСКЕРТПЕ: Raspberry PI камерасынан бастағанда, оны мониторға қосу керек. Оған дейін барлық қадамдарды SSH көмегімен жасауға болады.

Raspberry PI жүктелгеннен кейін біз Raspberry PI камерасын қосуымыз керек. Ол үшін raspi-config құралын қолданайық.

sudo raspi-config

  1. 5 - интерфейс опцияларын таңдаңыз
  2. P1 таңдаңыз - Raspberry PI камерасына қосылуды қосу/өшіру
  3. Иә деп айтыңыз
  4. OK үшін
  5. Аяқтау таңдаңыз
  6. Қазір қайта жүктеу үшін Иә таңдаңыз

Қайта жүктеуден кейін біз жалғастыра аламыз

7 -қадам: Бағдарламалық қамтамасыз ету

Бізге Python кітапханаларын орнату қажет болады. Бұл Raspbian соңғы нұсқасы - Buster үшін жаңартылды

Алдымен Python 3 -ді әдепкі ретінде орнатуға рұқсат етіңіз. Жүйені кеңінен қалай орнату керектігін білу үшін мына сілтемеге өтіңіз

Кітапханалар:

  • python-pil.imagetk кескіндерді басқаруға арналған
  • python-rpi.gpio арқылы GPIO PINS кодына кіруге болады
  • Raspberry PI камерасына кіру үшін python-picamera
  • Твиттерде фотосуретті бөлісуге тырысыңыз
  • facebook-sdk арқылы Facebook парақшасында бөлісуге болады

sudo apt-get install python3-pil.imagetk python3-rpi.gpio python3-picamera python3-tweepy python3-pip

Facebook-sdk орнату үшін Python pip пайдаланыңыз

sudo pip3 facebook-sdk орнатыңыз

8 -қадам: Бағдарламалау - камераны алдын ала қарау

Image
Image
Бағдарламалау - камераны алдын ала қарау
Бағдарламалау - камераны алдын ала қарау
Бағдарламалау - камераны алдын ала қарау
Бағдарламалау - камераны алдын ала қарау

Бұл жобаға қойған талаптарымның бірі - бұл бағдарламаның CLI режимінде жұмыс істеуі. Сонымен, біз камераның бейнесін консольде көрсетуіміз керек. Ол үшін Python Picamera қолданайық. Осыдан кейін, камераны алдын ала қараудың үстіне қабаттасуды көрсету үшін pil.imagetk қолданамыз

Біздің кішігірім бағдарлама (біз бір үлкен бағдарламаның соңына дейін үлкен бағдарламалар әзірлейміз) камераның алдын ала қарауын көрсетеді.

#!/usr/bin/env python

импорттық уақытты импорттау пикамераны импорттау ұйқы камерасы = picamera. PiCamera () # Қажетті ажыратымдылықты орнатыңыз camera.resolution = (1280, 1024) camera.framerate = 24 camera.start_preview () try: while (True): ұйықтау (1)) (KeyboardInterrupt, SystemExit) қоспағанда: басып шығару («Шығуда …») camera.stop_preview ()

Оны сынап көру үшін оны орындаңыз

python cameraPreview.py

Жоғарыдан суреттері бар камераны алдын ала қараңыз

Мен суретке түсірмес бұрын кері санақтың шығуын қалағандықтан, камераның алдын ала қарауымен сәйкес келетін суреттер қажет болды.

Келесі код камераның алдын ала қарауымен 1-p.webp

PIC импорттау кескінін PIL импорттауынан picamera. PiCamera () камерасы арқылы ұйқыдан импорттау: kamera.resolution = (1920, 1080) camera.framerate = 24 camera.start_preview () # load image img = Image.open ('1-p.webp

Байқап көріңіз:

python imageOverlay.py

Енді қабаттасқан суреттермен кері санауды құрайық. 1-p.webp

Осыдан кейін келесі кодты қолданыңыз:

пикамераны импорттау

PIL импорттау кескіні picamera. PiCamera () камерасы ретінде уақытты импорттау кезінде ұйқы: 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') # жасау тақтасы = 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 ұйқы (2) #алдыңғы қабатты камераны алып тастау tobytes (), size = img2.size) o.alpha = 128 o.layer = 3 sleep (2) # алдыңғы қабатты камераны алып тастаңыз. over_overlay (o) pad.paste (img3, (0, 0)) o = камера. add_overlay (pad.tobytes (), size = img3.size) o.alpha = 128 o.layer = 3 ұйқы (2)

Енді оны орындаңыз:

python imageOverlayCounter.py

Және кері санақты қараңыз

Вау - код көп, бірақ суретке түсірілмеген … Мұны бәрін біріктіру арқылы шешейік - камераны алдын ала қарау, кері санақ және суретке түсіру

PIL импорттау суретін PIL импорттау Уақыт бойынша импортталатын ұйқы режимінің жабылуы Counter (): # load image img1 = Image.open ('3.png') img2 = Image.open ('2.png') img3 = Image.open ('1.-p.webp

Байқап көріңіз:

python суретWithTimer.py

Ал бізде Йода бар

9 -қадам: Бағдарламалау - Үлкен күмбез батырмасы

Бағдарламалау - Үлкен күмбез батырмасы
Бағдарламалау - Үлкен күмбез батырмасы
Бағдарламалау - Үлкен күмбез батырмасы
Бағдарламалау - Үлкен күмбез батырмасы

Үлкен күмбезді басу - үлкен дөңгелек түйме - диаметрі шамамен 100 мм, жарық диоды бар. Ол 12В жұмыс істейді дейді, бірақ Raspberry PI 3.3v оны жарықтандыру үшін жеткілікті

Сынақ үшін схеманы қолданыңыз

Код:

RPi импортынан GPIO

takeButton = 17 ledButton = 27 GPIO.setmode (GPIO. BCM) GPIO.setup (takeButton, GPIO. IN, GPIO. PUD_UP) GPIO.setup (ledButton, GPIO. OUT) #Жарық GPIO. шығысы (ledButton, True) # Блоктау функциясы GPIO.wait_for_edge (takeButton, GPIO. FALLING) басып шығару («Түйме басылды») GPIO.output (ledButton, False) GPIO.cleanup ()

Кейбір кодты түсіндіру GPIOS мәндерін алудың бір түрі - үзіліс (басқа сұрау) - жиекті анықтау.

Жиек - бұл ЖОҒАРЫдан ТӨМЕН (құлау жиегі) немесе ЛОУ -ЖОҒАРЫ (көтерілу жиегі) көшу атауы. Егер PIN ештеңеге қосылмаған болса, кез келген оқу анықталмайды. Шешім - бұл PIN кодында жоғары/төмен тартылатын резистор болуы. Raspberry PI бағдарламалық қамтамасыз ету арқылы жоғары/төмен қарсылықты реттеуге мүмкіндік береді.

Сызық

GPIO.setup (takeButton, GPIO. IN, GPIO. PUD_UP)

PIN кодын дәл осылай жасау үшін конфигурациялайды - жоғары қарай тартыңыз

Неге көтерілу керек? Үлкен күмбезді басу түймесінің 2 PIN коды бар - бұзуға немесе жасауға итеру (көбінесе Arduino/Raspberry PI жиынтығымен бірге келетін кішкентай түймелер сияқты). Мен оны түйменің PIN кодын «енгізуге» қостым. Басқан кезде тізбек жабылады және электр өтеді (әдетте ашық).

Сызық

GPIO.wait_for_edge (takeButton, GPIO. FALLING)

ол PIN -кодтың құлағанын анықтағанша күтеді (сценарийдің орындалуын тиімді түрде тоқтатады) - түймені босату электр энергиясының ағынын қысқартады және PIN коды 3,3 в -тан 0 в -ге ауысады.

Жарықдиодты PIN коды түймедегі жарықдиодты жарықтандыруға арналған

Arduino оқулықтарынан басу коммутаторлары туралы қосымша ақпарат, Уикипедия жасауға немесе басуға және GPIO үзілістеріне.

Енді, батырманы камерамен біріктірейік - Түйме басылғанда ғана суретке түсіріңіз

PIL импорттауынан GPIO импорттау RPi -ден ұйқы режимінен импорттау кескіні # ЕСКЕРТПЕ: Бұл негізгі бағдарламадағы бас тарту түймесі болады # Мен оны бейнедегі түсінікті болу үшін ғана қолданамын 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) ұйқы (1) def offLeds (): GPIO.output (ledCancel, False) # Кескінді жабудың функциясы overlayCounter (): # жүктеу суреттері img1 = Image.open ('3.png') img2 = Image.open ('2.png') img3 = Image.open ('1.png') # Қабат жасау # img1 көмегімен қолданылады, себебі барлығы бірдей өлшемді тақта = Image.new ('RGB', (((img1.size [0] + 31) // 32) * 32, ((img1.size [1] + 15) // 16) * 16,)) # қабатты қою - 3 түйме (), size = img1.size) ov.alpha = 200 # қабат 3 -ке тең, себебі камераны алдын ала қарау 2 -қабатта болады. қабат.қабат = 3 ұйқы (1) камера.жоюды_қабаттау (ov) # қабаттасуды қою - 2 төсеніш.паста (img2, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img2.size) ov.alpha = 200 # қабаты 3, себебі камераны алдын ала қарау 2 қабатта болады. қабат.қабат = 3 ұйқы (1) камера. жою) # қабаттасуды қойыңыз - 1 pad.paste (img3, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img3.size) ov.alpha = 200 # қабаты 3, себебі камераны алдын ала қарау 2 қабатта ov.layer = 3 ұйқы (1) camera.remove_overlay (ov) камера = пикамера. 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 ()

Біраз кодты түсіндіру

Ол камераны алдын ала қарауды бастайды және түйме басылғанша күтеді. Түйме басылғаннан кейін жарық диоды жанады және кері санақ басталады. Соңына жеткенде сурет түсіріліп, жарық диоды өшеді

10 -қадам: Twitter -ге жазыңыз

Twitter -ге жариялау
Twitter -ге жариялау
Twitter -ге жариялау
Twitter -ге жариялау
Twitter -ге жариялау
Twitter -ге жариялау

Енді біз Python -ды қолданып, твит жазамыз!:) Сізге жариялау үшін сурет қажет болады - ақылмен таңдаңыз.

Біріншіден, біз Twitter API -ге кіруіміз керек, ол үшін біз APP жасауымыз керек. Https://apps.twitter.com сайтына өтіп, жаңа бағдарлама жасаңыз.

Әзірлеуші тіркелгісіне өтініш беру қажет - кейбір сұрақтарды толтырып, электрондық пошта мекенжайын растаңыз. Осыдан кейін сіз жаңа APP жасай аласыз.

Қолданбаны жасағаннан кейін кілттер мен белгілерге өтіңіз және кіру белгісі мен құпия белгісін жасаңыз. Терезе тек бір рет кілттері бар терезеде көрсетіледі - ОЛАРДЫ КӨШІРІП, КЕЙІН САҚТАҢЫЗ.

Суретті twitter аккаунтына жіберу үшін келесі кодты қолданыңыз. Толтыруды ұмытпаңыз:

  • тұтынушы_кілт
  • тұтынушы_құпиясы
  • access_token
  • access_token_secret

twitter хабарламасы - бұл твитке жіберілетін мәтін.

jpg_foto_to_send - бұл твитке бекітілетін сурет. Python сценарийі сияқты бір каталогта сурет бар және кодтағы атауды өзгертіңіз.

tweepy импорттау # Twitter параметрлері def_api (cfg): auth = tweepy. OAuthHandler (cfg ['Consumer_key']; tweepy. API (auth) # twitter -ге жіберу def sendToTwitter (): cfg = {«Consumer_key»: «», «Consumer_secret»: «», «access_token»: «», «access_token_secret»: «»} api = get_api (cfg) # Status Message tweet = «Twitter хабарламасы» status = api.update_with_media («jpg_foto_to_Send», твит) sendToTwitter ()

Сіздің твиттеріңіз үшін Twitter арнасын тексеріңіз.

Міне Твит

Немесе төменде:

#RaspberryPI MagicBox. Суретке түсіріңіз, қарап шығыңыз және оларды twitter мен Facebook -ке жіберуді таңдаңыз. Raspberry PI арқылы жұмыс істейді. @@ Raspberry_Pi#RaspberryPI#RaspberryPIProjectpic.twitter.com/cCL33Zjb8p

- Бруно Рикардо Сантос (@feiticeir0) 29 ақпан, 2020 ж

11 -қадам: Кейбір элементтерді біріктіру

Кейбір элементтерді біріктіру
Кейбір элементтерді біріктіру
Кейбір элементтерді біріктіру
Кейбір элементтерді біріктіру

Енді Big Dome Push батырмасын біріктіріп, оны басу, кері санау, суретке түсіру, оны twitter -ге жіберу -жібермеу туралы шешім қабылдайық.

Біз басқа қабаттасатын кескін қосамыз және барлық үш түймені қолданамыз. Сурет түсірілген кезде барлық 3 түйменің жарық диодтары жанады.

Біз басқа суретті қосамыз, ол әлеуметтік желілерде жарияланатын белгішелерді көрсетеді

SelectOption-p.webp

Aenviar-p.webp

Бейнеде көк батырмасы (камераның алдыңғы жағы) көрсетілмеген, бірақ жарық диоды қосулы және ол басылғаннан кейін жыпылықтай бастайды.

Қаласаңыз, код қосылады

Бұл негізгі бағдарламаның алдындағы соңғы тестілеу коды.

# кодтау = utf-8 импорттық пикамера импорты _PIL импортынан RPi импорты GPIO-дан импорттық ұйқыдан бастап импорттық ішкі процесс Суретті импорттау тігісі # Twitter импорттық твифі # Facebook импорт facebook # Суретке түсіру түймесі = 17 # SocialNetwork Button socialNetworkButton = 23 # Бас тарту Суретті болдырмау батырмасы = 24 # Суретке түсіру түймесі LED takePicButtonLed = 27 # Әлеуметтік желіге жіберу түймесі LED постыSNLed = 22 # Болдырмау түймесі жарықдиодты болдырмауButtonLed = 5 GPIO.setmode (GPIO. BCM) GPIO.setup (takeButton, GPIO. IN, GPIO) GPU.setup) GPIO.setup (bekorButtonLed, GPIO. OUT) # Twitter параметрлері 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) # twitter -ге жіберу def sendToTwitter (): cfg = {«con sumer_key «:» «,» Consumer_secret «:» «,» access_token «:» «,» access_token_secret «:» «} api = get_api (cfg) # Status Message tweet =» MagicBox нұсқаулықты тестілеу. #MagicBox #RaspberryPI #Raspberry #Instructables «status = api.update_with_media (» pushTesting.jpg «, твит) #Facebook AOth def get_api_facebook (cfg): graph = facebook. GraphAPI (cfg ['access_token'])) # бет ретінде жариялаңыз. Егер сіз өзіңізді жазғыңыз келсе, # төмендегіні өткізіп жіберуге болады. resp = graph.get_object ('me/accounts') page_access_token = resp ['data'] бетінде ешбірі жоқ: if page ['id'] == cfg ['page_id']: page_access_token = page ['access_token'] graph = facebook. GraphAPI (page_access_token) қайтару графигі # facebook -ке жіберу def sendToFacebook (): # Қол жеткізу үшін мәндер cfg = {«page_id»: «», «access_token»: «»} api = get_api_facebook (cfg) caption = «Кескінді жазу» albumid = «» api.put_photo (image = open («pushTesting.jpg», «rb»), caption = «Кескінге жазба «) # Light Take TakePicButtonLed def onlyTakePicLed (): GPIO.output (takePicButtonLed, True) GPIO.output (postSNLed, False) GPIO.output (bekorButtonLed, False) # Light Light Cancel және SocialNetwork түймесі defPostLEDS (): GPI O.output (takePicButtonLed, False) GPIO.output (postSNLed, True) GPIO.output (болдырмауButtonLed, True) # Кері санауды азайту кезінде суретті жарық диодты түсіру TimerPicture (): GPIO.output (takePicButtonLed, True) ұйқы (0.5) GPIO.output (takePicButtonLed, False) ұйқы (0.5) GPIO.output (takePicButtonLed, True) ұйқы (0.5) GPIO.output (takePicButtonLed,Жалған) ұйқы (0.5) GPIO.output (takePicButtonLed, True) ұйқы (0.5) GPIO.output (takePicButtonLed, False) # Әлеуметтік желілерде жариялау кезінде blink postSNLed def blinkPosting (stop_event): # Start while (stop_event.is_set ()): басып шығару («өшіру») GPIO.output (postSNLed, False) ұйқы (0.5) басып шығару («қосулы») GPIO.output (postSNLed, True) ұйқы (0.5) анықтайтын таймер (): GPIO.output (takePicButtonLed, True)) ұйқы (1) GPIO.output (postSNLed, True) ұйқы (1) GPIO.output (болдырмауButtonLed, True) ұйқы (1) def showAllLeds (): GPIO.output (takePicButtonLed, True) GPIO. шығысы (postSNLed, True) GPIO.output (болдырмауButtonLed, True) # 1 -қабатта алдын ала қарауды көрсету def дисплейАлдын ала қарау (imgName): # PIL кескін шоуы - бұл # біз алдын ала қарау img = Image.open (imgName) көрсету үшін камераның қабатын қолданамыз.) толтыру = Image.new ('RGB', (((сурет өлшемі [0] + 31) // 32) * 32, (((сурет өлшемі [1] + 15) // 16) * 16,)) padding.paste (img, (0, 0)) ov = camera.add_overlay (padding.tobytes (), size = img.size) ov.layer = 1 # Қабатта алдын ала қарауды көрсету 3 def displayPreview3 (imgName): # PIL кескін шоуы - бұл # біз камераның үстіңгі қабатын бейнелеу үшін қолданамыз. img.size [0] + 31) // 32) * 32, ((өлшемі [1] + 15) // 16) * 16,)) толтыру.паста (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') # Жасау Қабат тақтасы = Image.new ('RGB', (((imgsn.size [0] + 31) // 32) * 32, ((imgsn.size [1] + 15) // 16) * 16,)) # Қабаттау тақтасын қойыңыз. image def overlayCounter (): # суреттерді жүктеу img1 = Image.open ('3.png') img2 = Image.open ('2.png') img3 = Image.open ('1.png') # қабаттасу жасау # Img1 -де қолданылады, себебі барлығы бірдей өлшемді алаң = Image.new ('RGB', (((img1.size [0] + 31) // 32) * 32, ((img1.size [1] + 15) // 16) * 16,)) # қабаттасуды қойыңыз - 3 түйме.паста (img1, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img1.size) ov.alpha = 200 # қабат 3 -ке тең, себебі камераны алдын ала қарау 2 -қабатта. ov.layer = 3 ұйықтау (1) камера.қайтарып тастау (ov) # қабатты қою - 2 төсеніш.паста (img2, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img2.size) ov.alpha = 200 # қабат - 3, себебі камераны алдын ала қарау 2 қабатта болады. қабаттасушы = 3 ұйқы (1) камера.римоверлеуді (ov) # қою қабаттасу - 1 pad.paste (img3, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img3.size) ov.alpha = 200 # қабаты 3, себебі камераны алдын ала қарау 2 қабатта ov.layer = 3 ұйқы (1) camera.remove_overlay (ov) # Негізгі функция # Жүктеу хабарламалары болмайтындай экранды тазарту # мүмкін bash tmp = sp.call ('clear', shell = True) камера = пикамера. 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' #Мұнда тестілеуді орындап көріңіз: while (True): camera.start_preview () #Тек LED суретін көрсетіңіз Тек сурет түсіру үшін TakePicLed () #Түйменің түсуін күтіңіз. Сурет GPIO.wait_for_edge (takeButton, GPIO. FALLING) # Кескіндер көрсетіліп тұрғанда светодиоды санау үшін ағынды бастаңыз # Мүмкін overlayCounter функциясында қолданылуы мүмкін #, себебі оның суреттерді көрсетуге арналған таймерлері бар, бірақ негізгі әсерлері _ бірдей емес еді _thread.start_new_thread (countingTimerPicture, ()) # Камерадағы суреттің қабаттасуындағы суреттердің қабаттасуын көрсетуCounter () # AllAlLeds () camera.capture ('pushTesting.jpg') камерасын түсіргенде барлық жарық диодтарын көрсету. stop_preview () #display image displayPreview ('pushTesting.jpg') # Қабаттауды көрсету oo = overlaysn () # Болдырмау немесе әлеуметтік желілерге жариялау үшін жарықдиодты көрсетуPostLEDS () GPIO.add_event_detect (socialNetworkButton, GPIO. FALLING) GPIO.add_eventButton_Out_Button, GPIO. FALLING) while (True): егер GPIO.event_detecte d (socialNetworkButton): camera.remove_overlay (oo) GPIO.output (жоюButtonLed, False) o = displayPreview3 ('Aenviar.png') #басып шығару «Әлеуметтік желілер түймесі» sendToTwitter () sendToFacebook () camera.remove_overlay (o) үзілсе GPIO.event_detected (болдырмау түймесі): # басып шығару «Бас тартылды» камера.қашықтықты жою (oo) үзіліс # қалпына келтіру GPIOS GPIO.remove_event_detect (socialNetworkButton) GPIO.remove_event_detect (болдырмау түймешігі) GPIO.remove_event_toption (шығару) «Шығылды …») #offLeds () GPIO.cleanup ()

12 -қадам: Сымдарды жалғау

Image
Image
Сымдар
Сымдар
Сымдар
Сымдар

Сымдар Big Dome Push түймелерін Raspberry PI -ге қосады.

Фритзинг схемасын орындаңыз.

Байланыстар - бұл:

Қосылу RPI GPIO PIN GND Жасыл басу түймесіGND (#3) GND сары басу түймесіGND (#9) GND көк басу түймесіGND (#39) Суретке түсіру (Көк батырманың «Жасау» түймесі) 17 (BCM) Әлеуметтік желілерге жіберу (Жасыл басу) «Жасау үшін басу») 23 (BCM) Болдырмау («Push to make» сары басу түймесі) 24 (BCM) Көк басу түймесі LED27 (BCM) Жасыл басу түймесі LED22 (BCM) Сары басу түймешігі LED5 (BCM)

Жылудың қысқаруы да түспен кодталған

  • Қара - GND байланыстары
  • Сары - бұл қосылуға «итермелейтін» байланыс
  • Көк - жарықдиодты қосылымдар

GPIO. BCM нөмірлері мен GPIO. BOARD байланыстары

Менің байланыстарым BCM болғандықтан, менің ойымша, бұл туралы және BCM мен BOARD арасындағы айырмашылық туралы айтуға жақсы уақыт.

Негізгі айырмашылық - бұл GPIO PIN кодтарына қалай жүгіну, бұл өз кезегінде қосылуларды қалай жасау керектігін көрсетеді. GPIO.board PIN кодын интернеттегі кез келген GPIO макетінде басылған нөмірге сілтеме жасайды.

GPIO. BCM PIN нөмірлеріне Broadcom SOC көретініне сілтеме жасайды. Бұл Raspberry PI жаңа нұсқаларында өзгеруі мүмкін.

Pinout.xyz сайтында тақта нөмірлері түйреуіштердің жанында орналасқан және BCM осылай аталады - BCM X (мұнда X - сан)

13 -қадам: MagicBox

Бұл қадамға бекітілген код соңғы болып табылады.

Сіз оны таңқурай PI жүктеу кезінде, тіпті кірудің қажеті жоқ, іске қоса аласыз. Мұны істеу үшін кодты орналастырған каталогта осы шағын сценарийді жасаңыз - сәйкесінше жолдарды өзгертіңіз

#!/bin/bash

cd/home/pi/magicbox python MagicBox.py

Оны орындалатын етіп жасаңыз

chmod +x start_magicbox.sh

Енді оны 0et индукциясының алдында /etc/rc.local деп атаңыз

sudo vi /etc/rc.local

/home/pi/magicbox/start_magicbox.sh &

сақтаңыз және шығыңыз.

Енді, әрбір қайта жүктеу кезінде Python бағдарламасы орындалады

ЕСКЕРТПЕ: Барлық кескін файлдары сценариймен бір каталогта болуы керек. Сізде болуы керек:

  • 1.png
  • 2.png
  • 3.png
  • Aenviar.png
  • SelectOption.png

Сіз бұл файлдардың барлығын MagicBox github -тан ала аласыз.

Ұсынылған: