"大眾創新 萬眾創業",學校對于創客教育日漸重視,熱情高漲,紛紛開始創客教育課程,有條件的打造學校創客實驗室,不吝斥資;但是也有很多學校囊中羞澀,巧婦難為無米之炊,不知何處下手.
誠然很多朋友說,現在硬件便宜了,買個山寨的不到20,自己diy10元,但是實際情況是硬件的申請是要報計劃的,流程冗長繁復,短則幾月,長則經年,等到設備下來,黃花菜都涼了,老師們并非沒有熱情自購,但是終究不是長久之計,實際上像淄博于方軍老師最開始就是自購硬件自己玩兒,帶幾個學生玩兒,然后從興趣小組發展到社團,從社團發展到興趣班到班級授課.突然想起還請支教的那幾個小朋友了,安裝軟件棒棒噠.
就我2012以及2013年在青島市黃島區海青鎮和菏澤曹縣支教的經歷以及不時回老家訪談的情況而言,當前很多學校辦公經費短缺,用于創客教育的資金甚少,難以開展活動.后來遇到了隨身科技的楊峰,我們兩個非常投緣,探討設計硬件開發課程,后來我選擇了一些一線教學中常用的硬件模塊并從淘寶購買了散件,自己配了大概30套Scratch隨身實驗包,Arduino芯片用的是國內的版本,中貝斯特,Arduino Uno兼容版價格是24元,Arduino Nano小板子的價格是19元,大大降低了成本.我當時只加入了紅綠藍各色LED燈,RGB全彩燈,蜂鳴器,光敏電阻以及杜邦線,連面包板都是用的4塊錢一個的小板子.但是配套課程遲遲未出,也是醉了,但是各學校可以采用這樣的思路開展自己教學.
當然如果DIY的話,一個Arduino的成本在10元左右
可是有些學校資金實在是極度短缺,怎么辦呢?突然記起2010年大四上學期我在東師的時候,學校聘請我們系的師兄師大附中的尚航師兄給我們講解機器人,當時用過VJC的機器人仿真環境,豁然開朗,現在用VMware,VirtualBox以及Qemu等模擬操作系統,用VJC模擬機器人,模擬Arduino電路板自然不在話下.于是開始留意電路仿真軟件.
之前也有接觸過機器人仿真軟件Microsoft Robotics Studio,大概嘗試了下,是一款相當棒的軟件,在資金不足的情況下,可以讓學生通過這個軟件了解機器人,進行一些編程活動.
Microsoft Robotics Studio是為科研工作者、機器人業余愛好者和商業開發者提供的一個基于Windows平臺的環境,它可以與諸多各類的硬件一起簡單的實現機器人應用。 Microsoft Robotics Studio開發環境的特點和益處包括:結合緊密的機器人開發平臺, 輕量級實時定向服務, 可擴展性的平臺。
來源:Microsoft Robotics Studio入門系列
Microsoft Robotics Studio面向廣泛的人群,加速機器人的開發與普及。實時仿真器是提出的一個重要的部分。它是可以立即從電腦和游戲控制臺顯現,??,當它可以支付得 起、廣泛的應用、機器人仿真技術。游戲依賴于使用帶有實時系統規定參數的物理仿真器所制做出的照片級真實渲染效果。這對我們的努力是一個極好的起點。
昨日在圖書館無事亂翻書,看到一本書<Arduino軟硬件協同設計實戰指南>,里面介紹了
電子設計自動EDA(electronic design automation),從計算機輔助設計CAD,計算機輔助制造CAM,計算機輔助測試CAT和計算機輔助工程CAE的基礎上發展來的.
Arduino軟硬件協同設計實戰指南
介紹了Fritzing, Virtual BreadBoard, Proteus, EAGLE四款軟件.豁然開朗
本來打算到京東購買此書,價格是50.2,發現京東閱讀APP上也有此書,然后發現京東暢讀一年的價格是98,遂購買京東暢讀,免費閱讀此書.
通過利用上述四款軟件,可以對電路進行模仿,從而實現不投入資金的情況下學習Arduino硬件編程.
軟件介紹
Fritzing
Fritzing是個電子設計自動化軟件。它支持設計師,藝術家,研究人員和愛好者參加從物理原型到進一步實際的產品。還支持用戶記錄其Arduino和其他電子為基礎的原型,與他人分享,在教室里教電子,并建立一家生產印刷電路板的布局。
Fritzing是一款支持多國語言的電路設計軟件,可以同時提供面包板/原理圖/PCB圖三種視圖設計,不管設計者在三種視圖中的任意一種進行電路設計,軟件都會自動化同步其他兩種試圖.還可以生成制版廠生產所需要的greber文件,PDF圖片和CAD格式文件,極大的推廣和普及了Fritzing的使用.
——引自:《Arduino軟硬件協同設計實戰指南》
個人覺得使用Fritzing的好處之一是,學生在實際動手設計電路的時候先用軟件模擬,謀定后動,避免燒壞電子元器件或者無謂摸索浪費時間.
Arduino樣例支持與編程
Fritzing中有所有的Arduino自帶實例的電路圖,便于學習,在實際教學中
Virtual BreadBoard(簡稱VBB)
Arduino仿真利器Virtual BreadBoard
這個軟件目前收費,但是大家肯定有不花錢的辦法對吧.
Proteus電路仿真軟件
解決方案
在《Arduino軟硬件協同設計實戰》(這本書應該給我廣告費)里給出了詳細的通過電路仿真軟件模擬仿真Arduino硬件及各種硬件并且寫入程序的方法,大家可以參閱.(好吧我承認我懶啊,懶得寫辣么多)
以上仿真軟件可以跟Arduino軟件協同使用,仿真軟件會自動加載Arduino軟件生成的hex文件,執行程序并仿真.
教師可以在機房配置好環境,通過網絡同傳給學生機,這樣學生機就可以在電腦上進行模擬仿真了,同時最好教師自己有一套實際的硬件,畢竟模擬的不如實際的硬件動手來的直觀.
再有就是突然想到類似于3dmax等三維建模軟件不知道是否有類似于電路仿真的插件,如果有的話直接就可以把模型設計和電路設計結合在一起了.當然工業街應該有這樣的軟件,可惜沒有簡單易用的
仿真不是目的,只是手段,教學生自己動手軟硬結合比啥都重要有意義有興趣.只是在資金不足的時候,讓所有學生有接觸軟硬件的機會.
——南京藥科大學周玉林
突然有個疑問,現在提到開源硬件,必然是Arduino,Arduino當然簡單易學,資料眾多,便于推廣,但是stc等也不錯啊,只是未必軟適合義務教育階段學校罷了,不夠高中階段學習是沒有問題的,早在2013年的時候師大附中的金書輝老師就帶領學生玩兒單片機了,所以你看關鍵還是要有合適的引導,采用適合學生的方式來傳授知識.
又飄雪大神指點搜proteus和Arduino就能找到相關內容,感興趣的可以找一下.
整體來說,Proteus的Arduino仿真硬件部分是基于Proteus的原理圖,而程序驅動部分則是依賴于Arduino程序在Arduino IDE中編譯生成的Hex文件
Atmega328P就是Arduino UNO的芯片在這用來代替Arduino Uno
19號實際上就是Arduino13引腳,通過10k的電阻接地.
仿真結果
具體教程放兩篇文章:
基于Protues的Arduino學習筆記01-Arduino UNO實驗板設計
一下內容轉載自EEboard愛板網:http://www.eeboard.com/bbs/forum.php?mod=viewthread&tid=3429
二、Arduino單片機的Proteus仿真方法
Arduino單片機的Proteus仿真基本過程是:軟件在Arduino IDE編程軟件里編寫,硬件在Proteus ISIS軟件模塊里通過繪制電氣原理圖建立。程序編寫完后,選擇Arduino IDE編程界面菜單欄的Tools菜單項,再選擇Board→Arduino Duemilanove w/ATmega328,也可以選擇Board→Arduino Uno,然后點擊編譯按鈕,生成Hex文件(二進制機器碼文件)。有了Hex文件,接著轉到Proteus電氣原理圖,雙擊原理圖中的型號為ATMEGA328P 單片機芯片,出現對話框,通過文件目錄瀏覽的方法確定Hex文件存儲位置,并進行一些單片機芯片工作狀態參數的設置,最后點擊Proteus ISIS軟件界面左下方的播放按鈕,就可以看到Arduino單片機在Proteus仿真環境中的運行效果了。
圖4 Arduino程序的編譯
圖4中顯示的程序是一個最簡單的Arduino單片機項目實例,任務是:連在Arduino單片機數字端口13上的LED發光二級管,讓它不斷閃爍。要想成功仿真這個項目,有兩點要特別注意,一是Arduino程序的Hex文件生成和位置確定,二是Proteus原理圖中的Atmel328P芯片中Hex文件加載和工作參數設置。
圖5 Arduino項目實例LED閃爍的硬件原理圖
Arduino編譯之后,Hex文件會自動刪除,而在Proteus仿真的Arduino單片機中,需要使用Arduino軟件產生的Hex文件,可是,Arduino 1.0默認使用完Hex文件會自動刪除的,所以取不到hex文件,為了取出hex文件,加載到Porteus中的單片機ATMEGA328P,需要修改如下:
首先要在D盤建立一個文件夾,用來專門放置Hex文件,文件名可以隨便取名,我命名為Arduino_Hex,然后點擊Arduino軟件界面菜單欄的File->preferences,打開對話框,如圖6,把Show verbose output during的兩個參數項打勾,雙擊preferences.txt文件,找到文件所在位置,再雙擊,用記事本打開文件。這時要點擊Arduino界面preferences對話框下方的OK按鈕,接著關掉Arduino IDE編程界面。最后,在剛才打開的preferences文檔的最后一行編輯加入build.path=d:\Arduino_Hex,保存文檔。這樣以后您再編譯Arduino程序,就可以在d:\Arduino_Hex中,看到編譯的Hex目標文件了。(所有圖片雙擊,都可以放大!)
圖6 Arduino的Preference參數設置
談完了Arduino程序的Hex文件生成和位置確定,再談談另一個值得注意的問題,Proteus原理圖中Atmel328P芯片的Hex文件加載和工作參數設置。
雙擊圖5中的Proteus ISIS電氣原理圖中ATMEGA328P單片機,出現編輯對話框,點擊“Program File”參數項的“文件夾”按鈕,來確定Hex文件的位置,到d:\Arduino_Hex文件夾中可以找到當前程序的Hex文件。上個程序的Hex文件會被新編譯的Hex文件“沖掉”,所以您每次仿真項目時,都要編譯一次Arduino程序。
圖7 Proteus中的ATMEGA328P單片機的Hex文件加載和參數設置
確定了Hex文件,還有三個參數項要修訂,一是“CLKDIV8(Divide clock by 8)”參數項修改為“Unprogrammed”;二是“CKSEL Fuses”參數項修改為“(1111)Ext. Crystal 8.0-MHz”;三是Advanced Properties的Clock Frequency參數項設為16Mhz。最后點擊編輯對話框的“確定”按鈕,然后就可以仿真了。
網絡上有一個Arduino單片機的Proteus仿真視頻,講解的就是圖5所示LED燈閃爍的項目,可以看看Proteus電氣原理圖是如何建立,Arduino程序是如何編寫,以及程序編譯后是如何仿真的過程。只不過這個視頻中,Arduino程序編譯后的Hex文件,并沒有在自己指定的文件目錄里找到,而是還是用老辦法在默認目錄里找到。
三、Arduino單片機的Proteus仿真項目實例
這個仿真項目實例的任務是:分別按下K1(正轉)按鈕、K2(反轉)按鈕和K3(停止)按鈕,直流電機會分別產生相應的動作,而且當調節電位計時,電機的轉速也隨之發生變化。(所有圖片雙擊,都可以放大!)
圖8 直流電機正反轉、啟停和調速仿真圖
圖8中的電氣符號用到了芯片元件、電源終端、虛擬儀器和連線標號,它們分別從各自的模式庫中提取出來。
圖9 仿真圖中的電氣符號的提取
仿真圖中,電源終端用到了VCC電源與接地符號,虛擬儀器用到了四通道示波器和直流電壓表,連線標號的作用是相同連線標號的兩根線在電氣意義上是相連的,如圖8中的標號A、B和PWM。至于芯片元件,仿真圖里用到了電阻、電容、CPU、晶振、直流電機、穩壓管、L298N驅動等等,芯片元件的提取通常有兩種方法,父、子類別檢索方法和關鍵字查詢法。
父、子類別檢索方法是:先選擇元件模式庫,再點擊“P”按鈕,打開元件查詢提取對話框,如圖10所示,例如提取的元件是單片機芯片ATMEGA328P,先在類別里找到Microprocessor ICs,在子類別里找到AVR Family,再在制造商里找到Atmel,然后在縮小了尋找范圍的結果中找到這個單片機芯片ATMEGA328P,找到后雙擊芯片,就可以把芯片提取到ISIS界面左側的DEVICES欄中,供原理圖繪制時隨時選用,如圖11所示。
圖10 芯片元件的父、子類別檢索法
關鍵字查詢法是:如果事先知道要提取的元件名稱,可以在元件查詢提取對話框左上方的關鍵字輸入欄里輸入元件名稱,如搜尋motor元件,直接輸入motor,回車后,在結果中可以很容易地找到所需元件。
圖11 芯片元件的關鍵字查詢法
按照圖8所示的直流電機控制電氣原理圖,把硬件線路繪制完成,剩下的事就是編寫程序,編譯仿真了,我設計的這個仿真項目正好把數字量和模擬量輸入輸出都涉及到了,按鈕輸入和驅動芯片L298N的電機轉向控制端A、B是數字量輸入輸出,電位計輸入和L298N的轉速調節控制端PWM是模擬量輸入輸出。
數字量輸入輸出的Arduino命令分別是digitalRead(數字端口號)和digitalWrite(數字端口號,LOW或HIGH);模擬量輸入輸出的Arduino命令是analogRead(模擬端口號)和analogWrite(數字端口號, 0~255)。模擬端口只有輸入模式,沒有輸出模式,Arduino模擬量輸出是以PWM信號形式從具有PWM輸出功能的數字端口輸出的。Arduino微控制器的數字端口和模擬端口與ATMEGA 328芯片引腳的對應關系圖如下。標有013標號的引腳對應的是數字端口,在013前面有符號“”的引腳對應的端口具有PWM輸出功能。標有A0A5標號的是模擬端口。
圖12 Arduino UNO端口與Atmega328P引腳對應圖
有了Arduino UNO端口與Atmega328P引腳對應圖,就可以方便地利用Proteus硬件仿真圖,有針對性地編寫Arduino程序了。由于以下程序中有詳細的注釋,所以對每行Arduino程序的作用就不再累述了。
Arduino程序:
//任務:通過按鈕控制電機啟停和正反轉,通過電位計調節電機轉速。
int K1=5; //把K1(正轉)按鈕連在數字端口5
int K2=6; //把K2(反轉)按鈕連在數字端口6
int K3=7; //把K3(停止)按鈕連在數字端口7
int potpin = 3; // 把電位計連在模擬端口3
int A=2; //數字端口2、3控制電機啟停和轉向
int B=3;
int PWMpin = 9; // 數字端口9輸出PWM信號,控制電機轉速
//初始化
void setup()
{
pinMode(K1,INPUT);//把數字端口5、6、7設置輸入模式
pinMode(K2,INPUT);
pinMode(K2,INPUT);
pinMode(A,OUTPUT);//把數字端口2、3設置輸入模式
pinMode(B,OUTPUT);
}
//主程序
void loop()
{
//如果按下K1(正轉)按鈕
if(digitalRead(K1)==LOW)
{
//電機正轉
digitalWrite(A,HIGH);
digitalWrite(B,LOW);
}
//如果按下K2(反轉)按鈕
if(digitalRead(K2)==LOW)
{
//電機反轉
digitalWrite(A,LOW);
digitalWrite(B,HIGH);
}
//如果按下K3(停止)按鈕
if(digitalRead(K3)==LOW)
{
//電機停止
digitalWrite(A,LOW);
digitalWrite(B,LOW);
}
int sensorValue = analogRead(potpin); //讀取電位計采樣值
sensorValue = sensorValue/4; // 采樣值 0-1024 轉換為 0-255
analogWrite(PWMpin, sensorValue);//把處理后的轉換值以PWM信號形式輸出
delay(20);//延時
}
把程序編寫完,編譯Hex文件,再把Hex文件加載到Proteus仿真圖中Arduino單片機芯片中,最后點擊仿真圖左下方的播放按鈕,就可以看到基于Arduino直流電機控制項目的運行效果了。
四、結束語
經常有對創客文化感興趣的網友,詢問這樣的問題,是否可以少投入些硬件成本,而又能用Arduino單片機多多做些趣味電子項目。所以這篇文章就是談在資金不足的情況下,如何通過仿真的方法來實現我們創意實踐。
為啥有必要學習Arduino呢?其實許多學習者曾經為了追趕電子科技的進步,也花了大量的精力去一個個地學習那些微控制器和智能邏輯部件,如51、ARM,DSP和FPGA,當初僅僅是為做一些應用,沒想會消耗那么多的時間和金錢,“陷在”了冷酷的程序和無止盡的硬件原理中,最后也只是做了些走馬燈和數碼管秒表實驗,就草草結束,而又去追新了。這樣追逐哪有什么利用微控制器做應用的樂趣可談。好在目前秉承開放式學習架構的Arduino系統越來越流行,它可以讓所有樂于創作的人在短時間之內就可以完成一個作品,并且可以透過網絡,獲得大量共享資訊的支援。您會發現,有了Arduino,微控制器的世界不再那么的陌生和令人敬畏,微控制器就是一個易用的工具,讓我們能夠騰出精力全力投向作品中最能體現個人創新精神的部分。