(Denna sida har mÄnga lÀnkar som Àr enklare att följa/klicka om du istÀllet gÄr till https://bit.ly/2SmYVrj om du lÀser en pappers-version)
Vi tĂ€nkte till din födelsedag skulle fĂ„ ett litet "paket" đ för att tillĂ„ta dig snickra ihop lite enklare elektronik och programmera för att fĂ„ en liten kĂ€nsla över hur enkelt det kan vara om man har intresset đ
TĂ€nkte att inledningsvis att anvĂ€nda en Raspberry Pi đ vore enklaste för detta Ă€ndanmĂ„l dĂ„ dels kan anvĂ€nda den som en vanlig dator (skriva kod direkt pĂ„ den) men har ocksĂ„ GPIO pinnar som Ă€r nyckeln till detta. Med dessa kan vi bĂ„de lĂ€sa elektroniska signaler (3.3 volt) men ocksĂ„ skicka ut signalet vilket Ă€r toppen för att styra eller lĂ€sa av komponenter.
Som programmerings sprĂ„k finns det flera valmöjligheter, men jag kommer lura över dig till att anvĂ€nda Python đ som bara Ă€r bland de lĂ€ttaste sprĂ„ken att börja med, dessutom Ă€r ett av det bĂ€sta "full-spektrum" (utan begrĂ€nsningar funktionsmĂ€ssigt) enligt min mening, vare det handlar om att utveckla applikationer, webtjĂ€nster, AI, mattematik, skapa automationer i MineCraft ... eller styra mikrokontrolenheter eller i detta fall "mikro datorenhet".
SÄ vilka förberedelser behövs för att köra loss med lite experiment utöver det du fÄtt...
- En mikrousb laddare (minst 1 ampere) för att fÄ liv i Raspberry Pi
- Hörlurar med vanlig 3,5mm uttag... eller bÀttre en extern högtalare med 3,5mm sladd ingÄng
Bra att ha om du lÀttare ska kunna komma Ät / styra Raspberry Pi
- TV eller skÀrm med HDMI
- HDMI-kabel
- Kombinerad tangentbord/mus med USB .... eller en USB-hub (helst med egen strömförsörjning) med tangentbord och mus kopplad till .... detta Àr för Raspberry Pi har vÀldigt fÄ USB-portar och undviker enheter som drar hög strömstyrka
- NĂ€tverkssladd (om inte ert wifi fungerar)
Jag skulle föreslÄ att du kopplar in sÄ att du Ätminstone kan anvÀnda den som dator antingen genom tangentbord (enklast) och/eller koppla upp frÄn din egna stationÀra dator (jag gÄr genom senare hur).
Sedan ska SD-kortet in i Raspberry PI, samt Wifi USB dongle sÀttas in-
Om du anvÀnder skÀrm + dator/mus sÄ Àr det enda du behöver göra Àr att titta pÄ skÀrmen medan den startar upp.
I detta fall sÄ klarar du dig utan bÄde skÀrm, tangentbord/mus ... men den mÄste komma in pÄ ert nÀtverk .. förhoppningsvis har jag lyckats för-konfigurera "wifi" USB stickan med ert wifi och kommer automatiskt koppla upp sig (annar kan du följa denna video-klipp för fixa detta), om detta misslyckats sÄ gÄr det utmÀrkt att koppla en nÀtverkskabel direkt frÄn Raspberry Pi till er hemma-router (kommer alltid fungera).
Du kommer behöva IP-addressen till Raspberry Pi, och enklast Àr om du har skÀrmen inkopplad och under uppstart bör du se dess IP-address dyka upp pÄ skÀrmen, ett annat alternativ om du vet hur du kopplar upp mot din router och lÀsa av dÀr ... sista alternativet Àr att anvÀnda ett Windows program (gratis) som exempelvis Fing du kan ladda ned hÀr som bör kunna "scanna" av ditt nÀtverk och lura ut detta Ät dig.
Sedan frÄn din Mac/Windows dator fÄr du ladda ned RealVNC viewer hÀrifrÄn.
Sedan kör du detta program och vÀljer att skapa en koppling mot ovan IP-address, och nÀr den frÄgar efter ett lösenord anger du
username: pi
password: raspberrylab
NÀr du antingen anvÀnder skÀrmen eller VNC sÄ bör du fÄtt en kod-editor "mu" som Àr inlagd att starta automatiskt (finns Àven i hallon-menyn -> programmering). FrÄn denna vyn, kan du vÀlja "Nytt", "Kör" som du oftast kommer anvÀnda. Alla Python program bör ha filÀndelsen .py
.. jag skÀl ett vÀldigt enkelt exempel frÄn denna sida som har mÄnga flera bra exempel att följa jag kan varmt rekommendera att göra... Du bör ha motstÄnd (100 ohm) och LED lampa som du ka koppla in som nedan, din modell har fÀrre pinnar (26 st) Àn bilden visar med de pinnar som visas i dessa exempel ligger pÄ samma plats och med samma nummer sÄ dessa exempel ska fungera lika ..
Om du skriver en kod nu som
from gpiozero import LED
from time import sleep
red = LED(17)
while True:
red.on()
sleep(1)
red.off()
sleep(1)
Och klickar pĂ„ "Kör" â sĂ„ bör denna lampa blinka till du klickar "Stop" đ
I sĂ„ fall Ă€r det toppen đ... och jag kan varm rekommendera denna seria av YouTube klipp som förklarar mycket enkelt det absolut mest grundlĂ€ggande ..
Python - Grunder - Del 1 - Variabler och listor
Python - Grunder - Del 2 - Villkor och loopar
Python - Grunder - Del 3 - Funktioner
Python svenska - 18 - Klasser och metoder (detta Àr nog lite överkurs men för mitt experiment nedan bra att ha klÀm pÄ)
Nu har du lite klÀm pÄ Python som sprÄk ...
Vill du bekanta dig lite mer med gpiozero biblioteket, hur du anvÀnder Python för att styra GPIO pinnar ...?
Toppen, dĂ„ kan jag rekommendera denna video nedan .. đŒ
Raspberry Pi - Control GPIO Pins with GPIOzero Library
... du bör nu har du nog fÄtt lite klÀm pÄ hur man kan snacka med saker med Python .. och du kan gÄ vidare och experimentera vidare pÄ egen hand ...
Jo .. du har dessa och med följande exempel du kan testa med
- LED
- Tryck knapp
- Ljus sensor
- AvstÄndsmÀtare
- Ljud sensor
- DHT11 (temperatur/fuktighet) sensor
- Reed-switch (dörr sensor)
- Sladdar, motstÄnd, kondensator
Om du saknar nĂ„t rekommenderar jag Kjell & Company eller AliExpress đ€
Om du följer kopplings schemat nedan samt kod exemplet nedan som du kan jobba vidare pĂ„, sĂ„ har du lyckats utvecklat en tamagotchi-hugo .. đ¶ + đ€
Koppla nedan ...
PS. "motstÄndet" mot den blÄa "temperatur-sensor" ska vara det motstÄnd som Àr pÄ 47 Kohm (starkare), du har en uppmÀrkt för detta. Det motstÄnd du har för LED Àr de svagare som vi inte har markerat upp och bör vara pÄ 100 ohm eller nÄt.
... och med nedan kod som Ă€r lite mer komplext, men har försökt anvĂ€nda sĂ„ enkel lĂ€tt-lĂ€st kod sĂ„ tror att Ă€ven om inte alla pusselbitar faller pĂ„ plats sĂ„ kommer det mesta visa sig sjĂ€lvförklarande .. det fina med Python đđđ»
# Dessa bibliotek anvÀnds för att förenkla livet
from gpiozero import Device, LED, PWMLED, Button
from gpiozero.pins.mock import MockFactory
from unittest.mock import Mock
import pygame.mixer as mixerenhet
import time
import sys
from cowsay import kitty as sÀger
# Detta Àr en s.k. "konstant" variabel bara för göra koden mer lÀttlÀst lÀngre ned
EN_SEKUND = 1
# Alla delar (objekt) utav hunden som kommer anvÀndas med lÀttlÀsta namn
vÀnster_öga = LED(23)
höger_öga = LED(24)
nos = PWMLED(18)
mun = Button(22)
hörsel = Button(27)
temperatur_pinne = 25
# Detta Àr i objekt-orienterad-programmering en "klass" som representerar en hund
class Hund():
def __init__(self, namn):
# En hund har "egna" egenskaper som inte behöver vara samma för andra hundar
self.namn = namn
self.hjÀrtslag_rÀknare = 0
self.födsel_temperatur = self.kÀnn_temperatur() # Vad Àr temperaturen vid födsel för att jÀmföra med senare
# NÀr vi föder en hund vill vi att den ska veta/göra följande
hörsel.when_activated = self.apport # Detta Àr en s.k. "callback" sÀger att den hörsel (ljud sensor) registreras ska han "apport"
mun.when_activated = self.Àt # Detta Àr motsvarande nÀr hunden matas (knappen) sÄ ska han köra metoden "Àt"
sÀger(f"Vov!!! nu Àr jag född och jag heter {self.namn}...\n"
f"Nu nÀr jag föddes sÄ Àr jag {self.födsel_temperatur} grader")
mixerenhet.init() # Detta Àr bara för att initiera ljudenheten pÄ Raspberry Pi
self.skÀll() # Ge ett skall
def slÄ_hjÀrtslag(self, hjÀrtslag_per_sekund=10):
# Denna "metod" bestÀmmer hur ofta/regelbundet hjÀrtat ska slÄ, högre = högre hastighet pÄ rÀknaren
time.sleep(EN_SEKUND / hjÀrtslag_per_sekund)
self.hjÀrtslag_rÀknare = self.hjÀrtslag_rÀknare + 1
def nollstÀll_hjÀrtslag(self):
# Vi anvÀnder denna för att bestÀmma "intervaller" mellan exempelvis hur ofta hunden ska kÀnna pÄ sin pÀls
self.hjÀrtslag_rÀknare = 0
def kÀnn_temperatur(self, pinne=temperatur_pinne, antal_försök=10, normal_temp=23):
# Denna metod/egenskap kommer lÀra hunden att kÀnna pÄ sin pÀls
fuktighet, temperatur = temperatur_lÀsare(temperatur_enhet, pinne, retries=antal_försök)
return temperatur or normal_temp
def dax_att_kÀnna_efter(self, efter_hur_mÄnga_hjÀrtslag=100):
# Denna metod Àr enbart för att svara pÄ frÄgan om det Àr dags för hunden att kÀnna efter sin pÀls igen baserad pÄ vÄr "rÀknare" vi ökar resp. nollstÀller vid behov
self.hjÀrtslag_rÀknare = self.hjÀrtslag_rÀknare + 1
if self.hjÀrtslag_rÀknare > efter_hur_mÄnga_hjÀrtslag:
self.nollstÀll_hjÀrtslag()
return True
else:
return False
def blinka_ögonen(self, tid=0.5, antal=6):
# Denna metod bestÀmmer hur hunden ska blinka med sina ögon
vÀnster_öga.blink(on_time=tid, off_time=tid, n=antal)
höger_öga.blink(on_time=tid, off_time=tid, n=antal)
def pulsera_nosen(self, tid_sekunder=1, antal=4):
# Denna metod bestÀmmer hur hundens nÀsta ska pulsera
nos.pulse(fade_in_time=tid_sekunder, fade_out_time=tid_sekunder, n=antal, background=False)
def apport(self):
# Denna metod kallar vi pÄ nÀr vi vill att han ska springa apport
print(self.namn, 'springer apport đŠŽ')
self.blinka_ögonen(0.2, 10) # Snabbare Àn vanligt
self.skÀll()
def Àt(self):
# Denna metod talar om vad som hÀnder nÀr hunden Àter
print(self.namn, 'Ă€ter gladligen đ')
self.blinka_ögonen()
mixerenhet.music.load('ljud/eat.mp3') # Detta spelar upp ljudet "eat.mp3" som ska ligga i katalogen ljud
mixerenhet.music.play()
def skÀll(self):
# Denna metod lÀr hunden hur han ska lÄta nÀr han skÀller
mixerenhet.music.load('ljud/vov.mp3')
mixerenhet.music.play()
def lev(self, vÀrmeslag_temparatur_ökning=1):
# Denna metod kallar som sista steg vid "init" (födsel) nÀr valpen börjar leva
while True:
self.slÄ_hjÀrtslag() # Vi slÄr ett hjÀrtslag
if self.dax_att_kÀnna_efter() is True: # Bara om tillrÀckligt mÄnga hjÀrtslag ska hunden kÀnna efter
temperatur_just_nu = self.kÀnn_temperatur() # ... dÄ ska han kÀnna efter temperatur
print("Grr.. min pÀls just nu Àr", temperatur_just_nu, "grader")
if temperatur_just_nu is not None and temperatur_just_nu >= self.födsel_temperatur + vÀrmeslag_temparatur_ökning:
# Om temeperaturen överstiger vÀrmeslag ska vi göra nedan
print('đ„”')
self.pulsera_nosen()
# HĂ€r börjar huvud programmet ... NU KĂR VI !!!!
hugo = Hund(namn='Hugo') # Vi föder en ny "Hund" med namnet Hugo
hugo.lev() # Vi talar för hugo att börja leva .... "It's ALIIIIIIVE ... " (citat frĂ„n "Frankenstein") đ§
... nu .. detta Ă€r bara en början .. med de sensors som du har i arsinalen bör du antingen kunna börja nytt projekt eller lĂ€gga till flera egenskaper till en Hugo version 2.0 ... 3.0 ... đ€
Vill du tjuvtitta sÄ har du ett YouTube klipp hÀr hur det hela blev ...
Lite tips pĂ„ andra projekt du kanske gĂ„r snickra pĂ„ med de dela du fĂ„tt .. đĄ
- Inbrottslarm? Vi kan skicka mail (jag kan ge dig tips hur) nÀr detta sker
- LÀsa av avstÄndet nÀr bilen Àr parkerad hemma?
- Skicka en vÀck signal nÀr det blir tillrÀckligt ljust i rummet?
Ha kul .... đ