Arduino From Zero To Hero PDF
Arduino From Zero To Hero PDF
ﺟدول اﻟﻣﺣﺗوﯾﺎت
اﻻﺟﻬزة واﻻدوات اﻻﻟﻛﺗروﻧﯾﺔ اﻟﺗﻰ ﺳﯾﺗم اﺳﺗﺧداﻣﻬﺎ ﺧﻼل اﻟﻛﺗﺎب ﻫﻰ ﻛﺎﻻﺗﻰ 12 ............................................
2
ARDUINO FROM ZERO TO HERO
3
ARDUINO FROM ZERO TO HERO
4
ARDUINO FROM ZERO TO HERO
اﻟﻣﺷروع :10 #ﻗراءة درﺟﺔ اﻟﺣ اررة ﻹﺿﺎءة اﻟﻠﯾد 69 ............................................................................
اﻟﻣﺷروع :11 #إظﻬﺎر درﺟﺔ اﻟﺣ اررة ﻣن ﺧﻼل اﻟﺷﺎﺷﺔ اﻟﺗﺳﻠﺳﻠﯾﺔ 72 .......................................................
5
ARDUINO FROM ZERO TO HERO
اﻟﻣﺷروع :14 #ﺗوﻟﯾد ارﻗﺎم ﻋﺷواﺋﯾﺔ ﺧﻼل ﻣﺻدران ﻣﺧﺗﻠﻔﺎن 79 ............................................................
6
ARDUINO FROM ZERO TO HERO
7
ARDUINO FROM ZERO TO HERO
ﻋﻧدﻣﺎ ﺗﻧظر ﺣوﻟك ﺗﺟد اﺟﻬ زة واﻻت ﻛﺛﯾرة ﺗﻌﻣل ذاﺗﯾﺎ ﺑدون ﺗدﺧل اﻻﻧﺳﺎن ،واﺧرى ﯾﺗم اﻟﺗﺣﻛم ﻓﯾﻬﺎ ﻋن ﺑﻌد ﺑواﺳطﺔ
اﻻﻧﺳﺎن ،وﺑﺎﻟﺗﺄﻛﯾد ﺳﺄﻟت ﻧﻔﺳك ﻛﯾف ﺗم ﻫذا؟ وﻫل ﯾﻣﻛﻧك ان ﺗﺻﻧﻊ أﺟﻬ زة ﺗﻌﻣل ذاﺗﯾﺎ او اﻧك ﺗﺗﺣﻛم ﻓﯾﻬﺎ ﻋن ﺑﻌد؟،
واﺻﺑﺣت ﺷﻐوف ﺑﻣﻌرﻓﺔ اﻟطرﯾق اﻟﻰ ﻫذا اﻟﻌﻠم اﻟﻣﺷوق وﻣن اﯾن ﺗﺑدأ وﻛﯾف ﺗﺑدأ؟ واﻟﺳؤال اﻻﻫم ﻫل ﺗﺳﺗطﯾﻊ اﻧت ان
ﺗﻔﻌل ﻫذا ﯾوﻣﺎ ﻣﺎ؟
ﻫذﻩ اﻻﺳﺋﻠﺔ اﻟﺗﻰ ﺗدور ﻓﻰ ذﻫﻧك ﺗﺑدو ﻣﻧطﻘﯾﺔ ﺟدا وﻛﻠﻧﺎ ﻣﻧذ اﻟﺻﻐر ﺣﺎوﻟﻧﺎ ان ﻧﺟد ﻟﻬﺎ اﺟﺎﺑﺎت ﻣﺑﺎﺷرة وﻋﻣﻠﯾﺔ وﻟﯾﺳت
إﺟﺎﺑﺎت ﻧظرﯾﺔ ﻓﻘط ،اردﻧﺎ إﺟﺎﺑﺎت ﺗﺳﺗطﯾﻊ ان ﺗﺣول اﻻﻓﻛﺎر اﻟﺗﻰ ﺑداﺧﻠﻧﺎ اﻟﻰ واﻗﻊ ﻋﻣﻠﻰ ﯾﻣﻛﻧﻧﺎ ﺻﻧﺎﻋﺗﻪ ﺑﺎﻧﻔﺳﻧﺎ ،ﻓﻰ
ﻫذا اﻟﻛﺗﺎب ﺳوف ﺗﺟد اﺟﺎﺑﺎت ﻋﻣﻠﯾﺔ )ﻣﺷروﻋﺎت( ﻟﻛل اﻻﺳﺋﻠﺔ اﻟﺗﻰ ﺗدور ﻓﻰ ذﻫﻧك ،ﻣﻊ اﻟﺗطﺑﯾق ﺑﺄﻣﺛﻠﺔ ﺣﻘﯾﻘﯾﺔ ﻣن
اﻟﺣﯾﺎة اﻟﻌﻣﻠﯾﺔ.
8
ARDUINO FROM ZERO TO HERO
ﻣﻮﺿﻮﻋﺎت اﻟﻜﺘﺎب
اﻟﻛﺗﺎب ﯾﺷرح ﻋدة ﻣوﺿوﻋﺎت ﻣﺧﺗﻠﻔﺔ ﺗﻬدف ﺟﻣﯾﻌﻬﺎ اﻟﻰ ﺻﻧﺎﻋﺔ اﺟﻬزة اﻟﯾﺔ واﺧرى ﯾﺗم اﻟﺗﺣﻛم ﻓﯾﻬﺎ ﻋن ﺑﻌد ،ﻫذﻩ
اﻟﻣوﺿوﻋﺎت ﻫﻰ اﻻﻟﻛﺗروﻧﯾﺎت واﻟﻣﯾﻛروﻛﻧﺗروﻟر وﻧظم اﻟﻣﻌﻠوﻣﺎت وﻟﻐﺔ اﻟﺳﻰ.
ﻧﺒﺬة ﻋﻦ اﻟﻤﺆﻟﻒ
ﺗدرج ﻓﻰ ﻣﺟﺎل ITﻣن ﻣﻬﻧدس ﺷﺑﻛﺎت ﻋﺎم ٢٠٠٠ﺣﺗﻰ اﺻﺑﺢ ﻣدﯾر ﻗﺳم ITﻣﻧذ ﺳﻧﺔ ،٢٠٠٨ﻋﻣل ﻟدى ﺷرﻛﺎت
ﻣﺻرﯾﺔ واﺧرى اﺟﻧﺑﯾﺔ ﺧﺎرج ﻣﺻر ،ﺑدأ ﻓﻰ ﻣﺟﺎل اﻟروﺑوت واﻟﻣﯾﻛﺎﺗروﻧﯾﻛس ﻣﻧذ ﻋﺎم ،٢٠٠٧ﻟﻪ اﺑﺣﺎث ﻓﻰ ﻣﺟﺎل
ﺗوظﯾف ITﻟﺗﺣﺳﯾن اداء ﺷﺑﻛﺎت اﻻﺗﺻﺎل ﻋﺑر ﺷﺑﻛﺎت اﻟﻧﻘل واﻟﻣواﺻﻼت ،وﻛﯾﻔﯾﺔ اﻟﺣد ﻣن اﻟﺣوادث ﻋﻠﻰ اﻟطرﯾق
اﻟﺳرﯾﻌﺔ.
ﺗﺧرج ﻣن ﻛﻠﯾﺔ اﻟﻬﻧدﺳﺔ ﺟﺎﻣﻌﺔ ﻋﯾن ﺷﻣس ﺳﻧﺔ ،٢٠٠٠ﺣﺻل ﻋﻠﻰ اﻟﻣﺎﺟﺳﺗﯾر ﻣن ﺟﺎﻣﻌﺔ ﻟﯾﻔرﺑول ﺑﺈﻧﺟﻠﺗ ار ،٢٠٠٩
ﺣﺻل ﻋﻠﻰ اﻟدﻛﺗوراﻩ ﻣن ﺟﺎﻣﻌﺔ UTMﺑﻣﺎﻟﯾزﯾﺎ .٢٠١٦
9
ARDUINO FROM ZERO TO HERO
1
ﻣﻘﺪﻣﺔ ﻋﺎﻣﺔ
ﻣﺟﺎل اﻟروﺑوت واﻟﺗﺣﻛم ﻛﺎن ﯾﺣﺗﺎج اﻟﻰ ﺧﻠﻔﯾﺔ ﻋﻠﻣﯾﺔ وﻋﻣﻠﯾﺔ ﻛﺑﯾرة ﻣن ﻗﺑل ،وﻟﻬذا ﻛﺎن ﻫذا اﻟﻣﺟﺎل ﻣﻘﺗﺻر ﻓﻘط ﻋﻠﻰ
ﻓﺋﺔ ﻗﻠﯾﻠﺔ ﻣن اﻟﻣﻬﻧدﺳﯾن ذو اﻟﺧﻠﻔﯾﺔ اﻻﻟﻛﺗروﻧﯾﺔ واﻟﻛﻬرﺑﺎﺋﯾﺔ واﻟﻬﻧدﺳﯾﺔ اﻟﺿﺧﻣﺔ ﻣﻣﺎ ﺟﻌل ﻫذا اﻟﻣﺟﺎل ﺻﻌب ﻋﻠﻰ ﻛﺛﯾر
ﻣن اﻟﻬواﻩ واﻟﺷﻐوﻓﯾن ﺑﻣﺟﺎل اﻟروﺑوت ،ﻓﻛﺎﻧت اﻻﺟﻬزة اﻻﻟﻛﺗروﻧﯾﺔ ﺣﻛر ﻟدى اﻟﺷرﻛﺎت اﻟﻌﺎﻟﻣﯾﺔ اﻟﺿﺧﻣﺔ ﻓﻘط ﻣﺛل
ﺳوﻧﻰ وﺗوﺷﯾﺑﺎ وﺑﺎﻧﺎﺳوﻧﯾك وﻏﯾرﻫﺎ ،وﻣﻊ اﻟﺗطور اﻟﺳرﯾﻊ ﺟدا ﻓﻰ ﺻﻧﺎﻋﺔ اﺟﻬزة اﻟﻛﻣﺑﯾوﺗر واﻟﺑراﻣﺞ اﻟﺧﺎﺻﺔ ﺑﻬﺎ ﺑﺣﯾث
ﺗﻛون اﻗل ﺣﺟﻣﺎ واﻗل اﺳﺗﺣدام ﻟﻠﻛﻬ رﺑﺎء ﻟﻛﻰ ﺗﻌﻣل ﻣن ﺧﻼل ﺑطﺎرﯾﺔ ﻓﻘط دون اﻟﺣﺎﺟﺔ اﻟﻰ اﻟﺟﻠوس ﺑﺟوار ﻣﺻدر
ﺗﯾﺎر ﻛﻬرﺑﻰ ﻣﺑﺎﺷر ،ظﻬر ﻧوع ﻣﺻﻐر ﺟدا ﻣن اﻟﻛﻣﺑﯾوﺗر ﻓﻰ ﺣﺟم اﻟﻌﻣﻠﺔ اﻟﻣﻌدﻧﯾﺔ ﯾﻣﻛﻧﻪ اﻟﻌﻣل ﻣن ﺧﻼل اﻟﺑطﺎرﯾﺔ
ﻟﻔﺗرات طوﯾﻠﺔ ،واﯾﺿﺎ ﺗم ﺗطوﯾر ﺑراﻣﺞ وﻟﻐﺎت ﺑرﻣﺟﺔ ﯾﻣﻛﻧﻬﺎ اﻟﺗﻌﺎﻣل ﻣﻊ ﻫذا اﻟﻛﻣﺑﯾوﺗر اﻟﺻﻐﯾر)ﺳوف ﻧطﻠق ﻋﻠﯾﻪ اﺳم
اﻟﻣﺗﺣﻛم اﻟدﻗﯾق ،(Microcontrollerﻫذا اﻟﺗطور ﺟﻌل ﺑﻌض اﻟﻣﻬﻧدﺳﯾن ﻓﻰ اﯾطﺎﻟﯾﺎ اﻟﻰ اﻟﺗﻔﻛﯾر ﻓﻰ اﻻﺳﺗﻔﺎدة ﻣن
اﻟﺗطور اﻟﻬﺎﺋل ﻓﻰ ﺻﻧﺎﻋﺔ اﻟﻛﻣﺑﯾوﺗر اﻟدﻗﯾق واﻟﺑراﻣﺞ اﻟﺧﺎﺻﺔ ﺑﻪ واﻻﺳﺗﻔﺎدة ﻣﻧﻬﺎ ﻓﻰ ﻣﺟﺎل اﻻﻟﻛﺗروﻧﯾﺎت ﺑﺣﯾث ﯾﺗم
اﻻﺳﺗﻐﻧﺎء ﻋن ادوات ﻣﯾﻛﺎﻧﯾﻛﯾﺔ واﺟﻬزة اﻟﻛﺗروﻧﯾﺔ ﻣﺧﺗﻠﻔﺔ واﺳﺗﺧدام اﻟﻛﻣﺑﯾوﺗر اﻟدﻗﯾق ﺑدﯾل ﻋﻧﻬﺎ ﻣﻊ اﻟﺣﺻول ﻋﻠﻰ
ﻧﺗﺎﺋﺞ اﻓﺿل وﺑﺟودة اﻋﻠﻰ ﻓﻰ زﻣن اﻗل ،ﻣﻣﺎ ﯾﻔﺗﺢ اﻟﻣﺟﺎل اﻟﻰ ﻛﺛﯾر ﻣن اﻟﻣﻬﺗﻣﯾن واﻟﻬواﻩ ﺑﻣﺟﺎل اﻟرﺑوت ﻟﻠﺑدء ﻓو ار
ﻟﻠدﺧول اﻟﻰ ﻫذا اﻟﻣﺟﺎل وﺗﻧﻔﯾذ ﻣﺎ ﯾدور ﺑداﺧﻠﻬم ﻣن اﻓﻛﺎر ،ﻓﻘﺎم اﺛﻧﺎن ﻣن اﻟﻣﻬﻧدﺳﯾن اﻻﯾطﺎﻟﯾﯾن ) Massimo Banzi
(and David Cuartiellesﻋﺎم ٢٠٠٥اﻟﻰ ﺗطوﯾر ﻟوﺣﺔ اﻟﻛﺗروﻧﯾﺔ ﺗﺿم اﻟﻛﻣﺑﯾوﺗر اﻟدﻗﯾق وﺑﻌض اﻟﻣﻛوﻧﺎت
اﻻﻟﻛﺗروﻧﯾﺔ اﻻﺧرى اﻟﺗﻰ ﺗﺳﺎﻋد ﻓﻰ ﺻﻧﺎﻋﺔ اﻟروﺑوت ﺑﺷﻛل ﺳﻬل ﻟﻛل اﻟﻣﻬﺗﻣﯾن ﺑﻣﺟﺎل اﻟروﺑوت ،ﻫذﻩ اﻟﻠوﺣﺔ ﺗﺳﻣﻰ
ﻟوﺣﺔ اﻻردوﯾﻧو .Arduino board
10
ARDUINO FROM ZERO TO HERO
ﻫﻧﺎك اﻟﻌدﯾد ﻣن اﻟﻣﺗﺣﻛﻣﺎت اﻟدﻗﯾﻘﺔ اﻻﺧرى ذات اﻟﻛﻔﺎءة اﻻﻋﻠﻰ ﻟﻛن ﺗﺣﺗﺎج اﻟﻰ ﺑﻌض اﻟﺧﺑ رة ،ﻟﻬذا ﺳﯾﺗم اﺳﺗﺧدام
ﻟوﺣﺔ اﻻردوﯾﻧو ﻓﻰ اﻟﺗﺟﺎرب اﻟﺧﺎﺻﺔ ﺑﻬذا اﻟﻛﺗﺎب اﻟﻰ ان ﺗﻛﺗﺳب اﻟﺧﺑرة اﻟﻣطﻠوﺑﺔ وﻣن ﺛم ﺗﺻﺑﺢ ﻣؤﻫل ﻟﻠﺗﻌﺎﻣل ﻣﻊ
اﻟﻣﺗﺣﻛﻣﺎت اﻻﻛﺛر ﻛﻔﺎءة ﻻﺣﻘﺎ ﻣن ﺧﻼل اﻟﻛﺗب اﻻﺧرى ﻣن ﺳﻠﺳﺔ اﺻﻧﻊ ﺑﻧﻔﺳك د.م /ﻣﺣﻣد ﺳﻠﯾم.
ﺗﺗﻣﯾز اﻻردوﯾﻧو )اﺧﺗﺻﺎراً ﻟﻠوﺣﺔ اﻻردوﯾﻧو( ﺑرﺧص اﻟﺛﻣن واﻟﺷﻬرة اﻟﻌﺎﻟﻣﯾﺔ ﺣﯾث ﺗوﺟد ﻣﻧﺗدﯾﺎت وﻣواﻗﻊ ﻋدﯾدة ﻋﻠﻰ
اﻻﻧﺗرﻧت ﺧﺎﺻﺔ ﺑﺗطوﯾر اﻻردوﯾﻧو وﺗﻘدﯾم اﻟدﻋم اﻟﻔﻧﻰ ﻟﻛل ﻣﺳﺗﺧدﻣﻰ اﻻردوﯾﻧو ﻣﺟﺎﻧﺎ ،وﻻﯾﺗوﻗف اﻻﺑداع ﻓﻰ اﺳﺗﺧدام
اﻻردوﯾﻧو ﻣن ﻗﺑل ﻛل اﻟﻣﺳﺗﺧدﻣﯾن ﺣﯾث ﯾﻣﻛﻧك اﻟﺑدء ﺑﻣﺷروﻋﺎت ﺑﺳﯾطﺔ ﺟدا ﻣﺛل إﺿﺎءة ﻟﻣﺑﺔ ﻟﻔﺗرة ﻣﺣددة اﻟﻰ
ﻣﺷروﻋﺎت ﻣﻌﻘدة ﻣﺛل اﻻﺗﺻﺎل ﺑﺷﺑﻛﺔ اﻟﻣﺣﻣول ﺑﺎﻟﺻوت واﻟرﺳﺎﺋل ﻣن ﺧﻼل اﻻردوﯾﻧو وﻏﯾرﻫﺎ ﻣن اﻟﻣﺷروﻋﺎت
اﻟﻣﻣﯾزة.
ﯾوﺟد اﻟﻌدﯾد ﻣن اﻻﻓﻛﺎر واﻟﻣﺷروﻋﺎت اﻟﺗﻰ ﺗم ﺗﻧﻔﯾذﻫﺎ ﺑﺎﻻردوﯾﻧو واﻟﺗﻰ ﺳوف ﯾﺗم ﺷرح اﻟﻌدﯾد ﻣﻧﻬﺎ ﻓﻰ ﻫذا اﻟﻛﺗﺎب
ﺣﯾث ان ﻛل ﻓﺻل ﯾﺷرح اﻛﺛر ﻣن ﻣﺷروع ﯾﺣﺗوى ﻋﻠﻰ ﻣﻌﻠوﻣﺎت ﺟدﯾدة ﺑﺣﯾث ﯾﺗم اﻟﺗطﺑﯾق اﻟﻌﻣﻠﻰ ﻟﻬذﻩ اﻟﻣﻌﻠوﻣﺎت
ﻟﯾﺗم إﺳﺗﯾﻌﺎﺑﻬﺎ ﺑﺷﻛل ﻋﻣﻠﻰ واﻟﺗﻰ ﺳوف ﯾﺗم اﺳﺗﺧداﻣﻬﺎ اﯾﺿﺎ ﻓﻰ اﻟﻔﺻول اﻟﺗﺎﻟﯾﺔ ﺑﺷﻛل ﻣﺧﺗﻠف ،وﺑﻬذا ﯾﺣﺗوى اﻟﻛﺗﺎب
ﻋﻠﻰ ﻣﺷروﻋﺎت ﺗﺗﺿﻣن ﻣﻌﻠوﻣﺎت ﻣﺗﺳﻠﺳﻠﺔ ﺗﺻل ﺑﺎﻟﻘﺎرئ اﻟﻰ إﺗﻘﺎن اﻟﺗﻌﺎﻣل ﻣﻊ اﻟروﺑوت ﻣن ﺧﻼل اﻻردوﯾﻧو وﺗﻌطﯾﻪ
ﺧﻠﻔﯾﺔ ﻗوﯾﺔ ﯾﻣﻛﻧﻪ ﻣن ﺧﻼﻟﻬﺎ اﻻﻧطﻼق ﺑﻘوة ﻓﻰ ﻣﺟﺎل اﻟروﺑوت وﺗﻧﻔﯾذ اﻟﻣﺷروﻋﺎت واﻻﻓﻛﺎر اﻟﺗﻰ طﺎﻟﻣﺎ ﺣﻠم ﺑﻬﺎ ﯾوﻣﺎ
ﻣﺎ.
11
ARDUINO FROM ZERO TO HERO
اﻟﺒﺮاﻣﺞ اﻟﻤﻄﻠﻮﺑﺔ
ﺟﻬﺎز ﻛﻣﺑﯾوﺗر ﯾﺳﺗﺧدم ﻟﻌﻣل اﻟﻣﺣﺎﻛﺎة ﻟﻠﺗﺟﺎرب ﻗﺑل ﺗﻧﻔﯾذﻫﺎ ،واﯾﺿﺎ ﻟﻧﻘل اﻟﺑرﻧﺎﻣﺞ اﻟﻣراد ﺗﻧﻔﯾذﻫﺎ اﻟﻰ اﻻردوﯾﻧو ﻣن
ﺧﻼل ﻛﺎﺑل .USBﯾﻣﻛﻧك اﺳﺗﺣدام اى ﻧظﺎم ﺗﺷﻐﯾل ﻣﺛل وﻧدوز او ﻣﺎك او ﻟﯾﻧﻛس ﺣﯾث ان ﺑراﻣﺞ اﻻردوﯾﻧو ﻣﺗواﻓﻘﺔ
ﻣﻊ ﻫذﻩ اﻻﻧظﻣﺔ اﻟﻣﺧﺗﻠﻔﺔ.
12
ARDUINO FROM ZERO TO HERO
13
ARDUINO FROM ZERO TO HERO
ب -ﺑﺎﻟزر اﻻﯾﻣن ﻟﻠﻣﺎوس اﺧﺗﺎر ﺗﺣدﯾث اﻟﺗﻌرﯾﻔﺎت وﺑﻌدﻫﺎ ﺣدد ﻣﻛﺎن ﺗﺛﺑﯾت ﺑرﻧﺎﻣﺞ اﻻردوﯾﻧو
ت -اﺧﺗﺎر ﻣواﻓق ﻟﯾﺗم اﺳﺗﻛﻣﺎل ﺗﻌرﯾﻔﺎت اﻻردوﯾﻧو وﯾﺻﺑﺢ ﺟﺎﻫز ﻟﻠﺑرﻣﺟﺔ
-٦ﺑﻌد اﻻﻧﺗﻬﺎء ﻣن ﺗﻌرﯾﻔﺎت اﻻردوﯾﻧو ﯾﺗم ﺗﺷﻐﯾل ﺑرﻧﺎﻣﺞ ﺑرﻣﺟﺔ اﻻردوﯾﻧو ،IDEﻣﻧﻪ ﯾﺗم ﺗﺣدﯾد اﻟﻣﺧرج
اﻟﻣوﺻل ﺑﻪ اﻻردوﯾﻧو ﻣن ﻫذا اﻟﻣﺳﺎر ، Tools Serial Portﯾﺗم ﻣﻌرﻓﺔ رﻗم اﻟﻣﺧرج ﻣن ﻣدﯾر اﻟﺑراﻣﺞ
ﺑﻠوﺣﺔ اﻟﺗﺣﻛم ﺑﺎﻟﺳطر اﻟﺧﺎص ﺑﺎﻻردوﯾﻧو.
-٧اﻟﺧطوة اﻻﺧﯾرة ﯾﺗم ﺗﺣدﯾد ﻧوع ﻟوﺣﺔ اﻻردوﯾﻧو اﻟﻣﺗﺻﻠﺔ ﺑﺎﻟﻛﻣﺑﯾوﺗر ﻣن ﺧﻼل ﻫذا اﻟﻣﺳﺎر
،Tools Board Arduino Unoﺣﯾث ﺳﺗﺟد اﻧواع ﻋدﯾدة ﻣن ﻟوﺣﺎت اﻻردوﯾﻧو واﻟﺗﻰ ﺳﯾﺗم ﻣﻌرﻓﺔ
ﺗﻔﺎﺻﯾل ﻛل ﻧوع ﻣﻧﻬﺎ ﻻﺣﻘﺎً ،ﻟوﺣﺔ اﻻردوﯾﻧو اﻟﻣﺳﺗﺧدﻣﺔ ﻓﻰ ﻫذا اﻟﻛﺗﺎب ﻫﻰ اردوﯾﻧو اوﻧو .Arduino Uno
ﻣﺎذا ﺑﻌﺪ
اﻧت اﻻن ﻋﻠﻰ اﻋﺗﺎب اﻟدﺧول اﻟﻰ ﻋﺎﻟم اﻟﺗﺷوﯾق واﻟﻣﺗﻌﺔ ﻋﺎﻟم اﻟروﺑوت ﺣﯾث ﺳﺗﺟد اﻣﺛﻠﺔ ﻋﻣﻠﯾﺔ ﻣﺷروﺣﺔ ﺑﺎﻟﺗﻔﺻﯾل
وﺑﺎﻟﺻور ﺳﺗﻘوم اﻧت ﻧﻔﺳك ﺑﺗﻧﻔﯾذﻫﺎ وﺳﺗﻧدﻫش ﺑﺎﻟﻧﺗﺎﺋﺞ اﻟﺗﻰ ﺗظﻬر ﺑﯾن ﯾدﯾك واﻟﺗﻰ ﻛﻧت ﺗﻌﺗﻘد ﻟﻔﺗرة طوﯾﻠﺔ اﻧﻬﺎ درب
ﻣن دروب اﻟﺧﯾﺎل .ﻫل اﻧت ﻣﺳﺗﻌد؟ ﻫﯾﺎ ﺑﻧﺎ!
14
ARDUINO FROM ZERO TO HERO
IDE
2
اﻟﺘﻌﺮف ﻋﻠﻰ ﻟﻮﺣﺔ اﻻردوﯾﻨﻮ وﺑﺮﻧﺎﻣﺞ
ﻓﻰ ﻫذا اﻟﻔﺻل ﺳﯾﺗم اﻟﺗﻌرف ﻋﻠﻰ ﺗﻔﺎﺻﯾل ﻟوﺣﺔ اﻻردوﯾﻧو ،واﯾﺿﺎ اﻟﺗﻌرف ﻋﻠﻰ اﻟﺑرﻧﺎﻣﺞ اﻟﺧﺎﺻﺔ ﺑﺑرﻣﺟﺔ اﻻردﯾﻧو
IDEﻋن ﻗرب وﻛﯾﻔﯾﺔ اﺳﺗﺧداﻣﻪ وﺗﻧﻔﯾذ اول ﺳﻛﯾﺗش ) Sketchاﺳم ﺑرﻧﺎﻣﺞ اﻻردوﯾﻧو اﻟﻣﻧﻔذ ﻣن ﺧﻼل (IDEواﻟﺗﺄﻛد ﻣن
ﺻﺣﺗﻪ.
ﻟﻮﺣﺔ اﻻردوﯾﻨﻮ
ﻟوﺣﺔ اﻻردوﯾﻧو ﻫﻰ ﻟوﺣﺔ اﻟﻛﺗروﻧﯾﺔ ﻟﻠﺗطﺑﯾﻘﺎت ﻣﻔﺗوﺣﺔ اﻟﻣﺻدر ،ﯾﻣﻛن اﻟﺗﻌﺎﻣل ﻣﻌﻬﺎ وﻣﻊ اﻟﺑراﻣﺞ اﻟﺧﺎﺻﺔ ﺑﻬﺎ ﺑﺳﻬوﻟﺔ
ﻣن ﻗﺑل اﻟﻣﺗﺧﺻﺻﯾن واﻟﻬواﻩ ﺑدون اﻟﺗﻘﯾد ﺑﺧﺑرة او وﺳن ﻣﻌﯾن ،ﻣﻣﺎ ﯾﺗﯾﺢ ﻟﻠﺟﻣﯾﻊ اﺳﺗﺧدﻣﻬﺎ ﻓﻰ ﺗطﺑﯾﻘﺎت اﻟروﺑوت.
ﯾﻣﻛن ان ﺗﻘول اﻧﻬﺎ ﻛﻣﺑﯾوﺗر دﻗﯾق ﯾﺗم ﺗوﺻﯾﻠﻪ ﺑﺎﺟﻬزة اﺧرى ﻟﺗﻧﻔﯾذ اﻟﻣﻬﺎم اﻟﺗﻰ ﺗطﻠﺑﻬﺎ ﻣﻧﻪ ،وﺗﺗﻣﯾز اﻻردوﯾﻧو اوﻧو
واﻟﺗﻰ ﺳﻧﺳﻧﺗﺧدﻣﻬﺎ ﺧﻼل ﻫذا اﻟﻛﺗﺎب ﺑﺻﻐر اﻟﺣﺟم ﺣﯾث اﻧﻬﺎ ﺻﻐﯾرة ﻣﻘﺎرﻧﺔ ﺑﻛف اﻟﯾد
15
ARDUINO FROM ZERO TO HERO
ﻫذﻩ اﻟﻠوﺣﺔ ﯾﻣﻛﻧﻬﺎ اﻟﺗﺣﻛم ﻓﻰ اى ﺟﻬﺎز اﺧر ﻣﺛل ﻟﻌب اﻻطﻔﺎل و اﻟﻐﺳﺎﻟﺔ اﻻﺗوﻣﺎﺗﯾك واﻟﺳﯾﺎرات واﻟطﺎﺋرات واﻻﻗﻣﺎر
اﻟﺻﻧﺎﻋﯾﺔ وﻏﯾرﻫﺎ ﻣن اﻻﺟﻬزة ﺣوﻟﻧﺎ وﺗﻧﻔﯾذ ﻣﺎ ﺗرﯾدﻩ ﻣﻧﻬﺎ ﺑدﻗﺔ ،وﻟزﯾﺎدة وظﺎﺋف اﻻردوﯾﻧو ﯾﻣﻛن ﺗوﺻﯾل اﺟﻬزة اﺧرى
ﺑﻬﺎ ﻣﺛل ﻣوﺗور وﻟوﺣﺔ ﻣﻔﺎﺗﯾﺢ وﺷﺎﺷﺔ ﻋرض وﻣﻔﺎﺗﯾﺢ ﺗﺣﻛم وﺣﺳﺎﺳﺎت ﻣﺧﺗﻠﻔﺔ وﻏﯾرﻫﺎ ﻣن اﻻﺟﻬزة اﻟﺗﻰ ﺳوف
ﻧﺳﺗﻌرﺿﻬﺎ ﻓﻰ اﻟﻔﺻول واﻻﻣﺛﻠﺔ اﻟﺗﺎﻟﯾﺔ ﻣن اﻟﻛﺗﺎب.
-٢اﻟﻛﻣﺑﯾوﺗر اﻟدﻗﯾق )ﻫﻧﺎ ﯾﺳﻣﻰ اﻟﻣﺗﺣﻛم اﻟدﻗﯾق ﻻﻧﻪ ﺳوف ﯾﺗﺣﻛم ﻓﻰ اﺟﻬزة اﺧرى ﻛﺎﻟﻐﺳﺎﻟﺔ واﻟﺳﯾﺎرة واﻟﻘﻣر
اﻟﺻﻧﺎﻋﻰ( Microcontrollerوﻫو ﻋﻘل اﻻردوﯾﻧو وﯾﺗم ﺑرﻣﺟﺗﻪ ﻣن ﺧﻼل ﺑرﻧﺎﻣﺞ IDEوﻣن ﺛم ﯾﻧﻔذ
اﻟﺗﻌﻠﯾﻣﺎت اﻟﻣﻛﺗوﺑﺔ ﻟﻪ وﯾﺗﻌﺎﻣل ﻣﻊ اﻻﺟﻬزة اﻟﻣﺗﺻﻠﺔ ﺑﺎﻻردوﯾﻧو ﻛﺎﻟﺷﺎﺷﺔ ﻻظﻬﺎر ﻣﻌﻠوﻣﺎت وﻟوﺣﺔ اﻟﻣﻔﺎﺗﯾﺢ
ﻻﺳﺗﻘﺑﺎل ﻣدﺧﻼت واﻟﻣواﺗﯾر ﻟﺗﺷﻐﯾﻠﻬﺎ واﻟﺗﺣﻛم ﻓﻰ ﺳرﻋﺗﻬﺎ واﺗﺟﺎﻩ دوراﻧﻬﺎ طﺑﻘﺎ ﻟﻣﺗطﻠﺑﺎت اﻟﻣﺷروع
16
ARDUINO FROM ZERO TO HERO
-٣اطراف اﻟﻣﺗﺣم اﻟدﻗﯾق )ارﺟل اﻟﻣﺗﺣﻛم( وﻫﻰ ﺗﺳﺗﺧدم ﻻرﺳﺎل اﺷﺎرات ﻛﻬرﺑﯾﺔ واﺳﺗﻘﺑﺎل اﺷﺎرات ﻛﻬرﺑﯾﺔ ﻣن
واﻟﻰ اﻻﺟﻬزة اﻟﻣﺗﺻﻠﺔ ﺑﺎﻻردوﯾﻧو ،وﻫﻰ ﻣﻘﺳﻣﺔ اﻟﻰ ﺻﻔوف طﺑﻘﺎ ﻟﻼﺳﺗﺧدام ،ﻣﻧﻬﺎ ﺻف اﺳﺗﻘﺑﺎل ٕواﺧراج
ﻣﺻدر اﻟﻛﻬرﺑﺎء ﻟﻠﺗﻐذﯾﺔ وﺑﻪ ﺳﺗﺔ ارﺟل وﯾﺳﻣﻰ ،Power pinsوﻫﻧﺎك ﺻف اﺧر ﻟﻠﺗﻌﺎﻣل ﻣﻊ دﺧل
ررة واﻟﺳرﻋﺔ واﻟﻛﺛﺎﻓﺔ واﻟوزن وﻏﯾرﻫﺎ وﻫﻰ ﺳﺗﺔ ارﺟل وﺗﺳﻣﻰ Analog
اﻻﺷﺎرات اﻻﻧﺎﻟوج ﻣﺛل ﺣﺳﺎس اﻟﺣ ا
pins
-٤اطراف اﺳﺗﻘﺑﺎل وارﺳﺎل اﺷﺎرات اﻟدﯾﺟﯾﺗﺎل واﻻﺷﺎرت ﻣﺗﻐﯾرة اﻟطول ،PWMﻣﺟﻣوع ﻫذﻩ اﻻرﺟل ﻫو ﺛﻼﺛﺔ
ﻋﺷرة رﺟل وﺗﺳﻣﻰ )~.Digital (PWM
-٤ﻟﻣﺑﺎت ﻧﻘل اﻻﺷﺎرة وﻫﻰ ﻟﻣﺑﺎت ﺻﻐﯾرة ﺟدا ﺗﺳﻣﻰ ﻟﯾد ) Light-Emiiting Diodes (LEDوﯾوﺟد ﺛﻼث ﻣﻧﻬﺎ
ﻋﻠﻰ ﻟوﺣﺔ اﻻردوﯾﻧو ،اﺛﻧﺎن ﻻظﻬﺎر ﻧﻘل اﻟﺑﯾﺎﻧﺎت ﺑﯾن اﻟﻛﻣﺑﯾوﺗر واﻻردوﯾﻧو ﺗﺳﻣﻰ RX & TXﻣﺗﺻﻠﺗﺎ
ﺑﺎﻟطرﻓﺎن 1و 2اﻟدﯾﺟﯾﺗﺎل وﻫﻧﺎ ﺗﻼﺣظ ان ﻫذان اﻟطرﻓﺎن ﻣﻛﺗوب ﻋﻠﯾﻬم اﯾﺿﺎ .RX & TX
ﯾوﺟد ﻟﯾد اﺧر ﯾﺳﻣﻰ Lوﻫو ﻣﺗﺻل ﺑﺎﻟطرف 13دﯾﺟﯾﺗﺎل ﻻظﻬﺎر ﻣرور اﺷﺎرات ﻛﻬرﺑﯾﺔ ﻣن ﺧﻼﻟﻪ واﻟﺗﻰ
ﺳوف ﯾﺗم ﺗﺟرﺑﺗﻬﺎ ﻓﯾﻣﺎ ﺑﻌد ﺑﺎﻻﻣﺛﻠﺔ اﻟﻌﻣﻠﻰ.
اﻟﻣرﺑﻊ اﻻﺧﯾر ﻫو ﻣﺗﺣﻛم دﻗﯾق ﺻﻐﯾر ﺟدا ﯾﺗﺣﻛم ﻓﻰ ﻧﻘل اﻟﺑﯾﺎﻧﺎت ﺑﯾن اﻻردوﯾﻧو واﻟﻛﻣﺑﯾوﺗر ﻣن ﺧﻼل
اﻟوﺻﻠﺔ USB
17
ARDUINO FROM ZERO TO HERO
-٥ﻣﻔﺗﺎح إﻋﺎدة ﺗﺷﻐﯾل اﻻردوﯾﻧو ﻣن اﻟﺑداﯾﺔ ﻓﻰ ﺣﺎﻟﺔ ﺗوﻗﻔﻪ او ﺣدوث ﺧﻠل اﺛﻧﺎء ﻋﻣل اﻻردوﯾﻧو
-٦اﻻردوﯾﻧو ﻻ ﺗﺣﺗوى ﻋﻠﻰ ﻛل اﻟوظﺎﺋف اﻟﺗﻰ ﻧرﯾدﻫﺎ ﻣﺛل اﻻﺗﺻﺎل ﺑﺎﻟﺷﺑﻛﺔ اﻟداﺧﻠﯾﺔ او اﻻﻧﺗرﻧت ﻟﻬذا ﺗم
ﺗﺻﻣﯾم ﻟوﺣﺎت ﺧﺎرﺟﯾﺔ ﻣﺗ واﻓﻘﺔ ﻣﻊ اﻻردوﯾﻧو وﺳﻬﻠﺔ اﻻﺗﺻﺎل ﺑﻪ ﺗﺳﻣﻰ ،Shieldsوﻛل ﻟوﺣﺔ ﺗﻘوم ﺑوظﯾﻔﺔ
ﻣﻌﯾﻧﺔ وﺗﺗﺻل ﺑﺎﻻردوﯾﻧو ﻣن ﺧﻼل اط ارف اﻟﺗوﺻﯾل ﻓﻰ ﻛﻼ اﻻﺗﺟﺎﻫﯾن ،وﯾﻣﻛن ﺗوﺻﯾل اﻛﺛر ﻣن ﻟوﺣﺔ
ﺧﺎرﺟﯾﺔ ﻣﻌﺎ ﺑﺎﻻردوﯾﻧو ﻟﻠﺣﺻول ﻋﻠﻰ ﻋدة ظﺎﺋف ﻓﻰ ﻧﻔس اﻟوﻗت.
18
ARDUINO FROM ZERO TO HERO
ﺑﻌد اﻻﻧﺗﻬﺎء ﻣن ﺷرح اﻟﻣﻛوﻧﺎت واﻻﺟزاء اﻟﺧﺎﺻﺔ ﺑﻠوﺣﺔ اﻻردوﯾﻧو ،ﺳﺗم ﺷرح اﻟﺟزء اﻟﺛﺎﻧﻰ اﻟﻣﻛﻣل ﻟﻠوﺣﺔ
اﻻردوﯾﻧو واﻟﻣﺳﺗﺧدم ﻓﻰ ﺻﻧﺎﻋﺔ اﻟروﺑوت وﻫو اﻟﺑ ارﻣﺞ ،واﻟﺑراﻣﺞ ﻫﻰ ﻣﺟﻣوﻋﺔ ﺗﻌﻠﯾﻣﺎت ﯾﺗم ﺻﯾﺎﻏﺗﻬﺎ ﻣن
اﻟﻣﺳﺗﺧدم )اﻟﻣﺑرﻣﺞ( ﻟﯾﺗم ﺗﻧﻔﯾذﻫﺎ ﻣن ﺧﻼل اﻟﻣﺗﺣﻛم اﻟدﻗﯾق ﻟﺗﻧﻔﯾذ ﻣﻬﺎم ﻣﺣددة ﻣﺛل اﻟﺗﺣﻛم ﻓﻰ ﺑرﻧﺎﻣﺞ اﻟﻐﺳﯾل
ﻟﻠﻐﺳﺎﻟﺔ اﻻوﺗوﻣﺎﺗﯾك او إظﻬﺎر ﻟون اﺣﻣر وﺗﺣذﯾر ﻟﻘﺎﺋد اﻟﺳﯾﺎرة ﻓﻰ ﺣﺎﻟﺔ ارﺗﻔﺎع درﺟﺔ ﺣ اررة اﻟﻣﺣرك.
اﻟﺑرﻧﺎﻣﺞ اﻟﻣﺳﺗﺧدم ﻟﺑرﻣﺟﺔ اﻻردوﯾﻧو ﯾﺳﻣﻰ Integrated Development Environment IDEواﻟذى ﺳﺗم
ﺷرﺣﻪ اﻻن.
IDE
ﻫذا اﻟﺑرﻧﺎﻣﺞ ﺗم ﺗوﺿﯾﺢ ﺧطوات ﺗﺛﺑﯾﺗﻪ ﺧﻼل اﻟﻔﺻل اﻻول ﻣن اﻟﻛﺗﺎب ،وﻋﻧد ﻓﺗﺢ اﻟﺑرﻧﺎﻣﺢ ﺳﺗظﻬر ﻟك
اﻟﺷﺎﺷﺔ اﻟﺳﺎﺑﻘﺔ واﻟﺗﻰ ﺗﺣﺗوى ﻋﻠﻰ اﻟﻌﻧﺎﺻر اﻻﺗﯾﺔ:
-١اﺳم اﻻﺳﻛﯾﺗش )اﻟﺑرﻧﺎﻣﺞ( اﻟﻣﻔﺗوح ﺣﺎﻟﯾﺎً ،ورﻗم إﺻدار ﺑرﻧﺎﻣﺞ IDEوﻫو رﻗم 1.0ﺣﺎﻟﯾﺎً ،واﯾﻘوﻧﺎت ﺗﻛﺑﯾر
وﺗﺻﻐﯾر وﻏﻠق اﻟﺑرﻧﺎﻣﺞ ﻋﻠﻰ اﻟﺟﺎﻧب اﻻﯾﻣن.
-٢ﺷرﯾط اﻟﻘواﺋم وﯾﺣﺗوى ﻋﻠﻰ اﻻواﻣر اﻟﻣﺳﺗﺧدﻣﺔ ﻣن ﺧﻼل اﻟﺑرﻧﺎﻣﺞ ،واﻟﺗﻰ ﺳوف ﻧﺳﺗﻌرض ﻫذﻩ اﻻواﻣر
ﺧﻼل اﻟﻔﺻول اﻟﺗﺎﻟﯾﺔ.
-٣ﺷرﯾط اﻻﯾﻘوﻧﺎت ،وﯾﺗﺣﺗوى ﻋﻠﻰ ﺳﺗﺔ اﯾﻘوﻧﺎت وﻫﻰ
أ :Verify -اﻟﺗﺄﻛد ﻣن ﺧﻠو اﻟﺑرﻧﺎﻣﺞ ﻣن اى اﺧطﺎء ﺑرﻣﺟﯾﺔ.
19
ARDUINO FROM ZERO TO HERO
ب :Upload -ﻟﺗﺄﻛﯾد ﺻﺣﺔ اﻟﺑرﻧﺎﻣﺞ ﺛم ﻧﻘﻠﻪ اﻟﻰ اﻻردوﯾﻧو ﻟﯾﺗم ﺣﻔظﻪ ﻓﻰ ذاﻛرة اﻟﻔﻼش اﻟﺧﺎﺻﺔ
ﺑﺎﻟﻣﺗﺣﻛم اﻟدﻗﯾق.
ت :New -ﻻﻧﺷﺎء ﺳﻛﯾﺗش ﺟدﯾد.
ث :Open -ﻟﻔﺗﺢ اﺳﻛﺗش ﻣﺧزن ﻣن ﻗﺑل.
ج :Save -ﺣﻔظ اﻻﺳﻛﺗش اﻟﺣﺎﻟﻰ داﺧل اﻟﻛﻣﺑﯾوﺗر وﺗﺳﻣﯾﺗﻪ ﻓﻰ ﺣﺎﻟﺔ ﻋدم ﺗﺳﻣﯾﺗﻪ ﻣن ﻗﺑل.
ح :Serial monitor -ﻻظﻬﺎر ﻧﺗﺎﺋﺞ ﺗﻧﻔﯾذ اﻟﺑرﻧﺎﻣﺞ اﻣﺎ اﻟﻣﺳﺗﺧدم واﯾﺿﺎ إدﺧﺎل ﺑﯾﺎﻧﺎت اﻟﻰ اﻟﻣﺗﺣﻛم
اﻟدﻗﯾق.
:Text area -٤ﺗﺣﺗوى ﻋﻠﻰ ﺳطور اﻟﺑرﻧﺎﻣﺞ اﻟﺗﻰ ﺳﯾﺗم ﻧﻘﻠﻬﺎ اﻟﻰ اﻟﻣﺗﺣﻛم اﻟدﻗﯾق ﺑﻌد اﻟﺗﺄﻛد ﻣن ﺻﺣﺗﻬﺎ.
:Message window area -٥ﺗﻌرض ﻧﺗﺎﺋﺞ ﺗﻧﻔﯾذ اﻟﺑرﻧﺎﻣﺞ ﻗﺑل ﻧﻘﻠﻬﺎ اﻟﻰ اﻟﻣﺗﺣﻛم اﻟدﻗﯾق ،ﺣﯾث ﺗﻌرض
اﻻﺧطﺎء إن وﺟدت او ﺗﻌرض ان اﻟﺑرﻧﺎﻣﺞ ﺻﺣﯾﺢ وﯾﻣﻛﻧك ﻧﻘﻠﻪ اﻟﻰ اﻟﻣﺗﺣﻛم اﻟدﻗﯾق.
-٦اﻟﺟزء اﻻﺧﯾر اﻟﺳﻔﻠﻰ ﻣن اﻟﺷﺎﺷﺔ ﯾﻌرض ﻧوع ﻟوﺣﺔ اﻻردوﯾﻧو اﻟﻣﺗﺻﻠﺔ ﺑﺎﻟﻛﻣﺑﯾوﺗر ورﻗم ﻣﺧرج اﻻﺗﺻﺎل.
ﻗم ﺑﺗوﺻﯾل اﻻردوﯾﻧو اوﻧو ﺑﺎﻟﻛﻣﺑﯾوﺗر ﻣن ﺧﻼل وﺻﻠﺔ USBﺛم اﻓﺗﺢ ﺑرﻧﺎﻣﺞ ،IDEﺛم ﺗﺎﻛد ان اﺳم ﻟوﺣﺔ اﻻردوﯾﻧو
وﻣﺧرج اﻻﺗﺻﺎل ﻣﻛﺗوﺑﺎن اﺳﻔل ﺷﺎﺷﺔ ،IDEإن ﻟم ﺗﻛن ﻫﻛذا ادﺧل اﻟﻰ ﻗﺎﺋﻣﺔ tools serial portﺛم اﺧﺗﺎر رﻗم
اﻟﻣﺧرج اﻟﺻﺣﯾﺢ واﯾﺿﺎ اﺧﺗﺎر ﻧوع ﻟوﺣﺔ اﻻردوﯾﻧو.
اﺳم اﻻﺳﻛﺗش ﯾﻧﺗﻬﻰ ﺑﺎﻻﻣﺗداد ) .inoاﺧﺗﺻﺎر ﻟﻛﻠﻣﺔ (Arduinoوﯾﺗم ﺣﻔظﻪ ﻓﻰ اﻟﻛﻣﺑﯾوﺗر داﺧل ﻫذا اﻟﻣﺳﺎر
documents\arduino\yoursketchname
-١داﻟﺔ اﻟﺗﻌرﯾف setup functionوﻫﻰ ﺑداﯾﺔ اﻻﺳﻛﺗش وﺗﺣﺗوى ﻋﻠﻰ اﻟﻣﺗﻐﯾرات واﻟﺛواﺑت اﻟﻰ ﺳوف ﻧﺳﺗﺧدﻣﻬﺎ
ﺧﻼل اﻻﺳﻛﺗش ،وﺑﻧﯾﺔ ﻫذﻩ اﻟداﻟﺔ ﻫﻛذا
{ )(void setup
20
ARDUINO FROM ZERO TO HERO
-٢داﻟﺔ اﻟﺗﻛرار void loopوﻓﯾﻬﺎ ﺗوﺟد اﻻواﻣر اﻟﻧﻰ ﺳﺗم ﺗﻧﻔﯾذﻫﺎ وﺗﻛرار اﻟﺗﻧﻔﯾذ ﻋدة ﻣرات طﺑﻘﺎ ﻟﻣﺗطﻠﺑﺎت
اﻟﺑرﻧﺎﻣﺞ ،وﺑﻧﯾﺔ ﻫذﻩ اﻟداﻟﺔ ﻫﻛذا
{ )(void loop
// put your main code here, to run repeatedly:
}
ﻗد ﺗم ﺗوﺿﯾﺢ ان اﻟطرف رﻗم ١٣اﻟدﯾﺟﯾﺗﺎل ﻣﺗﺻل ﺑﺎﻟﻠﻣﺑﺔ LED Lﺣﯾث اﻧﮭﺎ ﺗﺿﺊ وﺗﻧطﻔﺊ ﻋﻧد إﺧراج
اﺷﺎرة ﻛﮭرﺑﯾﺔ ﻣن اﻟطرف ،١٣ﻟﮭذا ﺳﻧﻘوم ﺑﺈﺧراج اﺷﺎرة ﻛﮭرﺑﯾﺔ ﻣن اﻟطرف ١٣دﯾﺟﯾﺗﺎل ﺑﻣدة ١ﺛﺎﻧﯾﺔ
)اﻟﺛﺎﻧﯾﺔ = ١٠٠٠ﻣﻠﻰ ﺛﺎﻧﯾﺔ( ،ﺛم ﻧوﻗف اﻻﺷﺎرة اﻟﻛﮭرﺑﯾﺔ ﻟﻣدة ١ﺛﺎﻧﯾﺔ اﺧرى ﻓﯾﻧطﻔﺊ LED Lﻟﻣدة ١ﺛﺎﻧﯾﺔ ﺛم
ﻧﻛرر ھذه اﻟﺧطوات ﻓﯾظﮭر ﻟﻧﺎ إﺿﺎءة إطﻔﺎء اﻟﻠﻣﺑﺔ ﻣﺗﻛررة ﻛل ﻣﻧﮭم ﻟﻔﺗرة ١ﺛﺎﻧﯾﺔ ﻓﻘط ،ھذا اﻟﺧطوات
اﻟﻣﺗﻛررة ﻣن اﻟﻣﻧطﻘﻰ ان ﺗوﺟد داﺧل اﻟداﻟﺔ رﻗم؟ ﻓﻌﻼ إﺟﺎﺑﺔ ﺻﺣﯾﺔ اﻟداﻟﺔ رﻗم ٢اﻟﻣﺗﻛررة .void loop
ﻣﻼﺣظﺔ :ﻣﻔﺗﺎح اﻟﻛﮭرﺑﺎء ﯾوﺟد ﻋﻠﯾﮫ ﻋﻼﻣﺔ اﻟﻔﺗﺢ اى ﻣرور ﺗﯾﺎر ﻛﮭرﺑﻰ ورﻣزھﺎ ) ،(ON = HIGH = 1واﯾﺿﺎ ﯾوﺟد
ﻋﻠﯾﮫ ﻋﻼﻣﺔ اﻟﻐﻠق اى إﻧﻘطﺎع اﻟﺗﯾﺎر اﻟﻛﮭرﺑﻰ ورﻣزھﺎ )(OFF = LOW = 0
-٢اﻟﺑدء ﻓﻰ إﺧراج اول اﺷﺎرة ﻛﻬرﺑﯾﺔ ﻣن اﻟطرف ١٣اﻟدﯾﺟﯾﺗﺎل ﻣن ﺧﻼل اﻻﻣر digitalWriteوﻫﻰ
إﺧراج اﺷﺎرة ﻛﻬرﺑﯾﺔ ﻟطرف دﯾﺟﯾﺗﺎل ،ورﻣز إﺷﺎرة ﻛﻬرﺑﯾﺔ ﻫو HIGHام رﻣز اﯾﻘﺎف ﻫذﻩ اﻻﺷﺎرة ﻫو
،LOWﻟﻬذا ﺳﯾﻛون ﺳطر إﺧراج إﺷﺎرة ﻛﻬرﺑﯾﺔ ﻣن اﻟطرف ١٣دﯾﺟﺗﺎل ﻫو
;)digitalWrite(13, HIGH
ﻣﻊ ﻣﻼﺣظﺔ إﻧﺗﻬﺎء ﻛل ﺳطر ﻣن اﻻﺳﻛﺗش ﺑﻌﻼﻣﺔ ﻣﻣﯾزة ﻗﺑل اﻟدﺧول اﻟﻰ اﻟﺳطر اﻟﺗﺎﻟﻰ ،وﻫذﻩ اﻟﻌﻼﻣﺔ
ﻫﻰ );(.
-٣اﻻﻧﺗظﺎر ١ﺛﺎﻧﯾﺔ ،اﻟﻣﺗﺣﻛم اﻟدﻗﯾق ذو ﺳرﻋﺎت ﻓﺎﺋﻘﺔ ﺣﯾث ﺑﻣﻛﻧﻪ ﺗﻧﻔﯾذ اﻻف او ﻣﻼﯾﯾن اﻻواﻣر ﻓﻰ
اﻟﺛﺎﻧﯾﺔ اﻟواﺣدة ،وﻟﻛﻰ ﯾﻣﻛن ﻟﻼﻧﺳﺎن اﻟﺗﺣﻛم ﻓﻰ ﻫذﻫﺎ اﻻواﻣر ﺧﻼل اﻟﺛﺎﻧﯾﺔ اﻟواﺣدة ﻛﺎن ﻻﺑد ﻣن ﺗﻘﺳﯾم
اﻻﺛﺎﻧﯾﺔ اﻟﻰ اﺟزاء اﺻﻐر ﺑﺣﯾث ﺗﻧﺎﺳب ﺳرﻋﺔ اﻟﻣﺗﺣﻛم اﻟدﻗﯾق ،ﻟﻬذا ﺗم ﺗﻘﺳﯾم اﻟﺛﺎﺗﯾﺔ اﻟواﺣدة اﻟﻰ اﻟف
21
ARDUINO FROM ZERO TO HERO
ﺟزء وﺗﺳﻣﻰ ﻣﻠﻰ ﺛﺎﻧﯾﺔ ،وﻫﻧﺎك ﺗﻘﺳﯾم اﻟﺛﺎﻧﯾﺔ اﻟﻰ ﻣﻠﯾون ﺟزء وﺗﺳﻣﻰ ﻣﯾﻛرو ﺛﺎﻧﯾﺔ .ﻓﻰ ﻫذا اﻟﻛﺗﺎب ﺳوف
ﻧﺗﻌﺎﻣل ﻣﻊ اﻟﻣﻠﻰ ﺛﺎﻧﯾﺔ )اﻟف ﺟزء ﻣن اﻟﺛﺎﻧﯾﺔ(.
ﺳطر اﻻﻧﺗظﺎر ) (delayﻟﻣدة ﺛﺎﻧﯾﺔ واﺣدة )اﻟف ﻣﻠﻰ ﺛﺎﻧﯾﺔ( ﺳﯾﺗم ﻛﺗﺎﺑﺗﻬﺎ ﻓﻰ ﺳطر اﻻواﻣر ﻫﻛذا
;)delay(1000
-٤ﺑﻌد إﺿﺎءة اﻟﻠﻣﺑﺔ ﻟﻣدة ﺛﺎﻧﯾﺔ واﺣدة ﻧ رﯾد إطﻔﺎﺋﻬﺎ ﻟﻣدة ﺛﺎﻧﯾﺔ واﺣدة ﻣن ﺧﻼل اﻟطرف رﻗم ،١٣ﻓﯾﺗم
إﺳﺗﺧدام ﻧﻔس اواﻣر اﻟﺳﺎﺑﻘﺔ ﻣﻊ ﺗﻌدﯾل إﺿﺎءة ) (HIGHاﻟﻰ إطﻔﺎء ) (LOWﻣن ﺧﻼل ﺳطر اواﻣر
اﻟﺗﺎﻟﻰ
;)digitalWrite(13, LOW
-٥ﺑﻌد ذﻟك ﻧرﯾد اﻻﻧﺗظﺎر ﻟﻣدة ﺛﺎﻧﯾﺔ واﺣدة ﻗﺑل إﺿﺎءة اﻟﻠﻣﺑﺔ ﻣرة اﺧرى ،ﻟﻬذا ﺳﯾﺗم اﺳﺗﺧدام ﻧﻔس ﺳطر
اﻣر اﻻﻧﺗظﺎر اﻟﺳﺎﺑق اﺳﺗﺧداﻣﻪ ﺑﺎﻟﺧطوة رﻗم ٣
;)delay(1000
-٦اﻻن ﺗم اﻻﻧﺗﻬﺎء ﻣن اﻟﺑرﻧﺎﻣﺞ ﻓﻰ ﺧﺻط وات ﺑﺳﯾطﺔ ﺟدا وﻣﻔﻬوﻣﺔ ﺑدون اى ﺗﻌﻘﯾد ،اﻻن ﺳﯾﺗم وﺿﻊ
ﺳطور اﻻواﻣر ﻣﻌﺎً ﻟﺗرى اﻧك ﺑﺎﻟﻔﻌل ﻧﻔذت اﻻﺳﻛﺗش ﺧﻼل دﻗﺎﺋق ﻣﻌدودة ﻓﻘط
)(void setup
{
;)pinMode(13, OUTPUT
)(} void loop
{
;)digitalWrite(13, HIGH
;)delay(1000
;)digitalWrite(13, LOW
;)delay(1000
}
ﺣﯾث ان ﻛﻠﻣﺔ Done compilingﺗﻌﻧﻰ ان اﻟﺑرﻧﺎﻣﺞ ﺻﺣﯾﺢ وﻻ ﯾﺣﺗوى ﻋﻠﻰ اى اﺧطﺎء .اﻣﺎ ﻓﻰ ﺣﺎﻟﺔ وﺟود ﺧطﺎء
ﯾﺗم إظﻬﺎر رﺳﺎﻟﺔ ﺑﻧوع اﻟﺧطﺎء ورﻗم اﻟﺳطر اﻟﻣوﺟود ﺑﻪ ﻫذا اﻟﺧطﺎء ،وﻫذا ﻣﺛﺎل ﯾﺣﺗوى ﻋﻠﻰ ﺧطﺎء ﺑﺎﻟﺳطر رﻗم ١٦
ﺣﯾث ﻟم ﯾﻧﺗﻬﻰ ﺳطر اواﻣر ﺑﻌﻼﻣﺔ ;
22
ARDUINO FROM ZERO TO HERO
ﺗﻌﺪﯾﻞ اﻻﺳﻜﺘﺶ
ﯾﻣﻛﻧك ﺗﻌدﯾل اﻻﺳﻛﺗش ﻓﻰ اى وﻗت ﺟﺳﺑﻣﺎ ﺗرﯾد ،ﻓﻘط اﻓﺗﺢ اﻻﺳﻛﺗش ٕواﺟرى اﻟﺗﻌدﯾﻼت اﻟﺗﻰ ﺗرﯾدﻫﺎ ﺗﺎﻛد ﻣن ﺻﺣﺔ
اﻻﺳﻛﺗش ﺛم اﺣﻔظﻪ ﻣرة اﺧرى ،ﻫﻧﺎ ﺳﻧﻘوم ﺑﺗﻌدﯾل اﻻﺳﻛﺗش ﺑﺗﻐﯾﯾر ﻗﯾﻣﺔ اﻻﻧﺗظﺎر ﻣن ١٠٠٠ﻣﻠﻰ ﺛﺎﻧﯾﺔ اﻟﻰ ٢٥٠
ﻣﻠﻰ ﺛﺎﻧﯾﺔ ﻟﻛﻰ ﺗﺿﺊ اﻟﻠﻣﺑﺔ ﻟﻣدة رﺑﻊ ﺛﺎﻧﯾﺔ ﻓﻘط ) ٢٥٠ﻣﻠﻰ ﺛﺎﻧﯾﺔ( ﺛم ﺗﻧطﻔﺊ ﻟﻣدة رﺑﻊ ﺛﺎﻧﯾﺔ وﻫﻛذا ;) .delay(250ﯾﻣﻛن
إﺟراء ﻫذا اﻟﺗﻌدﯾل ﺑزﯾﺎدة او ﺗﻘﻠﯾل اﻟوﻗت وﻣﻼﺣظﺔ اﻟﺗﻌدﯾﻼت ﻋﻠﻰ ﺳرﻋﺔ إﺿﺎءة اﻟﻠﻣﺑﺔ.
ﻣﺎذا ﺑﻌﺪ!
ﻓﻰ ﻫذا اﻟﻔﺻل ﺗم ﺷرح ﻣﻛوﻧﺎت ﻟوﺣﺔ اﻻردوﯾﻧو واﯾﺿﺎ ﻣﻛوﻧﺎت ﺑرﻧﺎﻣﺞ ،IDEﻣﻊ ﺗﻧﻔﯾذ اول اﺳﻛﺗش ﻋﻣﻠﻰ ﺗﻘوم ﺑﻪ
ﺑﻧﻔﺳك وﺗﺗﺄﻛد ﻣن ﺻﺣﺗﻪ وﺗﻌدﯾﻠﻪ وﺣﻔظﻪ وﻧﻘل ﻧﺳﺧﻪ ﻣن اﻟﻰ اﻻردوﯾﻧو ﻣن ﺧﻼل وﺻﻠﺔ ،USBﺳوف ﻧﻘوم ﻓﻰ
اﻟﻔﺻل اﻟﺗﺎﻟﻰ ﺑﺷرح اواﻣر ﺟدﯾدة وﻋﻣل ﺑراﻣﺞ ﺟدﯾدة ﺗﻘوم ﺑوظﺎﺋف ﻣﺧﺗﻠﻔﺔ ،ﻣﻊ اﻟﺗطرق اﻟﻰ اﺳﺎﺳﯾﺎت اﻟ دواﺋر
اﻻﻟﻛﺗروﻧﯾﺔ.
23
ARDUINO FROM ZERO TO HERO
3
اﻟﺨﻄﻮات اﻟﻤﺒﺪﺋﯿﺔ
ﻓﻰ ﻫذا اﻟﻔﺻل ﺳوف ﻧﺗﻌﻠم اﺳﺎﺳﯾﺎت اﻟد واﺋر اﻻﻟﻛﺗروﻧﯾﺔ وﻛﯾﻔﯾﺔ اﻟﺗﺣﻛم ﻓﻰ اﻟﺗﯾﺎر اﻟﻛﻬرﺑﻰ ﺑﻣﺎ ﯾﺗﻧﺎﺳب ﻣﻊ اﺣﺗﯾﺎﺟﺎت
اﻟﻣﺷروع اﻟﻣراد ﺗﻧﻔﯾذﻩ ،واﻟﺗطرق اﻟﻰ ﺗﻧﻔﯾذ ﻣﺷروﻋﺎت ﻣﺗﻘدﻣﺔ اﻛﺛر ﻣن ﺧﻼل ﺧطوات ﺑﺳﯾطﺔ وﺷﯾﻘﺔ ،ﻫل اﻧت ﻣﺳﺗﻌد؟
ﻫﯾﺎ ﺑﻧﺎ...
اﻟﺘﺨﻄﯿﻂ ﻟﻤﺸﺮوﻋﻚ
ﻗﺑل ﺗﻧﻔﯾذ اى ﻣﺷروع ﻣن ﺧﻼل اﻻردوﯾﻧو ،ﯾﺟب ان ﺗﺧطط ﺑدﻗﺔ ﻟﻬذا اﻟﻣﺷروع ﻟﻠﺣﺻول ﻋﻠﻰ اﻟﻧﺗﺎﺋﺞ اﻟﻣرﺟوة ﻓﻰ اﻗل
وﻗت ﻣﻣﻛن وﺑﺄﻗل ﻣﺟﻬود ،ﻟﻬذا ﺗم وﺿﻊ ﻣﺟﻣوﻋﺔ ﺧطوات ﻣﺑدﺋﯾﺔ ﺗﺳﺎﻋد ﻓﻰ اﻟﺗﺧطﯾط ﻟﺑﻧﺎء ﻣﺷروﻋك وﻫذﻩ اﻟﺧطوات
ﻟﺗﻧظﯾم ﻋﻣﻠك وﻣن اﻻﻓﺿل إﺗﺑﺎﻋﻬﺎ ﻓﻰ ﻣﺷروﻋك.
24
ARDUINO FROM ZERO TO HERO
-٥ﻗم ﺑﺗوﺻﯾل اﻻﺟزاء واﻻدوات ﻣﻌﺎً واﻟﺗﺄﻛد ﻣن ﺳﻼﻣﺔ ﺗوﺻﯾل ﻛل اﻻﺟزاء ﺑﻠوﺣﺔ اﻻردوﯾﻧو.
-٦ﻗم ﺑﻌﻣل ﻧﺳﺧﺔ ﻣن اﻻﺳﻛﺗش اﻟﻰ اﻻردوﯾﻧو ﻣﻊ اﻟﺗﺄﻛد ﻣن ان اﻻﺳﻛﺗش ﯾﺗم ﺗﻧﻔﯾذﻩ ﺑدﻗﺔ ﻣن ﺧﻼل اﻟﻣﻛوﻧﺎت
اﻻﻟﻛﺗروﻧﯾﺔ اﻟﻣﺗﺻﻠﺔ ﺑﺎﻻردوﯾﻧو طﺑﻘﺎ ﻻﻫداف اﻟﻣﺷروع اﻟﻣذﻛورة ﺑﺎﻟﺧطوة اﻻوﻟﻰ ،ﻣﻊ ﺗﺻﺣﯾﺢ اى اﺧطﺎء ﻓﻰ
اﻻﺳﻛﺗش او اﻟﻣﻛوﻧﺎت اﻻﻟﻛﺗروﻧﯾﺔ.
اﺳﺎﺳﯿﺎت اﻟﻜﮭﺮﺑﺎء
ﻛل اﻟدواﺋر واﻟﻣﻛوﻧﺎت اﻻﻟﻛﺗروﻧﯾﺔ اﻟﺗﻰ ﺳوف ﺗﺗﻌﺎﻣل ﻣﻌﻬﺎ ﺑﻣﺎ ﻓﯾﻬﺎ اﻻردوﯾﻧو ﺗﻌﺗﻣد ﻋﻠﻰ اﻟﻛﻬرﺑﺎء ،ﻟﻬذا ﯾﺟب ان
ﯾﻛون ﻟدﯾك ﺧﻠﻔﯾﺔ ﺑﺳﯾطﺔ ﻋن اﻟﻛﻬرﺑﺎء وﻛﯾﻔﯾﺔ اﻟﺗﻌﺎﻣل ﻣﻌﻬﺎ وﻗراءة ﻗﯾم اﻟﺗﯾﺎر ﻟﺗﺳﻬﯾل ﺗﻧﻔﯾذ ﻣﺷروﻋﺎﺗك ﺑدون اﻟﺣﺎﺟﺔ
اﻟﻰ ﻣﻬﻧدس ﻛﻬرﺑﺎء او اﻟﻛﺗروﻧﯾﺎت ،ﺑل ﺗﻘوم اﻧت ﺑﺗﻧﻔﯾذ ﻣﺎ ﺗرﯾد دون اﻧﺗظﺎر ﻣﺳﺎﻋدة اﻻﺧرﯾن.
ﻣﻼﺣظﺔ :اﻟطرف اﻟﻣوﺟب وﻫو ﻣﺻدر اﻟﺗﯾﺎر اﻟﻛﻬرﺑﻰ ﯾﺳﻣﻰ ) (VCC or VSSاﻣﺎ اﻟطرف اﻟﺳﺎﻟب وﻫو اﻟﻣﺳﺗﻘﺑل
ﻟﻠﺷﺣﻧﺎت اﻟﻛﻬرﺑﯾﺔ اﻟﻣﻧﺗﻘﻠﺔ ﻣن اﻟطرف اﻟﻣوﺟب ﯾﺳﻣﻰ اﻟطرف اﻟﺳﺎﻟب او اﻻرﺿﻰ ).(GND = Ground
ﯾﺗم ﻗﯾﺎس اﻟﺗﯾﺎر اﻟﻛﻬرﺑﻰ ﺑﻌدد اﻟﺷﺣﻧﺎت اﻟﻛﻬرﺑﯾﺔ اﻟﺗﻰ ﻣرت ﺧﻼل ﻧﻘطﺔ ﻣﻌﯾﻧﺔ ﻣن اﻟﺳﻠك اﻟﻣﻌدﻧﻰ ﺧﻼل ﻓﺗرة ﻣﻌﯾﻧﺔ،
ورﻣز ﻗﯾﺎس ﻣرور اﻟﺗﯾﺎر ﻫو اﻻﻣﺑﯾر ) ،(A = amperes = ampsوﻧظ ار ﻻﺳﺗﺧدام اﺟزاء ﺻﻐﯾرة ﺟدا ﻣن اﻟﺗﯾﺎر
اﻟﻛﻬرﺑﻰ ﻓﻰ ﺣﯾﺎﺗﻧﺎ اﻟﯾوﻣﯾﺔ ﻓﻘد ﺗم ﺗﻘﺳﯾم وﺣدة ﻗﯾﺎس اﻟﺗﯾﺎر Aاﻟﻰ اﻗﺳﺎم اﺻﻐر ﺗﺳﻣﻰ ﻣﻠﻰ اﻣﺑﯾر )1000ﻣﻠﻰ اﻣﺑﯾر =
1أﻣﺑﯾر (1A = 1000 mA ،وﻫذا ﻣﺛل ﺗﻘﺳﯾم اﻟﺛﺎﻧﯾﺔ اﻟﻰ 1000ﺟزء وﺗﺳﻣﯾﺗﻬﺎ ﻣﻠﻰ ﺛﺎﻧﯾﺔ ﻛﻣﺎ ﻫو ﻣذﻛور ﺑﺎﻟﻔﺻل
اﻟﺛﺎﻧﻰ ﻋﻧد ﻛﺗﺎﺑﺔ اول اﺳﻛﺗش ﻟﻼردوﯾﻧو.
25
ARDUINO FROM ZERO TO HERO
اﻟﻄﺎﻗﺔ )(Power
ﻫو ﺳرﻋﺔ ﺗﺣوﯾل ﺟﻬﺎز ﻛﻬرﺑﻰ اﻟطﺎﻗﺔ اﻟﻛﻬرﺑﯾﺔ ﻣن ﺷﻛل اﻟﻰ ﺷﻛل اﺧر ،ووﺣدة اﻟﻘﯾﺎس ﻫﻰ اﻟ وات ) ،W(wattﻓﻣﺛﻼ
ﻣﺻﺑﺎح طﺎﻗﺗﻪ 100وات ﺗﻛون ﻗوة اﻹﺿﺎءة اﻛﺑر ﻣن ﻣﺻﺑﺎح طﺎﻗﺗﻪ 50وات ﻻن اﻟﻣﺻﺑﺎح اﻻﻛﺑر ﻓﻰ اﻟ وات ﯾﺳﺗطﯾﻊ
ﺗﺣوﯾل ﻛﻣﯾﺔ ﻛﺑﯾ رة ﻣن اﻟطﺎﻗﺔ اﻟﻛﻬرﺑﯾﺔ اﻟﻰ ﺿؤ ﻣﻣﺎ ﯾﺟﻌﻠﻪ ﯾﺳﺗﻬﻠك ﺗﯾﺎر ﻛﻬرﺑﻰ اﻛﺑر ﻓﺗﺻﺑﺢ طﺎﻗﺗﻪ اﻛﺑر )ﻋﻼﻗﺔ
طردﯾﺔ ﺑﯾن اﺳﺗﻬﻼك اﻟﻛﻬرﺑﺎء واﻟطﺎﻗﺔ ﻓﻛﻠﻣﺎ زاد اﺳﺗﻬﻼك اﻟﻛﻬرﺑﺎء زادت اﻟطﺎﻗﺔ واﻟﻌﻛس ﺻﺣﯾﺢ(.
اﻟﻌﻨﺎﺻﺮ اﻻﻟﻜﺘﺮوﻧﯿﺔ
ﻧﺳﺗﺧدم اﻟﻛﻬرﺑﺎء ﻓﻰ ﺟﻣﯾﻊ ﻣﻧﺎﺣﻰ ﺣﯾﺎﺗﻧﺎ داﺧل اﻟﻣﻧزل وﺧﺎرﺟﻪ ،وﻧﻌﺗﻣد ﻋﻠﯾﻬﺎ اﻋﺗﻣﺎد ﻛﻠﻰ ،وﺣﯾث إﻧﻧﺎ ﺑﺻدد اﻟﺗﻌﺎﻣل
ﻣﻊ ﻣﺻﺎدر ﻛﻬرﺑﺎء ﻓﻰ اﻟﻣﺷروﻋﺎت داﺧل ﻫذا اﻟﻛﺗﺎب ،ﻟﻬذا ﺳوف ﻧﺣﺗﺎج اﻟﻰ اﻟﺗﺣﻛم ﻓﻰ اﻟﺗﯾﺎر اﻟﻛﻬرﺑﻰ ﺑﻣﺎ ﯾﻧﺎﺳب
ﻣﺷروﻋﺎﺗﻧﺎ ،وﻟﻛﻰ ﺗﺗﺣﻛم ﻓﻰ اﻟﺗﯾﺎر اﻟﻛﻬرﺑﻰ ﯾﺟب اﺳﺗﺧدام ادوات ﺗﺣﻛم ﻛﻬرﺑﯾﺔ وﻫﻰ اﻟﻌﻧﺎﺻر اﻻﻟﻛﺗروﻧﯾﺔ واﻟﺗﻰ ﺳوف
ﻧﺳﺗﻌرض اﻫم ﻫذﻩ اﻟﻌﻧﺎﺻر اﻻن
اﻟﻤﻘﺎوﻣﺔ )(Resistor
ﺑﻌض اﻻﺟﻬزة اﻟﻛﻬرﺑﯾﺔ ﺗﺣﺗﺎج اﻟﻰ ﺗﯾﺎر ﻣﻌﯾن ،وﻫذا اﻟﺗﯾﺎر ﻣﻣﻛن ان ﯾﻛون اﻗل ﻣن ﺿﻐط اﻟﺗﯾﺎر اﻟﻣﺗوﻟد ﻣن اﻟﻣﺻدر
اﻟﻛﻬرﺑﻰ ،ﻟﻬذا ﻧرﯾد ﺗﻘﻠﯾل ﻣرور اﻟﺗﯾﺎر ﻓﻰ اﻟﺳﻠك ﻟﯾﻧﺎﺳب اﺣﺗﯾﺎج اﻟﺟﻬﺎز اﻟﻛﻬرﺑﻰ ﻟﻬذا ﻧﺳﺗﺧدم ﻣﻛون اﻟﻛﺗروﻧﻰ ﯾﻘﻠل
ﻣن ﺗدﻓق اﻟﺗﯾﺎر اﻟﻛﻬرﺑﻰ )إﻋﺎﻗﺔ ﻣرور اﻟﺗﯾﺎر( ﯾﺳﻣﻰ ﻣﻘﺎوﻣﺔ ﻛﻬرﺑﯾﺔ ،ﻓﻣﺛﻼ اﻟﺗﯾﺎر اﻟﻛﻬرﺑﻰ ﺑﺎﻟﻣﻧزل ﻫو 220ﻓوﻟت
وﯾﺳﺗﺧدم ﻟﺗﻐذﯾﺔ اﻟﻛﻣﺑﯾوﺗر ﻣﺛﻼً ،ﻟﻛن ﻛل ﺟزء ﻣن اﻟﻛﻣﺑﯾوﺗر ﯾﺣﺗﺎج اﻟﻰ ﻓوﻟت ﻣﻌﯾن ﯾﺗراوح ﻣن 1اﻟﻰ 16ﻓوﻟت ،ﻟﻬذا
ﯾﺗم اﺳﺗﺧدام ﻣﻘﺎوﻣﺔ ﻣﺧﺗﻠﻔﺔ اﻟﻘﯾﻣﺔ ﻟﻛل ﺟزء داﺧل اﻟﻛﻣﺑﯾوﺗر ﻟﻠﺣﺻول ﻋﻠﻰ اﻟﺗﯾﺎر اﻟﻣﻧﺎﺳب ﻟﻬذا اﻟﺟزء.
وﺣدة ﻗﯾﺎس اﻟﻣﻘﺎوﻣﺔ ﻫﻰ اﻻوم (Ω = ohmsوﯾﻣﻛن ان ﺗﻛون اﻟف اوم )ﻛﯾﻠو اوم( او ﻣﻠﯾون اوم )ﻣﯾﺟﺎ اوم(.
26
ARDUINO FROM ZERO TO HERO
-١إﺳﺗﺧدام اﻟﻣﺎﻟﺗﯨﻣﯾﺗر ﻣن ﺧﻼل اﻹﺷﺎرة اﻟﻰ وﺿﻊ اﻟﻣﻘﺎوﻣﺔ ﻟﻘراءة ﻗﯾﻣﺔ اﻟﻣﻘﺎوﻣﺔ.
-٢ﺗﺣوﯾل اﻟﺧطوط اﻟﻣرﺳوﻣﺔ ﻋﻠﻰ اﻟﻣﻘﺎوﻣﺔ اﻟﻰ ارﻗﺎم ﺗوﺿﺢ ﻗﯾﻣﺔ اﻟﻣﻘﺎوﻣﺔ ﻣن ﺧﻼل ﺗﻠك اﻟﺧطوات
أ -وﺿﻊ اﻟﺧط اﻻﺻﻔر او اﻟذﻫﺑﻰ ﺟﻬﺔ اﻟﯾﻣﯾن ،ﺛم ﺑدء ﻗراءة اﻻﻟوان ﻣن اول ﺧط ﻣن ﺟﻬﺔ اﻟﯾﺳﺎر.
ب -ﺗﺣدﯾد ﻋدد اﻟﺧطوط اﻟﻣﻠوﻧﺔ ،إن ﻛﺎﻧت ﺧﻣﺳﺔ ﺧطوط إذاً اول ﺛﻼث ﺧطوط ﻧﺣوﻟﻬﺎ اﻟﻰ ارﻗﺎم )طﺑﻘﺎً
ﻟﻠﺟدول ﺑﺎﻟﺻورة اﻟﺗﺎﻟﯾﺔ( ،واﻟﺧط اﻟراﺑﻊ ﻫو اﻟﻘﯾﻣﺔ اﻟﻣﺿروﺑﺔ ﻓﻰ اول ﺛﻼث ارﻗﺎم )طﺑﻘﺎً ﻟﻠﺟدول اﻟﺗﺎﻟﻰ(،
ﯾﺣﺗوى اﺧر ﺧط ﻋﻠﻰ اﻟﻔﺎﻗد ﻓﻰ اﻟﻣﻘﺎوﻣﺔ )ﻛل ﻣﻘﺎوﻣﺔ ﻟﻬﺎ ﻓﺎﻗد ﻣن ﻗﯾﻣﺗﻬﺎ( ،اﻟﻣﺛﺎل ا ﻻول ﯾﺣﺗوى ﻋﻠﻰ
ﻓﺎﻗد 1%ﻣن ﻗﯾﻣﺔ اﻟﻣﻘﺎوﻣﺔ ) 47kΩاﻟﻣﺛﺎل اﻻول ﺑﺎﻟﺟدول(.
ت -إذا ﻛﺎﻧت اﻟﺧطوط ﻫﻰ ارﺑﻌﺔ ﺧطوط ﻓﻘط ﻣﺗﻘﺎرﺑﺔ ﻣﻌﺎً ،ﻓﯾﺗم ﺗﺣوﯾل اول ﺛﻼث ارﻗﺎم اﻟﻰ ﻗﯾم وﺿرﺑﻬﺎ ﻓﻰ
ﻗﯾﻣﺔ اﻟﺧط اﻟراﺑﻊ ﻟﻧﺣﺻل ﻋﻠﻰ اﻟﻘﯾﻣﺔ اﻟﻛﻠﯾﺔ ﻟﻠﻣﻘﺎوﻣﺔ )ﻻﯾوﺟد ﻓﺎﻗد ﻓﻰ ﻫذﻩ اﻟﺣﺎﻟﺔ ﻻن اﻟﺧطوط
ﻣﺗﻘﺎرﺑﺔ ،اﻟﻣﺛﺎل اﻟﺛﺎﻧﻰ ﺑﺎﻟﺟدول(.
ث -إذا ﻛﺎﻧت اﻟﺧطوط ارﺑﻌﺔ وﻣﻧﻬﺎ اول ﺧط ﺑﺎﻟﺟﻬﺔ اﻟﯾﻣﻧﻰ ﺑﻌﯾد ﻋن اﻟﺛﻼث ﺧطوط اﻻﺧرى ،ﻓﯾﺗم ﺗﺣوﯾل
اول رﻗﻣﺎن ﻓﻘط اﻟﻰ ﻗﯾم وﺿرﺑﻬﺎ ﻓﻰ ﻗﯾﻣﺔ اﻟﺧط اﻟﺛﺎﻟث ﻟﻧﺣﺻل ﻋﻠﻰ اﻟﻘﯾﻣﺔ اﻟﻛﻠﯾﺔ ﻟﻠﻣﻘﺎوﻣﺔ ،ﺛم ﻧطرح
اﻟﻘﯾﻣﺔ اﻟﻣﻔﻘودة ﻟﻠﺧط اﻟراﺑﻊ ﻣن اﻟﻘﯾﻣﺔ اﻟﻛﻠﯾﺔ ﻟﻧﻣﺣﺻل ﻋﻠﻰ اﻟﻘﯾﻣﺔ اﻟدﻗﯾﻘﺔ ﻟﻠﻣﻘﺎوﻣﺔ )اﻟﻣﺛﺎل اﻻﺧﯾر(.
27
ARDUINO FROM ZERO TO HERO
اﯾﺿﺎ ﯾﻣﻛن ﻗ راءة ﻗﯾﻣﺔ اﻟﻣﻘﺎوﻣﺔ اﻟﻣﺻﻧوﻋﺔ ﻋﻠﻰ ﺷﻛل ﺷرﯾﺣﺔ ﺣﯾث ﯾوﺟد ﻋﻠﯾﻬﺎ 3ارﻗﺎم ،اول رﻗﻣﺎن ﻣن
ً -٣
اﻟﯾﺳﺎر ﯾﺣدد ﻗﯾﻣﺔ اﻟﻣﻘﺎوﻣﺔ ،واﺧر رﻗم ﯾﺣدد ﻋدد اﻻﺻﻔﺎر اﻟﺗﺎﻟﯾﺔ ﻻول رﻗﻣﺎن ،ﻣﺛﺎل رﻗم 103ﺗﻌﻧﻰ ان ﻗﯾﻣﺔ
اﻟﻣﻘﺎوﻣﺔ ﻫﻰ 10,000اوم.
ﻗﯿﻤﺔ اﻟﻄﺎﻗﺔ
ﻧﻼﺣظ ان اﻟﻣﻘﺎوﻣﺔ ﺗﺳﺗﺧدم ﻟﺗﻘﻠﯾل ﻣرور اﻟﺗﯾﺎر اﻟﻛﻬرﺑﻰ داﺧل اﻟﺳﻠك اﻟﻣﻌدﻧﻰ ﻟﻠﺣﺻول ﻋﻠﻰ ﺗﯾﺎر ﻣﻌﯾن ﯾﻧﺎﺳب
اﻟﻣﻛوﻧﺎت اﻟﻛﻬرﺑﯾﺔ اﻟﻣﺧﺗﻠﻔﺔ داﺧل اﻻﺟﻬزة ،ﻟﻬذا ﻧﺟد ان اﻟﻣﻘﺎوﻣﺔ ﺗﺗﺣﻣل ﺗﯾﺎر ﻛﻬرﺑﻰ ﻣن اﻟﻣﺻدر ﻟﺗﻘﻠﯾﻠﻪ ﻣﻣﺎ ﯾﻧﺗﺞ
ﻋﻧﻪ ﺣ اررة ﻗد ﺗؤدى اﻟﻰ ﺗﻠف ﻫذﻩ اﻟﻣﻘﺎوﻣﺔ ،وﻟزﯾﺎدة ﻋﻣر ﻫذﻩ اﻟﻣﻘﺎوﻣﺔ ﯾﺗم زﯾﺎدة ﺣﺟم اﻟﻣﻘﺎوﻣﺔ ﻟﻣﻧﻊ اﺣﺗراﻗﻬﺎ ﻟﻬذا ﻧﺟد
ﻋﻼﻗﺔ ﺑﯾن اﻟﻣﻘﺎوﻣﺔ وﻗﯾﻣﺔ اﻟطﺎﻗﺔ واﻟﺗﯾﺎر واﻟﻔوﻟت ،ﻓﻛﻠﻣﺎ زاد اﻟﺗﯾﺎر واﻟﻔوﻟت اﻟداﺧل اﻟﻰ اﻟﻣﻘﺎوﻣﺔ زاد ﺣﺟم اﻟﻣﻘﺎوﻣﺔ.
اﻟﻣﺛﺎل اﻟﺗﺎﻟﻰ ﯾﺣﺗوى ﻋﻠﻰ ﻣﻘﺎوﻣﺔ ﻗﯾﻣﺔ اﻟطﺎﻗﺔ اﻟﺗﻰ ﯾﻣﻛن ان ﺗﺗﺣﻣﻠﻬﺎ 5وات
28
ARDUINO FROM ZERO TO HERO
ﯾوﺟد ﻣﻧﻪ اﺷﻛﺎل واﻟوان وﻣﻘﺎﺳﺎت ﻣﺧﺗﻠﻔﺔ ﻻﻧﻪ ﯾﺳﺗﺧدم ﻋﻠﻰ ﻧطﺎق واﺳﻊ ﺟدا ﻓﻰ اﻻﺟﻬزة اﻻﻟﻛﺗروﻧﯾﺔ وﻻﯾوﺟد ﺑﯾت
ﺧﺎﻟﻰ ﻣن اﻟﻠﯾد.
اﻟﺗﯾﺎر اﻟﻛﻬرﺑﻰ ﯾﻣر داﺧل اﻟﻠﯾد ﻓﻰ اﺗﺟﺎﻩ واﺣد ﻓﻘط ﻟﻬذا ﯾﺟب اﻟﺣذر ﻋﻧد ﺗوﺻﯾﻠﻪ اطراﻓﻪ ﻟﺗﺟﻧب إﺣﺗراﻗﻪ ،اﻟطرف
اﻟﻣوﺟب ﯾﺳﻣﻰ ) (Anodeاﻣﺎ اﻟطرف اﻟﺳﺎﻟب ﯾﺳﻣﻰ ) ،(Cathodeوﻟﺗﻣﯾﯾز اﻟطرﻓﺎن ﻓﻧﺟد اﻟطرف اﻟﻣوﺟب اطول ﻣن
اﻟطرف اﻟﺳﺎﻟب
اﻟﻠﯿﺪ واﻟﻤﻘﺎوﻣﺔ
ﺳوف ﻧﺳﺗﺧدم اﻟﻠﯾد ﻛﺛﯾ ار ﺧﻼل ﻫذا اﻟﻛﺗﺎب ﻣﻊ اﻻردوﯾﻧو ،واﻟﻠﯾد اﻟﻣﺳﺗﺧدم ﯾﺣﺗﺎج اﻟﻰ 1.7ﻓوﻟت وﺗﯾﺎر ،5:7 mA
وﺑﻧﻔس اﻟوﻗت ﻧﺟد ان اﻻردوﯾﻧو ﯾﻧﺗﺞ 5ﻓوﻟت وﺗﯾﺎر ،40mAﻟﻬذا ﺳوف ﻧﺣﺗﺎج اﻟﻰ ﺗﻘﻠﯾل ﻗﯾم اﻟﺗﯾﺎر! ﻫﻧﺎ ﯾظﻬر دور
اﻟﻣﻘﺎوﻣﺔ اﻟﺗﻰ ﺗم ﺷرﺣﻬﺎ ﻣﻧذ ﻗﻠﯾل ،ﻟﻛن ﻣﺎﻫﻰ ﻗﯾﻣﺔ اﻟﻣﻘﺎوﻣﺔ اﻟﻣﻧﺎﺳﺑﺔ اﻟﺗﻰ ﺗﺳﻣﺢ ﺑﻣرور 5ﻓوﻟت وﺧروج 1.7ﻣﻠﻰ
ﻓوﻟت؟
اﻻﺟﺎﺑﺔ ﻧﺟدﻫﺎ ﻣن ﺧﻼل ﻗﺎﻧون ﺷﻬﯾر ﺟدا ﺳوف ﻧﺳﺗﺧدﻣﻪ داﺋﻣﺎ وﻫو ﻗﺎﻧون اوم
ﺣﯾث ان:
29
ARDUINO FROM ZERO TO HERO
:Iﻫو اﻟﺗﯾﺎر اﻟﻣراد اﻟﺣﺻول ﻋﻠﯾﻪ ،وﻫﻧﺎ ﯾﺳﺎوى ،10mAوﻻﺑد ﻣن وﺿﻊ اﻟﻘﯾﻣﺔ Aﻟﻬذا ﺳﺗﻛون 0.01A
ﻣﻼﺣﻈﺔ
اﻟﻣﻛوﻧﺎت اﻻﻟﻛﺗروﻧﯾﺔ ﺣﺳﺎﺳﺔ ﺟدا ﻟﻠﺗﯾﺎر اﻟﻛﻬرﺑﻰ وﯾﻣﻛن ان ﺗﺗﻠف ﺑﺳرﻋﺔ ﻓﻰ ﺣﺎﻟﺔ ﺷدة اﻟﺗﯾﺎر ﻟﻬذا ﻣن اﻻﻓﺿل
اﺳﺗﺧدام ﻗﯾم ﻣﻘﺎوﻣﺔ اﻛﺑر ﻣﻣﺎ ﺗﺣﺻل ﻋﻠﯾﻪ ﻣن اﻟﻣﻌﺎدﻻت )وﻗﺎﯾﺔ ﻓﻘط( ،ﻟﻬذا ﺳوف ﻧﺳﺗﺧدم ﻣﻘﺎوﻣﺔ 560اوم ﺑدﻻً ﻣن
330اوم واﻟﺗﻰ ﺗﻧﺗﺞ 6mAوﻟﯾس 10mAﻛﻣﺎ ﺳﺑق.
30
ARDUINO FROM ZERO TO HERO
ﺗﺎﺗﻰ ﻟوﺣﺔ اﻟﺗﺟﺎرب ﺑﺄﺷﻛﺎل ﻋدﯾدة واﻟ وان ﻣﺧﺗﻠﻔﺔ واﻻﻛﺛر ﺷﯾوﻋﺎً ﻫو اﻟﻠون اﻻﺑﯾض ،وﺗﺟد اﻧﻬﺎ ﺗﺗﻛون ﻣن ﺻﻔوف
ﻗﺻﯾرة واﻋﻣدة طوﯾﻠﺔ ،ﻛل ﺻف او ﻋﻣود ﯾﺣﺗوى ﻋﻠﻰ ﺛﻘوب ﺻﻐﯾرة ﻣﺗﺻﻠﺔ ﻣﻌﺄ ،وﻻﯾوﺟد ﺻﻔوف ﻣﺗﺻﻠﺔ ﻣﻊ ﺑﻌﺿﻬﺎ
وﻟﯾﺗم ﺗوﺻﯾل ﺻف ﻣﻊ اﺧر ﯾﺗم اﺳﺗﺧدام اﺳﻼك ﻧﺣﺎس ذات ﻣﻘﺎﺳﺎت ﻣﺧﺗﻠﻔﺔ ﻛﺎﻟﺗﺎﻟﻰ
31
ARDUINO FROM ZERO TO HERO
ﻣﺘﻄﻠﺒﺎت اﻟﻤﺸﺮوع
-١ﻟﯾد :ﻋدد .5
-٢ﻣﻘﺎوﻣﺔ ﻗﯾﻣﺗﻬﺎ 650اوم ،ﻋدد .5
-٣ﻟوﺣﺔ ﺗﺟﺎرب ،ﻋدد .1
-٤اﺳﻼك ﺗوﺻﯾل ﻟوﺣﺔ اﻟﺗﺟﺎرب ﻣﺧﺗﻠﻔﺔ اﻟﻣﻘﺎﺳﺎت.
-٥ﻟوﺣﺔ اردوﯾﻧو ووﺻﻠﺔ .USB
اﻻﺳﻜﺘﺶ
ﺳﯾﺗم اﺳﺗﺧدام اﻟطرف 2دﯾﺟﯾﺗﺎل ﻓﻰ اﻻردوﯾﻧو ﻟﺗوﺻﺑل ﻟﯾد رﻗم ،1وﻫﻛذا ﺑﻧﻔس اﻟﺗرﺗﯾب ﺣﺗﻰ اﻟطرف 6ﻟﺗوﺻﯾل اﻟﻠﯾد
رﻗم .5
ﻧﻔس اﻟﺧطوات اﻟﺗﻰ ﺗم اﺳﺗﺧداﻣﻬﺎ ﻓﻰ اﻟﻔﺻل اﻟﺛﺎﻧﻰ ﺳوف ﻧﺳﺗﺧدﻣﻬﺎ ﻫﻧﺎ ﻟﻛن ﻋﻠﻰ ﻧطﺎق اوﺳﻊ ،ﺣﯾث ﺳﻧﻘوم ﺑﺗﻌرﯾف
ﻛل طرف دﯾﺟﯾﺗﺎل ﻋﻠﻰ اﻧﻪ ﻓﻰ ﺣﺎﻟﺔ إﺧراج ﺗﯾﺎر ﻛﻬرﺑﻰ )ﻹﺿﺎءة اﻟﻠﯾد( داﺧل داﻟﺔ اﻟﺗﻌرﯾف
)(void setup
{
;)pinMode(2, OUTPUT
;)pinMode(3, OUTPUT
;)pinMode(4, OUTPUT
;)pinMode(5, OUTPUT
;)pinMode(6, OUTPUT
}
32
ARDUINO FROM ZERO TO HERO
ﺛم ﻧﺑدأ ﻓﻰ داﻟﺔ اﻟﺗﻛرار ﺣ ﯾث ﺳﯾﺗم إرﺳﺎل اﻻﺷﺎرات اﻟﻛﻬرﺑﯾﺔ ﻟﻛل ﻟﯾد ﺛم اﻻﻧﺗظﺎر ﻧﺻف ﺛﺎﻧﯾﺔ ﻗﺑل إطﻔﺎء اﻟﻠﯾد ﻣرة
اﺧرى )ﻣﻧﻊ إرﺳﺎل إﺷﺎرة ﻛﻬرﺑﯾﺔ( ٕواﺿﺎءة اﻟﻠﯾد اﻟﺗﺎﻟﻰ ﻟﻪ وﻫﻛذا ﺣﺗﻰ اﻟﻠﯾد رﻗم 5ﺛم ﺗﻛرر ﻧﻔس اﻟﺧﺻوات ﺑﺈﺳﺗﻣﺎ ار دون
ﺗوﻗف
)(void loop
{
;)digitalWrite(2, HIGH
;)delay(500
;)digitalWrite(2, LOW
;)digitalWrite(3, HIGH
;)delay(500
;)digitalWrite(3, LOW
;)digitalWrite(4, HIGH
;)delay(500
;)digitalWrite(4, LOW
;)digitalWrite(5, HIGH
;)delay(500
;)digitalWrite(5, LOW
;)digitalWrite(6, HIGH
;)delay(500
;)digitalWrite(6, LOW
;)digitalWrite(5, HIGH
;)delay(500
;)digitalWrite(5, LOW
;)digitalWrite(4, HIGH
;)delay(500
;)digitalWrite(4, LOW
;)digitalWrite(3, HIGH
;)delay(500
;)digitalWrite(3, LOW
}
33
ARDUINO FROM ZERO TO HERO
)(Variables اﻟﻤﺘﻐﯿﺮات
ﻫل ﻻﺣظت ﺧﻼل اﻟﻣﺷروع اﻟﺳﺎﺑق ان ﺳطور اﻟﺑ رﻧﺎﻣﺞ ﻛﺛﯾرة ،واﯾﺿﺎإ ﻟو اردت ﻋﻣل ﺗﻌدﯾل واﺣد ﺳوف ﺗﻘوم
ﺑﺗﻌدﯾﻼت ﻋدﯾدة ،ﻣﺛل ﺗﻌدﯾل ﻗﯾﻣﺔ اﻟوﻗت ﻣن 500ﻣﻠﻰ ﺛﺎﻧﯾﺔ اﻟﻰ 250ﻣﻠﻰ ﺛﺎﻧﯾﺔ ،ﺳﺗﺟد ﻧﻔﺳك ﺗﻌدل ﻓﻰ ﺧﻣس اﻣﺎﻛن
ﻛل ﻣرة ﺗرﯾد ان ﺗﻌدل ﻗﯾﻣﺔ اﻟوﻗت ﻣﻣﺎ ﯾﻬدر وﻗت ﻛﺛﯾر ﺟدا وﻣﺟﻬود ﯾﻣﻛ ن ﺗﻔﺎدﯾﻪ ﻣن ﺧﻼل إﺳﺗﺧدام ﻋﻧﺻر ﺟدﯾد ﻓﻰ
اﻟﺑرﻣﺟﺔ ﯾﺳﻣﻰ اﻟﻣﺗﻐﯾر ) ،(Variableوﻫذا اﻟﻣﺗﻐﯾر ﺳوف ﯾﺣل ﻣﺣل اﻟﻘﯾم اﻟﻣﺗﻛررة ﻓﻰ اﻟﺑرﻧﺎج )ﻣﺎﻧﻊ ﻟﺗﻛرار ﻧﻔس
اﻟﻌﻧﺎﺻر اﻛﺛر ﻣن ﻣرة( ﻣﻣﺎ ﯾؤدى اﻟﻰ إﺧﺗﺻﺎر وﻗت اﻟﺗﻧﻔﯾذ ﻣﻊ ﺑذل ﻣﺟﻬود أﻗل.
ﻓﻰ اﻟﻣﺛﺎل اﻟﺳﺎﺑق ﯾﻣﻛن إﺳﺗﺑدال ﻗﯾﻣﺔ اﻟوﻗت ﺑﻣﺗﻐﯾر )ﻣﻛﺎن ﻓﻰ ذاﻛرة اﻟﻣﺗﺣﻛم اﻟدﻗﯾق ﯾﻣﻛن ﺗﻐﯾﯾر ﻗﯾﻣﺗﻪ ﻓﻰ اى وﻗت
ﺧﻼل ﺧطوة واﺣدة ﻓﻘط( ﻣﺛل اﻟﻣﺗﻐﯾر ) (dﻣﻊ ﺗﺣدﯾد ﻗﯾﻣﺔ ﻫذا اﻟﻣﺗﻐﯾر ﻣرة واﺣدة ﻓﻘط ﻣﻣﺎ ﯾﻧﻌﻛس ﻋﻠﻰ ﻛل اﻻﻣﺎﻛن
اﻟﺧﺎﺻﺔ ﺑﻧﻔس اﻟوﻗت ﻓﻰ ﻛل ﺳطور اﻟﺑرﻧﺎﻣﺞ ﻣﻣﺎ ﯾﺳﻬل ﻋﻣل اﻟﺑرﻧﺎﻣﺞ ،ﻓﻣﺛﻼ ﻧﺳﺗﺧدم ﻣﺗﻐﯾر اﻟوﻗت ﻧﺟد اﻟﺑرﻧﺎﻣﺞ
ﺑﺎﻟﺷﻛل اﻟﺟدﯾد ﻫﻛذا
;int d = 100
)(void setup
{
;)pinMode(2, OUTPUT
;)pinMode(3, OUTPUT
;)pinMode(4, OUTPUT
;)pinMode(5, OUTPUT
;)pinMode(6, OUTPUT
}
)(void loop
{
;)digitalWrite(2, HIGH
;)delay(d
;)digitalWrite(2, LOW
;)digitalWrite(3, HIGH
;)delay(d
;)digitalWrite(3, LOW
;)digitalWrite(4, HIGH
;)delay(d
;)digitalWrite(4, LOW
;)digitalWrite(5, HIGH
;)delay(d
;)digitalWrite(5, LOW
;)digitalWrite(6, HIGH
;)delay(d
;)digitalWrite(6, LOW
;)digitalWrite(5, HIGH
;)delay(d
;)digitalWrite(5, LOW
;)digitalWrite(4, HIGH
;)delay(d
;)digitalWrite(4, LOW
;)digitalWrite(3, HIGH
;)delay(d
;)digitalWrite(3, LOW
}
اﻻن اﻟﺑرﻧﺎﻣﺞ اﺻﺑﺢ اﺳﻬل ﻓﻰ ﺗﻐﯾﯾر ﻗﯾﻣﺔ اﻟوﻗت ﻓﻰ اﻟﺳطر اﻻول ﻓﻘط ﻣﻣﺎ ﯾﺗم ﺗطﺑﯾﻘﻪ ﻣﺑﺎﺷرة ﻓﻰ ﻛل ﺳطور
اﻟﺑرﻧﺎﻣﺞ ﺑﻧﻔس اﻟوﻗت.
34
ARDUINO FROM ZERO TO HERO
ﻫل ﻻﺣظت ان ﻫﻧﺎك ﺗﻛرار اﺧر ﻓﻰ اﻟﺑرﻧﺎﻣﺞ ﯾﻣﻛن اﻻﺳﺗﻐﻧﺎء ﻋﻧﻪ؟ ﻧﻌم ﻓﻰ ﺳطور اطراف اﻻردوﯾﻧو ﻹطﻔﺎء اﻟﻠﯾدات،
ﻟﻬذا ﺳوف ﻧﺳﺗﺑدﻟﻬﺎ ﺑﻣﺗﻐﯾرات اﺧرى وﻟﻛن ﻧﺟد ﻫﻧﺎ ﻣﺗﻐﯾرات ﺗﺻﺎﻋدﯾﺔ ﺑرﻗم واﺣدة ﻓﻘط ﺗﺑدأ ﻣن اﻟطرف 2اﻟﻰ اﻟطرف
6ﻓﻘط ،ﻫﻧﺎ ﻧﺳﺗﺧدم داﻟﺔ اﻟﺗﻛرار ﻟﻣرات ﻣﺣددة ﻓﻘط ،for loopﻓﯾﺻﺑﺢ اﻟﺑرﻧﺎﻣﺞ ﻫﻛذا
;int d = 100
)(void setup
{
;)pinMode(2, OUTPUT
;)pinMode(3, OUTPUT
;)pinMode(4, OUTPUT
;)pinMode(5, OUTPUT
;)pinMode(6, OUTPUT
}
)(void loop
{
) for ( int a = 2; a < 7 ; a++
{
;)digitalWrite(a, HIGH
;)delay(d
;)digitalWrite(a, LOW
;)delay(d
}
}
ﻫﻧﺎ ﺗم اﺳﺗﺧدام ﻋداد ﺷرطﻰ ﺣﯾث ﯾﺳﺗﻣر اﻟﻌداد طﺎﻟﻣﺎ اﻟﺷرط ﺻﺣﯾﺢ ﺑﯾن اﻟﻘوﺳﯾن )ﻫﻧﺎ اﻟﻣﺗﻐﯾر aﻗﯾﻣﺗﻪ اﻗل ﻣن 7
ﺣﯾث ﻧرﯾد ان ﯾﺗوﻗف ﻋﻧد اﻟرﻗم 6وﻫو اﺧر طرف دﯾﺟﯾﺗﺎل ﺑﺎﻟﻣﺗﺣﻛم اﻟدﻗﯾق ﻹﺿﺎءة اﻟﻠﯾد( ،وطﺎﻟﻣﺎ اﻟﺷرط ﺻﺣﯾﺢ ﯾﺗم
ﺗﻧﻔﯾذ ﻣﺎ ﺑداﺧل }{ وﺗﺑدﯾل اﻟﻣﺗﻐﯾران a & bﺑﺎرﻗﺎم اطراف اﻟﻣﺗﺣ ﻛم اﻟدﻗﯾق ﻻﺿﺎءة ٕواطﻔﺎء اﻟﻠﯾدات ،وﺑﻌد اﻻﻧﺗﻬﺎء ﻣن
ﺗﻧﻔﯾذ اﻻواﻣر داﺧل }{ ﯾﺗم اﻟرﺟوع ﻣرة اﺧرى اﻟﻰ اﻟﻌداد ﻣﻊ زﯾﺎدة ﻗﯾﻣﺔ اﻟﻣﺗﻐﯾر aﺑﻣﻘدار واﺣد ﺻﺣﯾﺢ ﻟﺗﺻﺑﺢ a = 3
ﺑﺳﺑب اﻟﻣﻌﺎدﻟﺔ ) a++زﯾﺎدة ﻗﯾﻣﺔ aﺑواﺣد ﺻﺣﯾﺢ ﻛل ﻣرة ﯾﻌود اﻟﺑرﻧﺎﻣﺞ اﻟﻰ اﻟﻌداد( ،وﻫﻧﺎ ﯾﺗم ﺗﻧﻔﯾذ ﺧطوات اﻟﺑرﻧﺎﻣﺞ
ﺑداﯾﺔ ﻣن a=2ﺣﺗﻰ a=6ﺛم ﯾﻧﺗﻬﻰ ﺗﻧﻔﯾذ ﻣﺎ ﺑداﺧل }{ وﯾﺗم ﺗﻧﻔﯾذ اﻻواﻣر اﻟﺗﺎﻟﯾﺔ ﻟﻠﻌداد وﻫﻰ ﻫﻧﺎ ﻻﯾوﺟد اواﻣر اﺧرى
ﻓﯾﻌود اﻟﻰ داﻟﺔ loopﻣرة اﺧرى وﯾﺑداء اﻟﻌداد forﻓﻰ اﻟﺗﻧﻔﯾذ ﻣن اﻟﺑداﯾﺔ ﺑﻘﯾﻣﺔ a=2وﻫﻛذا ﺗﺳﺗﻣر ﺑدون ﺗوﻗف.
-١ﺿﻌف اﻟﺑطﺎرﯾﺔ :وﻫو ﻧﺗﯾﺟﺔ ﻹﻧﺧﻔﺎض اﻟﻔوﻟت )اﻟﺿﻐط( ﺑﯾن طرﻓﻰ اﻟﺑطﺎرﯾﺔ ﻣﻣﺎ ﯾﻘﻠل ﻣن ﻣرور اﻟﺗﯾﺎر
اﻟﻛﻬرﺑﻰ داﺧل اﻟﻠﻌﺑﺔ واﻟذى ﯾﻧﺗﺞ ﻋﻧﻪ ﺑطء ﺣرﻛﺔ اﻟﻠﻌﺑﺔ او ﺿﻌف اﻻﺿﺎءة )ﺗﺣدﺛﻧﺎ ﻓﻰ ﻫذا اﻟﻔﺿل ﻋن
اﻟﻔوﻟت واﻧﻪ اﻟﻣﺳؤل ﻋن ﻣرور اﻟﺗﯾﺎر اﻟﻛﻬرﺑﻰ وﻛﻠﻣﺎ زاد اﻟﻔوﻟت زاد ﻣرور اﻟﺗﯾﺎر اﻟﻛﻬرﺑﻰ واﻟﻌﻛس ﺻﺣﯾﺢ(.
35
ARDUINO FROM ZERO TO HERO
-٢اﻟﺗﺣﻛم ﻓﻰ ﺳرﻋﺔ اﻟﻣوﺗور او ﻣﺳﺗوى اﻻﺿﺎءة :إذا اردت ان ﺗﻘﻠل ﺳرﻋﺔ اﻟﺳﯾﺎرة ﻓﺈﻧك ﻣﻧطﻘﯾﺎ ﺗﻔﻛر ﻓﻰ
إﺳﺗﺧدام ﺑطﺎرﯾﺔ ﺿﻌﯾﻔﺔ او ﺑطﺎرﯾﺔ اﻗل ﻓﻰ اﻟﻔوﻟت ،واﯾﺿﺎً إذا اردت ان ﺗﻘﻠل ﻣﺳﺗوى إﺿﺎءة ﻣﺻﺑﺎح ﻓﺳﺗﻔﻛر
ﺑﺎﺳﺗﺧدام ﺑطﺎرﯾﺔ اﻗل ﻓﻰ اﻟﻔوﻟت ،ﻫذا اﻻﺳﻠوب ﺻﺣﯾﺢ ﻓﻰ اﻟﺗﺣﻛم ﺑﺳرﻋﺔ او إﺿﺎءة )ﻣﺳﺗوى ﻣرور اﻟﺗﯾﺎر
اﻟﻛﻬرﺑﻰ( ﻓﻰ اﻟداﺋرة اﻟﻛﻬرﺑﯾﺔ ،ﻟﻛﻧﻪ اﺳﻠوب ﻏﯾر ﻋﻣﻠﻰ وﻻﯾﻣﻛن ﺗطﺑﯾﻘﻪ إذا اردﻧﺎ ﺗﻐﯾﯾر ﺳرﻋﺔ ﻣوﺗور او ﺗﻐﯾﯾر
ﻣﺳﺗوى إﺿﺎءة ﻟﻣﺑﺔ ﺑدون ﺗﻐﯾﯾر اﻟﺑطﺎرﯾﺔ !
ﻣﻼﺣﻈﺔ
ﻣن ﺧﻼل اﻻﺑﺣﺎث ﻻﺣظ اﻟﻌﻠﻣﺎء ان ﻋﯾن اﻻﻧﺳﺎن ﺗرى اﻟﺗرددات اﻟﺑطﯾﺋﺔ ﺧﻼل اﻟﺛﺎﻧﯾﺔ اﻟواﺣدة ،ﻣﺛل اﻟﺧط اﻟﻣﺗﺣرك
ﻓﻰ اﻟﺗﻠﯾﻔزﯾون اﻟﻘدﯾم ،وﻟﻛﻰ ﻧﺗﻐﻠب ﻋﻠﻰ ﻫذﻩ اﻟﻣﺷﻛﻠﺔ ﻧزﯾد اﻟﺗردد ﻟﯾﺻﺑﺢ اﻛﺑر ﻣن 50ﺗردد ﻓﻰ اﻟﺛﺎﻧﯾﺔ اﻟواﺣدة )ﻧﻼﺣظ
ان ﺳرﻋﺔ اﻟﻣﻌﺎﻟﺞ ﺗﻘﺎس ﺑﺎﻟﺗردد وﯾﻘﺎس اﻟﻬرﺗز HZوﻻﯾﻣﻛﻧﻧﺎ ﻣﻼﺣظﺔ ﻫذا اﻟﺳرﻋﺎت ﻻﻧﻬﺎ ﺗﺻل اﻟﻰ اﻻف او ﻣﻼﯾﯾن
اﻟﻬرﺗز ﺑﺎﻟﺛﺎﻧﯾﺔ اﻟ واﺣدة ﻣﻣﺎ ﺟﻌﻠﻧﺎ ﻧﻘﺳم اﻟﺛﺎﻧﯾﺔ اﻟﻰ اﺟزاء اﺻﻐر ﺗﺳﻣﻰ ﻣﻠﻰ ﺛﺎﻧﯾﺔ ﻛﻣﺎ ﺳﺑق ﺷرﺣﻪ ﻣن ﻗﺑل(.
ﻛﻠﻧﺎ ﯾﻌﺗﻘد ان اﻟﻠﻣﺑﺔ ﻋﻧدﻣﺎ ﯾﺻل اﻟﯾﻬﺎ اﻟﺗﯾﺎر اﻟﻛﻬرﺑﻰ ﻓﺈﻧﻬﺎ ﺗﺻﺑﺢ ﻣﺿﯾﺋﺔ طوال اﻟوﻗت ،ﻟﻛن اﻟﺣﻘﯾﻘﺔ اﻧﻬﺎ ﺗﻧطﻔﺊ
وﺗﺿﺊ ﻋدة ﻣرات ) ٥٠٠ﻣرة ﺑﺎﻟﺛﺎﻧﯾﺔ = ﺗردد اﻟﻠﻣﺑﺔ( ﺑﺎﻟﺛﺎﻧﯾﺔ اﻟواﺣدة وﻫو ﺗردد اﻋﻠﻰ ﻣن ﺗردد ﻋﯾن اﻻﻧﺳﺎن ) ٥٠ﺗردد
ﺑﺎﻟﺛﺎﻧﯾﺔ( ،ﻟﻬذا ﻧرى اﻟﻠﻣﺑﺔ داﺋﻣﺎ ﻣﺿﯾﺋﺔ )ﻣﺗوﺳط ﻓﺗرة وﺻول ﺗﯾﺎر ﻟﻠﻣﺑﺔ اﻟﻰ ﻧﺳﺑﺔ إﻧﻘطﺎع اﻟﺗﯾﺎر ﺧﻼل اﻟﺛﺎﻧﯾﺔ اﻟواﺣدة(.
ﻣﺛﺎل ﻟو ﻛﺎن ﻣﺗوﺳط ﻓﺗ رة إﺿﺎءة اﻟﻠﻣﺑﺔ ﻓﻰ اﻟﺛﺎﻧﯾﺔ اﻟﻰ ﻣﺗوﺳط ﻓﺗرة إطﻔﺎﺋﻬﺎ %٥٠ﺳﻧﻼﺣظ إﻧﺧﻔﺎض اﻻﺿﺎءة اﻟﻰ
اﻟﻧﺻف ،ﻓﻬﻧﺎ ﻧﺗﺣﻛم ﻓﻰ ﻣﺳﺗوى إﺿﺎءة اﻟﻠﻣﺑﺔ ﻣن ﺧﻼل ﻣﺗوﺳط ﻓﺗ رة وﺻول ﺗﯾﺎر ﻛﻬرﺑﻰ اﻟﻰ ﻓﺗرة إﻧﻘطﺎع اﻟﺗﯾﺎر
اﻟﻛﻬرﺑﻰ ﻟﻠﻣﺑﺔ .ﻋرض اﻟﻣوﺟﺔ اﻟﻛﻬرﺑﯾﺔ )اﻟﺗردد( ﺗﺣدد ﻧﺳﺑﺔ وﺻول اﻟﺗﯾﺎر اﻟﻰ إﻧﻘطﺎﻋﻪ ﻟﻬذا ﺑﺗﻌدﯾل ﻋرض اﻟﻣوﺟﺔ
اﻟﻰ اﻟﻧﺻف ﺗﺻﺑﺢ ﻧﺳﺑﺔ وﺻول اﻟﺗﯾﺎر ﻧﺻف زﻣن إﻧﻘطﺎع اﻟﺗﯾﺎر ﻓﯾﺿﺊ اﻟﻣﺻﺑﺎح ﺑﻧﺻف طﺎﻗﺗﻪ ﻓﻘط ،وﻟو اﺻﺑﺢ
PWM (Pulse Width ﻋرض اﻟﻣوﺟﺔ اﻟرﺑﻊ ﯾﺿﺊ اﻟﻣﺻﺑﺎح ﺑرﺑﻊ طﺎﻗﺗﻪ وﻫذا ﯾﺳﻣﻰ ﺗﻐﯾﯾر ﻋرض اﻟﻣوﺟﺔ
) Modulationواﻟﺗﻰ ﺳﻧﺳﺗﺧدﻣﻬﺎ ﻛﺛﯾ ارَ ﻓﻰ ﻣﺷروﻋﺎت اﻟﺗﺣﻛم ﺑﺳرﻋﺔ اﻟﻣوﺗور )اﻟﺗﺣﻛم ﺑﻌرض ﻣوﺟﺔ اﻟﺗﯾﺎر ﺑﺎﻟﻣوﺟب
او اﻟﺳﺎﻟب ﻓﻰ اﻟﺛﺎﻧﯾﺔ(.
36
ARDUINO FROM ZERO TO HERO
اﻟﺻورة اﻻوﻟﻰ ﻧﺟد ﻧﺳﺑﺔ وﺻول اﻟﺗﯾﺎر اﻟﻰ إﻧﻘطﺎﻋﻪ ﻫﻰ %100اى ان ﻋرض اﻟﻣوﺟﺔ ﻛﻠﻪ ﻣوﺻل ﻟﻠﻛﻬرﺑﺎء دون
إﻧﻘطﺎع.
اﻟﺻورة اﻟﺛﺎﻧﯾﺔ ﻧﺳﺑﺔ وﺻول اﻟﺗﯾﺎر )ﻋرض اﻟﻣوﺟﺔ( = %60ﻧﻧﻣﺎ ﯾﺿﻰ اﻟﻣﺻﺑﺎح ﺑﻧﺳﺑﺔ %60ﻓﻘط ﻣن طﺎﻗﺗﻪ.
اﻟﺻورة اﻟﺛﺎﻟﺛﺔ ﻧﺟد ﻋرض اﻟﻣوﺟﺔ = %40ﺷدة إﺿﺎءة اﻟﻣﺻﺑﺎح = ﻧﺳﺑﺔ وﺻول اﻟﺗﯾﺎر اﻟﻛﻬ رﺑﻰ ﻟﻠﻣﺻﺑﺎح.
اﻟﺻورة اﻟراﺑﻌﺔ ﻧﺟد ﻋرض اﻟﻣوﺟﺔ = %20ﺷدة إﺿﺎءة اﻟﻣﺻﺑﺎح = ﻧﺳﺑﺔ وﺻول اﻟﺗﯾﺎر اﻟﻛﻬرﺑﻰ ﻟﻠﻣﺻﺑﺎح.
ﯾﻣﻛن ﺗوﻟﯾد ﻧﺑﺿﺎت ﻣﺗﻐﯾرة ﺑﺎﺳﺗﺧدام اﻻردوﯾﻧو ﻣن ﺧﻼل ﺑﻌض اﻻطراف رﻗم 3, 5, 6, 9, 20, 11ﺣﯾث ﯾوﺟد رﻣز
PWMﺑﺟوارﻫﺎ وﻫو )~(.
ﺣﯾث ان xﻫو رﻗم اﻟطرف ﺑﺎﻻردوﯾﻧو اﻣﺎ yﻫﻰ ﻗﯾﻣﺔ ﻋرض اﻟﻣوﺟﺔ واﻟﺗﻰ ﺗﺗراوح ﻣن (0%) 0اﻟﻰ ،(100%) 255
ﺣﯾث ان ﻫذﻩ اﻻطراف ﺗﺳﺗﺧدم 8ﺑت واﻟﺗﻰ ﺗﺳﺎوى ﺑﺎﻟﻧظﺎم اﻟﻌﺷرى 0اﻟﻰ .255
اﻻﺳﻜﺘﺶ
;int d = 5
)(void setup
{
pinMode(3, OUTPUT); // LED control pin is 3, a PWM capable pin
}
)(void loop
{
) for ( int a = 0 ; a < 256 ; a++
{
;)analogWrite(3, a
37
ARDUINO FROM ZERO TO HERO
;)delay(d
}
) for ( int a = 255 ; a >= 0 ; a--
{
;)analogWrite(3, a
;)delay(d
}
;)delay(200
}
اﻟﺘﺮاﻧﺰﺳﺘﻮر )(Transistor
ﻛﻣﺎ ﺗم ﺷرﺣﻪ ﻣﺳﺑﻘﺎ ان اﻻردوﯾﻧو ﯾﺳﺗطﯾﻊ ان ﯾوﻟد ﺗﯾﺎر ﻛﻬرﺑﻰ ﻣن ﺧﻼل اى ﻣن اطراﻓﻪ ﻗﯾﻣﺗﻪ 40mAﻓﻘط ،ﻟﻬذا
ﻻﻧﺳﺗطﯾﻊ اﻟﺗﻌﺎﻣل ﻣﻊ اى ﺟﻬﺎز ﯾﺣﺗﺎج ﺗﯾﺎر ﻛﻬرﺑﻰ اﻋﻠﻰ ﻣن ﻫذا ،اﻟﺣل ﻫو اﺳﺗﺧدام وﺳﯾط اﻟﻛﺗروﻧﻰ ﯾﺳﺗطﯾﻊ ﺗوﻟﯾد
ﺗﯾﺎر ﻛﺑﯾر وﺑﻧﻔس اﻟوﻗت ﯾﻣﻛن اﻟﺗﺣﻛم ﻓﯾﻪ ﻣن ﺧﻼل اﻻردوﯾﻧو ،ﻫذا اﻟوﺳﯾط اﻻﻟﻛﺗروﻧﻰ ﻫو اﻟﺗراﻧزﺳﺗور واﻟذى ﻗد ﺗردد
اﺳﻣﻪ ﻛﺛﯾ ار ﻗﺑل ذﻟك اﻣﺎﻣك وﻟم ﺗﻛن ﺗﻌرف وﺿﯾﻔﺗﻪ.
ﺗﻌﺗﻣد ﻓﻛرة اﻟﺗ راﻧزﺳﺗور ﻋﻠﻰ ﺗوﺻﯾل ﻣﺻدر اﻟﺗﯾﺎر اﻟﻛﺑﯾر ﺑﺎﻟطرف ) C (collectorﻟﺗوﺟﯾﻬﻪ اﻟﻰ اﻟطرف )E (emitter
ﻟﺗﻐذﯾﺔ ﺟﻬﺎز ﻣﺗﺻل ﺑﻬذا اﻟطرف ،وﯾﺗم ﺗوﺻﯾل ﻫذان اﻟطرﻓﺎن ﻣن ﺧﻼل اﻟطرف ) B (baseواﻟﺗﻰ ﺗﺳﺗﻘﺑل ﺗﯾﺎر 40mA
ﻣن اﻻردوﯾﻧو وﺗﺗﺣرك ﻓﻰ اﺗﺟﺎﻩ اﻟطرﻓﺎن C + Eﻟﺗوﺻﯾﻠﻬﻣﺎ ﻣﻌﺎً ﻟﯾﻣر اﻟﺗﯾﺎر اﻟﻛﻬرﺑﻰ اﻟﻛﺑﯾر ﻣن اﻟﻣﺻدر Cاﻟﻰ اﻟﻬدف
ﺑﺎﻟطرف .E
ﻣﻼﺣظﺔ :ﯾﺟب ﻗراءة دﻟﯾل اﺳﺗﺧدام اﻟﺗرازﺳﺗور ﻗﺑل اﺳﺗﺧداﻣﻪ ﺣﯾث ﯾوﺟد ﺑﻌض اﻻﺧﺗﻼف ﻓﯾﻣﺎ ﺑﯾﻧﻬم طﺑﻘﺎ ﻟﻣودﯾل
اﻟﺗراﻧزﺳﺗور.
38
ARDUINO FROM ZERO TO HERO
Relay اﻟﻤﺮﺣﻞ
ﯾﺳﺗﺧدم ﻣﺛل اﻟﺗراﻧزﺳﺗور ﻟﻛن ﯾﺗﻌﺎﻣل ﻣﻊ ﺗﯾﺎر اﻋﻠﻰ ﻣﺛل 220vﻟﻣﻧﻊ ﺗﻠف اﻻردوﯾﻧو ،وﯾﺗﻛون ﻣن ﺧﻣس اطراف،
طرﻓﺎن ﻟﻠﺗﯾﺎر اﻟﺻﻐﯾر اﻟﺧﺎص ﺑﺎﻻردوﯾﻧو وﺛﻼث اطراف ﻟﻠﺗﺣﻛم ﻓﻰ اﻟﺗﯾﺎر اﻟﻛﺑﯾر ،ﯾﻘوم ﺑﺈﺻدار ﺻوت ﻋﻧدﻣﺎ ﯾﻌﻣل
ﻧﺗﯾﺟﺔ ﺗﺣرك ﯾد ﺗوﺻﯾل اﻟﺗﯾﺎر اﻟﻛﺑﯾر او ﻓﺻﻠﻪ
ﻣﺎذ ﺑﻌﺪ!
ﻟﻘد ﺗم اﻻﻧﺗﻬﺎء ﻣن اﻟﻔﺻل اﻟﺛﺎﻟث واﻟذى ﺗم ﻓﯾﻪ إﺳﺗﻌراض اﺳﺎﺳﯾﺎت اﻟﻛﻬرﺑﺎء واﻫم اﻟﻣﻛوﻧﺎت اﻻﻟﻛﺗروﻧﯾﺔ اﻟﺗﻰ ﺳﯾﺗم
اﺳﺗﺧداﻣﻬﺎ ﺧﻼل اﻟﻣﺷروﻋﺎت ﻓﻰ ﻫذا اﻟﻛﺗﺎب ،واﯾﺿﺎ ﺗم ﺷرح 3ﻣﺷروﻋﺎت ﺟدﯾدة ﻛﺗطﺑﯾق ﻟﻠﻣﻛوﻧﺎت اﻻﻟﻛﺗروﻧﯾﺔ
واﻟﻣﻌﻠوﻣﺎت اﻟﺟدﯾدة ﻓﻰ ﻫذا اﻟﻔﺻل ،ﻣﻊ ﻣﻌرﻓﺔ اﻻﺳﻠوب اﻟﻌﻠﻣﻰ ﻟﺑرﻣﺟﺔ اﻟﻣﺗﺣﻛم اﻟدﻗﯾق وﻛﯾﻔﯾﺔ ﺗﻠﺧﯾص اﻻواﻣر
اﻟﺑرﻣﺟﯾﺔ ﻣﻊ اﻟﺣﺻول ﻋﻠﻰ ﻧﻔس اﻟﻧﺗﺎﺋﺞ اﻟﻣطﻠوﺑﺔ.
ﻓﻰ اﻟﻔﺻل اﻟ ارﺑﻊ ﺳﺗﺟد اﻟﻣزﯾد ﻣن اﻟﻣﺗﻌﺔ واﻟﺗﺷوﯾق ﻣن ﺧﻼل ﺗطﺑﯾق ﺑراﻣﺞ اﻛﺛر واﻗﻌﯾﺔ ﻓﻰ ﺣﯾﺎﺗﻧﺎ اﻟﯾوﻣﯾﺔ ﻣﺛل ﻋﻣل
إﺷﺎرة ﻣرور ،وﻗﯾﺎس درﺟﺔ اﻟﺣ اررة ،واﺧﺗﺑﺎر ﻣﺳﺗوى ﺷﺣن اﻟﺑطﺎرﯾﺔ وﻏﯾرﻫﺎ ﻣن اﻟﺑراﻣﺞ اﻟﻣذﻫﻠﺔ ،ﻫل اﻧت ﻣﺳﺗﻌد ،ﻫﯾﺎ
ﺑﻧﺎ اﻻن...
39
ARDUINO FROM ZERO TO HERO
4
ﺗﺼﻤﯿﻢ وﺗﻨﻔﯿﺬ ﻣﺸﺮوﻋﺎت ﺣﻘﯿﻘﯿﺔ
ﻓﻰ ﻫذا اﻟﻔﺻل ﺳﻧﺗﻌرف اﻛﺛر ﻋﻠﻰ اﻻردوﯾﻧو وﻣزﯾد ﻣن اﻟﻌﻧﺎﺻر اﻻﻟﻛﺗروﻧﯾﺔ ،وﻛﯾف ﯾﻣﻛن ﻗراءة اﻟﺗﺻﻣﯾم اﻟﻬﻧدﺳﻰ
اﯾﺿﺎ اﻧواع اﻻﺷﺎرات اﻟﻛﻬرﺑﯾﺔ اﻟﺗﻰ ﯾﻣﻛن اﻟﺗﻌﺎﻣل ﻣﻌﻬﺎ .ﺛم ﻧﻧﺗﻘل اﻟﻰ ﻛﯾﻔﯾﺔ ﺗﺧزﯾن اﻟﻣﺗﻐﯾرات
ﻟﻠدواﺋر اﻻﻟﻛﺗروﻧﯾﺔ ،و ً
داﺧل اﻻردوﯾﻧو وﺗﻧﻔﯾذ اﻟﻌﻣﻠﯾﺎت اﻟﺣﺳﺎﺑﯾﺔ واﻟﻣﻧطﻘﯾﺔ ﻣﻊ اﻟﺗطﺑﯾق اﻟﻌﻣﻠﻰ ﻟﻬذﻩ اﻟﻣﻌﻠوﻣﺎت اﻟﺟدﯾدة.
40
ARDUINO FROM ZERO TO HERO
ﻟﻮﺣﺪة اﻻردوﯾﻨﻮ
ﯾﻛون ﺷﻛﻠﻬﺎ ﺑﺳﯾط وﺗﺣﺗوى ﻋﻠﻰ ﺟﻣﯾﻊ اﻻطراف اﻟدﯾﺟﯾﺗﺎل واﻻﻧﺎﻟوج وﻣﺻﺎدر اﻟﻛﻬرﺑﺎء ﻛﻣﺎ ﻧرى
اﻟﻤﻘﺎوﻣﺔ
وﯾﻣﻛن ﻛﺗﺎﺑﺔ ﻗﯾﻣﺔ اﻟﻣﻘﺎوﻣﺔ ورﻗﻣﻬﺎ ﻟو ﻫﻧﺎك اﻛﺛر ﻣن ﻣﻘﺎوﻣﺔ داﺧل اﻟﺷﻛل اﻟﻬﻧدﺳﻰ
اﻟﺪاﯾﻮد
اﻟﺷﻛل اﻟﻬﻧدﺳﻰ ﯾﺣﺗوى ﻋﻠﻰ ﻧوع اﻟداﯾود ٕواﺗﺟﺎﻩ اﻟﺗﯾﺎر
41
ARDUINO FROM ZERO TO HERO
اﻟﻠﯿﺪ
اﻟﺷﻛل اﻟﻬﻧدﺳﻰ ﯾﺷﺑﻪ اﻟداﯾود ﻟﻛن ﯾﺣﺗوى ﻋﻠﻰ ﺳﻬﻣﺎن ﻛﻌﻼﻣﺔ اﻹﺿﺎءة ﻣﻊ ﺗوﺿﯾﺢ اﻟطرف اﻟﻣوﺟب واﻟﺳﺎﻟب واﺗﺟﺎﻩ
اﻟﺗﯾﺎر
اﻟﺘﺮاﻧﺰﺳﺘﻮر
ﯾظﻬر ﻓﻰ اﻟﺷﻛل اﻟﻬﻧدﺳﻰ اﻟﺛﻼث اطراف C+B+Eﻟﻛن ﯾﺟب ﻣﻌرﻓﺔ ﻧوع اﻟﺗ راﻧزﺳﺗور ﻗﺑل اﻟﺑدء ﺑﺎﺳﺗﺧداﻣﻪ ﺣﯾث ان
اﻟﻧوع NPNﯾﺳﻣﺢ ﺑﻣرور اﻟﺗﯾﺎر ﻣن اﻟطرف Cاﻟﻰ اﻟطرف ،Eاﻣﺎ اﻟﻧوﻩ PNPﯾﺳﻣﺢ ﺑﻣرور اﻟﺗﯾﺎر ﻣن اﻟطرف Eاﻟﻰ
اﻟطرف .Cﺷوف ﯾﺗم اﺳﺗﺧدام اﻟرﻣز Qﻟﻠﺗراﻧزﺳﺗور اﻣﺎ اﻟرﻣز Rﻓﯾﺳﺗﺧدم ﻟﻠﻣﻘﺎوﻣﺔ
اﻟﻤﺮﺣﻞ
اﻟﺷﻛل اﻟﻬﻧدﺳﻰ اﻟﺧﺎص ﺑﻪ ﺑﺳﯾط وﯾﺣﺗوى ﻋﻠﻰ ﻣﻠف ﻋﻠﻰ ﺷﻛل ﺳﻠك ﻣﻠﻔوف )ﯾﺳﺗﻘﺑل ﺗﯾﺎر ﺑﺳﯾط ﻣن اﻻردوﯾﻧو(،
وﺛﻼث اطراف اﺧرى ﺗﺗﻌﺎﻣل ﻣﻊ اﻟﺗﯾﺎر اﻟﻛﺑﯾر ﺣﯾث ان اﻟوﺿﻊ NOﯾﻌﻧﻰ ﻻﯾوﺟد ﺗﯾﺎر اﻣﺎ اﻟوﺿﻊ NCﺑﻌﻧﻰ ان ﻫﻧﺎك
ﺗﯾﺎر ﯾﻣر واﻟداﺋرة ﻣﻐﻠﻘﺔ
42
ARDUINO FROM ZERO TO HERO
اﻻﺳﻼك اﻟﻤﺘﺼﻠﺔ
وﻫﻰ ﺗوﺻﯾل اﻻﺳﻼك ﻣﻌﺎً وﯾظﻬر ﺷﻛل اﻻﺗﺻﺎل ﻣن ﺧﻼل ﻧﻘطﺔ اﻟﺗﻼﻗﻰ وﺗظﻬر ﻛﻧﻘطﺔ ﻛﺑﯾرة اﻟﺣﺟم ﺷﺊ ﻣﺎ
43
ARDUINO FROM ZERO TO HERO
ﻣﻼﺣﻈﺔ
ﻫﻧﺎك ﺑرﻧﺎﻣﺞ ﻣﺟﺎﻧﻰ ﻋﻠﻰ اﻻﻧﺗرﻧت ﯾﺳﺗﺧدم ﻓﻰ رﺳم اﻻﺷﻛﺎل اﻟﻬﻧدﺳﯾﺔ ﻟﻠﻣﺷروﻋﺎت اﻻﻟﻛﺗروﻧﯾﺔ ،ﺣﯾث ﯾﻣﻛن اﻟﺣﺻول
ﻋﻠﯾﻪ ﻣن ﺧﻼل ﻫذا اﻟﻠﯾﻧك
http://www.fritzing.org/.
Capacitor اﻟﻤﻜﺜﻒ
ﻫو ﻣﻛون اﻟﻛﺗروﻧﻰ ﯾﺳﺗﺧدم ﻟﺗﺧزﯾن ﺷﺣﻧﺔ ﻛﻬرﺑﯾﺔ ﺑﻌد إﻧﻘطﺎع اﻟﺗﯾﺎر اﻟﻛﻬرﺑﻰ ،وﯾﺗﻛون ﻣن ﻟوﺣﺎن ﺑﯾﻧﻬﻣﺎ ﻋﺎزل
ﻟﻺﺣﺗﻔﺎظ ﺑﺗﻠك اﻟﺷﺣﻧﺔ اﻟﻛﻬرﺑﯾﺔ ،وﯾﻣﻛن اﻻﺳﺗﻔﺎدة ﻣن ﺗﻠك اﻟﺷﺣﻧﺔ ﻟﺗﻐذﯾﺔ اﻟﻣﻛوﻧﺎت اﻻﻟﻛﺗروﻧﯾﺔ اﻻﺧرى داﺧل اى
ﺟﻬﺎز ﻓﻰ ﺣﺎﻟﺔ إﻧﻘطﺎع اﻟﺗﯾﺎر اﻟﻛﻬرﺑﻰ ﻟﻣدة ﻣﻠﻰ ﺛﺎﻧﯾﺔ ﻟﻣﻧﻊ ﺣدوث ﺧﻠل ﻓﻰ ﻋﻣل ﺗﻠك اﻟﻣﻛوﻧﺎت اﻻﻟﻛﺗروﻧﯾﺔ وﺛﺑﺎت
اﻟﻘﯾﺎم ﺑوظﺎﺋﻔﻬﺎ.
44
ARDUINO FROM ZERO TO HERO
ﯾﺗم ﻗﯾﺎس ﺳﻌﺔ اﻟﻣﻛﺛف )ﻗﺳﻣﺔ اﻟﺗﯾﺎر اﻟﺗﻰ ﯾﻣﻛﻧﻪ ﺗﺧزﯾﻧﻬﺎ( ﻣن ﺧﻼل اﻟﻔﺎراد faradsوﯾﻧﻘﺳم اﻟﻔﺎرادا اﻟﻰ اﺟ زاء اﺻﻐر
ﺗﺳﻣﻰ اﻟﺑﯾﻛو او اﻟﻣﯾﻛرو ﻓﺎرارد )(picofarad (pF)= 0.000000000001, microfarad (μF) = 0.000001
ﻗراءة ﻗﯾﻣﺔ اﻟﻣ ﻛﺛف ﯾﺗم ﻣن ﺧﻼل اﻟرﻗم اﻟﻣطﺑوع ﻋﻠﻰ ﻟﺟزء اﻟﺳﯾراﻣﯾك اﻟﺧﺎص ﺑﺎﻟﻣﻛﺛف ،ﺣﯾث ﯾﺗم ﻗراءة اول رﻗﻣﺎن ﺛم
100,000 ﯾﺗم وﺿﻊ اﺻﻔﺎر ﺑﻣﻘدار اﻟرﻗم اﻟﺛﺎﻟث ،ﻣﺛﺎل اﻟﺻورة اﻟﺳﺎﺑﻘﺔ ﺗﺣﺗوى ﻋﻠﻰ اﻟرﻗم 104ﻣﻣﺎ ﺗﻌﻧﻰ
،picofarads/pFﻟﻠﺗﺣوﯾل ﺑﯾن ﻗﯾم اﻟﻣﻛﺛف ﯾﻣﻛن ﻣن ﺧﻼل اﻟﻣوﻗﻊ اﻟﺗﺎﻟﻰ
http://www.justradios.com/uFnFpF.html.
اﻧﻮاع اﻟﻤﻜﺜﻔﺎت
ﻣﻜﺜﻒ اﻟﺴﯿﺮاﻣﯿﻚ
ﯾﻣﻛﻧﻬﺎ اﻻﺣﺗﻔﺎظ ﺑﻘدر ﺻﻐﯾر ﻣن اﻟﻛﻬرﺑﺎء ﻣﻣﺎ ﯾﻌطﯾﻬﺎ ﻣﯾزة اﻟﻌﻣل ﻣﻊ اﻟﺗرددات اﻟﻛﺑﯾرة ﻟﺳرﻋﺔ ﺷﺣﻧﻬﺎ
وﺗﻔرﯾﻐﻬﺎ ﺑﺳﺑب ﺻﻐر ﺣﺟﻣﻬﺎ ،ﺗﺳﻣﺢ ﻟﻠﺗﯾﺎر اﻟﻛﻬرﺑﻰ ﻣن اﻟﻣرور ﻓﻰ اﻻﺗﺟﺎﻫﯾن دون ان ﺗﺣﺗرق
ﻣﻜﺜﻒ ﻛﯿﻤﯿﺎﺋﻰ
ﯾﻣﻛﻧﻪ ﺗﺧزﯾن ﻗدر اﻛﺑر ﻣن اﻟﻛﻬرﺑﺎء ﻣﻘﺎرﻧﺔ ﺑﺎﻟﻣﻛﺛف اﻟﺳﯾراﻣﯾك ،وﯾﻣر اﻟﺗﯾﺎر ﻓﻰ اﺗﺟﺎﻩ واﺣد ﻓﻘط ﻟﻬذا ﯾﺣﺗوى
ﻋﻠﻰ طرﻓﺎن ﻣوﺟب وﺳﺎﻟب ﯾﻣﻛﻧك رؤﯾﺗﻬم ﻣن ﺧﻼل اﻟﺻورة اﻟﺗﺎﻟﯾﺔ
45
ARDUINO FROM ZERO TO HERO
اﻟوظﯾﻔﺔ اﻻﺳﺎﺳﯾﺔ ﻟﻬذا اﻟﻣﻛﺛف ﻫﻰ ﺗﻐذﯾﺔ اﻟﻣﻛوﻧﺎت اﻻﻟﻛﺗروﻧﯾﺔ ﺑﺎﻟطﺎﻗﺔ اﻟﻛﻬرﺑﯾﺔ ﺧﻼل اﺟازء ﻣن اﻟﺛﺎﻧﯾﺔ ﻓﻰ
ﺣﺎﻟﺔ إﻧﻘطﺎع اﻟﺗﯾﺎر اﻟﻛﻬرﺑﻰ ﻋن اﻟداﺋرة ﻻى ﺳﺑب ﻣﺎ ،وﻫذا ﯾؤدى اﻟﻰ ﻣﻧﻊ ﺻوت اﻟﺗﺷوﯾش ﺑﺎﻟداﺋرة ﻣﻊ
اﻟﺣﻔﺎظ ﻋﻠﻰ ﻛﻔﺎءة ﺑﺎﻟﻣﻛوﻧﺎت اﻻﻟﻛﺗروﻧﯾﺔ ﺑﺎﻟداﺋرة .ﺳﻌﺔ ﻫذا اﻟﻣﻛﺛف ﺗﻛون ﻣطﺑوﻋﺔ ﻋﻠﻰ اﻟﺟﺳم اﻟﺧﺎرﺟﻰ ﻟﻪ
دون اﻟﺣﺎﺟﺔ اﻟﻰ ﻋﻣﻠﯾﺎت ﺗﺣوﯾل ﺣﯾث ﺗظﻬر ﻗﯾﻣﺗﻪ ﺑﺷﻛل ﻣﺑﺎﺷر ،ﻣﺛل 100µﻛﻣﺎ ﺑﺎﻟﺻورة اﻟﺳﺎﺑﻘﺔ.
ﺗﻌﻠﻣﻧﺎ ﺳﺎﺑﻘﺎً ﻛﯾف ﯾﻣﻛن إﺿﺎءة ﻟﯾدات ﻣﺗﺻﻠﺔ ﺑﺎﻻردوﯾﻧو ﻣن ﺧﻼل إﺧ ارج ﺗﯾﺎر ﻛﻬرﺑﻰ او إطﻔﺎء اﻟﻠﯾد ﺑﺈﯾﻘﺎف
ﻫذا اﻟﺗﯾﺎر ،ﻟﻛن اﻻن ﻧرﯾد ﺗﻌﻠم ﻛﯾف ﯾﻣﻛن إﺳﺗﻘﺑﺎل ﺗﯾﺎر ﻛﻬرﺑﻰ ﻣن ﺧﺎرج اﻻردوﯾﻧو واﻟﺗﻌﺎﻣل ﻣﻌﻪ طﺑﻘﺎ
ﻟﻠﺷروط اﻟﻣوﺟودة ﻣﺳﺑﻘﺎً.
ﻋﻧدﻣﺎ ﯾﺗم ﺿﻐط اﻟﻣﻔﺗﺎح ﻓﻰ اﻟﺻورة اﻟﺳﺎﺑﻘﺔ ﯾﺗم ﺗوﺻﯾل اﻟﺳف رﻗم 23ﻣﻊ اﻟﺻف رﻗم ،25ﻣﻣﺎ ﯾﻌﻧﻰ ﻏﻠق
اﻟداﺋرة وﻣرور اﻟﺗﯾﺎر اﻟﻛﻬرﺑﻰ ،واﻟﺷﻛل اﻟﻬﻧدﺳﻰ ﻟﻠﻣﻔﺗﺎح ﯾﻛون ﻫﻛذا
46
ARDUINO FROM ZERO TO HERO
ﻋﻧد ﺿﻐط اﻟﻣﻔﺗﺎح ﻓﯾﺗم ﺗﺣرﯾك اﻟﺳﻠك ﺑﯾن اﻟطرﻓﺎن ﻓﺗﻧﻐﻠق اﻟداﺋرة وﯾﻣر اﻟﺗﯾﺎر اﻟﻛﻬرﺑﻰ ﻣن ﺧﻼل اﻟﻣﻔﺗﺎح،
ﯾﺗم اﻻﺷﺎرة اﻟﻰ اﻟﻣﻔﺗﺎح ﻓﻰ اﻻﺷﻛﺎل اﻟﻬﻧدﺳﯾﺔ ﺑﺎﻟرﻣز .S
ﺣﯾث اﻧﻪ ﻛﺎن ﻣن اﻟﻣﻔﺗرض ﺛﺑوت اﻟﻣﻔﺗﺎح ﻋﻧد اﻟﻧﻘطﺔ ) Aﻻ ﺗﯾﺎر( ﻟﻛن ﺗم رﺟوع اﻟﻣﻔﺗﺎح اﻟﻰ وﺿﻊ إﺗﺻﺎل
اﻟداﺋرة ﺑﯾن A,Bﺛم ﻣرة اﺧرى ﺑﯾن B,Cوﻫذا اﻻرﺗداد ﯾﻣﻛن ان ﯾؤدى اﻟﻰ ﺗﻠف اﻟﻌﻧﺎﺻر اﻻﻟﻛﺗروﻧﯾﺔ ﻻﻧﻬﺎ
ﺗﺳﺗﻘﺑل ﺗﯾﺎر ﻣﺷوﻩ ﺧﻼل ﻓﺗرة زﻣﻧﯾﺔ ﺻﻐﯾرة ﺟدا ﻗﺑل ﺛﺑوت اﻟﺗﯾﺎر ﻓﻰ اﻟوﺿﻊ اﻟﻧﻬﺎﺋﻰ.
47
ARDUINO FROM ZERO TO HERO
اﻟﺨﻮارزﻣﯿﺔ
-١اﻟﺗﺎﻛد ﻣن ان اﻟﻣﻔﺗﺎح ﻗد ﺗم اﻟﺿﻐط ﻋﻠﯾﻪ.
-٢ﻟو ﺗم اﻟﺿﻐط ﻋﻠﻰ اﻟﻣﻔﺗﺎح ،ﺳﯾﺗم إﺿﺎءة اﻟﻠﯾد ﻟﻣدة ﻧﺻف ﺛﺎﻧﯾﺔ ،ﺛم ﯾﻧطﻔﺊ وﺗﺗﻛرر طﺎﻟﻣﺎ اﻟﻣﻔﺗﺎح
ﻣﺿﻐوط ﻋﻠﯾﻪ.
-٣ﻟو اﻟﻣﻔﺗﺎح ﻏﯾر ﻣﺿﻐوط ،ﻻ ﺷﺊ ﯾﺗم ﺗﻧﻔﯾذﻩ.
-٤ﻛرر اﻟﺧطوات اﻟﺳﺎﺑﻘﺔ ﺑﺈﺳﺗﻣرار.
ﻣﺘﻄﻠﺒﺎت اﻟﻤﺸﺮوع
-١ﻣﻔﺗﺎح ،ﻋدد.1:
-٢ﻟﯾد ،ﻋدد .1
-٣ﻣﻘﺎوﻣﺔ 560اوم ،ﻋدد .1
-٤ﻣﻘﺎوﻣﺔ 10ﻛﯾﻠو اوم ،ﻋدد .1
-٥ﻣﻛﺛف ﺳﻌﺔ ،100 nFﻋدد .1
-٦اﺳﻼك ﺗوﺻﯾل.
-٧ﻟوﺣﺔ ﺗﺟﺎرب.
-٨ﻟوﺣﺔ اردوﯾﻧو وﻛﺎﺑل .USB
48
ARDUINO FROM ZERO TO HERO
ﻧﻼﺣظ ان اﻟطرف رﻗم 7ﻣﺗﺻل ﺑﺎﻟﻣﻔﺗﺎح ،وﻟﺗﺟﻧب ارﺗداد اﻟﻣﻔﺗﺎح ﻋن اﻟﻐﻠق او اﻟﻔﺗﺢ ﻓﻘد ﺗم إﺿﺎﻓﺔ ﻣﻘﺎوﻣﺔ ﺑﻘﯾﻣﺔ 10
ﻛﯾﻠو اوم ﻟﻠﻘﺿﺎء ﻋﻠﻰ اى ﺗﯾﺎر ﻣﺷوﻩ ﻧﺗﯾﺟﺔ ﻏﻠق او ﻓﺗﺢ اﻟﻣﻔﺗﺎح )ﺗﺳﻣﻰ ﻣﻘﺎوﻣﺔ ﺳﺣب اﻟﺗﯾﺎر ،(pull-down resistor
وﻟﻛﻰ ﯾﺗم اﻟﻘﺿﺎء ﻋﻠﻰ اﻟﺗﯾﺎر ﺑﺷﻛل ﺳﻠس ﺗم وﺿﻊ ﻣﻛﺛف ﻟﻼﺣﺗﻔﺎظ ﺑﺗﯾﺎر ﺿﺋﯾل ﺟدا ﻟﻣﻧﻊ ﺣدوث ﺗﺷوﻩ ﻓﻰ ﻗﯾﻣﺔ
اﻟﺷﺣﻧﺎت اﻟداﺧﻠﺔ اﻟﻰ اﻻردوﯾﻧو ﻧﺗﯾﺟﺔ إرﺗداد اﻟﻣﻔﺗﺎح.
49
ARDUINO FROM ZERO TO HERO
50
ARDUINO FROM ZERO TO HERO
اﻻﺳﻜﺘﺶ
#define LED 12
#define BUTTON 7
)(void setup
{
;)v pinMode(LED, OUTPUT
;)pinMode(BUTTON, INPUT
}
)(void loop
{
) if ( digitalRead(BUTTON) == HIGH
{
;)digitalWrite(LED, HIGH
;)delay(500
;)digitalWrite(LED, LOW
}
}
اﻟﻤﺘﻐﯿﺮات اﻟﺜﺎﺑﺘﺔ
ﺗم اﺳﺗﺧدام اﻟﻣﺗﻐﯾرات اﻟﺛﺎﺑﺗﺔ ﻓﻰ ﻫذا اﻟﻣﺷروع ﺣﯾث ﺗم ﺗﻌرﯾف اﻟﻠﯾد رﻗم 12ﺑﺈﺳم ،LEDواﯾﺿﺎ ﺗم ﺗﻌرﯾف اﻟﻣﻔﺗﺎح رﻗم
7ﺑﺈﺳم BUTTONﻟﺗﺳﻬﯾل اﻟﺗﻌﺎﻣل ﻣﻌﻬم داﺧل اﻟﺑرﻧﺎﻣﺞ ﻛﻣﺎ ﻋﻠﻣﻧﺎ ﻣن ﻗﺑل ﻣن ﺧﻼل اﺳﺗﺧدام اﻟﻣﺗﻐﯾرات ﻟﺗﺳﻬﯾل
ﻛﺗﺎﺑﺔ اواﻣر اﻟﻣﺷروع.
51
ARDUINO FROM ZERO TO HERO
;)pinMode(BUTTON, INPUT
إﺗﺨﺎذ اﻟﻘﺮارت
اﻟطرف رﻗم 7ﯾﻧﺗظر دﺧول ﺗﯾﺎر ﻛﻬرﺑﻰ ﻧﺗﯾﺟﺔ اﻟﺿﻐط ﻋﻠﻰ اﻟﻣﻔﺗﺎح ﻟﻛﻰ ﯾﻘوم اﻟﻣﺗﺣﻛم اﻟدﻗﯾق ﺑﺈﻧﺎرة اﻟﻠﯾد ﻟﻣدة ﻧﺻف
ﺛﺎﻧﯾﺔ ،ﻟﻬذا ﯾﺗم ذﻟك ﻣن ﺧﻼل ﻛﺗﺎﺑﺔ اواﻣر ﺷرطﯾﺔ )إﺗﺧﺎذ ﻗرار طﺑﻘﺎ ﻟﻔﻌل اﺧر( ،ﻓﻬﻧﺎ ﺳﯾﺗم إﺿﺎءة اﻟﻠﯾد ﻓﻰ ﺣﺎﻟﺔ
اﻟﺿﻐط ﻋﻠﻰ اﻟﻣﻔﺗﺎح ﻟﻬذا ﯾﺗم ﻛﺗﺎﺑﺔ ﺳطر اﻻواﻣر اﻟﺷرطﻰ ﻫﻛذا
)if (digitalRead(BUTTON) == HIGH
{
digitalWrite(LED, HIGH); // turn on the LED
delay(500); // wait for 0.5 seconds
digitalWrite(LED, LOW); // turn off the LED
}
ﺣﯾث ان اﻟﺳطر اﻻول ﯾﻘراء ) (digitalReadﻗﯾﻣﺔ اﻟﻣﻔﺗﺎح ،ﻓﺈذا ﻛﺎﻧت ) (HIGHﺗﻌﻧﻰ ان اﻟﻣﻔﺗﺎح ﺗم اﻟﺿﻐط ﻋﻠﯾﻪ
وﯾﻣر ﻣن ﺧﻼﻟﻪ ﺗﯾﺎر ) ،(ONﻓﯾﺗم ﺗﻧﻔﯾذ اﻻواﻣر اﻟﺗﺎﻟﯾﺔ وﻫﻰ إﺿﺎءة اﻟﻠﯾد ﻟﻣدة ﻧﺻف ﺛﺎﻧﯾﺔ ﺛم إطﻔﺎءﻩ وﻫﻛذا ﺗﺗﻛرر ﻧﻔس
اﻟﺧطوات طﺎﻟﻣﺎ اﻟﻣﻔﺗﺎح ﻣﺿﻐوط ) طﺎﻟﻣﺎ اﻟﻔوﻟت اﻟداﺧل ﻟﻠطرف 7ﻫو ،(HIGH or 5 vاﻣﺎ ﻓﻰ ﺣﺎﻟﺔ ﻋدم اﻟﺿﻐط
ﻋﻠﻰ اﻟﻣﻔﺗﺎح ﻓﺗﺻﺑﺢ ﻗﯾﻣﺔ اﻻﺷﺎرة اﻟداﺧﻠﺔ ﻣن اﻟﻣﻔﺗﺎح ).(LOW = 0 v
ﻣﻠﺤﻮظﺔ
ﻧﻼﺣظ ﻓﻰ اﻟﺟﻣل اﻟﺷرطﯾﺔ ﺗﻘوم ﺑﻌﻣل ﻣﻘﺎرﻧﺔ ﻟﻠﺗﺄﻛد ﻣن ﻗﯾﻣﺔ ﻣﻌﯾﻧﺔ ،ﻣﺛﺎل ﻫل ﻗﯾﻣﺔ اﻟﻣﻔﺗﺎح ) (HIGHﻟﻬذا ﺗم اﺳﺗﺧدام
رﻣز اﻟﻣﻘﺎرﻧﺔ اﻟﻣﺷروطﺔ وﻫو )==( ،ﻧﻌم اﻧﻬﻣﺎ ﻋﻼﻣﺗﺎن وﻟﯾس ﻋﻼﻣﺔ واﺣدة )ﻋﻼﻣﺔ واﺣدة ﺗﻌﻧﻰ اﻟﻣﺳﺎوة وﻟﯾس
اﻟﻣﻘﺎرﻧﺔ(.
ﻟﻘد اﺳﺗﺧدﻣﻧﺎ ﻫﻧﺎ اﻟﺟﻣﻠﺔ اﻟﺷرطﯾﺔ ) ،(ifوﯾﻣﻛن اﻻﺳﺗﻔﺎدة ﻣﻧﻬﺎ ﺑﺷﻛل اﻛﺑر ﺣﯾث ﯾﻣﻛن اﻟﻘول اﻧﻪ ﻟو ﺗﺣﻘق اﻟﺷرط
)اﻟﻣﻔﺗﺎح ﻣﺿﻐوط( ﻓﯾﺗم ﺗﻧﻔﯾذ اواﻣر ﻣﻌﯾﻧﺔ ﻣﺛل إﺿﺎءة اﻟﻠﯾد ،اﻣﺎ ﻟو ﻟم ﯾﺗﺣﻘق اﻟﺷرط )اﻟﻣﻔﺗﺎح ﻏﯾر ﻣﺿﻐوط( ﻓﯾﺗم
ﺗﻧﻔﯾذ اواﻣر اﺧرى ﻣﺛل إطﻔﺎء اﻟﻠﯾد.
) if ( digitalRead(BUTTON) == HIGH
{
;)digitalWrite(LED, HIGH
}
else
{
;)digitalWrite(LED, LOW
}
52
ARDUINO FROM ZERO TO HERO
ﻓﻰ ﺣﺎﻟﺔ اﻧﻧﺎ ﻧرﯾد ﻧﻔﻰ اﻟﺷرط ﻟﯾﻛون ﻫل اﻟﺳﻣﺎء ﻻ ﺗﻣطر ،ﻓﯾﺗم إﺳﺗﺧدام )=!( ،ﻓﯾﻣﻛن ﻛﺗﺎﺑﺔ اواﻣر ﺗﺣﺗوى ﻋﻠﻰ ﺷرطﺎن
ﺻﯾﻔﺎ
ً ﻣﺗداﺧﻼن ﻫل اﻟﺳﻣﺎء ﺗﻣطر ﺛم ﺷرط اﺧر ﻫل اﻟﻔﺻل ﻟﯾس
) if ( raining == true
{
) if ( summer != true
{
// it is raining and not summer
}
}
ﻣﻌﺎﻣﻼت اﻟﻤﻘﺎرﻧﺔ
ﻧﺳﺗﺧدم اﻟﻣﻘﺎرﻧﺔ ﻓﻰ ﺳطور اﻻواﻣر داﺋﻣﺎً ،ﻟﻬذا ﻧﺣﺗﺎج اﻟﻰ ﻣﻘﺎرﻧﺔ ﺑﻌض اﻟﺟﻣل ﻣﻌﺎً ﻟﻠﺣﺻول ﻋﻠﻰ ﻧﺗﺎﺋﺞ ﻣﻌﯾﻧﺔ ،ﻣﺛﺎل
ﻧرﯾد ان ﻧﺗﺄﻛد ﻣن ان اﻟﺳﻣﺎء ﺗﻣطر واﻟﻔﺻل ﺻﯾف ،ﻟﻬذا ﺳﻧﺣﺗﺎج اﻟﻰ اﻟﺗﺄﻛد ﻣن ﺻﺣﺔ اﻟﺷرط اﻻول واﻟﺛﺎﻧﻰ ﻟﻬذا
ﻧﺳﺗﺧدم ﻋﻼﻣﺔ )&&( ،اﻣﺎ ﻟو اردﻧﺎ اى ﺷرط ﻣﻧﻬﻣﺎ ان ﯾﺗﺣﻘق دون اﻻﺧر ﻣﺛل اﻟﺳﻣﺎء ﺗﻣطر او اﻟﻔﺻل ﺻﯾف ﻓﯾﺗم
ذﻟك ﻣن ﺧﻼل ﻋﻼﻣﺔ )||( وﺗﻌﻧﻰ اى ﺷرط ﻣﻧﻬم ،اﻣﺎ ﻟو اردﻧﺎ ان ﻧﻘول ﻻﯾﺳﺎوى ﻧﺳﺗﺧدم اﻟﻌﻼﻣﺔ )!( ﻣﺛل اﻟﺳﻣﺎء ﻻ
ﺗﻣطر.
) if ( !raining
{
)// it is not raining (raining == false
}
ﺻﯾﻔﺎ
ً ﻫل ﻫﻧﺎك ﺟﻠﯾد واﻟﺳﻣﺎء ﺗﻣطر واﻟﻔﺻل ﻟﯾس -
) if ( snow == true && rain == true && !hot
53
ARDUINO FROM ZERO TO HERO
{
// it is snowing and raining and not hot
}
اﻣﺎ ﻟو اردﻧﺎ ان ﻧﺗﺄﻛد ان اﺣد اﻟﺷرطﺎن ﺻﺣﯾﺢ ﻫل ﺗﻣطر او ﻫﻧﺎك ﺟﻠﯾد ﻣﻊ ﺗﺄﻛﯾد ان اﻟﺟو ﻟﯾس ﺣﺎر؟ -
))if (( snow == true || rain == true ) && hot == false
{
// it is either snowing or raining and not hot
}
اﻟﺨﻮارزﻣﯿﺔ
-١وﺿﻊ ﺛﻼث ﻟﻣﺑﺎت ﺗﺣﻣل اﻟوان اﺷﺎرة اﻟﻣرور ﻓﻰ ﻛل اﺗﺟﺎﻩ ﻣن اﻟﻛوﺑرى.
-٢ﺟﻌل اﻻوﻟوﯾﺔ ﻟﻠﺳﯾﺎرات ﻓﻰ اﻟﻐرب ﺑﺣﯾث ﺗﻣر وﯾﺑﻘﻰ اﻻﺗﺟﺎﻩ اﻻﺧر ذو اﻟﻠون اﻻﺣﻣر.
-٣ﻋﻧدﻣﺎ ﺗﺻل اﻟﺳﯾﺎرة اﻟﻰ اﻻﺗﺟﺎﻩ اﻻﺧر )ﻧﺳﺗﺧدم ﻫﻧﺎ ﻣﻔﺗﺎح ﻟﻣﺣﺎﻛﺎة وﺻول اﻟﺳﯾﺎرة( ﯾﺗم ﺗﻐﯾﯾر اﻟوان اﻻﺷﺎرة
ﻣن اﻻﺧﺿر اﻟﻰ اﻻﺻﻔر ﺛم اﻻﺣﻣر واﻻﻧﺗظﺎر ﻗﻠﯾﻼً ﻟﻠﺗﺄﻛد ﻣن ﺧﻠو اﻟطرﯾق ﻣن اﻟﺳﯾﺎرات ،ﺛم ﺗﺣوﯾل ﻟون
اﻻﺷﺎرة ﻣن اﻻﺣﻣر اﻟﻰ اﻻﺻﻔر ﺛم اﻻﺧﺿر ﻓﻰ اﻻﺗﺟﺎﻩ اﻟﻣﻌﺎﻛس.
-٤ﺗﺗﻛرر ﻫذﻩ اﻟﺧطوات ﻣرة اﺧرى.
ﻣﺘﻄﻠﺒﺎت اﻟﻤﺸﺮوع
-١ﻟﯾد ذو اﻟﻠون اﻻﺣﻣر )ﻟﯾد 1وﻟﯾد :(2ﻋدد .2
-٢ﻟﯾد ذو اﻟﻠون اﻻﺻﻔر )ﻟﯾد 3وﻟﯾد :(4ﻋدد .2
-٣ﻟﯾد ذو اﻟﻠون اﻻﺧﺿر )ﻟﯾد 5وﻟﯾد :(6ﻋدد .2
-٤ﻣﻘﺎوﻣﺔ ﻗﯾﻣﺗﻬﺎ 650اوم ،ﻋدد .6
-٥ﻣﻘﺎوﻣﺔ ﻗﯾﻣﺗﻬﺎ 10kΩاوم ،ﻋدد .2
-٦ﻣﻔﺗﺎح ﻧوع ،push buttonﻋدد .2
54
ARDUINO FROM ZERO TO HERO
اﻟﺘﺼﻤﯿﻢ اﻟﮭﻨﺪﺳﻰ
اﻻﺳﻜﺘﺶ
#define westButton 7
#define eastButton 13
#define westRed 2
#define westYellow 1
#define westGreen 0
#define eastRed 12
#define eastYellow 11
55
ARDUINO FROM ZERO TO HERO
#define eastGreen 10
#define yellowBlinkTime 500 // 0.5 seconds for yellow light blink
Building Blocks 77
56
ARDUINO FROM ZERO TO HERO
;)digitalWrite(westYellow, HIGH
;)delay(changeDelay
;)digitalWrite(westYellow, LOW
;)digitalWrite(westRed, HIGH
;)delay(changeDelay
for ( int a = 0 ; a < 5 ; a++ ) // blink yellow light
{
;)digitalWrite(eastYellow, LOW
;)delay(yellowBlinkTime
;)digitalWrite(eastYellow, HIGH
;)delay(yellowBlinkTime
}
;)digitalWrite(eastYellow, LOW
digitalWrite(eastRed, LOW); // change east-facing lights from red to green
;)digitalWrite(eastGreen, HIGH
}
}
}
اﻣﺎ اﻻﺷﺎرة اﻻﻧﺎﻟوج ﻓﻰ ﺗﺣﺗوى ﻋﻠﻰ ﻗﯾم ﻣﺗﻌددة ﺑﯾن اﻟﻘﯾﻣﺔ اﻟﺻﻐرى واﻟﻘﯾﻣﺔ اﻟﻌظﻣﻰ ،ﺣﯾث ﺗﺟد ان درﺟﺔ اﻟﺣ اررة ﻓﻰ
اﻟﺗرﻣوﻣﺗر ﺗﺗﺣرك ﻣﺎ ﺑﯾن اﻟﻘﯾﻣﺔ اﻟﺻﻐرى واﻟﻌظﻣﻰ ،واﯾﺿﺎً ﺳرﻋﺔ اﻟﺳﯾﺎرة ﺗﺗﺣرك ﻣﺎ ﺑﯾن اﻟﻘﯾﻣﺔ اﻟﺻﻐرى واﻟﻌظﻣﻰ،
وﯾظﻬر ﺷﻛل اﻻﺷﺎرة اﻻﻧﺎﻟوج ﻛﺎﻟﺗﺎﻟﻰ
57
ARDUINO FROM ZERO TO HERO
اﻻردوﯾﻧو ﯾﺣﺗوى ﻋﻠﻰ 6اطراف ﻟﻘراءة اﻻﺷﺎرات اﻻﻧﺎﻟوج ،وﺗﻠك اﻻطراف ﻟدﯾﻬﺎ اﻟﻘدرة ﻋﻠﻰ ﺗﺣوﯾل اﻻﺷﺎرات اﻻﻧﺎﻟوج
اﻟﻰ ﻗﯾم ﺗﺗراوح ﻣن ) (0:1023واﻟﺗﻰ ﺗﺳﺎوى ) (10bitsﺑﺎﻟﻧظﺎم اﻟﺛﻧﺎﺋﻰ ﻣن ﺧﻼل اﺳﺗﺧدام ﻣﺣول اﻻﺷﺎرات اﻻﻧﺎﻟوج اﻟﻰ
دﯾﺟﺗﺎل ،ﻓﻬﻧﺎ ﯾﺗم ﺗرﺟﻣﺔ ﻛل ﻧﻘطﺔ ﻣن اﻻﺷﺎرة اﻻﻧﺎﻟوج اﻟﻰ ﻗﯾﻣﺔ ﻣﻘﺎﺑﻠﺔ ﻟﻬﺎ ،اﻻطراف اﻻﻧﺎﻟوج ﻓﻰ اﻻردوﯾﻧو ﻫﻰ
ﯾﻣﻛن ﻛﺗﺎﺑﺔ ﺳطر اﻻواﻣر ﻟﻘراءة ﻗﯾﻣﺔ اﻧﺎﻟوج ﻣن اﻟطرف ) (A0ﻣن ﺧﻼل اﻻﻣر
;)a = analogRead(0
اﻟﺨﻮارزﻣﯿﺔ
-١ﺗوﺻﯾل اﻟﺑطﺎرﯾﺔ ﺑﺎﻟطرف ) A0اﻧﺎﻟوج(.
-٢ﻗراءة ﻗﯾﻣﺔ اﻟﺑطﺎرﯾﺔ ،ﺛم ﺿرب اﻟﻧﺎﺗﺞ ﻓﻰ 0.0048ﻟﺗﺣوﯾﻠﻬﺎ اﻟﻰ ﻗﯾﻣﺔ اﻟﻔوﻟت اﻟﺣﻘﯾﻘﻰ.
-٣ﻟو ﻗﯾﻣﺔ اﻟﻘراءة اﻛﺑر ﻣن او ﺗﺳﺎوى 1.6vﻓﯾﺗم إﺿﺎءة اﻟﻠﯾد اﻻﺧﺿر.
58
ARDUINO FROM ZERO TO HERO
ﻣﺘﻄﻠﺒﺎت اﻟﻤﺸﺮوع
-١ﻣﻘﺎوﻣﺔ ﻗﯾﻣﺗﻬﺎ 650اوم ،ﻋدد .3
-٢ﻣﻘﺎوﻣﺔ ﻗﯾﻣﺗﻬﺎ 2.2kΩاوم ،ﻋدد .1
-٣ﻟﯾد ذو اﻟﻠون اﻻﺧﺿر ،ﻋدد .1
-٤ﻟﯾد ذو اﻟﻠون اﻻﺻﻔر ،ﻋدد .1
-٥ﻟﯾد ذو اﻟﻠون اﻻﺣﻣر ،ﻋدد .1
-٦ﻟوﺣﺔ ﺗﺟﺎرب ،ﻋدد .1
-٧اﺳﻼك ﺗوﺻﯾل ﻣﺧﺗﻠﻔﺔ اﻟﻣﻘﺎﺳﺎت.
-٨ﻟوﺣﺔ اردوﯾﻧو ووﺻﻠﺔ .USB
اﻟﺘﺼﻤﯿﻢ اﻟﮭﻨﺪﺳﻰ
ﻣﻠﺣوظﺔ
ﻻﺗﺳﺗﺧدم ﺑطﺎرﯾﺎت ذات ﺳﻌﺔ اﻛﺑر ﻣن 5vﻣﻣﺎ ﺳﯾؤدى اﻟﻰ ﺗﻠف اﻻردوﯾﻧو ﻻﻧﻪ ﯾﺗﻌﺎﻣل ﺑﺣد اﻗﺻﻰ ﻣﻊ 5vﻓﻘط.
59
ARDUINO FROM ZERO TO HERO
اﻻﺳﻜﺘﺶ
#define newLED 2 // green LED 'new'
#define okLED 4 // yellow LED 'ok'
#define oldLED 6 // red LED 'old'
int analogValue = 0;
u float voltage = 0;
int ledDelay = 2000;
void setup()
{
pinMode(newLED, OUTPUT);
pinMode(okLED, OUTPUT);
pinMode(oldLED, OUTPUT);
}
void loop()
{
v analogValue = analogRead(0);
w voltage = 0.0048*analogValue;
x if ( voltage >= 1.6 )
{
digitalWrite(newLED, HIGH);
delay(ledDelay);
digitalWrite(newLED, LOW);
}
else if ( voltage < 1.6 && voltage > 1.4 )
{
digitalWrite(okLED, HIGH);
delay(ledDelay);
digitalWrite(okLED, LOW);
}
else if ( voltage <= 1.4 )
{
digitalWrite(oldLED, HIGH);
delay(ledDelay);
digitalWrite(oldLED, LOW);
}
}
60
ARDUINO FROM ZERO TO HERO
f = a / 3; // f = 33.333333
g = a + f; // g = 133.333333
ﻣﺛﺎل :ﯾﻣﻛن ﺗوﺻﯾل ﻣﺻدر ﺗﯾﺎر اﻗل ﻣن 5vﺑﺣﯾث ﯾﻛون اﻟطرف اﻟﻣوﺟب ﻣﺗﺻل ﺑﺎﻟطرف AREFواﻟطرف اﻟﺳﺎﻟب
ﻣﺗﺻل ﺑﺎﻟطرف GNDﻟﻼردوﯾﻧو ،ﻫﻧﺎ ﺗﻛون اﻟﻘﯾﻣﺔ اﻟﻌظﻣﻰ ﻟﻠﺗﯾﺎر ﻫﻰ ﻗﯾﻣﺔ اﻟطرف اﻟﻣوﺟب اﻟﻣﺗﺻل ﺣﺎﻟﯾﺎً ﺑﺎﻟطرف
،AREFوﺑﻬذﻩ اﻟطرﯾﻘﺔ ﯾﻣﻛن ﺗﻐﯾﯾر ﻗﯾﻣﺔ ﻗﯾﺎس اﻻﺷﺎرات اﻻﻧﺎﻟوج ﻣن 5vاﻟﻰ اى ﻗﯾﻣﺔ اﺧرى.
ﺑﻣﺟرد ﺗوﺻﯾل ﻣﺻدر ﺗﯾﺎر ﺧﺎرﺟﻰ ﺑﺎﻟطرف ،AREFﯾﺟب ﺗوﺟﯾﻪ اﻻردوﯾﻧو اﻟﻰ اﺳﺗﺧدام ﻗﯾﻣﺔ اﻟﺗﯾﺎر اﻟﺧﺎرﺟﻰ ﻛﻣرﺟﻊ
ﻟﻠﻘﯾﺎس وذﻟك ﻣن ﺧﻼل اﻻﻣر اﻟﺗﺎﻟﻰ
;)analogReference(EXTERNAL
61
ARDUINO FROM ZERO TO HERO
اﻟﺷﻛل اﻟﻬﻧدﺳﻰ ﻟﻠﻣﻘﺎوﻣﺔ اﻟﻣﺗﻐﯾرة ﯾﺷﺑﻪ اﻟﺷﻛل اﻟﻬﻧدﺳﻰ ﻟﻠﻣﻘﺎوﻣﺔ اﻟﺛﺎﺑﺗﺔ ﻟﻛن ﺑوﺿﻊ ﺳﻬم ﻋﻠﯾﻬﺎ ﻛﺄﻧﻪ ﯾد ﻣﺗﺣرﻛﺔ
ﻣﺛﺎل ﻟﻠﻣﻘﺎوﻣﺔ اﻟﻣﺗﻐﯾرة ﻫو اﻟﺗﺣﻛم ﻓﻰ ﺻوت اﻟﺳﻣﺎﻋﺎت ﺑﺗﺣ رﯾك ﻣﻔﺗﺎح واﻟذى ﺑدورﻩ ﯾﻐﯾر ﻗﯾﻣﺔ اﻟﻣﻘﺎوﻣﺔ ﻣﻣﺎ ﯾﻧﺗﺞ ﻋﻧﻪ
ﺗﻐﯾر ﻗﯾﻣﺔ اﻟﺗﯾﺎر اﻟﻣﻐذى ﻟﻠﺳﻣﺎﻋﺎت ﻣﻣﺎ ﯾؤدى اﻟﻰ اﻧﺧﻔﺎض او ارﺗﻔﺎع اﻟﺻوت اﻟﺻﺎدر ﻣن اﻟﺳﻣﺎﻋﺎت.
62
ARDUINO FROM ZERO TO HERO
ﯾﺗﻛون ﺟﻬﺎز اﻟﺗﻧﺑﯾﻪ ﻣن رﻗﺎﻗﺔ ﻣﻌدﻧﯾﺔ داﺧﻠﯾﺔ ﺗﺗﺣرك ﻋﻧد ﺗوﺻﯾل ﺗﯾﺎر ﻛﻬرﺑﻰ ﻟﻬﺎ ،وﻋﻧد ﺗﻛرار ﺗوﺻﯾل وﻗطﻊ اﻟﺗﯾﺎر
اﻟﻛﻬرﺑﻰ ﺗﺻدر ﺻوت ﺗﻧﺑﯾﻪ ﻣﻊ اﻫﺗزاز ﺑﻧﻔس اﻟوﻗت .ﯾﻣﻛن ﺗوﺻﯾل اى ﻣن اﻟطرﻓﯾن ﺑﺎﻟﻣوﺟب ﺣﯾث اﻧﻬﺎ ﻻﺗﻧﺣرق
ﺑﻣرور اﻟﺗﯾﺎر ﻓﻰ اى اﺗﺟﺎﻩ ﻛﺎن.
63
ARDUINO FROM ZERO TO HERO
ﺟﻬﺎز اﻟﺗﻧﺑﯾﻪ ﯾﻣﻛﻧﻪ اﻟﺗﻌﺎﻣل ﻣﻊ 12vﻣﻣﺎ ﯾﺟﻌﻠﻪ ﯾﺻدر ﺻوت ﻣرﺗﻔﻊ ﺟدا ،وﻫذا اﻟﺗﯾﺎر ﻻﯾﻣﻛن اﻟﺣﺻول ﻋﻠﯾﻪ ﻣن
ﺧﻼل اﻻردوﯾﻧو ) 5vاﻗﺻﻰ ﺗﯾﺎر ﯾﺻدر ﻣن اﻻردوﯾﻧو( ﻟﻬذا ﯾﻣﻛن إﺳﺗﺧدام ﺗراﻧزﺳﺗور ﻟﻠﺣﺻول ﻋﻠﻰ ﺗﯾﺎر اﻋﻠﻰ،
وﯾﻣﻛن ﻋﻣل اﻟﻣﺷروع اﻟﺳﺎﺑق ﻣرة اﺧرى ﺑﺈﺳﺗﺧدام ﻣﺻدر ﺗﯾﺎر اﻛﺑر ﻣن .5v
ﺳوف ﻧﺳﺗﺧدم ﻓﻰ ﻫذا اﻟﻣﺷروع ﺟﻬﺎز ﻗﯾﺎس درﺟﺔ اﻟﺣ اررة )ﺟﻬﺎز ﯾﺻدر إﺷﺎ رات اﻧﺎﻟوج ﻻن درﺟﺔ اﻟﺣ اررة ﻣﺗﻐﯾرة
وﻟﯾﺳت ﻗﯾﻣﺗﺎن ﻓﻘط( .اﻟﺟﻬﺎز اﻟﻣﺳﺗﺧدم ﻫو
64
ARDUINO FROM ZERO TO HERO
ﻣﺘﻄﻠﺒﺎت اﻟﻤﺸﺮوع
-١ﻣﻘﺎوﻣﺔ ﻗﯾﻣﺗﻬﺎ 650اوم ،ﻋدد .3
-٢ﻟﯾد ذو اﻟﻠون اﻻﺧﺿر ،ﻋدد .1
-٣ﻟﯾد ذو اﻟﻠون اﻻﺻﻔر ،ﻋدد .1
-٤ﻟﯾد ذو اﻟﻠون اﻻﺣﻣر ،ﻋدد .1
-٥ﺣﺳﺎس ردﺟﺔ اﻟﺣ اررة ﻧوﻋﻪ ،TMP36ﻋدد .1
-٦ﻟوﺣﺔ ﺗﺟﺎرب ،ﻋدد .1
-٧اﺳﻼك ﺗوﺻﯾل ﻣﺧﺗﻠﻔﺔ اﻟﻣﻘﺎﺳﺎت.
-٨ﻟوﺣﺔ اردوﯾﻧو ووﺻﻠﺔ .USB
اﻟﺘﺼﻤﯿﻢ اﻟﮭﻨﺪﺳﻰ
ﺟﻬﺎز ﻗﯾﺎس درﺟﺔ اﻟﺣرارو ﯾﺣﺗوى ﻋﻠﻰ ﺛﻼث اطراف ،طرﻓﺎن ﻣﺗﺻﻼن ﺑﺎﻟﻛﻬرﺑﺎء واﻻرﺿﻰ ،اﻣﺎ اﻟطرف اﻟﺛﺎﻟث
ﻓﯾﺻدر إﺷﺎرة ﺗﺣﻣل ﻗﯾﻣﺔ درﺟﺔ اﻟﺣ اررة وﯾﻧﻘﻠﻬﺎ اﻟﻰ اﻻردوﯾﻧو ﻣن ﺧﻼل اﻟطرف ) (0اﻧﺎﻟوج ﻛﻣﺎ ﻣوﺿﺢ ﺑﺎﻟﺷﻛل
اﻟﻬﻧدﺳﻰ اﻟﺗﺎﻟﻰ
65
ARDUINO FROM ZERO TO HERO
اﻻﺳﻜﺘﺶ
#define HOT 6
#define NORMAL 4
#define COLD 2
float voltage = 0;
float celsius = 0;
float hotTemp = 26;
float coldTemp = 20;
float sensor = 0;
void setup()
{
pinMode(HOT, OUTPUT);
pinMode(NORMAL, OUTPUT);
pinMode(COLD, OUTPUT);
}
void loop()
{
sensor = analogRead(0);
voltage = (sensor*5000)/1024;
voltage = voltage-500;
celsius = voltage/10;
if ( celsius < coldTemp )
{
digitalWrite(COLD, HIGH);
delay(1000);
digitalWrite(COLD, LOW);
}
else if ( celsius > coldTemp && celsius <= hotTemp )
{
digitalWrite(NORMAL, HIGH);
delay(1000);
digitalWrite(NORMAL, LOW);
}
else
{
digitalWrite(HOT, HIGH);
delay(1000);
digitalWrite(HOT, LOW);
}
}
ﺛم ﯾﺣوﻟﻬﺎ اﻟﻰ درﺟﺔ ﻣﺋوﯾﺔ ﻣن ﺧﻼل اﻟﺿرب ﻓﻰ،اﻻﺳﻛﺗش ﯾﺣﺗوى ﺳطر اﻻواﻣر اﻟذى ﯾﺳﺗﻘﺑل إﺷﺎرة درﺟﺔ اﻟﺣ اررة
.(0:1023 )ﻋدد اﻻرﻗﺎم اﻟﻣﺳﺗﺧدﻣﺔ ﻓﻰ اﻟﺗﺣوﯾل ﻣن دﯾﺟﯾﺗﺎل اﻟﻰ اﻧﺎﻟوج وﻫﻰ1024 ﺛم اﻟﻘﺳﻣﺔ ﻋﻠﻰ5000
...ﻣﺎذا ﺑﻌﺪ
واﻟﺗﻌﺎﻣل ﻣﻊ اﺟﻬزة،اﻟﻔﺻل اﻟﺗﺎﻟﻰ ﯾﺣﺗوى ﻋﻠﻰ اﻟﻛﺛﯾر ﻣن اﻟﻣﺗﻐﯾرات واﻟوظﺎﺋف اﻟﺗﻰ ﯾﻣﻛن إﺳﺗﺧداﻣﻬﺎ ﻓﻰ اﻟﻣﺷروﻋﺎت
...... ﻫل اﻧت ﻣﺳﺗﻌد؟ ﻫﯾﺎ ﺑﻧﺎ، وﻋﻣل اﻟﻌﺎب وﺑراﻣﺞ اﺧرى ﺷﯾﻘﺔ وذﻛﯾﺔLED ﺟدﯾدة ﻣﺛل
66
ARDUINO FROM ZERO TO HERO
5
إﺳﺘﺨﺪام اﻟﺪوال
ﺳوف ﻧﺗﻌﻠم ﻛﯾﻔﯾﺔ ﺗﺳﻬﯾل ﻛﺗﺎﺑﺔ ﺳطور اواﻣر اﻻﺳﻛﺗش ﻣن ﺧﻼل ﻋﻣل دوال ﺧﺎﺻﺔ ﺑك ﻣﻣﺎ ﯾؤدى اﻟﻰ ﺳﻬوﻟﺔ ﻗراءة
اﻻﺳﻛﺗش واﻟﺗﻌﺎﻣل ﻣﻌﻪ وﺗوﻓﯾر اﻟﻛﺛﯾر ﻣن اﻟوﻗت ﻓﻰ ﻛﺗﺎﺑﺔ ﺳطور اﻻواﻣر.
اﻟداﻟﺔ ﻋﺑﺎرة ﻋن ﻣﺟﻣوﻋﺔ ﻣن ﺳطور اﻻواﻣر ﯾﺗم ﺗﺧزﯾﻧﻬﺎ واﺳﺗدﻋﺎﺋﻬﺎ اى ﻋدد ﻣن اﻟﻣرات داﺧل اﻻﺳﻛﺗش ﻟﺗﻧﻔﯾذ
اﻻواﻣر اﻟﺗﻰ ﺑداﺧﻠﻬﺎ ،ﺣﯾﻧﻣﺎ ﺗﺗﻛرر ﻣﺟﻣوﻋﺔ ﻣن اﻻواﻣر داﺧل اﻻﺳﻛﺗش ﯾﺗم ﺗﺧزﯾﻧﻬﺎ ﻛداﻟﺔ ﺛم إﺳﺗدﻋﺎﺋﻬﺎ ﻓﻰ اى ﻣﻛﺎن
ﺑﺎ ﻻﺳﻛﺗش ﻣﻣﺎ ﯾؤدى ﻟﻌدم ﺗﻛرار ﻛﺗﺎﺑﺔ ﺗﻠك اﻻواﻣر ﻋدة ﻣرات وﺗوﻓﯾر اﻟوﻗت واﻟﺟﻬد وﺗوﻓﯾر ﻣﺳﺎﺣﺔ اﻟذاﻛرة ﻓﻰ اﻟﻣﺗﺣﻛم
اﻟدﻗﯾق ،ﻫﻧﺎك اﻟﻌدﯾد ﻣن اﻟدوال اﻟﺟﺎﻫزة ﺧﺎﺻﺔ ﺑﺎﻻردوﯾﻧو وﻟﻛن ﯾﻣﻛﻧك ﻛﺗﺎﺑﺔ داﻟﺔ ﺧﺎﺻﺔ ﺑك طﺑﻘﺎ ﻻﺣﺗﯾﺎﺟﺎﺗك.
67
ARDUINO FROM ZERO TO HERO
ﻧﻼﺣظ اﻧﻧﺎ اﻋطﯾﻧﺎ اﺳم ﻟﻬذﻩ اﻟداﻟﺔ ) (blinkLEDوﻛﺗﺑﻧﺎ ﺳطور اﻻواﻣر اﻟﺗﻰ ﻧرﯾد ﺗﻛرارﻫﺎ داﺧل ﺗﻠك اﻟداﻟﺔ ،ﺛم
ﺳﻧﺳﺗدﻋﻰ ﺗﻠك اﻟداﻟﺔ داﺧل اﻻﺳﻛﺗش ﻟﺗﻧﻔﯾد اﻻواﻣر اﻟﻣوﺟودة داﺧﻠﻬﺎ ،وﯾﺗم اﺳﺗدﻋﺎء اﻟداﻟﺔ ﺑﻛﺗﺎﺑﺔ اﺳﻣﻬﺎ ﻓﻘط
) (blinkLEDوﻣن ﺛم ﺳﯾﻘوم اﻟﻣﺗﺣﻛم اﻟدﻗﯾق ﺑﺎﻟذﻫﺎب اﻟﻰ ﻣﻛﺎن ﺗﻠك اﻟداﻟﺔ وﺗﻧﻔﯾذ ﻣﺎ ﺑداﺧﻠﻬﺎ ﻣن اواﻣر ﻛﺎﻟﺗﺎﻟﻰ
#define LED 13
#define del 200
)(void setup
{
;)pinMode(LED, OUTPUT
}
)(void blinkLED
{
;)digitalWrite(LED, HIGH
;)delay(del
;)digitalWrite(LED, LOW
;)delay(del
;)digitalWrite(LED, HIGH
;)delay(del
;)digitalWrite(LED, LOW
;)delay(del
}
)(void loop
{
;)(blinkLED
;)delay(1000
}
ﻧﻼﺣظ ان اﻟداﻟﺔ ﺗم اﺳﺗدﻋﺎﺋﻬﺎ ﻣن ﺧﻼل ﻛﺗﺎﺑﺔ اﺳﻣﻬﺎ ﻓﻘط داﺧل داﻟﺔ اﻟﺗﻛرار )( .loopﻫﻧﺎ ﺗم إدﺧﺎل ﻗﯾﻣﺔ وﻗت
اﯾﺿﺎ رﻗم اﻟﻠﯾد ) (LEDﯾدوﯾﺎً اول اﻻﺳﻛﺗش وﯾﻣﻛن ﺗﻌدﯾﻠﻬﻣﺎ ﯾدوﯾﺎً ﻓﻰ اى وﻗت ﻧرﯾد .ﻣﺎذا ﻟو اردﻧﺎ ان
اﻻﻧﺗظﺎر ) (delو ً
ﻧﻐﯾر ﺗﻠك اﻟﻘﯾم اﺛﻧﺎء ﺗﻧﻔﯾذ داﻟﺔ اﻟﺗﻛرار ﺑﺣﯾث ﯾﺗم ﻛﺗﺎﺑﺔ ﺗﻠك اﻟﻘﯾم داﺧل ﺳطر اﺳﺗدﻋﺎء اﻟداﻟﺔ ﻛﺎﻟﺗﺎﻟﻰ
68
ARDUINO FROM ZERO TO HERO
ﻧﻼﺣظ اﻧﻪ ﺗم إدﺧﺎل رﻗم اﻟﻠﯾد ) (12واﯾﺿﺎً وﻗت اﻻﻧﺗظﺎر ) (100ﻓﻰ ﺳطر اﺳﺗدﻋﺎء اﻟداﻟﺔ ))(blinkLED(12, 100
وﻫذﻩ طرﯾﻘﺔ اﺧرى ﻻدﺧﺎل ﻗﯾم اﻟﻣﺗﻐﯾرات ﺑﺷﻛل اﺧر دون ﻛﺗﺎﺑﺗﻬﺎ ﻓﻰ اول ﺳطور اﻻﺳﻛﺗش ﻛﻣﺎ ﻓﻰ اﻟﻣﺷروع .9 #
ﻣﺛﺎل ﻋﻣﻠﻰ :ﻧرﯾد ﻋﻣل داﻟﺔ ﯾﺗم ﻣن ﺧﻼﻟﻬﺎ إدﺧﺎل درﺟﺔ اﻟﺣ اررة ﺳﻠﯾزﯾوس واﻟﺣﺻول ﻣﻧﻬﺎ ﻋﻠﻰ درﺟﺔ اﻟﺣ اررة
ﻓﻬرﻧﻬﺎﯾت ،ﻫذﻩ داﻟﺔ ﺳوف ﻧﺣﺻل ﻣﻧﻬﺎ ﻋﻠﻰ ﻧﺗﺎﺋﺞ ﻟﻬذا ﻟن ﻧﻛﺗب voidﻗﺑل اﺳم اﻟداﻟﺔ ﺑل ﻧﻛﺗب ﻧوع اﻟﻧﺎﺗﺞ اﻟﻣراد
اﻟﺣﺻول ﻋﻠﯾﻪ وﻫو float
ﯾﻣﻛن اﺳﺗﺧدام ﺗﻠك اﻟداﻟﺔ داﺧل اﻟﺑرﻧﺎﻣﺞ ﺑﺎﻻﺷﺎرة اﻟﯾﻬﺎ ﻣﻊ إرﺳﺎل ﻗﯾﻣﺔ اﻟﻣﺗﻐﯾر ) (Celsiusﻟﻠﺣﺻول ﻋﻠﻰ اﻟﻘﯾﻣﺔ
) (fhrenheitوﺣﻔظﻬﺎ داﺧل اﻟﻣﺗﻐﯾر ) (tempfﻛﺎﻟﺗﺎﻟﻰ
;)tempf = convertTemp(40
69
ARDUINO FROM ZERO TO HERO
ﻣﺘﻄﻠﺒﺎت اﻟﻤﺸﺮوع
.1 ﻋدد،TMP36 اﻟﺣررة ﻧوﻋﻪ
ا ﺣﺳﺎس درﺟﺔ-١
.1 ﻋدد، ﻟوﺣﺔ ﺗﺟﺎرب-٢
. اﺳﻼك ﺗوﺻﯾل ﻣﺧﺗﻠﻔﺔ اﻟﻣﻘﺎﺳﺎت-٣
.USB ﻟوﺣﺔ اردوﯾﻧو ووﺻﻠﺔ-٤
اﻟﺘﺼﻤﯿﻢ اﻟﮭﻨﺪﺳﻰ
اﻻﺳﻜﺘﺶ
ﺳوف ﻧﻘوم ﺑﺗﻘﺳﯾم اﻻﺳﻛﺗش اﻟﻰ دوال ﻓرﻋﯾﺔ ﻟﺗ وﺿﯾﺢ ﻛﯾﻔﯾﺔ ﻋﻣل اﻟداﻟﺔ اﻟﺗﻰ ﻧﺣﺻل ﻣن ﺧﻼﻟﻬﺎ ﻋﻠﻰ ﻧﺗﺎﺋﺞ
#define LED 13
int blinks = 0;
void setup()
{
pinMode(LED, OUTPUT);
}
int checkTemp()
{
float voltage = 0;
float celsius = 0;
float hotTemp = 26;
float coldTemp = 20;
float sensor = 0;
int result;
// read the temperature sensor and convert the result to degrees Celsius
sensor = analogRead(0);
70
ARDUINO FROM ZERO TO HERO
ﻣﻼﺣﻈﺔ:
ﻟﺳﻬوﻟﺔ ﻗراءة اﻻﺳﻛﺗش ،إﺑداء داﺋﻣﺎً ﺑﺎﻟداﻟﺔ اﻟﺗﻛ اررﯾﺔ ) (loopﺣﯾث إﻧﻬﺎ ﻫﻰ ﺑداﯾﺔ ﺗﺷﻐﯾل ﻛل اﻟدوال اﻻﺧرى وﻫﻰ
اﻟﻣﺗﺣﻛم اﻟرﺋﯾﺳﻰ ﻓﻰ اى إﺳﻛﺗش.
71
ARDUINO FROM ZERO TO HERO
اول ﻣﺳﺗطﯾل ﻓﻰ اﻟﺷﺎﺷﺔ ﯾﺗم ﻣن ﺧﻼﻟﻪ إدﺧﺎل اﻟﺑﯾﺎﻧﺎت اﻟﻰ اﻻردوﯾﻧو ﺛم ﺿﻐط ﻣﻔﺗﺎح إرﺳﺎل ،sendوﺗظﻬر اﻟﻧﺗﺎﺋﺞ
ﺑﺎﻟﻣﺳﺗطﯾل اﻟﺗﺎﻟﻰ ﻟﻪ ،ﻧﻼﺣظ وﺟود ﻣرﺑﻊ اﺳﻔل اﻟﺷﺎﺷﺔ ﯾﺳﻣﻰ autoscrollﻟﺗﺣدﯾث اﻟﻧﺗﺎﺋﺞ ﻋﻠﻰ اﻟﺷﺎﺷﺔ ﺑﺣﯾث اﻟﻧﺗﺎﺋﺞ
اﯾﺿﺎ ان اﻻردوﯾﻧو ﯾرﺳل
ً اﻟﺟدﯾدة ﺗظﻬر ﺑﺈﺳﺗﻣ ارر ﻣﻊ إﺧﻔﺎء اﻟﻧﺗﺎﺋﺞ اﻟﻘدﯾﻣﺔ ﻓﻰ ﺣﺎﻟﺔ إﻣﺗﻸ اﻟﺷﺎﺷﺔ ﺑﺎﻟﻣﺧرﺟﺎت .ﻧﻼﺣظ
وﯾﺳﺗﻘﺑل اﻟﺑﯾﺎﻧﺎت ﻣﻊ اﻟﻛﻣﺑﯾوﺗر ﻟﻬذا ﯾﺟب ﺗﺣدﯾد ﺳرﻋﺔ ﻣﻧﺎﺳﺑﺔ ﻟﻠطرﻓﺎن ﻟﯾﺗم اﻟﺗﻧﺳﯾق ﺑﯾﻧﻬﻣﺎ ﺑدون ﻓﻘد اى ﺑﯾﺎﻧﺎت ﻧﺗﯾﺟﺔ
إﺧﺗﻼف ﺳرﻋﺔ اﻻﺗﺻﺎل ﺑﯾﻧﻬﻣﺎ ،ﻟﻬذا ﯾﺗم ﺗوﺣﯾد ﺳرﻋﺔ اﻻﺗﺻﺎل ﺑﯾن اﻻردوﯾﻧو واﻟﻛﻣﺑﯾوﺗر ﻣن ﺧﻼل اﻟﻘﯾﻣﺔ اﺳﻔل
اﻟﺷﺎﺷﺔ وﯾﺗم ﺣﺳﺎب اﻟﺳرﻋﺔ ﺑﺎﻟﻘﯾﻣﺔ ،baudﻫﻧﺎ ﻧﺳﺗﺧدم اﻟﺳرﻋﺔ اﻻﻓﺗراﺿﯾﺔ وﻫﻰ .9600 baud
ﯾﺗم إظﻬﺎر اﻟﻧﺗﺎﺋﺞ ﻋﻠﻰ اﻟﺷﺎﺷﺔ اﻟﺗﺳﻠﺳﻠﯾﺔ ﻣن ﺧﻼل ﺳطر اﻻواﻣر ) (serial printوﻣﻧﻬﺎ إظﻬﺎر ﻛﻠﻣﺎت ﻣﺣددة ﻓﯾﺗم
وﺿﻌﻬﺎ ﺑﯾن “ “ ،او إظﻬﺎر ﻗﯾﻣﺔ ﻣﺗﻐﯾر ﺑوﺿﻊ اﺳم اﻟﻣﺗﻐﯾر ﻣﺑﺎﺷرة ﻛﺎﻟﺗﺎﻟﻰ
;)"!Serial.println("Arduino from Zero to Hero طﺑﺎﻋﺔ اﻟﻛﻠﻣﺎت اﻟﻣوﺟودة ﺑﯾن " "
72
ARDUINO FROM ZERO TO HERO
73
ARDUINO FROM ZERO TO HERO
ﻫﻧﺎ ﻧﺟد اﻧﻪ طﺎﻟﻣﺎ اﻟﺷرط ﺻﺣﯾﺢ ) (a < 10ﻓﯾﺗم ﺗﻧﻔﯾذ اﻻواﻣر اﻟﻣوﺟودة ﺑﯾن }{ وﻓﻰ ﻛل ﻣرة ﯾﺗم ﺗﻧﻔﯾذ اﻻواﻣر ﻣﺎ ﺑﯾن
}{ ﻓﯾﻬﺎ ﯾﺗم زﯾﺎدة ﻗﯾﻣﺔ ) (aﺑﻣﻘدار واﺣد ﺻﺣﯾﺢ ،إﻟﻰ ان ﺗﺻﺑﺢ ﻗﯾﻣﺔ ) (a = 10وﻫﻧﺎ ﻻﯾﺗﺣﻘق اﻟﺷرط ﻓﻼ ﯾﺗم ﺗﻧﻔﯾذ
اﻻواﻣر اﻟﺧﺎﺻﺔ ﺑﺟﻣﻠﺔ ) ،(whileﺛم ﯾﺗم اﻻﻧﺗﻘﺎل اﻟﻰ اﻻواﻣر اﻟﺗﻰ ﺗﻠﯾﻬﺎ ﺣﺗﻰ ﺗﻧﻔﯾذ ﻛل اواﻣر اﻟداﻟﺔ اﻟﺗﻛ اررﯾﺔ void
.loop
ﻣﺛﺎل :ﺳﯾﺗم ﺗﻧﻔﯾذ اواﻣر اﻟﻣﺛﺎل اﻟﺳﺎﺑق اﻟﺧﺎﺻﺔ ﺑﺟﻣﻠﺔ ) (whileوﻟﻛن ﻣرة واﺣدة ﻓﻘط ﻗﺑل اﻟﺗﺄﻛد ﻣن ﺻﺣﺔ اﻟﺷرط
ﻛﺎﻟﺗﺎﻟﻰ
;int a = 0
do
{
;)delay(1000
;a = a + 1
;) } while ( a < 100
74
ARDUINO FROM ZERO TO HERO
اﻻﺳﻜﺘﺶ
;int number
)(void setup
{
;)Serial.begin(9600
}
)(void loop
{
number = 0; // zero the incoming number ready for a new read
Serial.flush(); // clear any "junk" out of the serial buffer before waiting
)while (Serial.available() == 0
{
}
)while (Serial.available() > 0
{
;'number = Serial.read() - '0
}
;)" Serial.print("You entered:
;)Serial.println(number
;)Serial.print(number
;)" Serial.print(" multiplied by two is
;number = number * 2
;)Serial.println(number
}
اﻻﺳﻛﺗش ﯾﺑدأ ﺑﻣﺗﺎﺑﻌﺔ وﺟود ﺑﯾﺎﻧﺎت ﺗم إدﺧﺎﻟﻬﺎ اﻟﻰ اﻻردوﯾﻧو ،ﻓﻰ ﺣﺎﻟﺔ ﻋدم وﺟود اى ﻣدﺧﻼت ﻓﻼ ﯾﺗم ﺗﻧﻔﯾذ اى
اواﻣر ،اﻣﺎ ﻓﻰ ﺣﺎﻟﺔ إدﺧﺎل ﺑﯾﺎﻧﺎت ) (saved inside serial bufferﻓﯾﺗم ﻣﺿﺎﻋﻔﺔ ﺗﻠك اﻻرﻗﺎم ﺛم إظﻬﺎر اﻻرﻗﺎم اﻟﺗﻰ
ﺗم إدﺧﺎﻟﻬﺎ ﻓﻰ اﻟﺑداﯾﺔ واﯾﺿﺎ اﻟﻘﯾﻣﺔ اﻟﺗﻰ ﺗم ﻣﺿﺎﻋﻔﺗﻬﺎ ﻣﻌﺎً ﻛﺎﻟﺗﺎﻟﻰ
75
ARDUINO FROM ZERO TO HERO
long number = 0;
long a = 0;
void setup()
{
Serial.begin(9600);
}
void loop()
{
number = 0; // zero the incoming number ready for a new read
Serial.flush(); // clear any "junk" out of the serial buffer before waiting
while (Serial.available() == 0)
{
// do nothing until something comes into the serial buffer,
// when something does come in, Serial.available will return how many
// characters are waiting in the buffer to process
}
// one character of serial data is available, begin calculating
while (Serial.available() > 0)
{
// move any previous digit to the next column on the left;
// in other words, 1 becomes 10 while there is data in the buffer
number = number * 10;
// read the next number in the buffer and subtract the character 0
76
ARDUINO FROM ZERO TO HERO
،ﻣﺎذا ﺑﻌﺪ
ﺗﻌﻠﻣﻧﺎ ﻓﻰ ﻫذا اﻟﻔﺻل ﻛﺗﺎﺑﺔ دوال ﺧﺎﺻﺔ ﺑﻧﺎ ﻛﻰ ﺗﺳﺎﻋد ﻋﻠﻰ ﺳﻬوﻟﺔ وﺳرﻋﺔ ﺗﻧﻔﯾذ اﻟﺑراﻣﺞ ﻣن ﺧﻼل إﺧﺗﺻﺎر ﺳطور
ﻓﻰ اﻟﻔﺻل اﻟﺗﺎﻟﻰ ﺳوف ﺑﻛﺗب ﻋدة دوال، وﻗد ﺗم اﻟﺗدرﯾب ﻋﻠﯾﻬﺎ ﻣن ﺧﻼل ﺑﻌض اﻟﻣﺷروﻋﺎت، اﻻواﻣر اﻟﻰ ﻋدد أﻗل
...... ﻫل اﻧت ﻣﺳﺗﻌد؟ ﻫﯾﺎ ﺑﻧﺎ،اﺧرى ﻟﺗﺳﺎﻋدﻧﺎ ﻓﻰ ﺗﻧﻔﯾذ ﻣﺷروﻋﺎﺗﻧﺎ اﻟﺟدﯾدة
77
ARDUINO FROM ZERO TO HERO
6
اﻻرﻗﺎم ،اﻟﻤﺘﻐﯿﺮات ،واﻟﻌﻤﻠﯿﺎت اﻟﺤﺴﺎﺑﯿﺔ
ﺧﻼل ﻫذا اﻟﻔﺻل ﺳوف ﻧﺗﻌرف ﻋﻠﻰ اﻟﻌدﯾد ﻣن اﻟﺧﺻﺎﺋص اﻟﺟدﯾدة اﻟﺗﻰ ﺗﺳﺎﻋدﻧﺎ ﻋﻠﻰ ﺗﻧﻔﯾذ ﻣﺷروﻋﺎت اﻛﺛر ﻣﺗﻌﺔ
وﻗوة ،ﻣﺛل اﻟﺣﺻول ﻋﻠﻰ ارﻗﺎم ﻋﺷواﺋﯾﺔ ،وﻋﻣل ﻣﺻﻔوﻓﺎت ،وﻛﯾﻔﯾﺔ اﻟﺗﻌﺎﻣل ﻣﻊ ﺷﺎﺷﺔ LEDﻹظﻬﺎر ﺑﯾﺎﻧﺎت وﺻور.
ﯾﻣﻛﻧﻧﺎ ﺗﺣدﯾد ﻣدى اﻻرﻗﺎم اﻟﻌﺷواﺋﯾﺔ ،ﻓﻣﺛﻼ ﻟو ﻧرﯾد رﻗم ﺑﯾن ) (100:1000ﻟﻬذا ﺳوف ﻧﺳﺗﺧدم اﻻﻣر اﻟﺗﺎﻟﻰ
;int a = 0
;)a = random(100, 1001
78
ARDUINO FROM ZERO TO HERO
ﻧﻼﺣظ اﻧﻧﺎ ﻛﺗﺑﻧﺎ ) (1001ﺣﯾث إﻧﻧﺎ ﻧرﯾد اﻗﺻﻰ رﻗم ﻫو ) (1000ﻟﻬذا ﻟن ﯾﺗم ﺗوﻟﯾد اﻻرﻗﺎم اﻟﺧﺎﺻﺔ ﺑﺎﻟﻣدى (100 :
) 1001ﺑل اﻗل ﻣن اﻗﺻﻰ ﻗﯾﻣﺔ ﺑواﺣد ﺻﺣﯾﺢ ) (1000وﻫذا ﻣﺎ ﻧرﯾدﻩ.
ﯾﻣﻛﻧﻧﺎ إﺧﺗﺻﺎر اﻻﻣر اﻟﺳﺎﺑق واﻟﺣﺻول ﻋﻠﻰ ارﻗﺎم ﻣن ) (0:6ﻣن ﺧﻼل اﻻﻣر اﻟﺗﺎﻟﻰ
;)a = random(7
ﻧﻼﺣظ إﻧﻧﺎ إﺳﺗﺧدﻣﻧﺎ اﻻﻣر ) (randomواﻟذى ﯾﺧﺗﺎر رﻗم ﻋﺷواﺋﻰ ﻣن اﻟﻣدى اﻟذى ﯾﻠﯾﻪ.
79
ARDUINO FROM ZERO TO HERO
ﻟﻠﺗﺣوﯾل ﻣن اﻟﻧظﺎم اﻟﺛﻧﺎﺋﻰ اﻟﻰ اﻟﻧظﺎم اﻟﻌﺷرى ،ﯾﺗم وﺿﻊ اﻻﺳﺎس رﻗم 2ﻣﻊ أس ﺧﺎﻧﺔ اﻻرﻗﺎم اﻟﺛﻧﺎﺋﯾﺔ وﺟﻣﻌﻬم ﻣﻌﺎ
ﻟﻠﺣﺻول ﻋﻠﻰ اﻟرﻗم اﻟﻌﺷرى ،ﻣﺛﺎل 11111111ﺛم ﺗﺣوﯾل ﻗﯾﻣﺔ ﻛل رﻗم اﻟﻰ ﻣﺎ ﯾﻘﺎﺑﻠﻪ ﻓﻰ اﻟﻧظﺎم اﻟﻌﺷرى ﻧﺣﺻل ﻋﻠﻰ
اﻻرﻗﺎم اﻟﺗﺎﻟﯾﺔ 1+2+4+8+16+32+64+128واﻟﺗﻰ ﺗﺳﺎوى ﻓﻰ اﻟﻧﻬﺎﯾﺔ ،255وﺑﻣﺎ أن ) byteﻣﺳﺎﺣﺔ ﺗﺧزﯾن اﻻرﻗﺎم
واﻟﺣروف ﻓﻰ اﻟﻛﻣﺑﯾوﺗر( ﯾﺗﻛون ﻣن ) (8 bitsﻟﻬذا ﻧﺟد ان ﻣﺟﻣوع ارﻗﺎم Byteاﻟواﺣد ﻫو .255
Byte اﻟﻤﺘﻐﯿﺮ
ﯾﻣﻛن ﺟﻌل اﻻردوﯾﻧو ﯾﺧزن اﻻرﻗﺎم ﺑﺎﻟﻧظﺎم اﻟﺛﻧﺎﺋﻰ ﻣن ﺧﻼل إﺳﺗﺧدام اﻟﻣﺗﻐﯾر ) ،(byteﻣﺛﻸ ﯾﻣﻛن ﺗﺧزﯾن ﻗﯾم ﺛﻧﺎﺋﯾﺔ
ﻓﻰ ﻣﺗﻐﯾر booksﻣن ﺧﻼل اﻻﻣر اﻟﺗﺎﻟﻰ
;byte books = B11111111
ﻧﻼﺣظ ان ) (bﻗﺑل اﻻرﻗﺎم اﻟﺛﻧﺎﺋﯾﺔ ﻟﺗﻧﺑﯾﻪ اﻻردوﯾﻧو اﻧﻪ ﯾﺗﻌﺎﻣل ﻣﻊ ارﻗﺎم ﻣن اﻟﻧظﻠم اﻟﺛﻧﺎﺋﻰ.
ﻧرﯾد إظﻬﺎر ارﻗﺎم ﻣن ) (0:255ﻣن ﺧﻼل اﻟﺷﺎﺷﺔ اﻟﺗﺳﻠﺳﻠﯾﺔ ﻣﻊ إظﻬﺎر ﻛل رﻗم ﺑﺎﻟﻧظﺎم اﻟﺛﻧﺎﺋﻰ وﻗﯾﻣﺗﻪ ﺑﺎﻟﻧظﺎم اﻟﻌﺷرى
ﻓﻰ ﻧﻔس اﻟﺳطر ﻛﺎﻟﺗﺎﻟﻰ
;byte a
)(void setup
{
;)Serial.begin(9600
}
)(void loop
{
) for ( int count = 0 ; count < 256 ; count++
{
;a = count
;)" = Serial.print("Base-10
;)u Serial.print(a, DEC
;)" = Serial.print(" Binary
;)v Serial.println(a, BIN
;)delay(1000
80
ARDUINO FROM ZERO TO HERO
}
}
ﻓﻛرة ﻋﻣل ) (shift registerﺑﺳﯾطﺔ ﺣﯾث ﺗﻌﺗﻣد ﻋﻠﻰ إرﺳﺎل byteواﺣد اﻟﻰ ) (shift registerﻓﯾﺗم إرﺳﺎل إﺷﺎرة
ﻛﻬرﺑﯾﺔ ﻟﻛل ) (bitﯾﺣﺗوى ﻋﻠﻰ رﻗم ) (1وﻋدم إرﺳﺎل إﺷﺎرة ﻛﻬرﺑﯾﺔ ﻟﻛل ) (bitﯾﺣﺗوى ﻋﻠﻰ رﻗم ) .(0ﻣﺛﻼً ﻟو ﺗم إرﺳﺎل
ﻫذا ) (B10000110ﻓﺳﯾﺗم إرﺳﺎل إﺷﺎرة ﻛﻬرﺑﯾﺔ ﻣن ﺧﻼل اﻻطراف اﻟﺗﺎﻟﯾﺔ ) 1+2+7اﻟﺗرﻗﯾم ﯾﺑدأ ب 0ﻓﻰ ﻧظﺎم اﻟﻛﻣﺑﯾوﺗر
واﻻردوﯾﻧو ﻛﻣﺎ ﻋﻠﻣﻧﺎ ﻣن ﻗﺑل( ،ﯾﻣﻛن ﺗوﺻﯾل اﻛﺛر ﻣن ) (shift registerﻣﻌﺎ ﻓﻰ ﻧﻔس اطراف اﻻردوﯾﻧو ﻟﻠﺣﺻول
ﻋﻠﻰ اطراف اﻛﺛر ﻹﺿﺎءة اﻛﺛر ﻣن ﻟﯾد ﻓﻰ ﻧﻔس اﻟوﻗت ﻛﻣﺎ ﺳﻧرى اﻻن.
81
ARDUINO FROM ZERO TO HERO
ﻣﺘﻄﻠﺒﺎت اﻟﻤﺸﺮوع
،74HC595 shift register -١ﻋدد .3
-٢ﻣﻘﺎوﻣﺔ ﻗﯾﻣﺗﻬﺎ 560اوم ،ﻋدد .8
-٣ﻟﯾد ذو اﻟﻠون ﻣﺧﺗﻠﻔﺔ ،ﻋدد .٨
-٤ﻟوﺣﺔ ﺗﺟﺎرب ،ﻋدد .1
-٥اﺳﻼك ﺗوﺻﯾل ﻣﺧﺗﻠﻔﺔ اﻟﻣﻘﺎﺳﺎت.
-٦ﻟوﺣﺔ اردوﯾﻧو ووﺻﻠﺔ .USB
ﻧﻼﺣظ ان
82
ARDUINO FROM ZERO TO HERO
اﻻﺳﻜﺘﺶ
#define DATA 6 // digital 6 to pin 14 on the 74HC595
#define LATCH 8 // digital 8 to pin 12 on the 74HC595
#define CLOCK 10 // digital 10 to pin 11 on the 74HC595
void setup()
{
pinMode(LATCH, OUTPUT);
pinMode(CLOCK, OUTPUT);
pinMode(DATA, OUTPUT);
}
void loop()
{
int i;
for ( i = 0; i < 256; i++ )
{
digitalWrite(LATCH, LOW);
shiftOut(DATA, CLOCK, MSBFIRST, a);
digitalWrite(LATCH, HIGH);
delay(200);
}
}
83
ARDUINO FROM ZERO TO HERO
-١إﻋداد ) (shift registerﻹﺳﺗﻘﺑﺎل ﺣﺎﻟﺔ اﻻطراف اﻟﺛﻣﺎﻧﻰ اﻟﻣﺗﺻﻠﺔ ﺑﻪ ،ﻟﻬذا ﯾﺗم اﻟﺗﻣﻬﯾد ﺑﻘطﻊ اﻟﺗﯾﺎر اﻟﻛﻬرﺑﻰ
;).digitalWrite(LATCH, LOW ﻋن اﻻطراف اﻟﺛﻣﺎﻧﻰ ﻣن ﺧﻼل اﻻﻣر
-٢إرﺳﺎل اﻟﻘﯾﻣﺔ اﻟﻣراد ﻋرﺿﻬﺎ )اﻟرﻗم اﻟﻌﺷرى وﻣﺎ ﯾﻘﺎﺑﻠﻪ ﻛرﻗم ﺛﻧﺎﺋﻰ( واﻟﺗﻰ ﯾﺳﺗﻘﺑﻠﻬﺎ ) (shift registerﻣن
اﻻردوﯾﻧو ﻧﺗﯾﺟﺔ اﻟﻌداد اﻟﻣوﺟود داﺧل اﻻﺳﻛﺗش ).(0:255
-٣ﯾﺗم إرﺳﺎل ﺗﯾﺎر ﻛﻬرﺑﻰ اﻟﻰ اﻻطراف اﻟﻣراد إﺿﺎﺋﺗﻬﺎ ﻓﻘط واﻻﻧﺗظﺎر 200msﻛﻔﺗرة إﺿﺎءة ﺗﻠك اﻟﻠﯾدات.
اﻟﺨﻮارزﻣﯿﺔ
ﯾﻣﻛن ﺗﻘﺳﯾم اﻟﺑرﻧﺎﻣﺞ اﻟﻰ ﺛﻼث دوال ﻛﺎﻟﺗﺎﻟﻰ
اﻻﺳﻜﺘﺶ
#define DATA 6 // connect to pin 14 on the 74HC595
#define LATCH 8 // connect to pin 12 on the 74HC595
#define CLOCK 10 // connect to pin 11 on the 74HC595
;int number = 0
;int answer = 0
)(u void setup
{
pinMode(LATCH, OUTPUT); // set up the 74HC595 pins
;)pinMode(CLOCK, OUTPUT
;)pinMode(DATA, OUTPUT
;)Serial.begin(9600
randomSeed(analogRead(0)); // initialize the random number generator
displayNumber(0); // clear the LEDs
}
)v void displayNumber(byte a
{
// sends byte to be displayed on the LEDs
;)digitalWrite(LATCH, LOW
84
ARDUINO FROM ZERO TO HERO
85
ARDUINO FROM ZERO TO HERO
اﻟﻤﺼﻔﻮﻓﺎت arrays
ﻫﻰ ﻣﺧزن ﻟﻣﺟﻣوﻋﺔ ﻣﺗﻐﯾرات ﻣرﺗﺑطﺔ ﻣﻌﺎً وﻣﻧظﻣﺔ ،ﺑﺣﯾث ﯾﻣﻛن اﻟﺗﻌﺎﻣل ﻣﻌﻬﺎ ﺑﺳﻬوﻟﺔ دون إﺳﺗﺧدام اﻟﻛﺛﯾر ﻣن
اﻟﻣﺗﻐﯾرات.
ﻣﺛﺎل :ﯾﻣﻛن ﺗﺧزﯾن ﻗﯾم درﺟﺔ اﻟﺣ اررة ﺧﻼل ) (6ﻣرات ﻓﻰ اﻟﯾوم وﺗﺧزﯾﻧﻬﺎ ﻓﻰ ﻣﺻﻔوﻓﺔ ﻟﺳﻬوﻟﺔ اﻟﺗﻌﺎﻣل ﻣﻌﻬﺎ ﻛﺎﻟﺗﺎﻟﻰ
;]float temperatures[6
ﺣﯾث ان اﺳم اﻟﻣﺻﻘوﻓﺔ ﻫو ) (termperaturesوﺗﺣﺗوى ﻋﻠﻰ ) (6ﻣﺧﺎزن ﻟﺗﺧ زﯾن ارﻗﺎم ﻋﺷرﯾﺔ ) ،(floatﯾﻣﻛﻧﻧﺎ
إدﺧﺎل ﻗﯾم اﻟﻰ ﻣﺗﻐﯾرات اﻟﻣﺻﻔوﻓﺔ اﺛﻧﺎء ﺗﻌرﯾف اﻟﻣﺻﻔوﻓﺔ ﻣن ﺧﻼل اﻻﻣر اﻟﺗﺎﻟﻰ
;}float temperatures[]={11.1, 12.2, 13.3, 14.4, 15.5, 16.6
وﻫﻧﺎ ﻟم ﻧﺣدد ﻋدد اﻟﻣﺗﻐﯾرات اﻟﺧﺎﺻﺔ ﺑﺎﻟﻣﺻﻔوﻓﺔ ،ﺑل ﺳﯾﺗﺣدد طول اﻟﻣﺻﻔوﻓﺔ ﺗﻠﻘﺎﺋﯾﺎً ﺑﻌدد اﻟﻣﺗﻐﯾرات اﻟﻣﻛﺗوﺑﺔ ﺑﯾن }{.
ﯾﻣﻛن اﻹﺷﺎرة اﻟﻰ اى ﻋﻧﺻر ﻣن اﻟﻣﺻﻔوﻓﺔ ﺑﻛﺗﺎﺑﺔ رﻗم اﻟﻌﻧﺻر داﺧل ][ ﻣﻊ اﺳم اﻟﻣﺻﻔوﻓﺔ ﻛﺎﻟﺗﺎﻟﻰ
;temperatures[0] = 12.34
ﻣﺜﺎل
ﻫﻧﺎ ﺳوف ﻧﺳﺗﺧدم ﻣﺻﻔوﻓﺔ ﺑﺈﺿﺎﻓﺔ ارﻗﺎم ﻋﺷ واﺋﯾﺔ داﺧﻠﻬﺎ ﺛم ﯾﺗم إﺳﺗدﻋﺎء ﺗﻠك اﻻرﻗﺎم ﻣرة اﺧرى وﻋرﺿﻬﺎ ﻋﻠﻰ
اﻟﺷﺎﺷﺔ اﻟﺗﺳﻠﺳﻠﯾﺔ ﻛﺎﻟﺗﺎﻟﻰ
)(void setup
{
;)Serial.begin(9600
;))randomSeed(analogRead(0
}
int array[5]; // define our array of five integer elements
)(void loop
86
ARDUINO FROM ZERO TO HERO
{
;int i
;)(Serial.println
for ( i = 0 ; i < 5 ; i++ ) // write to the array
{
array[i] = random(10); // random numbers from 0 to 9
}
for ( i = 0 ; i < 5 ; i++ ) // display the contents of the array
{
;)"[Serial.print("array
;)Serial.print(i
;)" Serial.print("] contains
;)]Serial.println(array[i
}
;)delay(5000
}
ﺗﺣﺗوى ﻫذﻩ اﻟﻘطﻌﺔ ﻋﻠﻰ ﺳﺑﻊ ﻟﯾدات ،وﯾﻣﻛن ﻣن ﺧﻼﻟﻬﺎ ﻋرض اﻻرﻗﺎم اﻟﻌﺷرﯾﺔ ) (0:9ﺑﺣﯾث ان ﻛل ﻗطﻌﺔ ﺗﻌرض رﻗم
واﺣد ﻓﻘط ،وﻟﻛﻰ ﯾﺗم اﻟﺗﺣﻛم ﻓﻰ اﻻرﻗﺎم اﻟﻣﻌروﺿﺔ ﻻﺑد ﻣن اﻟﺗﺣﻛم ﻓﻰ اﻟﻠﯾدات ﻟﻬذا ﺗم وﺿﻊ رﻣز ﻟﻛل ﻟﯾد ﻛﺎﻟﺗﺎﻟﻰ
87
ARDUINO FROM ZERO TO HERO
ﻣﺜﺎل
ﻟو اردﻧﺎ ﻋرض اﻟرﻗم ) (7ﻟﻬذا ﺳوف ﯾﺗم إﺿﺎءة اﻟﻠﯾدات ،A,B,Cاﻣﺎ اﻟرﻗم ) (0ﻓﯾﺗم إﺿﺎءة اﻟﻠﯾدات ،A,B,C,D,E,F
وﻫﻛذا.
اﻟﺘﺤﻜﻢ ﻓﻰ اﻟﻠﯿﺪات
ﯾﻣﻛن إﺳﺗﺧدام ) (shift registerﻟﻠﺗﺣﻛم ﻓﻰ اﻟﺷﺎﺷﺔ اﻟرﻗﻣﯾﺔ ﻣن ﺧﻼل ﺗوﺻﯾل ﺛﻼث اطراف ﻓﻘط ﻣن اﻻردوﯾﻧو اﻟﻰ
) (shift registerواﻟذى ﺑدورﻩ ﺳوف ﯾﺗﺣﻛم ﻓﻰ إظﻬﺎر اﻻرﻗﺎم ،ﺳوف ﻧﺳﺗﺧدم اﻟﺟدول اﻟﺗﺎﻟﻰ واﻟذى ﯾﻌرض اﺳم ﻛل
طرف ﻣن اطراف ) (shift registerﺑﺎﻟرﻣز ) (Qوﯾﻌطﻰ اﻟرﻣز ) (A:Gاﻟﻰ اطراف اﻟﺷﺎﺷﺔ اﻟرﻗﻣﯾﺔ ،ﻣﻊ ﺗوﺿﯾﺢ اﻻرﻗﺎم
اﻟظﺎﻫرة واﻟﻘﯾم اﻟﻣﻘﺎﺑﻠﺔ ﻟﻛل ﻣﻧﻬﺎ ﻓﻰ اطراف اﻻردوﯾﻧو واطراف )(shift register
ﻣﺛﺎل :ﻟو اردﻧﺎ ﻋرض اﻟرﻗم 7ﺳوف ﻧﻘوم ﺑﺈﺿﺎءة اﻻطراف A,B,Cواﻟﺗﻰ ﺗﻘﺎﺑل اﻻطراف Q1,Q2,Q3ﻓﻰ (shift
) ، registerﻟﻬذا ﺳوف ﻧرﺳل ﻫذﻩ اﻻﺷﺎرة ﺑﺎﻟﻧظﺎم اﻟﺛﻧﺎﺋﻰ B11100000
88
ARDUINO FROM ZERO TO HERO
ﻣﺘﻄﻠﺒﺎت اﻟﻤﺸﺮوع
،74HC595 shi register -١ﻋدد .3
-٢ﺷﺎﺷﺔ ﺳﺑﺎﻋﯾﺔ ﻣن ﻧوع ،common-cathodeﻋدد .1
-٣ﻣﻘﺎوﻣﺔ ﻗﯾﻣﺗﻬﺎ 560اوم ،ﻋدد .8
-٤ﻟوﺣﺔ ﺗﺟﺎرب ،ﻋدد .1
-٥اﺳﻼك ﺗوﺻﯾل ﻣﺧﺗﻠﻔﺔ اﻟﻣﻘﺎﺳﺎت.
-٦ﻟوﺣﺔ اردوﯾﻧو ووﺻﻠﺔ .USB
اﻟﺘﺼﻤﯿﻢ اﻟﮭﻨﺪﺳﻰ
89
ARDUINO FROM ZERO TO HERO
اﻻﺳﻜﺘﺶ
#define DATA 6 // connect to pin 14 on the 74HC595
#define LATCH 8 // connect to pin 12 on the 74HC595
#define CLOCK 10 // connect to pin 11 on the 74HC595
// set up the array with the segments for 0 to 9, A to F (from Table 6-2)
int digits[] = {252, 96, 218, 242, 102, 182, 190, 224, 254, 246, 238, 62, 156,
122, 158, 142};
void setup()
{
pinMode(LATCH, OUTPUT);
pinMode(CLOCK, OUTPUT);
pinMode(DATA, OUTPUT);
}
void loop()
{
int i;
for ( i = 0 ; i < 16 ; i++ ) // display digits 0-9, A-F
{
digitalWrite(LATCH, LOW);
u shiftOut(DATA, CLOCK, LSBFIRST, digits[i]);
digitalWrite(LATCH, HIGH);
delay(250);
}
for ( i = 0 ; i < 16 ; i++ ) // display digits 0-9, A-F with DP
{
digitalWrite(LATCH, LOW);
v shiftOut(DATA, CLOCK, LSBFIRST, digits[i]+1); // +1 is to turn on the DP bit
digitalWrite(LATCH, HIGH);
delay(250);
}
}
90
ARDUINO FROM ZERO TO HERO
) (2 bytesﻣن اﻻردوﯾﻧو ،اﻟﺑﺎﯾت اﻻول ﯾﺗﺣﻛم ﻓﻰ ) (shift registerاﻟﺛﺎﻧﻰ اﻣﺎ اﻟﺑﺎﯾت اﻟﺛﺎﻧﻰ ﻓﯾﺗﺣﻛم ﻓﻰ (shift
) registerاﻻول.
ﻣﺜﺎل:
;)digitalWrite(LATCH, LOW
shiftOut(DATA, CLOCK, MSBFIRST, 254); // data for second 74HC595
shiftOut(DATA, CLOCK, MSBFIRST, 254); // data for first 74HC595
;)digitalWrite(LATCH, HIGH
ﻣﺘﻄﻠﺒﺎت اﻟﻤﺸﺮوع
،74HC595 shi register -١ﻋدد .2
-٢ﺷﺎﺷﺔ ﺳﺑﺎﻋﯾﺔ ﻣن ﻧوع ،common-cathodeﻋدد .2
-٣ﻣﻘﺎوﻣﺔ ﻗﯾﻣﺗﻬﺎ 560اوم ،ﻋدد .16
-٤ﻟوﺣﺔ ﺗﺟﺎرب ،ﻋدد .1
-٥اﺳﻼك ﺗوﺻﯾل ﻣﺧﺗﻠﻔﺔ اﻟﻣﻘﺎﺳﺎت.
-٦ﻟوﺣﺔ اردوﯾﻧو ووﺻﻠﺔ .USB
91
ARDUINO FROM ZERO TO HERO
اﻟﺘﺼﻤﯿﻢ اﻟﮭﻨﺪﺳﻰ
اﻻﺳﻜﺘﺶ
اﻻردوﯾﻧو، ً( ﻣﻌﺎshift register) اﻟﺧﺎص ﺑﻛلdata + clock (11+12) ﻧﻼﺣظ ﻣن اﻟﺗﺻﻣﯾم اﻟﻬﻧدﺳﻰ إﺗﺻﺎل طرف
(shift واﻟذى ﺑدورﻩ ﯾرﺳل ﺑﯾﺎﻧﺎت اﻟﻰ،(6) ( اﻻول ﻣن ﺧﻼل اﻟطرفshift register) ﯾﻘوم ﺑﺈرﺳﺎل اﻟﺑﯾﺎﻧﺎت اﻟﻰ
(shift ( اﻟﺧﺎص14) ( اﻻول اﻟﻰ اﻟطرف رﻗمshift register) ( اﻟﺧﺎص9) اﻟﺛﺎﻧﻰ ﻣن ﺧﻼل اﻟطرفregister)
. اﻟﺛﺎﻧﻰregister)
int digits[] = {252, 96, 218, 242, 102, 182, 190, 224, 254, 246, 238, 62, 156,
122, 158, 142};
void displayNumber(int n)
{
int left, right=0;
u if (n < 10)
{
digitalWrite(LATCH, LOW);
shiftOut(DATA, CLOCK, LSBFIRST, digits[n]);
shiftOut(DATA, CLOCK, LSBFIRST, 0);
digitalWrite(LATCH, HIGH);
}
else if (n >= 10)
{
v right = n % 10; // remainder of dividing the number to display by 10
left = n / 10; // quotient of dividing the number to display by 10
digitalWrite(LATCH, LOW);
shiftOut(DATA, CLOCK, LSBFIRST, digits[right]);
shiftOut(DATA, CLOCK, LSBFIRST, digits[left]);
digitalWrite(LATCH, HIGH);
}
92
ARDUINO FROM ZERO TO HERO
}
)(w void loop
{
;int i
) for ( i = 0 ; i < 100 ; i++
{
;)displayNumber(i
;)delay(100
}
}
ﻣﺎذا ﺑﻌﺪ،،،
ﻟﻘد ﺗﻌﻠﻣﻧﺎ اﻟﻛﺛﯾر ﻣن اﻟوظﺎﺋف واﻻﺟﻬزة اﻟﺟدﯾدة ﻓﻰ ﻫذا اﻟﻔﺻل واﻟﺗﻰ ﺳوف ﻧﺳﺗﺧدﻣﻬﺎ ﻓﻰ ﺣﯾﺎﺗﻧﺎ اﻟﻌﻣﻠﯾﺔ ﻣﺛل ﺷﺎﺷﺔ
ﻋرض اﻻرﻗﺎم ،اﻟﻔﺻل اﻟﺗﺎﻟﻰ ﺳوف ﻧﺗﻌرض ﻟطرق اﻛﺛر دﻗﺔ ﻟﻌرض اﻻرﻗﺎم واﻟﺣروف واﻻﺷﻛﺎل ﺑﺷﻛل أﻋﻣق .ﻫل
اﻧت ﻣﺳﺗﻌد؟ ﻫﯾﺎ ﺑﻧﺎ اﻟﻰ ﻋﺎﻟم اﻟﻣﺗﻌﺔ واﻟﺗﺷوﯾق.
93
ARDUINO FROM ZERO TO HERO
7
LCD ﺷﺎﺷﺔ
ﺳوف ﺗﺗﻌﻠم ﻓﻰ ﻫذا اﻟﻔﺻل اﻟﺗﻌﺎﻣل ﻣﻊ اﻟﺷﺎﺷﺎت LCDوﻛﯾﻔﯾﺔ ﺗوظﯾﻔﻬﺎ ﻓﻰ اﻟﻣﺷروﻋﺎت واﻟﺗﺣﻛم ﻓﯾﻬﺎ ،ﺣﯾث ﻧﺟد ان
أﺷﻬر اﺟﻬزة ﻋرض اﻟﻣﻌﻠوﻣﺎت ﻫﻰ ﺷﺎﺷﺎت LCDواﻟﺗﻰ ﻧﺳﺗﺧدﻣﻬﺎ ﺟﻣﯾﻌﺎً ،واﻟﺗﻰ ﯾﻣﻛﻧك ﺗوﺻﯾﻠﻬﺎ ﺑﺎﻻردوﯾﻧو وﻋرض
اﻻرﻗﺎم واﻟﺣروف واﻟرﺳوﻣﺎت )ﻧﺣﺗﺎج اﻟﻰ ﺷﺎﺷﺔ ﺧﺎﺻﺔ ﻟﻌرض اﻟرﺳوم(.
94
ARDUINO FROM ZERO TO HERO
ﻧﺟد ﻓﻰ اﻟﺻورة ﻣﻘﺎوﻣﺔ ﻗﯾﻣﺗﻬﺎ 10 kΩﺗﺳﺗﺧدم ﻟﻠﺗﺣﻛم ﻓﻰ درﺟﺔ وﺿوح اﻟﺷﺎﺷﺔ ،اﻣﺎ ﺷرﯾط اﻟوﺻﻼت ﻓﯾﺗم ﺗوﺻﯾﻠﻪ
ﺑﺎﻟطرف اﻟﻌﻠوى ﻣن اﻟﺷﺎﺷﺔ واﻟذى ﯾﺳﻣﺢ ﺑﺗوﺻﯾل اﻟﺷﺎﺷﺔ ﻣﺑﺎﺷرة اﻟﻰ ﻟوﺣﺔ اﻟﺗﺟﺎرب ﻣﺛل اى ﺟﻬﺎز اﺧر ،ﻫذا اﻟﺷرﯾط
ﯾﺣﺗوى ﻋﻠﻰ 16طرف ﻛﻣﺎ ﻫو ﻧﻔس ﻋدد اﻻطراف ﺑﺎﻟﺷﺎﺷﺔ.
95
ARDUINO FROM ZERO TO HERO
ﻧﻼﺣظ اﻧﻧﺎ إﺳﺗﺧدﻣﻧﺎ ﻣﻛﺗﺑﺔ اﻟﺷﺎﺷﺔ )ﺗﺣﺗوى ﻋﻠﻰ ﺳطور اواﻣر ﺗﻌرﯾف اﻟﺷﺎﺷﺔ ﺑﺎﻻردوﯾﻧو( ﻣن ﺧﻼل اول ﺳطر اواﻣر،
ﺛم ﺗم ﺗوﺿﯾﺢ اطراف اﻻردوﯾﻧو اﻟﻣﺗﺻﻠﺔ ﺑﺎﻟﺷﺎﺷﺔ ) (4, 5, 6, 7, 8, 9ﺣﺗﻰ ﯾﺗم إﺧراج اﻟﺑﯾﺎﻧﺎت اﻟﻣﻧﺎﺳﺑﺔ ﻣن ﺧﻼل ﺗﻠك
اﻻطراف ﻣن ﺧﻼل ﺳطر اﻻواﻣر اﻟﺗﺎﻟﻰ
;)LiquidCrystal lcd(4, 5, 6, 7, 8, 9
ﺛم ﺗم ﺗوﺿﯾﺢ ﺣﺟم اﻟﺷﺎﺷﺔ اﻟﻣﺳﺗﺧدﻣﺔ واﻟﺗﻰ ﻫﻰ ﻋﺑﺎرة ﻋن ﺻﻔﺎن ،وﻛل ﺻف ﯾﺣﺗوى ﻋﻠﻰ 16ﺣرف ﻛﻣﺎ ﺑﺎﻻﻣر
اﻟﺗﺎﻟﻰ
;)lcd.begin(16, 2
ﯾﺟب اﻟﺗﺄﻛد ﻣن ﻣﺳﺢ اﻟﺷﺎﺷﺔ ﻣن اى ﺑﯾﺎﻧﺎت ﺳﺎﺑق ﻋرﺿﻬﺎ ﺧﻼل اﻟﺷﺎﺷﺔ ﻛﻣﺎ ﺑﺎﻻﻣر اﻟﺗﺎﻟﻰ
;)(lcd.clear
ﯾﺟب ﺗﺣدﯾد ﻣﻛﺎن ﻣؤﺷر اﻟﻛﺗﺎﺑﺔ ﻟﻠﺑدء ﻓﻰ إظﻬﺎر اﻟﺣروف ﻋﻠﻰ اﻟﺷﺎﺷﺔ ﺑﺗﺣدﯾد رﻗم اﻟﺻف ) (xورﻗم اﻟﻌﻣود داﺧل ﻫذا
اﻟﺻف ) ،(yﺣﯾث ان رﻗم اﻟﺻف ﻫو ) (0:1اﻣﺎ رﻗم اﻟﻌﻣود ﻫو ).(0:15
ﻓﻰ اﻟﺳطر اﻻول ﺗم ﺗوﺿﯾﺢ ﻗﯾﻣﺔ اﻟﻣﺗﻐﯾر اﻟﻌﺷرى ﻛﺎﻣﻼً ،اﻣﺎ اﻟﺳطر اﻟﺛﺎﻧﻰ ﺗم إظﻬﺎر اﻟﻛﻠﻣﺔ ) (pi:ﻓﻘط ،اﻣﺎ ﻓﻰ
اﯾﺿﺎ ﺗﺣدﯾد ﻋدد اﻻرﻗﺎم ﺧﻠف اﻟﻌﻼﻣﺔ اﻟﻌﺷرﯾﺔ ).(3
اﻟﺳطر اﻻﺧﯾر ﻓﺗم إظﻬﺎر ﻗﯾﻣﺔ اﻟﻣﺗﻐﯾر ) (piو ً
96
ARDUINO FROM ZERO TO HERO
ﻧﺟد ﻫﻧﺎ اﻟﻣﺗﻐﯾر ) (zzﺗم طﺑﺎﻋﺔ ﻗﯾﻣﺗﻪ ) (170ﻓﻰ اﻟﺳطر اﻻول ﺑﺎﻟﻧظﺎم اﻟﺛﻧﺎﺋﻰ ﺣﯾث ﺗم وﺿﻊ ﻛﻠﻣﺔ ) (BINﻟﻠﺗﻌرﯾف
اﻧﻧﺎ ﻧرﯾد اﻟﻧﺎﺗﺞ ﺑﺎﻟﻧظﺎم اﻟﺛﻧﺎﺋﻰ ،وﺗم طﺑﺎﻋﺔ ﻧﻔس اﻟﻘﯾﻣﺔ ﺑﺎﻟﻧظﺎم اﻟﺳﺎدس ﻋﺷر ﻣن ﺧﻼل ﺗﻌرﯾف ﻧوع اﻟﻧظﺎم اﻟﻣارد
طﺑﺎﻋﺔ ﻗﯾﻣﺗﻪ ) ،(HEXوﺗظﻬر اﻟﻧﺗﯾﺟﺔ ﻋﻠﻰ اﻟﺷﺎﺷﺔ ﺑﺎﻟﺷﻛل اﻟﺗﺎﻟﻰ
97
ARDUINO FROM ZERO TO HERO
ﯾﻣﻛﻧﻧﺎ اﻟﺗﺣﻛم ﻓﻰ ﻛل ﺑﻛﺳل ﻹظﻬﺎر ﺷﻛل ﻣﻌﯾن ﻓﯾﻪ ﻣن ﺧﻼل إﺳﺗﺧدام ﻣﺻﻔوﺻﺔ ﺗﺗﻛون ﻣن ﺛﻣﺎﻧﻰ ﺑﺎﯾت )ﺛﻣﺎﻧﯾﺔ
ﺻﻔوف( ،ﻛل ﺑﺎﯾت ﯾﺣﺗوى ﻋﻠﻰ ﺧﻣﺳﺔ ﺑت ﻟرﺳم ﻛل ﺑﻛﺳل ﻓﻰ اﻟﺳطر )اﻟﺳطر ﯾﺣﺗوى ﻋﻠﻰ ﺧﻣﺳﺔ ﺑﻛﺳل( ،وﻫﻧﺎ
ﯾﻣﻛﻧﻧﺎ رﺳم اﻻﺷﻛﺎل اﻟﺗﻰ ﻧرﯾدﻫﺎ.
ﺣﯾث ان اول ﺑﺎﯾت ﯾﻘوم ﺑﺗﺷﻛﯾل اﻟﺑﻛﺳل اﻟﺧﺎص ﺑﺎﻟﺳطر اﻻول وﻫﻛذا ،ﻧﻼﺣظ ان اﻟﻘﯾﻣﺔ ) (1ﺗﻌﻣل ﻋﻠﻰ ظﻬور
اﻟﺑﻛﺳل ﻋﻠﻰ اﻟﺷﺎﺷﺔ اﻣﺎ اﻟﻘﯾﻣﺔ ) (0ﻻ ﺗظﻬر ﺷﺊ ﻋﻠﻰ اﻟﺷﺎﺷﺔ .ﻟو ﻻﺣظﻧﺎ ﺗرﺗﯾب ﺗﻠك اﻟﻘﯾم ﻣن اﻻﻋﻠﻰ اﻟﻰ اﻻﺳﻔل
ﺳﻧﺟدﻫﺎ ﺗﻛون ﺷﻛل وﺟﻪ ﻣﺑﺗﺳم )ﺳﻧرى ﻫذا اﻟﺷﻛل اﻻن(.
اﻻﺳﻜﺘﺶ
>#include <LiquidCrystal.h
LiquidCrystal lcd(4, 5, 6, 7, 8, 9); // pins for RS, E, DB4, DB5, DB6, DB7
byte a[8] = { B00000,
B01010,
B01010,
B00000,
B00100,
B10001,
B01110,
;} B00000
)(void setup
{
;)lcd.begin(16, 2
;)lcd.createChar(0, a
}
)(void loop
{
lcd.write(0); // write the custom character 0 to the next cursor position
}
ﻧﻼﺣظ اﻧﻧﺎ ﻓﻰ اﻻﺳﻛﺗش ﻗﻣﻧﺎ ﺑﺗﻌرﯾف اﻟﺷﺎﺷﺔ ﻣن ﺧﻼل ﻧداء اﻟﻣﻛﺗﺑﺔ اﻟﺧﺎﺻﺔ ﺑﻬﺎ ﺑﺎﻟﺳطر اﻻول ،ﺛم ﻗﻣﻧﺎ ﺑﺗوﺿﯾﺢ
اﻻطراف اﻟﻣﺗﺻﻠﺔ ﺑﺎﻟﺷﺎﺷﺔ ﻣن ﺧﻼل اﻻردوﯾﻧو ،ﺛم ﻗﻣﻧﺎ ﺑﺗﻌرﯾف اﻟﻣﺻﻔوﻓﺔ اﻟﺗﻰ ﺗﺣﺗوى ﻋﻠﻰ اﻟﺷﻛل اﻟﻣراد إظﻬﺎرﻩ
ﻋﻠﻰ اﻟﺷﺎﺷﺔ )وﺟﻪ ﻣﺑﺗﺳم(.
ﺗم إﺳﺗﺧدام اﻣر رﺳم اﻟﺣروف اﻟﺟدﯾدة واﻟذى ﯾﺣﺗوى ﻋﻠﻰ رﻗم اول ﺳطر ﻣن اﻟﺑﻛﺳل ) (0ﯾﻠﯾﻪ اﺳم اﻟﻣﺻﻔوﻓﺔ اﻟﺗﻰ
ﺳﯾﺗم أﺧذ اﻟﻘﯾم ﻣﻧﻬﺎ ﻣن ﺧﻼل اﻻﻣر اﻟﺗﺎﻟﻰ
;)lcd.createChar(0, a
ﺑﻌد ﺗﻧﻔﯾذ ﻫذا اﻟﻣﺷروع ﺳوف ﯾظﻬر اﻟﺷﻛل اﻟﺗﺎﻟﻰ ﻋﻠﻰ اﻟﺷﺎﺷﺔ
98
ARDUINO FROM ZERO TO HERO
اﻟﺸﺎﺷﺔ اﻟﺮﺳﻮﻣﯿﺔ
اﻟﺷﺎﺷﺔ اﻟرﺳوﻣﯾﺔ ﻫﻰ ﺷﺎﺷﺔ ﻣﺧﺻﺻﺔ ﻟﻌرض اﻟﺻور واﻟﺧطوط واﻟدواﺋر وﻏﯾرﻫﺎ اﻟﻛﺛﯾر ﻣن اﻻﺷﻛﺎل اﻟﻣﺧﺗﻠﻔﺔ ،وﻫﻰ
ﺗﺧﺗﻠف ﻋن ﺷﺎﺷﺔ ﻋرض اﻟﺣروف واﻻرﻗﺎم ﺣﯾث ان اﻟﺷﺎﺷﺔ اﻟرﺳوﻣﯾﺔ اﻛﺑر ﻓﻰ اﻟﺣﺟم واﻏﻠﻰ ﻓﻰ اﻟﺛﻣن.
99
ARDUINO FROM ZERO TO HERO
http://code.google.com/p/glcd-arduino/downloads/list/
ﯾﺗم ﺗﻌرﯾف ﻣﻛﺗﺑﺔ اﻟﺷﺎﺷﺔ وﻧوع اﻟﺧط اﻟﻣﺳﺗﺧدم ﻣﻌﻬﺎ ﻣن ﺧﻼل ﺳطور اﻻواﻣر اﻟﺗﺎﻟﯾﺔ -
>#include <glcd.h
"#include "fonts/SystemFont5x7.h
ﯾﺗم ﺗﺟﻬﯾز اﻟﺷﺎﺷﺔ ﻹﺳﺗﻘﺑﺎل اﻟﺑﯾﺎﻧﺎت اﻟﺟدﯾدة ﺑﻌد اﻟﺗﺄﻛد ﻣن ﺧﻠوﻫﺎ ﻣن اى ﺑﯾﺎﻧﺎت ﺳﺎﺑﻘﺔ ﻣن ﺧﻼل -
ﺳطور اﻻواﻣر اﻟﺗﺎﻟﯾﺔ
;)GLCD.Init(NON_INVERTED
;)GLCD.SelectFont(System5x7
;)(GLCD.ClearScreen
اﻟﺷﺎﺷﺔ اﻟرﺳوﻣﯾﺔ ﺗﺣﺗوى ﻋﻠﻰ 8ﺻﻔوف ،وﻛل ﺻف ﯾﺣﺗوى ﻋﻠﻰ 20ﺣرف ،ﯾﻣﻛن إﺳﺗﺧدام اﻟﺳطر -
اﻟﺗﺎﻟﻰ ﻟﺗﺣدﯾد ﻣﻛﺎن ﺑداﯾﺔ إظﻬﺎر اﻟﺑﯾﺎﻧﺎت ﻋﻠﻰ اﻟﺷﺎﺷﺔ ﻣن ﺧﻼل ﺗﺣدﯾد رﻗم اﻟﺻف ) (xورﻗم اﻟﺣرف
ﻓﻰ اﻟﺻف )(y
100
ARDUINO FROM ZERO TO HERO
GLCD.CursorTo(x, y);
( ﺑﺎﻟﻧص اﻟﻣراد ﻋرﺿﻪtext ﯾﻣﻛن ﻋرض ﻧﺻوص ﻣن ﺧﻼل اﻻﻣر اﻟﺗﺎﻟﻰ )ﺑﻌد ﺗﺑدﯾل ﻛﻠﻣﺔ -
GLCD.Puts("text");
ﺑﺎﻟﻣﺗﻐﯾر اﻟﺻﺣﯾﺢ اﻟﻣرادnumber ﯾﻣﻛن ﻋرض اﻻرﻗﺎم اﻟﺻﺣﯾﺣﺔ ﻣن ﺧﻼل اﻻﻣر اﻟﺗﺎﻟﻰ )ﺑﻌد ﺗﺑدﯾل -
(ﻋرﺿﻪ
GLCD.PrintNumber(number);
اﻻﺳﻜﺘﺶ
#include <glcd.h> // include the graphics LCD library
#include "fonts/SystemFont5x7.h" // include the standard character fonts for it
int j = 7;
void setup()
{
GLCD.Init(NON_INVERTED);
GLCD.ClearScreen();
GLCD.SelectFont(System5x7);
}
void loop()
{
GLCD.ClearScreen();
GLCD.CursorTo(1, 1);
GLCD.Puts("Hello, world.");
GLCD.CursorTo(1, 2);
GLCD.Puts("I hope you are ");
GLCD.CursorTo(1, 3);
GLCD.Puts("enjoying this");
GLCD.CursorTo(1, 4);
GLCD.Puts("book. ");
GLCD.CursorTo(1, 5);
GLCD.Puts("This is from ");
GLCD.CursorTo(1, 6);
GLCD.Puts("chapter ");
GLCD.PrintNumber(j);
GLCD.Puts(".");
do {} while (1);
}
101
ARDUINO FROM ZERO TO HERO
ﯾﻣﻛن رﺳم ﻧﻘطﺔ ﻣﻌﯾﻧﺔ )إﺿﺎءة اﻟﻧﻘطﺔ = ﻋرﺿﻬﺎ ﺑﺎﻟﻠون اﻻﺳود( ﻣﻊ ﺗﺣدﯾد ﻟوﻧﻬﺎ )اﺑﯾض او اﺳود -
ﻓﻘط( ﺑﻌد ﺗﺣدﯾد ﻣﺣﺎور اﻟﻧﻘطﺔ ) (x, yﻣن ﺧﻼل اﻻﻣر اﻟﺗﺎﻟﻰ
GLCD.SetDot(x, y, color); // color is BLACK or WHITE
اﯾﺿﺎ ﯾﻣﻛن رﺳم ﻣﺳﺗطﯾل ﻣن ﺧﻼل ﺗﺣدﯾد ﻣﺣﺎور اﻟﻧﻘطﺔ اﻋﻠﻰ اﻟﯾﺳﺎر ) (x, yﺛم ﺗﺣدﯾد ﻋرض -
اﻟﻣﺳﺗطﯾل ) (wوارﺗﻔﺎﻋﻪ ) (hواﺧﯾر ﻟون اﻟﻣﺳﺗطﯾل ﻣن ﺧﻼل اﻻﻣر اﻟﺗﺎﻟﻰ
;)GLCD.DrawRect(x, y, w, h, color
ﻫﻧﺎك اﻣر ﻟﻣﻠﺊ اﻟﻣﺳﺗطﯾل ﺑﻠون ﻣﻌﯾن ﺑﺈﺳﺗﺧدام ﻧﻔس اﻻﺣداﺛﯾﺎت اﻟﺳﺎﺑق إﺳﺗﺧداﻣﻬﺎ -
;)GLCD.FillRect(x, y, w, h, color
ﺑﻌض اﻻﺷﺧﺎص ﯾرﯾد رﺳم ﻣﺳﺗطﯾل ﻣﻧﺣﻧﻰ اﻟزواﯾﺎ ﻣن ﺧﻼل اﻻﻣر اﻟﺗﺎﻟﻰ -
;)GLCD.DrawRoundRect(x, y, w, h, r, color
رﺳم اﻟداﺋرة ﯾﺗم ﺑﺗﺣدﯾد إﺣداﺛﯾﺎت ﻣرﻛز اﻟداﺋرة ) (x, yﻣﻊ طول ﻧﺻف اﻟﻘطر ) (rﻣن ﺧﻼل اﻻﻣر -
اﻟﺗﺎﻟﻰ
;)GLCD.DrawCircle(x, y, r, color
رﺳم ﺧط ﻣﺳﺗﻘﯾم رأﺳﻰ ﯾﺗم ﺑﺗﺣدﯾد إﺣداﺛﯾﺎت ﻧﻘطﺔ ﺑداﯾﺔ اﻟﺧط ) (x, yطول اﻟﺧط ﺑﺎﻟﺑﻛﺳل )(1ﻣن -
ﺧﻼل اﻻﻣر اﻟﺗﺎﻟﻰ
;)GLCD.DrawVertLine(x, y, l, color
102
ARDUINO FROM ZERO TO HERO
رﺳم ﺧط ﻣﺳﺗﻘﯾم أﻓﻘﻰ ﯾﺗم ﺑﺗﺣدﯾد إﺣداﺛﯾﺎت ﻧﻘطﺔ ﺑداﯾﺔ اﻟﺧط ) (x, yوطول اﻟﺧط ﺑﺎﻟﺑﻛﺳل ) (1ﻣن -
ﺧﻼل اﻻﻣر اﻟﺗﺎﻟﻰ
;)GLCD.DrawHoriLine(x, y, l, color
اﻟﺨﻮارزﻣﯿﺔ
اﻟﻣﺷروع ﯾﺑدو ﺻﻌب ﻟﻛﻧﻪ ﻏﺎﯾﺔ ﻓﻰ اﻟﺳﻬوﻟﺔ ،ﺣﯾث اﻧﻧﺎ ﻧرﯾد ﺗﺧزﯾن 100ﻗﯾﻣﺔ ﻟدرﺟﺔ اﻟﺣ اررة )ﻧﺳﺗﺧدم ﻣﺻﻔوﻓﺔ( ﻣﻊ
ﺗﺧزﯾن وﻗت ﻛل ﻗﯾﻣﺔ درﺟﺔ ﺣ اررة ،ﺛم ﯾﺗم رﺳم ﺷﻛل ﺑﯾﺎﻧﻰ ﺑﺈﺳﺗﺧدام ﺗﻠك اﻟﻘﯾم اﻟﻣﺧزﻧﺔ ﺳﺎﺑﻘﺎً ،ﻟﻬذا ﺳوف ﻧﺳﺗﺧدم
ﺣﺳﺎس ﺣ اررة )ﺗم إﺳﺗﺧداﻣﻪ ﻣن ﻗﺑل(.
ﻣﺘﻄﻠﺒﺎت اﻟﻤﺸﺮوع
-١ﺷﺎﺷﺔ ﻣزودة ﺑﺎطراف ،128-by-64-pixel KS0108B graphic LCDﻋدد .1
-٢ﻣﻘﺎوﻣﺔ ﻣﺗﻐﯾرة ﻗﯾﻣﺗﻬﺎ ،10kΩﻋدد .1
-٣ﺣﺳﺎس درﺟﺔ اﻟﺣ اررة ﻧوﻋﻪ ،TMP36ﻋدد .1
-٤ﻟوﺣﺔ ﺗﺟﺎرب ،ﻋدد .1
-٥اﺳﻼك ﺗوﺻﯾل ﻣﺧﺗﻠﻔﺔ اﻟﻣﻘﺎﺳﺎت.
-٦ﻟوﺣﺔ اردوﯾﻧو ووﺻﻠﺔ .USB
103
ARDUINO FROM ZERO TO HERO
اﻻﺳﻜﺘﺶ
#include <glcd.h> // include the graphics LCD library
#include <fonts/SystemFont5x7.h> // include the standard character fonts for it
int tcurrent;
int tempArray[100];
void setup()
{
GLCD.Init(NON_INVERTED); // configure GLCD
GLCD.ClearScreen(); // turn off all GLCD pixels
GLCD.SelectFont(System5x7);
}
void getTemp() // function to read temperature from TMP36
{
float sum = 0;
float voltage = 0;
float sensor = 0;
float celsius;
// read the temperature sensor and convert the result to degrees C
sensor = analogRead(5);
voltage = (sensor * 5000) / 1024;
voltage = voltage - 500;
celsius = voltage / 10;
tcurrent = int(celsius);
// insert the new temperature at the start of the array of past temperatures
for (int a = 99 ; a >= 0 ; --a )
{
tempArray[a] = tempArray[a-1];
}
tempArray[0] = tcurrent;
}
void drawScreen() // generate GLCD display effects
{
int q;
GLCD.ClearScreen();
GLCD.CursorTo(5, 0);
GLCD.Puts("Current:");
GLCD.PrintNumber(tcurrent);
GLCD.CursorTo(0, 1);
GLCD.PrintNumber(40);
GLCD.CursorTo(0, 2);
GLCD.PrintNumber(32);
GLCD.CursorTo(0, 3);
GLCD.PrintNumber(24);
GLCD.CursorTo(0, 4);
GLCD.PrintNumber(16);
GLCD.CursorTo(1, 5);
GLCD.PrintNumber(8);
GLCD.CursorTo(1, 6);
GLCD.PrintNumber(0);
for (int a = 28 ; a < 127 ; a++)
{
q = (55 - tempArray[a-28]);
GLCD.SetDot(a, q, BLACK);
}
}
void loop()
{
getTemp();
drawScreen();
for (int a = 0 ; a < 20 ; a++)
{
delay(60000); // wait 1 minute
}
104
ARDUINO FROM ZERO TO HERO
}
ﺑﻌد اﻻﻧﺗﻬﺎء ﻣن ﺗﻧﻔﯾذ ﻫذا اﻟﺑرﻧﺎﻣﺞ ﯾﻣﻛﻧك اﻻن اﻟﺗﻔﻛﯾر ﻓﻰ ﺗﻧﻔﯾذ اﻟﻌدﯾد ﻣن اﻟﻣﺷروﻋﺎت ﺑﺈﺳﺗﺧدام اﻟﺷﺎﺷﺔ اﻟرﺳوﻣﯾﺔ
واﻟﺗﻰ ﺗﺳﺎﻋد ﻋﻠﻰ ﺗﻧﻔﯾذ اﻟﻌدﯾد ﻣن اﻟﻣﺷروﻋﺎت ذات ﻗﯾﻣﺔ ﻋﺎﻟﯾﺔ ﻣن ﺧﻼل إظﻬﺎر اﻟﻧﺗﺎﺋﺞ ﺑﻬذا اﻟﺷﻛل اﻟراﺋﻊ واﻟﻣﻌﺑر.
ﻣﺎذا ﺑﻌﺪ،،،
ﺗﻌﻠﻣﻧﺎ ﻓﻰ ﻫذا اﻟﻔﺻل اﻟﻛﺛﯾر ﻋن ﺷﺎﺷﺔ اﻟﺣروف واﻻرﻗﺎم واﯾﺿﺎً ﺗﻌرﻓﻧﺎ ﻋﻠﻰ إﺳﺗﺧداﻣﺎت ﺷﺎﺷﺔ اﻟرﺳوم اﻟﺑﯾﺎﻧﯾﺔ وﻛﯾف
ﯾﻣﻛن اﻹﺳﺗﻔﺎدة ﻣﻧﻬﺎ ﻓﻰ ﺗﻧﻔﯾذ ﻣﺷروﻋﺎت ﺷﯾﻘﺔ ﻓﻰ ﻋرض اﻟﻧﺗﺎﺋﺞ ﻟﻼﺧرﯾن ،ﻓﻰ اﻟﻔﺻل اﻟﺗﺎﻟﻰ ﺳوف ﻧﺗﻌرف ﻋﻠﻰ
اﺟﻬزة واداوت ﺟدﯾدة ﯾﻣﻛﻧﻧﺎ إﺳﺗﺧداﻣﻬﺎ ﻓﻰ ﺗﻧﻔﯾذ ﻣﺷروﻋﺎت اﻛﺛر ﻗوة وﺗﺷوﯾﻘﺄ ،ﻫل اﻧت ﻣﺳﺗﻌد؟ ﻫﯾﺎ ﺑﻧﺎ....
105
ARDUINO FROM ZERO TO HERO
8
اﻟﺘﻌﺮف ﻋﻠﻰ إﻣﻜﺎﻧﯿﺎت اﻻردوﯾﻨﻮ
ﺳوف ﻧﺗﻌﻠم ﻓﻰ ﻫذا اﻟﻔﺻل ﻛﯾﻔﯾﺔ اﻟﺣﺻول ﻋﻠﻰ ﺧدﻣﺎت ووظﺎﺋف ﺟدﯾدة ﻣﺗﻌﻠﻘﺔ ﺑﺎﻻردوﯾﻧو واﻟﺗﻰ ﺗﺗطﻠب إﺳﺗﺧدام
ﻣﻛوﻧﺎت اﻟﻛﺗروﻧﯾﺔ اﺧرى ﻣﺻﻣﻣﺔ ﻟﺗﻧﻔﯾذ ﺗﻠك اﻟوظﺎﺋف .ﻫﻧﺎك اﻟﻌدﯾد ﻣن اﻟﻠوﺣﺎت اﻟﺛﺎﻧوﯾﺔ ) (shieldﯾﻣﻛن دﻣﺟﻬﺎ ﻣﻊ
اﻻردوﯾﻧو ﻟﻠﺣﺻول ﻋﻠﻰ ﺧدﻣﺎت ﺟدﯾدة وﻓﻌﺎﻟﺔ ﻓﻰ ﻣﺷروﻋﺎﺗﻧﺎ واﻟﺗﻰ ﺗﻌطﯾﻧﺎ اﻟﻔرﺻﺔ ﻟﻠﺗﻌرف ﺑﺷﻛل اﻋﻣق ﻋﻠﻰ
اﻻﻣﻛﺎﻧﯾﺎت اﻟﻬﺎﺋﻠﺔ ﻟﻼردوﯾﻧو واﻟﺗﻰ ﯾﻣﻛن اﻻﺳﺗﻔﺎدة ﻣﻧﻬﺎ ﻓﻰ ﻋدد ﻻﻧﻬﺎﺋﻰ ﻣن اﻟﻣﺷروﻋﺎت اﻟﻌﻠﻣﯾﺔ واﻟﻌﻣﻠﯾﺔ ،ﺳوف
ﻧرﻛز ﻓﻰ ﻫذا اﻟﻔﺻل ﻋﻠﻰ ﻛﯾﻔﯾﺔ إﺳﺗﺧدام اﻻﻧواع اﻟﻣﺧﺗﻠﻔﺔ ﻣن اﻟﺷﯾﻠد ووظﯾﻔﺔ ﻛل ﻣﻧﻬﺎ.
Shields
داﺋﻣﺎ ﻧﺣﺗﺎج اﻟﻰ ﺧدﻣﺎت ﺟدﯾدة ﻓﻰ ﻣﺷروﻋﺎﺗﻧﺎ وﻧﺣﺎول ان ﻧﺗﻌرف ﻋﻠﻰ طرﯾﻘﺔ اﻟﺣﺻول ﻋﻠﯾﻬﺎ ﻣن ﺧﻼل اﻻردوﯾﻧو،
ﻣﺛل ﺗﺣدﯾد اﻟﻣواﻗﻊ ) (GPSوﺗﺧزﯾن اﻟﻣﻌﻠوﻣﺎت ) (microSDوﻏﯾرﻫﺎ ،ﻟﻬذا ﺗم ﺗﺻﻧﯾﻊ ﻟوﺣﺎت اﻟﻛﺗروﻧﯾﺔ ﺟدﯾدة ﺗﺣﺗوى
ﻋﻠﻰ وظﺎﺋف ﻣﺧﺗﻠﻔﺔ ﯾﻣﻛﻧﻬﺎ اﻻﺗﺻﺎل ﺑﺷﻛل ﻣﺑﺎﺷر ﻣﻊ اﻻردوﯾﻧو ﻟﺗﻧﻔﯾذ ﺗﻠك اﻟوظﺎﺋف ﻛﻣﺎ ﻧرﯾد ،ﺗﻠك اﻟﻠوﺣﺎت
اﻻﻟﻛﺗروﻧﯾﺔ ﺗﺳﻣﻰ ﺷﯾﻠد.
106
ARDUINO FROM ZERO TO HERO
ﻧﻼﺣظ ان اﻟﺷﯾﻠد ﻣﻠﺗﺻﻘﺔ ﺗﻣﺎﻣﺎ ﺑﺎﻻردوﯾﻧو ﻣن ﺧﻼل ﺻﻔوف اﻻطراف اﻟدﯾﺟﯾﺗﺎل واﻻﻧﺎﻟوج ﻋﻠﻰ ﺟﺎﻧﺑﻰ اﻻردوﯾﻧو ،ﻓﯾﺗم
اﻻﺗﺻﺎل اﻟﻣﺑﺎﺷر ﺑﯾﻧﻬﻣﺎ وﻫﻧﺎ ﯾﺗم إﺿﺎﻓﺔ ﺳطور اﻟﻣﻛﺗﺑﺎت اﻟﺧﺎﺻﺔ ﺑﻛل ﺷﯾﻠد ﺗم ﺗوﺻﯾﻠﻬﺎ ﻟﯾﺗم اﻟﺗﻌﺎﻣل ﻣﻌﻬﺎ ﺧﻼل
اﯾﺿﺎ ﯾﻣﻛن ﺗﺣﻣﯾﻠﻬﺎ
اﻻﺳﻛﺗش ﺑﺳﻬوﻟﺔ ،وﻛل ﺷﯾﻠد ﯾﺗوﻓر ﻟﻬﺎ اﻟﻌدﯾد ﻣن اﻟﻣﻛﺗﺑﺎت داﺧل ﺑ رﻧﺎﻣﺞ اﻻردوﯾﻧو ﻧﻔﺳﻪ ) (IDEو ً
ﻣن اﻻﻧﺗرﻧت ﺑﺳﻬوﻟﺔ.
ﯾﻣﻛن ﺗوﺻﯾل اﻛﺛر ﻣن ﺷﯾﻠد ﻣﻊ اﻻردوﯾﻧو ﺑﻧﻔس اﻟوﻗت دون ﺣدوث ﻣﺷﺎﻛل )ﺑﺷرط ﻋدم إﺳﺗﺧدام اﻛﺛر ﻣن ﺷﯾﻠد ﻧﻔس
اﻟطرف اﻟﺧﺎص ﺑﺎﻻردوﯾﻧو( وذﻟك ﻋﻧدﻣﺎ ﻧرﯾد اﻛﺛر ﻣن وظﯾﻔﺔ ﻓﻰ ﻧﻔس اﻟوﻗت ﻛﻣﺎ ﺑﺎﻟﺷﻛل اﻟﺗﺎﻟﻰ
ﺷﯿﻠﺪ اﻟﺘﺠﺎرب
ﯾﻣﻛن ﺻﻧﺎﻋﺔ ﺷﯾﻠد ﺧﺎﺻﺔ ﺑك ﺑﺷﻛل اﻓﺿل ﻣن إﺳﺗﺧدام ﻟوﺣﺔ اﻟﺗﺟﺎرب ) (bread boardوذﻟك ﺑﺈﺳﺗﺧدام (proto
) shieldواﻟﺗﻰ ﺗﺗﯾﺢ ﻟك ﺗﺛﺑﯾت اﻟﻣﻛوﻧﺎت اﻟﺗﻰ ﺗ رﯾدﻫﺎ ﻣﻌﺎً ﺑﺷﻛل اﻗرب ﻟﻠﺣﻘﯾﻘﺔ ﻛﻣﺎ ﺑﺎﻟﺷﻛل اﻟﺗﺎﻟﻰ اﻟذى ﯾﺣﺗوى ﻋﻠﻰ
ﻣﻛوﻧﺎت ﺷﯾﻠد اﻟﺗﺟﺎرب ﺑﻣﻔردﻫﺎ وﺷﻛﻠﻬﺎ ﺑﻌد ﺗﺛﺑﯾت اﻟﻣﻛوﻧﺎت اﻻﻟﻛﺗروﻧﯾﺔ ﻋﻠﯾﻬﺎ وﺗوﺻﯾﻠﻬﺎ ﺑﺎﻻردوﯾﻧو
107
ARDUINO FROM ZERO TO HERO
ﻣﺘﻄﻠﺒﺎت اﻟﻤﺸﺮوع
-١ﺷﯾﻠد ﺗﺟﺎرب ﺧﺎص ﺑﺎﻻردوﯾﻧو ،ﻋدد .1
-٢ﻣﻘﺎوﻣﺔ ﻣﺗﻐﯾرة ﻗﯾﻣﺗﻬﺎ ،560ﻋدد .8
-٣ﻟﯾد ذو اﻟوان ﻣﺧﺗﻠﻔﺔ ،ﻋدد .8
،6-pin Arduino stackable headers -٤ﻋدد .2
،8-pin Arduino stackable headers -٥ﻋدد .2
-٦ﻟوﺣﺔ ﺗﺟﺎرب ،ﻋدد .1
108
ARDUINO FROM ZERO TO HERO
اﻟﺘﺼﻤﯿﻢ اﻟﮭﻨﺪﺳﻰ
109
ARDUINO FROM ZERO TO HERO
-٢رﺳم اﻟداﺋرة اﻟﻛﻬرﯾﺔ اﻟﺣﺎﻟﯾﺔ ﻋﻠﻰ ﺷﻛل ﺗﺻﻣﯾﻣﻲ ﻫﻧدﺳﻰ ﻟﻺﺳﺗﻌﺎﻧﺔ ﺑﻪ ﻓﯾﻣﺎ ﺑﻌد ﻋﻧد ﺗﺛﺑﯾت وﻟﺣﺎم ﺗﻠك
اﻟﻣﻛوﻧﺎت ﻣﻌﺎً.
-٣ﺗﺣدﯾد ﻣﻛﺎن ﻛل ﻣﻛون اﻟﻛﺗروﻧﻰ ﻋﻠﻰ ﺷﯾﻠد اﻟﺗﺟﺎرب ،ﯾﻣﻛن اﻻﺳﺗﻌﺎﻧﺔ ﺑﺎﻟﺗﺻﻣﯾم اﻟﺟﺎﻫز اﻟﻣرﺳوم ﻋﻠﻰ ﺷﯾﻠد
اﻟﺗﺟﺎرب واﻻﺳﺗﻔﺎدة ﻣﻧﻪ.
-٤ﺗﺛﺑﯾت ﻛل ﻗطﻌﺔ اﻟﻛﺗروﻧﯾﺔ ﺑﺎﻟﻣﻛﺎن اﻟﻣﺧﺻص ﻟﻬﺎ ،ﻣﻊ اﻟﺑدء ﻓﻰ ﻟﺣﺎم ﺗﻠك اﻟﻘطﻊ ﺑﻣﻛﺎﻧﻬﺎ ﻣن ﺧﻼل إﺳﺗﺧدام
ﻣﻛوة اﻟﻠﺣﺎم.
-٥اﻟﺗﺄﻛد ﻣن ﺗﺛﺑﯾت ﻛل اﻟﻘطﻊ اﻻﻟﻛﺗروﻧﯾﺔ ﻓﻰ اﻣﺎﻛﻧﻬﺎ اﻟﺻﺣﯾﺣﺔ ﺛم ﺗﺟرﺑﺔ اﻟﺷﯾﻠد ﺑﻌد ذﻟك.
-٦ﺑﻣﺟرد اﻟﺗﺄﻛد ﻣن ﺳﻼﻣﺔ اﻟﻠﺣﺎم ﻟﻛل اﻟﻘطﻊ اﻻﻟﻛﺗروﻧﯾﺔ ،ﯾﺗم ﺗوﺻﯾل اﻟﺷﯾﻠد ﺑﺎﻻردوﯾﻧو ﻟﯾﺻﺑﺢ ﺷﻛﻠﻬﺎ ﻣﺷﺎﺑﻪ
ﻟﻠﺷﻛل اﻟﺗﺎﻟﻰ
110
ARDUINO FROM ZERO TO HERO
اﻟﻣﻛﺗﺑﺎت ﯾوﺟد ﺑﻌﺿﻬﺎ ﺟﺎﻫز داﺧل IDEوﻫﻧﺎك ﻣﻛﺗﺑﺎت اﺧرى ﯾﻣﻛن ﺗﺣﻣﯾﻠﻬﺎ ﻣن اﻻﻧﺗرﻧت ﻣﺑﺎﺷرة ﺑﺷﻛل ﻣﺟﺎﻧﻰ،
ﻛل ﺷﯾﻠد ﺗﺣﺗوى ﻋﻠﻰ ﻣﻛﺗﺑﺔ ﺧﺎﺻﺔ ﺑﻬﺎ ﺗﻧﺎﺳب ﻣﻛوﻧﺎﺗﻬﺎ اﻻﻟﻛﺗروﻧﯾﺔ.
ﻟﻣﻌرﻓﺔ اﻟﻣﻛﺗﺑﺎت اﻟﻣوﺟودة ﺣﺎﻟﯾﺎً ﻓﻰ ﺑرﻧﺎﻣﺞ IDEﯾﺗم ﻣن ﺧﻼل ﻓﺗﺢ ﻗﺎﺋﻣﺔ Sketech import libraryﻓﺳﺗﺟد
ﻫﻧﺎك ﻛل اﻟﻣﻛﺗﺑﺎت اﻟﻣﺟﺎﻧﯾﺔ اﻟﺗﻰ ﺗم ﺗﺣﻣﯾﻠﻬﺎ ،ﯾﻣﻛن إﺿﺎﻓﺔ ﻣﻛﺗﺑﺎت اﺧرى اﻟﻰ ﺗﻠك اﻟﻣوﺟودة ﺑﺟﻬﺎزك ﻣن ﺧﻼل
ﻧﺳﺦ اﻟﻣﻛﺗﺑﺔ اﻟﺟدﯾدة اﻟﻰ ﻫذا اﻟﻣﺳﺎر ﺑﺟﻬﺎزك ،documentes\arduino\libarariesﺛم إﻋﺎدة ﺗﺷﻐﯾل ﺑرﻧﺎﻣﺞ IDE
ﺛم ﻓﺗﺢ ﻣﺧزن اﻟﻣﻛﺗﺑﺎت sketch import libraryﻓﺗﺟد ﻟﺳم اﻟﻣﻛﺗﺑﺔ اﻟﺟدﯾدة ﻫﻧﺎك.
MicroSD ذاﻛﺮة
ﯾﻣﻛﻧﻬﺎ ﺗﺧزﯾن اﻟﻌدﯾد ﻣن اﻟﻣﻌﻠوﻣﺎت اﻟﺗﻰ ﻗد ﺗﺳﺗﺧدم ﻻﺣﻘﺎً ،ﻓﻣﺛﻼ ﯾﻣﻛن ﺗﺧزﯾن درﺟﺔ اﻟﺣ اررة ﻋﻠﻰ ﻓﺗرات ﻣﺧﺗﻠﻔﺔ
واﯾﺿﺎً ﺗﺧزﯾن ﻣﻠﻔﺎت ﻟرﺑطﻬﺎ ﺑﺎﻻﻧﺗرﻧت وﻫﻛذا.
ﯾﻣﻛﻧﻧﺎ اﻟﺗﻌﺎﻣل ﻣﻌﻬﺎ ﻣن ﺧﻼل ﺗوﺻﯾﻠﻬﺎ ﺑﺷﯾﻠد ﺧﺎص ﺑﻬﺎ واﻟذى ﺑدورﻩ ﯾﺗم ﺗوﺻﯾﻠﻪ ﺑﺎﻻردوﯾﻧو ﻟﺗﺧزﯾن اﻟﻣﻌﻠوﻣﺎت اﻟﺗﻰ
ﯾﺗم ﺗﺟﻣﯾﻌﻬﺎ.
ﻣﻼﺣظﺔ :ﯾﺟب ﺗﻬﯾﺋﺔ وﻣﺳﺢ ﻛل اﻟﺑﯾﺎﻧﺎت اﻟﻣوﺟودة ﻋﻠﻲ ﺷرﯾﺣﺔ اﻟذاﻛرة ﻗﺑل إﺳﺗﺧداﻣﻬﺎ ﻣن ﺧﻼل ﺗوﺻﯾﻠﻬﺎ
ﺑﺎﻟﻛﻣﺑﯾوﺗر وﻋﻣل ﺗﻬﯾﺋﺔ ﻟﻬﺎ ﻣﺛل ﺗﻬﯾﺋﺔ اﻟﻘرص اﻟﺻﻠب اﻟﺟدﯾد.
111
ARDUINO FROM ZERO TO HERO
ﻣﻼﺣﻈﺎت:
ﻣن اﻟﻣﺣﺗﻣل ان اﻟذاﻛرة ﻻ ﺗﻌﻣل ﻟﻬذا ﯾﺗم ﺗﻧﻔﯾذ اﻟﺧطوات اﻟﺗﺎﻟﯾﺔ:
اﻻﺳﻜﺘﺶ
;int b = 0
>#include <SD.h
)(void setup
{
;)Serial.begin(9600
;)"Serial.print("Initializing SD card...
;)pinMode(10, OUTPUT
// check that the microSD card exists and is usable
))if (!SD.begin(8
{
;)"Serial.println("Card failed, or not present
112
ARDUINO FROM ZERO TO HERO
// stop sketch
return;
}
Serial.println("microSD card is ready");
}
void loop()
{
u // create the file for writing
File dataFile = SD.open("DATA.TXT", FILE_WRITE);
// if the file is ready, write to it:
if (dataFile)
v{
for ( int a = 0 ; a < 11 ; a++ )
{
dataFile.print(a);
dataFile.print(" multiplied by two is ");
b = a * 2;
dataFile.println(b, DEC);
}
dataFile.close(); // close the file once the system has finished with it
// (mandatory)
}
// if the file isn't ready, show an error:
else
{
Serial.println("error opening DATA.TXT");
}
Serial.println("finished");
do {} while (1);
}
113
ARDUINO FROM ZERO TO HERO
ﻣﺘﻄﻠﺒﺎت اﻟﻤﺸﺮوع
.1 ﻋدد،TMP36 ﺣﺳﺎس ردﺟﺔ اﻟﺣ اررة ﻧوﻋﻪ-١
.1 ﻋدد، ﻟوﺣﺔ ﺗﺟﺎرب-٢
. اﺳﻼك ﺗوﺻﯾل ﻣﺧﺗﻠﻔﺔ اﻟﻣﻘﺎﺳﺎت-٣
.1 ﻋدد، ﺷﯾﻠد ذاﻛرة ﻣﻊ ﺑطﺎﻗﺔ ﺗﺧزﯾن-٤
.USB ﻟوﺣﺔ اﻻردوﯾﻧو وﻛﺎﺑل-٥
اﻻﺳﻜﺘﺶ
#include <SD.h>
float sensor, voltage, celsius;
void setup()
{
Serial.begin(9600);
Serial.print("Initializing SD card...");
pinMode(10, OUTPUT);
// check that the microSD card exists and can be used
if (!SD.begin(8))
{
Serial.println("Card failed, or not present");
// stop sketch
return;
}
Serial.println("microSD card is ready");
}
void loop()
{
// create the file for writing
File dataFile = SD.open("DATA.TXT", FILE_WRITE);
// if the file is ready, write to it:
if (dataFile)
{
for ( int a = 0 ; a < 481 ; a++ ) // 480 minutes in 8 hours
{
sensor = analogRead(0);
voltage = (sensor * 5000) / 1024; // convert raw sensor value to
// millivolts
voltage = voltage - 500;
celsius = voltage / 10;
dataFile.print(" Log: ");
dataFile.print(a, DEC);
dataFile.print(" Temperature: ");
dataFile.print(celsius, 2);
dataFile.println(" degrees C");
delay(599900); // wait just under one minute
}
dataFile.close(); // mandatory
114
ARDUINO FROM ZERO TO HERO
;)"!Serial.println("Finished
;)do {} while (1
}
}
ﺑﻌد ﺗﺷﻐﯾل اﻻﺳﻛﺗش ﻟﻣدة ﺛﻣﺎﻧﻰ ﺳﺎﻋﺎت ،ﯾﺗم إﺧراج ﺑطﺎﻗﺔ اﻟذاﻛرة ﻣن اﻟﺷﯾﻠد ﺛم إدﺧﺎﻟﻬﺎ ﻓﻰ اﻟﻛﻣﺑﯾوﺗر وﻓﺗﺢ ﻣﻠف
درﺟﺔ اﻟﺣ اررة ﺑداﺧﻠﻪ ،ﻧﺟد اﻟﻧﺗﺎﺋﺞ ﻛﻣﺎ ﺑﺎﻟﺻورة اﻟﺗﺎﻟﯾﺔ
ﯾﻣﻛن ﻗﯾﺎس زﻣن ﺗﻧﻔﯾذ ﺑﻌض اﻻواﻣر ﻣن ﺧﻼل ﺣﺳﺎب اﻟوﻗت ﻗﺑل ﺗﻧﻔﯾذ اﻟﻌﻣﻠﯾﺔ ﺛم ﺣﺳﺎب اﻟوﻗت ﺑﻌد ﺗﻧﻔﯾذ اﻟﻌﻣﻠﯾﺔ
ﻓﯾﺻﺑﺢ اﻟﻧﺎﺗﺞ ﻫو اﻟزﻣن اﻟﻣﺳﺗﻐرق ﻟﺗﻧﻔﯾذ اﻣر او ﻋدة اواﻣر.
ﻣﺜﺎل
ﻧرﯾد ﻣﻌرﻓﺔ اﻟزﻣن اﻟﻣﺳﺗﻐرق ﻟﺗﺣوﯾل اﻟﻠﯾد ﻣن ﺣﺎﻟﺔ اﻹﺿﺎءة اﻟﻰ ﺣﺎﻟﺔ اﻟﻐﻠق واﻟﻌﻛس ﻛﺎﻟﺗﺎﻟﻰ
)(void setup
{
;)Serial.begin(9600
;)pinMode(3, OUTPUT
;)digitalWrite(3, LOW
}
)(void loop
{
;)(start = micros
;)digitalWrite(3, HIGH
;)(finished = micros
;elapsed = finished – start
;)" Serial.print("LOW to HIGH:
115
ARDUINO FROM ZERO TO HERO
;)Serial.print(elapsed
;)"Serial.println(" microseconds
;)delay(1000
;)(start = micros
;)digitalWrite(3, LOW
;)(finished = micros
;elapsed = finished - start
;)" Serial.print("HIGH to LOW:
;)Serial.print(elapsed
;)"Serial.println(" microseconds
;)delay(1000
}
ﻧﻼﺣظ إﺳﺗﺧدام اﻻﻣر )( microsواﻟذى ﯾﻌطﻰ وﻗت اﻻردوﯾﻧو اﻟﺣﺎﻟﻰ ،ﺛم ﯾﺗم ﺗﻧﻔﯾذ اﻻواﻣر وﺑﻌدﻫﺎ ﻧﺄﺧد ﻗﯾﻣﺔ اﻟوﻗت
ﻣرة اﺧرى ﻟﻧﻌرف اﻟزﻣن اﻟﻣﺳﺗﻐرق ﻟﺗﻧﻔﯾذ اﻻواﻣر.
ﻣﺘﻄﻠﺒﺎت اﻟﻤﺸﺮوع
-١ﻣﻔﺗﺎح ﻧوﻋﻪ ،push buttonﻋدد .2
-٢ﻣﻘﺎوﻣﺔ ﺛﺎﺑﺗﺔ ﻗﯾﻣﺗﻬﺎ ،10kΩﻋدد .2
-٣ﻟوﺣﺔ ﺗﺟﺎرب ،ﻋدد .1
-٤اﺳﻼك ﺗوﺻﯾل ﻣﺧﺗﻠﻔﺔ اﻟﻣﻘﺎﺳﺎت.
116
ARDUINO FROM ZERO TO HERO
اﻟﺘﺼﻤﯿﻢ اﻟﮭﻨﺪﺳﻰ
اﻻﺳﻜﺘﺶ
unsigned long start, finished, elapsed;
void setup()
{
Serial.begin(9600);
u pinMode(2, INPUT); // the start button
pinMode(3, INPUT); // the stop button
Serial.println("Press 1 for Start/reset, 2 for elapsed time");
}
void displayResult()
{
float h, m, s, ms;
unsigned long over;
elapsed = finished - start;
h = int(elapsed / 3600000);
over = elapsed % 3600000;
Expanding Your Arduino 183
m = int(over / 60000);
over = over % 60000;
s = int(over / 1000);
ms = over % 1000;
117
ARDUINO FROM ZERO TO HERO
،،،ﻣﺎذا ﺑﻌﺪ
ﻓﻰ اﻟﻔﺻل،ﺗﻌﻠﻣﻧﺎ ﻓﻰ ﻫذا اﻟﻔﺻل اﻟﻌدﯾد ﻣن اﻟﻣﻛوﻧﺎت اﻻﻟﻛﺗروﻧﯾﺔ اﻟﺟدﯾدة وﻛﯾﻔﯾﺔ ﺗﺻﻧﯾﻊ ﻟوﺣﺔ اﻟﻛﺗروﻧﯾﺔ ﺑﺷﻛل ﯾدوى
اﻟﺗﺎﻟﻰ ﺳوف ﻧﺗﻌﻠم اﻟﻛﺛﯾر ﻋن ﻟوﺣﺔ اﻟﻣﻔﺎﺗﯾﺢ اﻟرﻗﻣﯾﺔ )ﻟوﺣﺔ ارﻗﺎم ﻣﺎﻛﯾﻧﺔ اﻟﻔﯾ از ﺑﺎﻟﺑﻧوك( وﻛﯾﻔﯾﺔ اﻻﺳﺗﻔﺎدة ﻣﻧﻬﺎ ﻓﻰ
.... ﻫل اﻧت ﻣﺳﺗﻌد؟ ﻫﻰ ﺑﻧﺎ،ﻣﺷروﻋﺗﻧﺎ ﻣﻊ اﻟﺗطﺑﯾق اﻟﻌﻣﻠﻰ
118
ARDUINO FROM ZERO TO HERO
9
ﻟﻮﺣﺔ اﻻرﻗﺎم
ﺳوف ﻧﺗﻌﻠم ﻓﻰ ﻫذا اﻟﻔﺻل ﻛﯾﻔﯾﺔ اﻻﺳﺗﻔﺎدة ﻣن ﻟوﺣﺔ اﻻرﻗﺎم ﻓﻰ إدﺧﺎل ارﻗﺎم اﻟﻰ اﻟﻣﺷروﻋﺎت اﻟﺧﺎﺻﺔ ﺑﻧﺎ ،ﺣﯾث ان
ﻟوﺣﺔ اﻻرﻗﺎم ﺗﻌد ﺟزء اﺳﺎﺳﻰ ﻣن اﺟزاء اﻟروﺑوت.
ﻟﻮﺣﺔ اﻻرﻗﺎم
داﺋﻣﺎ ﻧﺣﺗﺎج اﻟﻰ إدﺧﺎل ﺑﻌض اﻟﻣﻌﻠوﻣﺎت اﻟﻰ اﻻردوﯾﻧو اﺛﻧﺎء ﺗﺷﻐﯾﻠﻪ ﻣن ﺧﻼل إﺳﺗﺧدام ﻟوﺣﺔ ﻣﻔﺎﺗﯾﺢ اﻟﻛﻣﺑﯾوﺗر
اﻟﻣﺗﺻل ﺑﺎﻻردوﯾﻧو ،ﻟﻛن ﻟو ﻟدﯾﻧﺎ ﻣﺷروع ﻣﺳﺗﻘل وﻏﯾر ﻣﺗﺻل ﺑﺎﻟﻛﻣﺑﯾوﺗر وﻧﺣﺗﺎج اﻟﻰ إدﺧﺎل ارﻗﺎم اﻟﻰ اﻻردوﯾﻧو،
ﻣﺎﻫو اﻟﺣل؟
اﻟﺣل ﻫو إﺳﺗﺧدام ﻟوﺣﺔ ارﻗﺎم ﻣﻧﻔﺻﻠﺔ ﯾﺗم ﺗوﺻﯾﻠﻬﺎ ﺑﺎﻻردوﯾﻧو ﻣﺑﺎﺷرة ﻣﺛل ﻟوﺣﺔ اﻻرﻗﺎم اﻟﻣﺗﺻﻠﺔ ﺑﻣﺎﻛﯾﻧﺎت ﺻرف
اﻻﻣوال ﺑﺎﻟﺑﻧوك.
ﻋﻧد ﺗوﺻﯾل ﻟوﺣﺔ اﻻرﻗﺎم ﺑﺎﻻردوﯾﻧو ﻧﺣﺗﺎج ﻓﻘط اﻟﻰ 7اطراف ﻣن اﻻردوﯾﻧو ﻟﻺﺗﺻﺎل ﺑﻠوﺣﺔ اﻻرﻗﺎم واﻟﺗﻰ ﺗﻌطﻰ 12
ﻣﻔﺗﺎح )ﻛﻣﺎ ﻫو ﻣوﺟود ﺑﺎﻟﺻورة اﻟﺳﺎﺑﻘﺔ( ،وﻣن اﻟﻣﺛﯾر اﻧﻧﺎ ﻻﻧﺣﺗﺎج اﻟﻰ ﻣﻘﺎوﻣﺔ رﻓﻊ او ﺧﻔض اﻟﺗﯾﺎر اﻟﻣﺳﺗﺧدﻣﺔ ﻣﻊ
119
ARDUINO FROM ZERO TO HERO
ﻧﺣﺗﺎج ﻓﻘط اﻟﻰ ﻣﻛﺗﺑﺔ ﻟوﺣﺔ اﻻرﻗﺎم اﻟﺗﻰ ﯾﻣﻛن ﺗﺣﻣﯾﻠﻬﺎ ﻣن اﻟﻣوﻗﻊ اﻟﺗﺎﻟﻰ،اﻟﻣﻔﺎﺗﯾﺢ اﻻﺧرى ﻋﻧد ﺗوﺻﯾﻠﻬﺎ ﺑﺎﻻردوﯾﻧو
http://arduino.cc/
playground/uploads/Code/Keypad.zip
اطراف ﻣن اﻻردوﯾﻧو ﻟﻠﺗوﺻﯾل وﺗﻠك اﻻطراف ﯾﺗم ﺗوﺻﯾﻠﻬﺎ طﺑﻘﺎً ﻟﻠﺟدول اﻟﺗﺎﻟﻰ7 ﺗﺣﺗﺎج ﻟوﺣﺔ اﻻرﻗﺎم
120
ARDUINO FROM ZERO TO HERO
ﺣﯾث ﻧﻼﺣظ ان ﻟو اﻟﻘﯾﻣﺔ اﻟﺗﻰ ﺗم إدﺧﺎﻟﻬﺎ ﻫﻰ 1, 2, 3ﻓﺈن ﺳطور ﻣﻌﯾﻧﺔ ﺧﺎﺻﺔ ﺑﻛل رﻗم ﺳوف ﯾﺗم ﺗﻧﻔﯾذﻫﺎ ،اﻣﺎ ﻟو ﻟم
ﯾﺗم إدﺧﺎل اى ﻣن ﻫذﻩ اﻻرﻗﺎم ﻓﺳوف ﯾﺗم ﺗﻧﻔﯾذ ﺳطور اﻻواﻣر اﻻﻓﺗراﺿﯾﺔ واﻟﺗﻰ ﺗﺗواﺟد ﻓﻰ ﻧﻬﺎﯾﺔ ﺟﻣﻠﺔ )(switch-
.case
121
ARDUINO FROM ZERO TO HERO
اﻻﺳﻜﺘﺶ
#include "Keypad.h"
const byte ROWS = 4; // set display to four rows
const byte COLS = 3; // set display to three columns
char keys[ROWS][COLS] =
{{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}};
byte rowPins[ROWS] = {5, 4, 3, 2};
byte colPins[COLS] = {8, 7, 6};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
// End of necessary code
char PIN[6]={'1','2','3','4','5','6'}; // our secret number
char attempt[6]={0,0,0,0,0,0};
int z=0;
void setup()
{
Serial.begin(9600);
}
void correctPIN() // do this if the correct PIN is entered
{
Serial.println("Correct PIN entered...");
}
void incorrectPIN() // do this if an incorrect PIN is entered
{
Serial.println("Incorrect PIN entered!");
}
void checkPIN()
{
int correct=0;
int i;
for ( i = 0; i < 6 ; i++ )
{
if (attempt[q]==PIN[q])
{
correct++;
}
}
if (correct==6)
{
correctPIN();
} else
{
incorrectPIN();
}
for (int zz=0; zz<6; zz++) // remove previously entered code attempt from
{
attempt[zz]=0;
}
}
void readKeypad()
{
char key = keypad.getKey();
if (key != NO_KEY)
{
switch(key)
{
case '*':
z=0;
break;
122
ARDUINO FROM ZERO TO HERO
case '#':
delay(100); // removes the possibility of switch bounce
;)(checkPIN
;break
default:
;attempt[z]=key
;z++
}
}
}
)(void loop
{
;)(readKeypad
}
ﻧﺟد ﻓﻰ ﻫذا اﻻﺳﻛﺗش اﻧﻪ ﻣﻘﺳم اﻟﻰ دوال ،داﻟﺔ ﻟﻠﺗﺄﻛد ﻣن ﺻﺣﺔ ﻛﻠﻣﺔ اﻟﺳر ،وداﻟﺔ ﻟﻠﺗﻌﺎﻣل ﻣﻊ ﻛﻠﻣﺔ اﻟﺳر اﻟﺻﺣﯾﺣﺔ،
وداﻟﺔ ﻟﻠﺗﻌﺎﻣل ﻣﻊ ﻛﻠﻣﺔ اﻟﺳر اﻟﺧﺎطﺋﺔ .ﺣﯾث ﯾﻘوم اﻟﻣﺳﺗﺧدم ﺑﺎﻟﺑدء ﻓﻰ إدﺧﺎل ﻛﻠﻣﺔ اﻟﺳر ﻓﻠو ﻛﺎن اول ﺣرف ﻫو )*(
ﻓﺳﯾﺗم ﺑدء ﺗﺳﺟﯾل اﻻراﻗﺎم اﻟﺗﺎﻟﯾﺔ ) 6ارﻗﺎم داﺧل ﻣﺻﻔوﻓﺔ( ﺛم اﻻﻧﺗظﺎر ﺣﺗﻰ ﺿﻐط ﻋﻼﻣﺔ ) (#ﺛم اﻟﺗﺄﻛد ﻣن ﺻﺣﺔ
ﻛﻠﻣﺔ اﻟﺳر ،ﻏﯾر ذﻟك ﻓﻠن ﯾﺗم ﺗﻧﻔﯾذ اى اواﻣر.
ﻣﺎذا ﺑﻌﺪ،،،
ﻟﻘد ﺗﻌﻠﻣﻧﺎ ﻓﻰ ﻫذا اﻟﻔﺻل ﻛﯾﻔﯾﺔ إﺳﺗﺧدام ﻟوﺣﺔ اﻻرﻗﺎم ﻣﻊ اﻟﺗطﺑﯾق اﻟﻌﻣﻠﻰ ﺑﻣﺷروع ﻧﺳﺗﺧدﻣﻪ ﻋدة ﻣرات ﯾوﻣﯾﺎً ﻣﺛل
ﻛﻠﻣﺔ اﻟﺳر اﻟﺧﺎﺻﺔ ﺑﺎﻟﻛﻣﺑﯾوﺗر او اﻟﻣوﺑﺎﯾل اﻟﺧﺎص ﺑك او ﻣﺎﻛﯾﻧﺔ اﻟﺻراﻓﺔ ﺑﺎﻟﺑﻧوك ،ﻣﻊ ﺗﻌﻠم إﺗﺧﺎذ اﻟﻘ اررات طﺑﻘﺎً
ﻟﻠﻣدﺧﻼت اﻟﺧﺎﺻﺔ ﺑﻛل ﻣﺳﺗﺧدم ﻣن ﺧﻼل ﻟوﺣﺔ اﻻرﻗﺎم.
123