...

Python i elektronika

by riklaunim

on

Report

Download: 0

Comment: 0

6,082

views

Comments

Description

Download Python i elektronika

Transcript

  • 1. Python i elektronika Piotr Maliński www.python.rk.edu.pl
  • 2. Jaka elektronika ? GPIO (General Purpose Input/Output)
  • 3. Jaka elektronika ? USB
  • 4. R2D2 z Raspberry Pi na pokładzie ● Rozpoznawanie mowy (Angielski, Chiński) ● Rozpoznawanie twarzy ● Wykrywanie ruchu ● Ultradźwiękowy czujnik odległości ● Nagrywanie i odtwarzanie wiadomości audio http://www.youtube.com/watch?v=znuUm5vbSpI
  • 5. Dlaczego Python? ➔ Prościej i łatwiej ➔ Unikamy programowania w C, albo ASM ➔ Nie jesteśmy uzależnieni od jednego specyficznego SDK/IDE (np. takiego pod Windows 98) ➔ Większa przenośność kodu, niezależność od systemu operacyjnego
  • 6. Czego potrzebujemy ? Kontrolery
  • 7. Kontrolery PyMCU www.circuitsforfun.com ● Mikrokontroler PIC z wyjściami analogowymi i cyfrowymi ● Podłączany poprzez USB do komputera ● Pythonowy moduł pymcu do jego obsług ● Obsługa I2C, SPI, wyświetlaczy LCD
  • 8. Kontrolery PyMCU www.circuitsforfun.com ● Mała społeczność ● Brak dodatkowych bibliotek i dokumentacji dotyczącej wykorzystania bardziej złożonych układów (I2C, SPI)
  • 9. Kontrolery Raspberry Pi ● Komputer na małej płytce ● GPIO (3.3V) obsługiwane z poziomu Linuksa uruchomionego na Raspberry ● Silne wsparcie dla Pythona ● Wiele płytek rozszerzających (Gertboard, PiFace) również wspiera Pythona ● Dość duża społeczność
  • 10. Kontrolery Arduino ● Liczne złącza GPIO i wiele płytek rozszerzających ● Duża popularność i duża społeczność (sporo kodu) ● Programowalny głównie w C ● Python (PyFirmata, pyserial) pozwala „tylko” na komunikację z mikrokontrolerem na Arduino
  • 11. Akcesoria ● Płytki stykowe (breadboard) ● Kable połączeniowe (jumper wires) ● Podstawowe podzespoły elektroniczne (np. rezystory i diody LED) ● Lutownica, cyna, kalafonia ● Miernik, oscyloskop
  • 12. Gdzie to kupić? ● http://kamami.pl ● http://nettigo.pl ● http://sklep.avt.pl/ ● Allegro, ebay i wiele sklepów z elektroniką ● https://www.sparkfun.com ● https://www.adafruit.com ● http://dx.com
  • 13. Hello world – miganie diodą LED import pymcu mb = pymcu.mcuModule() for x in range(1,25): mb.pinHigh(1) mb.pausems(500) mb.pinLow(1) mb.pausems(500)
  • 14. Odczyt wartości z sensorów import pymcu mb = pymcu.mcuModule() while True: print mb.analogRead(1)
  • 15. Odczyt wartości z sensorów Ultradźwiękowy „miernik” odległości ● Impuls na pinie Trig wyzwala serię impulsów ultradźwiękowych ● Pin Echo przejdzie w stan wysoki (1) gdy będzie odbierał odbity sygnał z tych impulsów ● Czas trwania stanu wysokiego pozwala wyliczyć odległość do przeszkody
  • 16. .. mb.digitalState(2, 'input') # Echo mb.pinHigh(1) # Trig mb.pauseus(10) mb.pinLow(1) response_start = None response_end = None for i in range(0, 500): ret = mb.digitalRead(2) if ret == 1: end = datetime.now() response_end = end if not response_start: response_start = end if response_end and response_start: echo_delta = response_end - response_start delta = echo_delta.total_seconds() print (delta * 340) / 2, ' m' else: print 'no echo captured'
  • 17. Przerwania (interrupts) ● Pozwalają oczekiwać na zdarzenia (event) zmiany stanu pinu ● Znacznie bardziej wydajne niż ciągłe sprawdzanie jego stanu ● Obsługiwane m.in. w Raspberry Pi (Rpi.GPIO w wersji 0.5.2 lub nowszej) GPIO.add_event_detect(24, GPIO.RISING, callback=my_callback) http://raspi.tv/2013/how-to-use-interrupts-with-python-on-the-raspberry-pi-and-rpi-gpio-part-3 http://raspi.tv/2013/how-to-use-interrupts-with-python-on-the-raspberry-pi-and-rpi-gpio-part-2 http://raspi.tv/2013/how-to-use-interrupts-with-python-on-the-raspberry-pi-and-rpi-gpio
  • 18. I2C oraz SPI ● Interfejsy do komunikowania się pomiędzy urządzeniami ● Stosowane w bardziej złożonych układach, płytkach ● Urządzenie dostępne jest pod określonym adresem, z którego można czytać lub do którego można pisać dane. ● Potrzebna jest dokładna dokumentacja opisująca interfejs (co i jak pisać albo odczytywać) ● Arduino, a także Raspberry mają zazwyczaj gotowe biblioteki dla wielu urządzeń (np.. LiquidCrystal dla LCD)
  • 19. I2C oraz SPI
  • 20. Komunikacja szeregowa ● Adapter USB-UART tworzy wirtualny port szeregowy na komputerze ● Moduł pyserial pozwala pisać i czytać z takiego portu ● Zazwyczaj powinno być to prostsze niż I2C/SPI ● Mogą być wbudowane w niektóre urządzenia USB ● Dostępne są też same adaptery – używane zazwyczaj do komunikacji komputer-mikrokontroler
  • 21. USB ● https:// github.com/walac/pyusb ● Jeżeli dobrze znamy urządzenie USB i sam protokół to możemy przejąć nad nim kontrolę poprzez pyusb ● Można to np. zrobić z wyrzutniami rakiet na USB :)
  • 22. COM, .NET i MS Windows import win32com.client tel = win32com.client.Dispatch("Celestron.Telescope") if tel.Connected: print " ->Telescope was already connected" else: tel.Connected = True if tel.Connected: print " Connected to telescope now" else: print " Unable to connect to telescope, expect exception" tel.Tracking = True tel.SlewToCoordinates(12.34, 86.7) tel.Connected = False import clr clr.AddReference("ASCOM.DriverAccess.dll") from ASCOM.DriverAccess import * a = Telescope('Celestron.Telescope') a.Connected = True a.SlewToCoordinates(11.11, 11.11) a.TrackingRate = 0 a.Tracking = True a.Connected = False
  • 23. Inne ciekawe płytki i kontrolery
  • 24. Synapse SNAP ● Komunikacja bezprzewodowa IEEE 802.15.4 ● Piny GPIO ● Niskie zużycie energii, relatywnie niska cena ● Programowalne w SNAPpy – pochodnej implementacji Pythona http://synapse-wireless.com
  • 25. SparkFun SerIO ● Obsługa urządzeń podłączonych do pinów analogowych i cyfrowych poprzez port szeregowy z poziomu komputera ● W przypadku Pythona potrzebny jest tylko PySerial i dokumentacja SerIO https://www.sparkfun.com/products/9521
  • 26. SparkFun SerIO https://www.sparkfun.com/products/9521 mySerial = serial.Serial(8, 57600, serial.EIGHTBITS, serial.PARITY_NONE, serial.STOPBITS_ONE, 5); #Wait for the 'Ready' response from the SerIO response = mySerial.readline(); #Send SerIO command to turn off the command echo size = mySerial.write("E,0r"); time.sleep(0.1); #Configure pin D2 as an output mySerial.write("C,2,1r"); response = mySerial.readline();
  • 27. Phidgets http://www.phidgets.com ● Płyty-kontrolery i liczne płytki dodatkowe (sensory, motory, przełączniki) ● Wysokopoziomowe API dla Pythona jaki dla... Android Java, Applescript, C/C++, C#, Cocoa, Delphi, Flash AS3, Java, LabVIEW, MATLAB, Max/MSP, Ruby, Visual Basic.NET, Visual Basic 6.0, Visual Basic for Applications, Visual Basic Script, and Visual C/C++/Borland.NET.
  • 28. Phidgets http://www.phidgets.com
  • 29. mbed ● Platforma prototypowania dla układów z mikrokontrolerami ARM ● Posiada wsparcie dla Pythona (ale nie „pierwszoplanowe”) ● http://mbed.org/cookbook/Interfacing-with-Python ● Programowalny przez webowy interfejs i przerzucanie gotowych plików
  • 30. http://technical.io/
  • 31. Koniec
  • Fly UP