引子
由於最近在學習ardunio的使用,其中牽涉到繪制一些簡單的電路圖,又不願意使用一些復雜的軟件進行繪制,調查中發現python中的schemdraw庫就能很好地完成這個任務,遂學習使用之。如果你還沒學到Python繪制庫,建議你先去小編的Python學習.裙 :一久武其而而流一思(數字的諧音)轉換下可以找到了,里面有最新Python教程項目,多跟里面的大佬請教交流進步更快哦
schemdraw的安裝
pip install schemdraw搞定,不贅言
正式使用
參考網站及示例
附上相關的網站:
https://pypi.python.org/pypi/SchemDraw/
https://cdelker.bitbucket.io/SchemDraw/SchemDraw.html
https://www.zhihu.com/question/23632588 (知乎上對這個庫及同類方式的介紹)
schemdraw官方文檔中有這么個例子,和我們的用法比較類似遂拆解學習之。
d = schem.Drawing()
left = {'cnt':3, 'labels':['TRG','THR','DIS'], 'plabels':['2','6','7'], 'loc':[.2,.35,.75], 'lblsize':12, } right = {'cnt':2, 'labels':['CTL','OUT'], 'plabels':['5','3'], 'lblsize':12, } top = {'cnt':2, 'labels':['RST','Vcc'], 'plabels':['4','8'], 'lblsize':12, } bot = {'cnt':1, 'labels':['GND'], 'plabels':['1'], 'lblsize':12, } IC555 = e.blackbox(d.unit*1.5, d.unit*2.25, linputs=left, rinputs=right, tinputs=top, binputs=bot, leadlen=1, mainlabel='555') T = d.add(IC555) BOT = d.add(e.GND, xy=T.GND) # Note: Anchors named same as pin labels d.add(e.DOT) d.add(e.RES, endpts=[T.DIS, T.THR], label='Rb') d.add(e.RES, d='up', xy=T.DIS, label='Ra', rgtlabel='+Vcc') d.add(e.LINE, endpts=[T.THR, T.TRG]) d.add(e.CAP, xy=T.TRG, d='down', toy=BOT.start, label='C', l=d.unit/2) d.add(e.LINE, d='right', tox=BOT.start) d.add(e.CAP, d='down', xy=T.CTL, toy=BOT.start, botlabel='.01$\mu$F') d.add(e.DOT) d.add(e.DOT, xy=T.DIS) d.add(e.DOT, xy=T.THR) d.add(e.DOT, xy=T.TRG) d.add(e.LINE, endpts=[T.RST,T.Vcc]) d.add(e.DOT) d.add(e.LINE, d='up', l=d.unit/4, rgtlabel='+Vcc') d.add(e.RES, xy=T.OUT, d='right', label='330') d.add(e.LED, flip=True, d='down', toy=BOT.start) d.add(e.LINE, d='left', tox=BOT.start) d.draw()
上效果圖:
根據示例自己動手繪制
先繪制arduino主板
import SchemDraw as schem import SchemDraw.elements as e d = schem.Drawing() left = {'cnt':10, 'labels':['RESET','RESET2','AREF','N/C','A0','A1','A2','A3','A4/SDA','A5/SCL'], 'plabels':['2','6','7'], 'lblsize':12, } right = {'cnt':17, 'labels':['TX/D0','RX/D1','D2','PWM D3','D4','PWM D5','PWM D6','D7','D8','PWM D9','SS/PWM D10','MOSI/PWM D11','MISO/D12','SCK/D13','ICSP2 MISO','ICSP2 SCK','ICSP MISO'], 'plabels':['5','3'], 'lblsize':12, } top = {'cnt':3, 'labels':['3v3','5v','VIN'], 'plabels':['4','8'], 'lblsize':12, } bot = {'cnt':1, 'labels':['GND'], 'lblsize':12, } IC555 = e.blackbox(d.unit*2.5, d.unit*4.5, linputs=left, rinputs=right, tinputs=top, binputs=bot, leadlen=1, mainlabel='Arduino\nUno\n(Rev3)') T = d.add(IC555) d.draw()
效果圖:
注意點
- 元件的端點一般采用原件label進行查找,但是一些特殊字符schemdraw會將其略去,此外以數字開頭的端點不能使用直接[原件.label名]獲取(python語法不允許,必須采用getattr,如:getattr(T, ‘5v’))另外如果你Python學的不是很好, 建議你先去小編的Python學習.裙 :一久武其而而流一思(數字的諧音)轉換下可以找到了,里面有最新Python教程項目,多跟里面的大佬請教交流進步更快哦
此外元件端點也可以通過調試器來查看。 - 繪制一般比較簡單不指定連接的端點則采用上一次繪制的終點繪制:
一般通過e.LINE,e.DOT繪制線和點(d=’up’,l=d.unit*0.3 控制方向和長度,tox、toy控制到達某個水平/豎直位置) - 整體來說還比較簡單,需要主要整體思路是畫出單個元器件,然后使用線進行連接(之前本人繪制電位器時認為可以直接連接電位器的中間端到另一個端點,走了比較多的彎路)
最后附上繪制的一個簡單的電路圖,