Python / Python-интерфейс между компьютером и физическим миром

в 15:33, , рубрики: python, микроконтроллер, Программирование, электроника, метки: , , ,

Python / Python интерфейс между компьютером и физическим миром

Американский инженер Ричард Уардлоу (Richard Wardlow) разработал интересный микроконтроллер pyMCU, который он позиционирует как «простой интерфейс на Python между компьютером и физическим миром».

В отличие от существующих Python-микроконтроллеров, эта плата предназначена не столько для автономной работы, сколько как постоянно подключенные к компьютеру «органы чувств» для Python-программы. Контроллер оснащён цифровыми и аналоговыми коннекторами, так что к нему можно подключить разнообразные устройства и сенсоры. Проще всего показать возможности контроллера на примерах.
<a rel="nofollow" name="habracut">

Вывод на ЖК-дисплей различных данных из интернета

Можно использовать любой дисплей, к которому подключаются провода. В данном случае отображается текущие погодные условия и температура через
Python-Weather-API и модуль pywapi.

Python / Python интерфейс между компьютером и физическим миром

Код

import pymcu  import time  import pywapi        mb = pymcu.mcuModule() # Initialize mcu find first available module  mb.lcd()               # Initialize the LCD  time.sleep(1)          # Wait for LCD to Initialize     google_result = pywapi.get_weather_from_google('10001')                  # Use Google as weather source with zip code 10001  mb.lcd(1,google_result['current_conditions']['condition'])               # Display current conditions on first line of LCD  time.sleep(0.1)                                                          # Small delay between next LCD command  mb.lcd(2,'Temp ' + google_result['current_conditions']['temp_f'] + ' F') # Display Temperature on second line of LCD

Построение графика в реальном времени по данным освещённости от фотосенсора

Код

import os,sys, subprocess, time, shutil, glob  import pymcu  import  numpy  as  np  import  matplotlib  matplotlib.use('GTKAgg')  # do this before importing pylab     import  matplotlib.pyplot  as  plt     mb = pymcu.mcuModule()     fig  =  plt.figure()     ax  =  fig.add_subplot(111)  ax.set_ylim(-1.1, 1.1)  ax.set_xlim(0, 5)  ax.grid()     def  animate():      tstart  =  time.time() # for profiling      data = [0]*100      background = fig.canvas.copy_from_bbox(ax.bbox)         for  i  in  np.arange(1,1000):          ax.clear()          ax.grid()          dt = float(mb.analogRead(4)) / 1024.0          data.append(dt)          if len(data) > 100:              data.pop(0)             ax.plot(data)          fig.canvas.draw() # redraw the canvas         raise  SystemExit     import  gobject  print  'adding idle'  gobject.idle_add(animate)  print  'showing'  plt.show()

Управление объективом фотоаппарата

Код

import pymcu  import time     fstops = {0:'0',0x8:'1',0xB:'1.1',0xC:'1.2',0xD:'1.2',0x10:'1.4',0x13:'1.6',             0x14:'1.8',0x15:'1.8',0x18:'2',0x1B:'2.2',0x1C:'2.5',0x1D:'2.5',0x20:'2.8',             23:'3.2',0x24:'3.2',0x25:'3.5',0x28:'4',0x2B:'4.5',0x2C:'4.5',0x2D:'5',             0x30:'5.6',0x33:'6.3',0x34:'6.7',0x35:'7.1',0x38:'8',0x3B:'9',0x3C:'9.5',             0x3D:'10',0x40:'11',0x43:'13',0x44:'13',0x45:'14',0x48:'16',0x4B:'18',             0x4C:'19',0x4D:'20',0x4E:'20',0x4F:'20',0x50:'22',0x53:'25',0x54:'27',             0x55:'29',0x58:'32',0x5A:'32',0x5B:'36',0x5C:'38',0x5D:'40',0x60:'45',             0x63:'51',0x64:'54',0x65:'57',0x68:'64',0x6B:'72',0x6C:'76',0x6D:'80',0x70:'91'}     mb = pymcu.mcuModule()  mb.lcd()     print "Enable SPI"  mb.spiEnable(1,100,0,0)     # Init Lens  lcheck = 0  while lcheck != 170:      il = mb.spiTransfer([0,0xA,0,0xA,0], 400)      lcheck = il[4]     focalMin = 0  focalMax = 0  print "Init Lens"  mb.lcd(1,'Init Lens       ')  il = mb.spiTransfer([0,0xA,0,0xA,0,0,0,0x80,0xA,0x98,1,0,0,0,0,0,0xB0,0,0,0,0xB0,0,0,0], 400)  focalMin = (il[10] << 8) | il[11]  focalMax = (il[12] << 8) | il[13]  print "Focal", str(focalMin) + '-' +  str(focalMax)  print "F-Stop", str(fstops[int(il[21])]) + '-' + str(fstops[int(il[23])])  mb.lcd(1,'Focal ' + str(focalMin) + '-' + str(focalMax))  mb.lcd(2,'FStop ' + str(fstops[int(il[21])]) + '-' + fstops[int(il[23])])  time.sleep(2) # Wait and give some time to read the LCD  mb.lcd()  # Clear F-Stop (Full Open)  print "Clear F-Stop"  mb.lcd(1,'Clear F-Stop    ')  mb.spiTransfer([0x90,0,0,0,0xC,0x13,0x80,0x90,0,0,0xF,0xA,0],300)     time.sleep(0.5)     # F-Stop Full Close  print "F-Stop Full Close"  mb.lcd(1,'F-Stop Close    ')  mb.spiTransfer([0x13,0x58,0])     time.sleep(0.5)     # Clear F-Stop (Full Open)  print "Clear F-Stop"  mb.lcd(1,'Clear F-Stop    ')  mb.spiTransfer([0x90,0,0,0,0xC,0x13,0x80,0x90,0,0,0xF,0xA,0],300)     time.sleep(0.5)     # Focus Test Far  focusAmt = 100  print "Focus Test Far"  mb.lcd(1,'Focus Test Far  ')  for x in range(20):      mb.spiTransfer([0xA])      time.sleep(0.02)      mb.spiTransfer([0x50,0x2F,0xE0,0,0,0xEA,0,0,0,0,0,0,0x44,0,focusAmt],300)      time.sleep(0.02)      mb.spiTransfer([0x90,0])      time.sleep(0.02)      mb.spiTransfer([0xE,0])      time.sleep(0.1)        # Focus Test Near  focusAmt = 155  print "Focus Test Near"  mb.lcd(1,'Focus Test Near ')  for x in range(20):      mb.spiTransfer([0xA])      time.sleep(0.02)      mb.spiTransfer([0x50,0x2F,0xE0,0,0,0xE8,0,0,0,0,0,0,0x44,0xFF,focusAmt],300)      time.sleep(0.02)      mb.spiTransfer([0x90,0])      time.sleep(0.02)      mb.spiTransfer([0xE,0])      time.sleep(0.1)     mb.lcd(1,'Test Complete   ')

Автор: alizar

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js