Download as pdf or txt
Download as pdf or txt
You are on page 1of 124

‫‪ARDUINO FROM ZERO TO HERO‬‬

‫اﻻردوﯾﻧو ﻣن اﻟﺑداﯾﺔ اﻟﻰ اﻻﺣﺗراف‬


‫اﻟﺟزء اﻻول‬

‫د‪.‬م‪ /‬ﻣﺣﻣد ﺳﻠﯾم‬

‫ﺳﻠﺳﻠﺔ إﺻﻧﻊ ﺑﻧﻔﺳك‬


‫‪ARDUINO FROM ZERO TO HERO‬‬

‫ﺟدول اﻟﻣﺣﺗوﯾﺎت‬

‫ﻟﻣن ﻫذا اﻟﻛﺗﺎب؟ ‪8 ..........................................................................................................................‬‬

‫اﻟﺧﻠﻔﯾﺔ اﻟﻌﻠﻣﯾﺔ ﻟﻠﻘﺎرئ ‪8 ....................................................................................................................‬‬

‫ﻣوﺿوﻋﺎت اﻟﻛﺗﺎب ‪9 .......................................................................................................................‬‬

‫ﻧﺑذة ﻋن اﻟﻣؤﻟف ‪9 ..........................................................................................................................‬‬

‫‪10 .............................................................................................................................................. 1‬‬

‫ﻋﺎﻣﺔ ‪10 .........................................................................................................................‬‬ ‫ﻣﻘدﻣﺔ‬


‫ﺷراء اﻟﻣﻛوﻧﺎت واﻻﺟﻬزة اﻟﻣطﻠوﺑﺔ‪12 ...................................................................................................‬‬

‫اﻻﺟﻬزة واﻻدوات اﻻﻟﻛﺗروﻧﯾﺔ اﻟﺗﻰ ﺳﯾﺗم اﺳﺗﺧداﻣﻬﺎ ﺧﻼل اﻟﻛﺗﺎب ﻫﻰ ﻛﺎﻻﺗﻰ ‪12 ............................................‬‬

‫اﻟﺑراﻣﺞ اﻟﻣطﻠوﺑﺔ ‪12 ........................................................................................................................‬‬

‫‪15 .............................................................................................................................................. 2‬‬

‫‪15 .................................................................. IDE‬‬ ‫اﻟﺗﻌرف ﻋﻠﻰ ﻟوﺣﺔ اﻻردوﯾﻧو وﺑرﻧﺎﻣﺞ‬


‫ﻟوﺣﺔ اﻻردوﯾﻧو‪15 ...........................................................................................................................‬‬

‫ﻣﻛوﻧﺎت ﻟوﺣﺔ اﻻردوﯾﻧو ‪16 ...............................................................................................................‬‬


‫‪19 ........................................................................................................................................ IDE‬‬

‫ﺑرﻣﺟﺔ اول ﺳﻛﯾﺗش ‪20 .................................................................................................................‬‬

‫ﺧطوات ﻛﺗﺎﺑﺔ اواﻣر اﻻﺳﻛﺗش ‪21 ...................................................................................................‬‬

‫اﻟﺗﺄﻛد ﻣن ﺻﺣﺔ اﻻﺳﻛﺗش ‪22 ........................................................................................................‬‬

‫ﻧﻘل اﻟﺑرﻧﺎﻣﺞ اﻟﻰ اﻻردوﯾﻧو ‪23 ........................................................................................................‬‬

‫ﺗﻌدﯾل اﻻﺳﻛﺗش ‪23 .....................................................................................................................‬‬

‫‪2‬‬
‫‪ARDUINO FROM ZERO TO HERO‬‬

‫‪24 .............................................................................................................................................. 3‬‬

‫اﻟﻣﺑدﺋﯾﺔ ‪24 ...............................................................................................................‬‬ ‫اﻟﺧطوات‬


‫اﻟﺗﺧطﯾط ﻟﻣﺷروﻋك‪24 .....................................................................................................................‬‬

‫اﻟﺧطوات اﻟﻣﺳﺎﻋدة ﻟﺗﺧطﯾط وﺗﻧﻔﯾذ ﻣﺷروﻋك ‪24 .................................................................................‬‬

‫اﺳﺎﺳﯾﺎت اﻟﻛﻬرﺑﺎء ‪25 ......................................................................................................................‬‬

‫اﻟﺗﯾﺎر اﻟﻛﻬرﺑﻰ)‪25 ..................................................................... (Current = volume of elecricrity‬‬

‫اﻟﻔوﻟت)‪25 ................................................................................... (Volt = pressure of electricity‬‬

‫اﻟطﺎﻗﺔ)‪26 ..................................................................................................................... (Power‬‬

‫اﻟﻌﻧﺎﺻر اﻻﻟﻛﺗروﻧﯾﺔ ‪26 ...................................................................................................................‬‬

‫اﻟﻣﻘﺎوﻣﺔ )‪26 ............................................................................................................... (Resistor‬‬

‫ﻣﻌرﻓﺔ ﻗﯾﻣﺔ اﻟﻣﻘﺎوﻣﺔ ‪27 ................................................................................................................‬‬

‫ﻣﺗﻌدد اﻟﻘﯾﺎس )‪28 ................................................................................................... (Multimeter‬‬

‫ﻗﯾﻣﺔ اﻟطﺎﻗﺔ ‪28 ...........................................................................................................................‬‬

‫اﻟﻠﯾد )‪29 ..................................................................................... (LED = Ligt-Emitting Diode‬‬

‫اﻟﻠﯾد واﻟﻣﻘﺎوﻣﺔ ‪29 .......................................................................................................................‬‬

‫ﻟوﺣﺔ اﻟﺗﺟﺎرب ‪30 .................................................................................................... Breadboard‬‬

‫ﻣﺷروع رﻗم ‪ :1‬ﺗوﻟﯾد ﻣوﺟﺔ ﺿوﺋﯾﺔ‪32 ..............................................................................................‬‬

‫اﻟﻣﺗﻐﯾرات )‪34 ........................................................................................................... (Variables‬‬

‫ﺗﻐﯾﯾر ﻋرض اﻟﻧﺑﺿﺔ ‪35 ..................................................................................................... PWM‬‬

‫اﻟﻣﺷروع ‪ :2 #‬إﺳﺗﺧدام ‪37 .................................................................................................. PWM‬‬

‫اﻟﺗراﻧزﺳﺗور)‪38 ......................................................................................................... (Transistor‬‬

‫ﻣوﺣد اﺗﺟﺎﻩ اﻟﺗﯾﺎر )‪38 ...................................................................................................... (Diode‬‬

‫اﻟﻣرﺣل ‪39 ...................................................................................................................... Relay‬‬

‫‪3‬‬
‫‪ARDUINO FROM ZERO TO HERO‬‬

‫‪40 .............................................................................................................................................. 4‬‬

‫ﺣﻘﯾﻘﯾﺔ ‪40 ....................................................................................‬‬ ‫ﺗﺻﻣﯾم وﺗﻧﻔﯾذ ﻣﺷروﻋﺎت‬


‫اﻟﺗﺻﻣﯾﻣﺎت اﻟﻬﻧدﺳﯾﺔ ‪40 .................................................................................. schematic diagrams‬‬

‫ﻟوﺣدة اﻻردوﯾﻧو‪41 ......................................................................................................................‬‬

‫اﻟﻣﻘﺎوﻣﺔ ‪41 ...............................................................................................................................‬‬

‫اﻟداﯾود ‪41 .................................................................................................................................‬‬

‫اﻟﻠﯾد ‪42 ....................................................................................................................................‬‬

‫اﻟﺗراﻧزﺳﺗور ‪42 ...........................................................................................................................‬‬

‫اﻟﻣرﺣل ‪42 ................................................................................................................................‬‬

‫اﺳﻼك ﻋﺎﺑرة ﺑدون اﺗﺻﺎل ‪43 ........................................................................................................‬‬

‫اﻻﺳﻼك اﻟﻣﺗﺻﻠﺔ ‪43 ...................................................................................................................‬‬

‫اﻻﺗﺻﺎل ﺑﺎﻟطرف اﻻرﺿﻰ ‪43 .......................................................................................................‬‬

‫اﻟﺗﺻﻣﯾم اﻟﻬﻧدﺳﻰ ﻟﻣﺷروع اﻟﻠﯾدات ‪44 ..............................................................................................‬‬

‫اﻟﻣﻛﺛف ‪44 ................................................................................................................ Capacitor‬‬

‫اﻧواع اﻟﻣﻛﺛﻔﺎت ‪45 ..........................................................................................................................‬‬

‫إﺳﺗﻘﺑﺎل إﺷﺎرات اﻟدﯾﺟﯾﺗﺎل ‪46 .........................................................................................................‬‬

‫إرﺗداد اﻟﻣﻔﺗﺎح اﻟﻛﻬرﺑﻰ)‪47 ........................................................................................... (Bouncing‬‬

‫اﻟﻣﺷروع ‪ :3 #‬ادﺧﺎل اﺷﺎرة ﻛﻬرﺑﯾﺔ ﻟﻼردوﯾﻧو ‪48 ................................................................................‬‬

‫اﻟﻣﺗﻐﯾرات اﻟﺑوﻟﯾﺎﻧﯾﺔ )‪52 .................................................................................................(Boolean‬‬

‫ﻣﻌﺎﻣﻼت اﻟﻣﻘﺎرﻧﺔ ‪53 ...................................................................................................................‬‬

‫اﻟﻣﺷروع ‪ :4 #‬إﺷﺎرة اﻟﻣرور ‪54 ......................................................................................................‬‬

‫اﻟﻔرق ﺑﯾن اﻻﺷﺎرة اﻟدﯾﺟﯾﺗﺎل واﻻﻧﺎﻟوج‪57 ...........................................................................................‬‬

‫اﻟﻣﺷروع ‪ :5 #‬ﻗﯾﺎس ﻣﺳﺗوى ﺷﺣن اﻟﺑطﺎرﯾﺔ ‪58 ...................................................................................‬‬

‫‪4‬‬
‫‪ARDUINO FROM ZERO TO HERO‬‬

‫إﺟراء اﻟﻌﻣﻠﯾﺎت اﻟﺣﺳﺎﺑﯾﺔ ﺑﺈﺳﺗﺧدام اﻻردوﯾﻧو ‪60 .................................................................................‬‬

‫اﻟﻣﺗﻐﯾرات اﻟﻌﺷرﯾﺔ )‪60 ........................................................................................ (Float variables‬‬

‫ﻣﻌﺎﻣﻼت اﻟﻣﻘﺎرﻧﺔ ﺑﺎﻟﻌﻣﻠﯾﺎت اﻟﺣﺳﺎﺑﯾﺔ ‪61 ..........................................................................................‬‬

‫ﺗﺣﺳﯾن ﻗﯾﺎس اﻻﺷﺎرات اﻻﻧﺎﻟوج‪61 ..................................................................................................‬‬

‫اﻟﻣرﺟﻊ اﻟﺧﺎرﺟﻰ ﻟﻠﻔوﻟت ‪61 ...........................................................................................................‬‬

‫اﻟﻣرﺟﻊ اﻟداﺧﻠﻰ ﻟﻠﻔوﻟت ‪62 ............................................................................................................‬‬

‫اﻟﻣﻘﺎوﻣﺔ اﻟﻣﺗﻐﯾرة ‪62 ............................................................................................ Potentiometer‬‬

‫اﻟﺔ اﻟﺗﻧﺑﯾﻪ ‪63 ..................................................................................................................buzzer‬‬

‫اﻟﻣﺷروع ‪ :6 #‬إﺳﺗﺧدام ﺟﻬﺎز اﻟﺗﻧﺑﯾﻪ‪63 ...........................................................................................‬‬

‫اﻟﻣﺷروع ‪ :7 #‬ﻗراءة درﺟﺔ اﻟﺣ اررة ‪64 ...............................................................................................‬‬

‫‪67 .............................................................................................................................................. 5‬‬

‫اﻟدوال ‪67 ...................................................................................................................‬‬ ‫إﺳﺗﺧدام‬


‫اﻟﻣﺷروع ‪ :8 #‬ﻛﺗﺎﺑﺔ داﻟﺔ ﻟﺗﻛرار وظﯾﻔﺔ ﻣﻌﯾﻧﺔ ‪67 ................................................................................‬‬

‫اﻟﻣﺷروع ‪ :9 #‬ﻛﺗﺎﺑﺔ داﻟﺔ وﺗﺣدﯾد ﻗﯾم اﻟﻣﺗﻐﯾرات ﺑداﺧﻠﻬﺎ‪68 ....................................................................‬‬

‫اﻟﻣﺷروع ‪ :10 #‬ﻗراءة درﺟﺔ اﻟﺣ اررة ﻹﺿﺎءة اﻟﻠﯾد ‪69 ............................................................................‬‬

‫اﻟﺷﺎﺷﺔ اﻟﺗﺳﻠﺳﻠﯾﺔ ‪72 ............................................................................................ Serial Monitor‬‬

‫ﺗﺷﻐﯾل اﻟﺷﺎﺷﺔ اﻟﺗﺳﻠﺳﻠﯾﺔ ‪72 ..........................................................................................................‬‬

‫اﻟﻣﺷروع ‪ :11 #‬إظﻬﺎر درﺟﺔ اﻟﺣ اررة ﻣن ﺧﻼل اﻟﺷﺎﺷﺔ اﻟﺗﺳﻠﺳﻠﯾﺔ ‪72 .......................................................‬‬

‫إﺗﺧﺎذ ﻗرارت ﺑﺈﺳﺗﺧدام ‪74 ........................................................................................................ while‬‬

‫إﺗﺧﺎذ ﻗرارت ﺑﺈﺳﺗﺧدام ‪74 ...................................................................................................do-while‬‬

‫ﺗﺧزﯾن اﻟﻣدﺧﻼت داﺧل اﻻدروﯾﻧو‪74 ...................................................................................................‬‬

‫اﻟﻣﺷروع ‪ :12 #‬ﺿرب اﻟرﻗم ‪75 .............................................................................................. 2 X‬‬

‫اﻟﻣﺗﻐﯾرات اﻟﻛﺑﯾرة ‪76 ................................................................................................. long variables‬‬

‫اﻟﻣﺷروع ‪ :13 #‬اﺳﺗﺧدام اﻟﻣﺗﻐﯾرات اﻟﻛﺑﯾرة‪76 ....................................................................................‬‬

‫‪5‬‬
‫‪ARDUINO FROM ZERO TO HERO‬‬

‫‪78 .............................................................................................................................................. 6‬‬

‫اﻟﺣﺳﺎﺑﯾﺔ ‪78 ..........................................................................‬‬ ‫اﻻرﻗﺎم‪ ،‬اﻟﻣﺗﻐﯾرات‪ ،‬واﻟﻌﻣﻠﯾﺎت‬


‫ﺗوﻟﯾد ارﻗﺎم ﻋﺷواﺋﯾﺔ ‪78 .....................................................................................................................‬‬

‫ﺗوﻟﯾد ارﻗﺎم ﻋﺷواﺋﯾﺔ ﻣن اﻟﻣوﺟﺎت اﻟﻛﻬرﺑﯾﺔ ﺑﺎﻟﻬواء ‪78 ...........................................................................‬‬

‫اﻟﻣﺷروع ‪ :14 #‬ﺗوﻟﯾد ارﻗﺎم ﻋﺷواﺋﯾﺔ ﺧﻼل ﻣﺻدران ﻣﺧﺗﻠﻔﺎن ‪79 ............................................................‬‬

‫اﻟﻧظﺎم اﻟﺛﻧﺎﺋﻰ ‪80 ..................................................................................................... Binary system‬‬

‫زﯾﺎدة اطراف اﻻردوﯾﻧو ﺑﺈﺳﺗﺧدام ‪81 ............................................................................shift register‬‬

‫اﻟﻣﺷروع ‪ :15 #‬ﻋرض اﻻرﻗﺎم اﻟﺛﻧﺎﺋﯾﺔ ﻣن ﺧﻼل إﺿﺎءة اﻟﻠﯾد‪82 ............................................................‬‬

‫اﻟﻣﺷروع ‪ :16 #‬ﻋﻣل ﻟﻌﺑﺔ اﻟﺗﺣوﯾل ﺑﯾن اﻻرﻗﺎم‪84 ..............................................................................‬‬

‫اﻟﻣﺻﻔوﻓﺎت ‪86 ................................................................................................................ arrays‬‬

‫ﻋرض اﻻرﻗﺎم ﻣن ﺧﻼل اﻟﺷﺎﺷﺔ اﻟﺳﺑﺎﻋﯾﺔ ‪87 ............................................................seven-segment‬‬

‫اﻟﺗﺣﻛم ﻓﻰ اﻟﻠﯾدات ‪88 ..................................................................................................................‬‬

‫اﻟﻣﺷروع ‪ :17 #‬إظﻬﺎر اﻻرﻗﺎم واﻟﺣروف ‪89 .......................................................................................‬‬

‫ﺗوﺻﯾل اﻛﺛر ﻣن ﺷﺎﺷﺔ رﻗﻣﯾﺔ‪90 ....................................................................................................‬‬

‫اﻟﻣﺷروع ‪ :18 #‬اﻟﺗﺣﻛم ﻓﻰ ﻛﺛر ﻣن ﺷﺎﺷﺔ ﺳﺑﺎﻋﯾﺔ ‪91 .........................................................................‬‬

‫‪94 .............................................................................................................................................. 7‬‬

‫‪94 ...................................................................................................................... LCD‬‬ ‫ﺷﺎﺷﺔ‬


‫ﺷﺎﺷﺔ ﻋرض اﻟﺣروف ‪94 .................................................................................................................‬‬

‫إظﻬﺎر اﻟﻣﺗﻐﯾرات واﻻرﻗﺎم‪96 ..........................................................................................................‬‬

‫إظﻬﺎر اﻟﻘﯾم ﺑﺎﻻﻧظﻣﺔ اﻟرﻗﻣﯾﺔ اﻟﻣﺧﺗﻠﻔﺔ ‪97 .........................................................................................‬‬

‫اﻟﻣﺷروع ‪ :19#‬إظﻬﺎر اﺷﻛﺎل ﻣﺧﺗﻠﻔﺔ ﻋﻠﻰ اﻟﺷﺎﺷﺔ ‪97 .........................................................................‬‬

‫اﻟﺷﺎﺷﺔ اﻟرﺳوﻣﯾﺔ ‪99 ....................................................................................................................‬‬

‫ﺗوﺻﯾل اﻟﺷﺎﺷﺔ اﻟرﺳوﻣﯾﺔ ﺑﺎﻻردوﯾﻧو ‪99 ............................................................................................‬‬

‫ﺗﺟﻬﯾز اﻟﺷﺎﺷﺔ اﻟرﺳوﻣﯾﺔ ‪100 .........................................................................................................‬‬

‫‪6‬‬
‫‪ARDUINO FROM ZERO TO HERO‬‬

‫اﻟﻣﺷروع ‪ :20 #‬ﻋرض ﻋدة ﺳطورﻣﺧﺗﻠﻔﺔ‪101 ...................................................................................‬‬

‫ﺧﺻﺎﺋص اﻟﺷﺎﺷﺔ اﻟرﺳوﻣﯾﺔ‪102 .....................................................................................................‬‬

‫اﻟﻣﺷروع ‪ :21 #‬ﻋرض درﺟﺎت اﻟﺣ اررة ﻋﻠﻰ اﻟﺷﺎﺷﺔ‪103 .......................................................................‬‬

‫‪106 ............................................................................................................................................ 8‬‬

‫اﻻردوﯾﻧو ‪106 ....................................................................................‬‬ ‫اﻟﺗﻌرف ﻋﻠﻰ إﻣﻛﺎﻧﯾﺎت‬


‫‪106 ................................................................................................................................ Shields‬‬

‫ﺷﯾﻠد اﻟﺗﺟﺎرب ‪107 ......................................................................................................................‬‬

‫اﻟﻣﺷروع ‪ :22 #‬ﺻﻧﺎﻋﺔ ﺷﯾﻠد ﻟﺗوﺻﯾل ﺛﻣﺎﻧﻰ ﻟﯾدات ‪108 .....................................................................‬‬

‫اﻟﺧطوات اﻟﻌﻣﻠﯾﺔ ﻟﺻﻧﺎﻋﺔ ﺷﯾﻠد ﺧﺎص ﺑﻣﺷروﻋك ‪109 .........................................................................‬‬

‫ﺗﺣﻣﯾل ﻣﻛﺗﺑﺎت اﻟﻘطﻊ اﻻﻟﻛﺗروﻧﯾﺔ ‪110 .............................................................................................‬‬

‫ذاﻛرة ‪111 .................................................................................................................. MicroSD‬‬

‫اﻟﻣﺷروع‪ : 23 #‬ﺗﺧزﯾن ﺑﯾﺎﻧﺎت ﻓﻰ ﺑطﺎﻗﺔ اﻟذاﻛرة ‪112 ...........................................................................‬‬

‫اﻟﻣﺷروع ‪ :24 #‬ﺗﺧزﯾن درﺟﺔ اﻟﺣ اررة اﺗوﻣﺎﺗﯾﻛﯾﺎ ‪114 ............................................................................‬‬

‫اﻟﺗﻌﺎﻣل ﻣﻊ اﻟﻣﯾﻠﻰ واﻟﻣﯾﻛرو ﺛﺎﻧﯾﺔ ‪115 .............................................................................................‬‬

‫اﻟﻣﺷروع ‪ : 25#‬ﺻﻧﺎﻋﺔ ﺳﺎﻋﺔ اﻟﺗوﻗف ‪116 .................................................................... stop watch‬‬

‫‪119 ............................................................................................................................................ 9‬‬

‫اﻻرﻗﺎم ‪119 ......................................................................................................................‬‬ ‫ﻟوﺣﺔ‬


‫إﺧﺗﺑﺎر ﺗوﺻﯾل ﻟوﺣﺔ اﻻرﻗﺎم ﺑﺎﻻردوﯾﻧو ‪120 ......................................................................................‬‬

‫ررات ﺑﺈٍﺳﺗﺧدام ‪121 ...................................................................................... switch-case‬‬


‫إﺗﺧﺎذ اﻟﻘ ا‬

‫اﻟﻣﺷروع ‪ : 26#‬إدﺧﺎل ﻛﻠﻣﺔ اﻟﺳر ‪121 ............................................................................................‬‬

‫‪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‬‬

‫ﺷﺮاء اﻟﻤﻜﻮﻧﺎت واﻻﺟﮭﺰة اﻟﻤﻄﻠﻮﺑﺔ‬


‫ﻫﻧﺎك اﻟﻌدﯾد ﻣن اﻟﺷرﻛﺎت اﻟﺗﻰ ﺗﺑﯾﻊ ﻫذا اﻟﻣﻛوﻧﺎت اﻟﺗﻰ ﺳﯾﺗم اﺳﺗﺧداﻣﻬﺎ ﺧﻼل اﻟﺗﺟﺎرب ﻓﻰ ﻫذا اﻟﻛﺗﺎب‪ ،‬وﯾﻣﻛﻧك‬
‫اﻟدﺧول اﻟﻰ ﻣوﻗﻊ اى ﺷرﻛﺔ وﻣﻌرﻓﺔ اﻻﺳﻌﺎر وﻣﻘﺎرﻧﺗﻬﺎ ﺑﯾن اﻟﺷرﻛﺎت ﺛم اﻟذﻫﺎب ﻣﺑﺎﺷرة ﻟﺷراﺋﻬﺎ او اﻻﺗﺻﺎل ﺑﺎﻟﺷرﻛﺔ‬
‫ﻟﻣﻌرﻓﺔ إﻣﻛﺎﻧﯾﺔ اﻟﺗوﺻﯾل ﺣﺗﻰ ﻣﻧزﻟك‪ ،‬ﻣن اﻟﺷرﻛﺎت اﻟﻣﺷﻬورة ﻓﻰ اﻟﻘﺎﻫرة‬

‫‪ - ١‬رام اﻟﯾﻛﺗروﻧﯾﻛس – ﺑﺎب اﻟﻠوق ‪http://ram-e-shop.com/‬‬


‫‪ - ٢‬ﻓﯾوﺗﺷر اﻟﯾﻛروﻧﯾﻛس – اﻣﺎم ﻛﻠﯾﺔ اﻟﻬﻧدﺳﺔ ﺟﺎﻣﻌﺔ ﻋﯾن ﺷﻣس ‪http://store.fut-electronics.com‬‬
‫‪ - ٣‬اﻟﺟﻣﺎل اﻟﯾﻛﺗروﻧﯾﻛس – ﺑﺎﺑﺎ ﻟﻠوق ‪http://elgammalelectronics.com‬‬

‫اﻻﺟﮭﺰة واﻻدوات اﻻﻟﻜﺘﺮوﻧﯿﺔ اﻟﺘﻰ ﺳﯿﺘﻢ اﺳﺘﺨﺪاﻣﮭﺎ ﺧﻼل اﻟﻜﺘﺎب ھﻰ ﻛﺎﻻﺗﻰ‬


‫‪ -١‬ﻟوﺣﺔ اردوﯾﻧو اوﻧو‪.‬‬
‫‪ -٢‬ﻟوﺣﺔ ﺗوﺻﯾل‪.‬‬
‫‪ -٣‬ﻟﯾد اﻟوان ﻣﺧﺗﻠﻔﺔ ﻗدرة ‪ ٣‬ﻓوﻟت‪.‬‬
‫‪ -٤‬ﺑطﺎرﯾﺔ ‪ ٩‬ﻓوﻟت‪.‬‬
‫‪ -٥‬ﻣوﺗور ﺗﯾﺎر ﻣﺳﺗﻣر ﺻﻐﯾر اﻟﺣﺟم ﻣﺛل اﻟﻣﺗواﺟد ﺑﻠﻌب اﻻطﻔﺎل‪.‬‬
‫‪ -٦‬ﻗطﻌﺔ ‪ 7‬اﺟزاء ﻻظﻬﺎر اﻻ رﻗﺎم‪.‬‬

‫اﻟﺒﺮاﻣﺞ اﻟﻤﻄﻠﻮﺑﺔ‬
‫ﺟﻬﺎز ﻛﻣﺑﯾوﺗر ﯾﺳﺗﺧدم ﻟﻌﻣل اﻟﻣﺣﺎﻛﺎة ﻟﻠﺗﺟﺎرب ﻗﺑل ﺗﻧﻔﯾذﻫﺎ‪ ،‬واﯾﺿﺎ ﻟﻧﻘل اﻟﺑرﻧﺎﻣﺞ اﻟﻣراد ﺗﻧﻔﯾذﻫﺎ اﻟﻰ اﻻردوﯾﻧو ﻣن‬
‫ﺧﻼل ﻛﺎﺑل ‪ .USB‬ﯾﻣﻛﻧك اﺳﺗﺣدام اى ﻧظﺎم ﺗﺷﻐﯾل ﻣﺛل وﻧدوز او ﻣﺎك او ﻟﯾﻧﻛس ﺣﯾث ان ﺑراﻣﺞ اﻻردوﯾﻧو ﻣﺗواﻓﻘﺔ‬
‫ﻣﻊ ﻫذﻩ اﻻﻧظﻣﺔ اﻟﻣﺧﺗﻠﻔﺔ‪.‬‬

‫‪12‬‬
‫‪ARDUINO FROM ZERO TO HERO‬‬

‫‪IDE‬‬ ‫ﺗﺤﻤﯿﻞ ﺑﺮﻧﺎﻣﺞ اﻻردوﯾﻨﻮ‬


‫‪ - ١‬اﻟدﺧول اﻟﻰ اﻟﻣوﻗﻊ ‪http://arduino.cc/en/Main/Software/‬‬

‫‪ -٢‬اﺧﺗﺎر ﻧظﺎم اﻟﺗﺷﻐل اﻟﻣﻧﺎﺳب ﻟك‪.‬‬


‫‪ -٣‬ﺑﻌد ﺗﻧزﯾل اﻟﺑرﻧﺎﻣﺞ ﺳوف ﯾظﻬر ﻟك داﺧل ﻣﺟﻠد ﺑﺎﻟﺷﻛل اﻟﺗﺎﻟﻰ‬

‫‪ -٤‬ﯾﺗم ﺗﺷﻐﯾل اﻟﺑرﻧﺎﻣﺞ ﻟﯾﺗم ﺗﺛﺑﯾﺗﻪ ﻋﻠﻰ اﻟﻛﻣﺑﯾوﺗر‪.‬‬


‫‪ -٥‬ﯾﺗم ﺗوﺻﯾل اﻻردوﯾﻧو ﺑﺎﻟﻛﻣﺑﯾوﺗر ﻣن ﺧﻼل وﺻﻠﺔ ‪ USB‬وﺑﻌد ﺛواﻧﻰ ﯾﻣﻛﻧك ان ﺗﺟد رﺳﺎﻟﺔ ﺧطﺎء ﻓﻰ اﻟﺗﻌرف‬
‫ﻋﻠﻰ اﻻردوﯾﻧو‪ ،‬ﻟﻬذا ﯾﺗم اﺗﺑﺎع اﻟﺧطوات اﻟﺗﺎﻟﯾﺔ‬
‫أ‪ -‬اذﻫب اﻟﻰ ﻣدﯾر اﻟﺑراﻣﺞ واﺧﺗﺎر اﺟﻬزة اﺧرى‪ ،‬وﻣﻧﻬﺎ اﺧﺗﺎر اﻻردوﯾﻧو‬

‫‪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‬‬

‫ﻫذﻩ اﻟﻠوﺣﺔ ﯾﻣﻛﻧﻬﺎ اﻟﺗﺣﻛم ﻓﻰ اى ﺟﻬﺎز اﺧر ﻣﺛل ﻟﻌب اﻻطﻔﺎل و اﻟﻐﺳﺎﻟﺔ اﻻﺗوﻣﺎﺗﯾك واﻟﺳﯾﺎرات واﻟطﺎﺋرات واﻻﻗﻣﺎر‬
‫اﻟﺻﻧﺎﻋﯾﺔ وﻏﯾرﻫﺎ ﻣن اﻻﺟﻬزة ﺣوﻟﻧﺎ وﺗﻧﻔﯾذ ﻣﺎ ﺗرﯾدﻩ ﻣﻧﻬﺎ ﺑدﻗﺔ‪ ،‬وﻟزﯾﺎدة وظﺎﺋف اﻻردوﯾﻧو ﯾﻣﻛن ﺗوﺻﯾل اﺟﻬزة اﺧرى‬
‫ﺑﻬﺎ ﻣﺛل ﻣوﺗور وﻟوﺣﺔ ﻣﻔﺎﺗﯾﺢ وﺷﺎﺷﺔ ﻋرض وﻣﻔﺎﺗﯾﺢ ﺗﺣﻛم وﺣﺳﺎﺳﺎت ﻣﺧﺗﻠﻔﺔ وﻏﯾرﻫﺎ ﻣن اﻻﺟﻬزة اﻟﺗﻰ ﺳوف‬
‫ﻧﺳﺗﻌرﺿﻬﺎ ﻓﻰ اﻟﻔﺻول واﻻﻣﺛﻠﺔ اﻟﺗﺎﻟﯾﺔ ﻣن اﻟﻛﺗﺎب‪.‬‬

‫ﻣﻜﻮﻧﺎت ﻟﻮﺣﺔ اﻻردوﯾﻨﻮ‬


‫‪ -١‬اﻻﺗﺻﺎل ﺑﺎﻟﻛﻣﺑﯾوﺗر وﻣﺻدر اﻟﻛﻬرﺑﺎء‬
‫ﻟﺗﺳﻬﯾل اﺗﺻﺎل اﻻردوﯾﻧو ﺑﺎﻟﻛﻣﯾوﺗر ﺗم إﻟﺣﺎق وﺻﻠﺔ ‪ USB‬اﻟﻣﺗوﻓر ﻓﻰ ﻛل اﺟﻬزة اﻟﻛﻣﺑﯾوﺗر وﺗﺗﻣﯾز ﺑﺎﻟﺳرﻋﺔ‬
‫وﺻﻐر اﻟﺣﺟم ﻟﻧﻘل اﻟﺑﯾﺎﻧﺎت ﺑﯾﻧﻬﻣﺎ‪ ،‬واﯾﺿﺎ ﻟﻠﺣﺻول ﻋﻠﻰ ﻣﺻدر ﺗﯾﺎر ﻛﻬرﺑﻰ ﻟﻼردوﯾﻧو اﺛﻧﺎء اﻟﻌﻣل ﻣن‬
‫اﻟﻛﻣﺑﯾوﺗر ﺣﯾث إﻧك ﺗﻌﻠم ان وﺻﻠﺔ ‪ USB‬ﺗﻧﻘل ﺑﯾﺎﻧﺎت وﺗﯾﺎر ﻛﻬرﺑﻰ ﻓﻰ ﻧﻔس اﻟوﻗت ﻛﻣﺎ ﯾﺣدث ﻋﻧدﻣﺎ ﯾﺗﺻل‬
‫ﻣوﺑﺎﯾﻠك ﺑﺎﻟﻛﻣﺑﯾوﺗر ﻟﻧﻘل ﺑﯾﺎﻧﺎت واﻟﺣﺻول ﻋﻠﻰ ﻛﻬرﺑﺎء ﻟﺷﺣن اﻟﺑطﺎرﯾﺔ ﻓﻰ ﻧﻔس اﻟوﻗت‪.‬‬
‫ﺑﻌض اﻟﻣﺷروﻋﺎت ﻗد ﺗﺣﺗﺎج اﻟﻰ ﺗوﺻﯾل اﻻردوﯾﻧو ﺑﺟﻬﺎز اﺧر ﺑﻌﯾد ﻋن اﻟﻛﻣﺑﯾوﺗر‪ ،‬وﻫﻧﺎ ﺗﺣﺗﺎج اﻟﻰ ﻣﺻدر‬
‫ﺗﯾﺎر ﻛﻬرﺑﻰ ﻣﺳﺗﻣر ﻟﺗﺷﻐﯾل ﻟوﺣﺔ اﻻردوﯾﻧو ﻟﻬذا ﯾوﺟد ﻣدﺧل ﺗﯾﺎر ﺧﺎرﺟﻰ ﻣﺳﺗﻣر ﻟﺗﻐذﯾﺔ اﻻردوﯾﻧو ‪ 9‬ﻓوﻟت‬
‫و ‪ 1‬اﻣﺑﯾر ﺗﯾﺎر ﻣﺳﺗﻣر‪ ،‬ﻣﺛل ﺷﺎﺣن اﻟﻣوﺑﺎﯾل‪.‬‬

‫‪ -٢‬اﻟﻛﻣﺑﯾوﺗر اﻟدﻗﯾق )ﻫﻧﺎ ﯾﺳﻣﻰ اﻟﻣﺗﺣﻛم اﻟدﻗﯾق ﻻﻧﻪ ﺳوف ﯾﺗﺣﻛم ﻓﻰ اﺟﻬزة اﺧرى ﻛﺎﻟﻐﺳﺎﻟﺔ واﻟﺳﯾﺎرة واﻟﻘﻣر‬
‫اﻟﺻﻧﺎﻋﻰ( ‪ 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 -٥‬ﺗﻌرض ﻧﺗﺎﺋﺞ ﺗﻧﻔﯾذ اﻟﺑرﻧﺎﻣﺞ ﻗﺑل ﻧﻘﻠﻬﺎ اﻟﻰ اﻟﻣﺗﺣﻛم اﻟدﻗﯾق‪ ،‬ﺣﯾث ﺗﻌرض‬
‫اﻻﺧطﺎء إن وﺟدت او ﺗﻌرض ان اﻟﺑرﻧﺎﻣﺞ ﺻﺣﯾﺢ وﯾﻣﻛﻧك ﻧﻘﻠﻪ اﻟﻰ اﻟﻣﺗﺣﻛم اﻟدﻗﯾق‪.‬‬
‫‪ -٦‬اﻟﺟزء اﻻﺧﯾر اﻟﺳﻔﻠﻰ ﻣن اﻟﺷﺎﺷﺔ ﯾﻌرض ﻧوع ﻟوﺣﺔ اﻻردوﯾﻧو اﻟﻣﺗﺻﻠﺔ ﺑﺎﻟﻛﻣﺑﯾوﺗر ورﻗم ﻣﺧرج اﻻﺗﺻﺎل‪.‬‬

‫ﺑﺮﻣﺠﺔ اول ﺳﻜﯿﺘﺶ‬


‫اﻟﻬدف ﻣن ﻫذا اﻻﺳﻛﺗش ﻫو ﺗوﺿﯾﺢ ﻣدى ﺳﻬوﻟﺔ ﻋﻣل اﺳﻛﺗش وﻛﯾﻔﯾﺔ اﺳﺗﺧدام ‪ IDE‬ﻟﻌﻣل اﺳﻛﺗش ﺑﺳﯾط ﺗﺳﺗطﯾﻊ ﻣن‬
‫ﺧﻼﻟﻪ إﺿﺎة ‪ LED L‬اﻟﻣوﺟود ﻋﻠﻰ ﻟوﺣﺔ اﻻردوﯾﻧو ﻟﻣدة ﺛﺎﻧﯾﺔ ٕواطﻔﺎءﻩ ﻟﻣدة ﺛﺎﻧﯾﺔ اﺧرى وﺗﻛرار ﻫﺎﺗﯾن اﻟﺧطوﺗﯾن‪.‬‬

‫ﻗم ﺑﺗوﺻﯾل اﻻردوﯾﻧو اوﻧو ﺑﺎﻟﻛﻣﺑﯾوﺗر ﻣن ﺧﻼل وﺻﻠﺔ ‪ USB‬ﺛم اﻓﺗﺢ ﺑرﻧﺎﻣﺞ ‪ ،IDE‬ﺛم ﺗﺎﻛد ان اﺳم ﻟوﺣﺔ اﻻردوﯾﻧو‬
‫وﻣﺧرج اﻻﺗﺻﺎل ﻣﻛﺗوﺑﺎن اﺳﻔل ﺷﺎﺷﺔ ‪ ،IDE‬إن ﻟم ﺗﻛن ﻫﻛذا ادﺧل اﻟﻰ ﻗﺎﺋﻣﺔ ‪ tools  serial port‬ﺛم اﺧﺗﺎر رﻗم‬
‫اﻟﻣﺧرج اﻟﺻﺣﯾﺢ واﯾﺿﺎ اﺧﺗﺎر ﻧوع ﻟوﺣﺔ اﻻردوﯾﻧو‪.‬‬

‫اﺳم اﻻﺳﻛﺗش ﯾﻧﺗﻬﻰ ﺑﺎﻻﻣﺗداد ‪) .ino‬اﺧﺗﺻﺎر ﻟﻛﻠﻣﺔ ‪ (Arduino‬وﯾﺗم ﺣﻔظﻪ ﻓﻰ اﻟﻛﻣﺑﯾوﺗر داﺧل ﻫذا اﻟﻣﺳﺎر‬
‫‪documents\arduino\yoursketchname‬‬

‫ﯾﻧﻘﺳم اﻻﺳﻛﺗش اﻟﯨداﻟﺗﺎن‪،‬‬

‫‪ -١‬داﻟﺔ اﻟﺗﻌرﯾف ‪ setup function‬وﻫﻰ ﺑداﯾﺔ اﻻﺳﻛﺗش وﺗﺣﺗوى ﻋﻠﻰ اﻟﻣﺗﻐﯾرات واﻟﺛواﺑت اﻟﻰ ﺳوف ﻧﺳﺗﺧدﻣﻬﺎ‬
‫ﺧﻼل اﻻﺳﻛﺗش‪ ،‬وﺑﻧﯾﺔ ﻫذﻩ اﻟداﻟﺔ ﻫﻛذا‬

‫{ )(‪void setup‬‬

‫‪20‬‬
‫‪ARDUINO FROM ZERO TO HERO‬‬

‫‪// put your setup code here, to run once:‬‬


‫}‬

‫‪ -٢‬داﻟﺔ اﻟﺗﻛرار ‪ void loop‬وﻓﯾﻬﺎ ﺗوﺟد اﻻواﻣر اﻟﻧﻰ ﺳﺗم ﺗﻧﻔﯾذﻫﺎ وﺗﻛرار اﻟﺗﻧﻔﯾذ ﻋدة ﻣرات طﺑﻘﺎ ﻟﻣﺗطﻠﺑﺎت‬
‫اﻟﺑرﻧﺎﻣﺞ‪ ،‬وﺑﻧﯾﺔ ﻫذﻩ اﻟداﻟﺔ ﻫﻛذا‬
‫{ )(‪void loop‬‬
‫‪// put your main code here, to run repeatedly:‬‬

‫}‬
‫ﻗد ﺗم ﺗوﺿﯾﺢ ان اﻟطرف رﻗم ‪ ١٣‬اﻟدﯾﺟﯾﺗﺎل ﻣﺗﺻل ﺑﺎﻟﻠﻣﺑﺔ ‪ LED L‬ﺣﯾث اﻧﮭﺎ ﺗﺿﺊ وﺗﻧطﻔﺊ ﻋﻧد إﺧراج‬
‫اﺷﺎرة ﻛﮭرﺑﯾﺔ ﻣن اﻟطرف ‪ ،١٣‬ﻟﮭذا ﺳﻧﻘوم ﺑﺈﺧراج اﺷﺎرة ﻛﮭرﺑﯾﺔ ﻣن اﻟطرف ‪ ١٣‬دﯾﺟﯾﺗﺎل ﺑﻣدة ‪ ١‬ﺛﺎﻧﯾﺔ‬
‫)اﻟﺛﺎﻧﯾﺔ = ‪١٠٠٠‬ﻣﻠﻰ ﺛﺎﻧﯾﺔ(‪ ،‬ﺛم ﻧوﻗف اﻻﺷﺎرة اﻟﻛﮭرﺑﯾﺔ ﻟﻣدة ‪ ١‬ﺛﺎﻧﯾﺔ اﺧرى ﻓﯾﻧطﻔﺊ ‪ LED L‬ﻟﻣدة ‪ ١‬ﺛﺎﻧﯾﺔ ﺛم‬
‫ﻧﻛرر ھذه اﻟﺧطوات ﻓﯾظﮭر ﻟﻧﺎ إﺿﺎءة إطﻔﺎء اﻟﻠﻣﺑﺔ ﻣﺗﻛررة ﻛل ﻣﻧﮭم ﻟﻔﺗرة ‪ ١‬ﺛﺎﻧﯾﺔ ﻓﻘط‪ ،‬ھذا اﻟﺧطوات‬
‫اﻟﻣﺗﻛررة ﻣن اﻟﻣﻧطﻘﻰ ان ﺗوﺟد داﺧل اﻟداﻟﺔ رﻗم؟ ﻓﻌﻼ إﺟﺎﺑﺔ ﺻﺣﯾﺔ اﻟداﻟﺔ رﻗم ‪ ٢‬اﻟﻣﺗﻛررة ‪.void loop‬‬

‫ﻣﻼﺣظﺔ‪ :‬ﻣﻔﺗﺎح اﻟﻛﮭرﺑﺎء ﯾوﺟد ﻋﻠﯾﮫ ﻋﻼﻣﺔ اﻟﻔﺗﺢ اى ﻣرور ﺗﯾﺎر ﻛﮭرﺑﻰ ورﻣزھﺎ )‪ ،(ON = HIGH = 1‬واﯾﺿﺎ ﯾوﺟد‬
‫ﻋﻠﯾﮫ ﻋﻼﻣﺔ اﻟﻐﻠق اى إﻧﻘطﺎع اﻟﺗﯾﺎر اﻟﻛﮭرﺑﻰ ورﻣزھﺎ )‪(OFF = LOW = 0‬‬

‫ﺧﻄﻮات ﻛﺘﺎﺑﺔ اواﻣﺮ اﻻﺳﻜﺘﺶ‬


‫‪ -١‬ﺗوﺿﯾﺢ ﺣﺎﻟﺔ اﻟطرف )‪ (pinMode‬رﻗم ‪ ١٣‬ﺣﯾث ﺳﯾﻛون ﻓﻰ ﺣﺎﻟﺔ إﺧﺎرج إﺷﺎرة ﻛﻬرﺑﯾﺔ ام إﺳﺗﻘﺑﺎل‬
‫إﺷﺎرة ﻛﻬ رﺑﯾﺔ‪ ،‬ﻓﻰ اﻻﺳﻛﺗش اﻟﺣﺎﻟﻰ إﺧراج )‪ (OUTPUT‬إﺷﺎرة ﻛﻬرﺑﯾﺔ‪ ،‬ﻟﻬذا ﺳﻧﻛﺗب ﺳطر اﻻواﻣر‬
‫وﻧوﺿﺢ ﻓﯾﻪ ان اﻟطرف ‪ ١٣‬ﺳﯾﻛون ﻓﻰ ﺣﺎﻟﺔ إﺧراج إﺷﺎرة ﻛﻬرﺑﯾﺔ )ﻫذا ﺳطر ﺗﻌرﯾﻔﻰ ﻟﻬذا ﺳﯾﺗم ﻛﺗﺎﺑﺗﻪ‬
‫داﺧﻠﺔ داﻟﺔ اﻟﺗﻌرﯾف ‪(setup function‬‬
‫)(‪void setup‬‬
‫{‬
‫;)‪pinMode(13, OUTPUT‬‬
‫}‬

‫‪ -٢‬اﻟﺑدء ﻓﻰ إﺧراج اول اﺷﺎرة ﻛﻬرﺑﯾﺔ ﻣن اﻟطرف ‪ ١٣‬اﻟدﯾﺟﯾﺗﺎل ﻣن ﺧﻼل اﻻﻣر ‪ 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‬‬
‫}‬

‫اﻟﺘﺄﻛﺪ ﻣﻦ ﺻﺤﺔ اﻻﺳﻜﺘﺶ‬


‫ﺑﻌد ﻛﺗﺎﺑﺔ اﻻواﻣر اﻟﺳﺎﺑﻘﺔ داﺧل ﺑ رﻧﺎﻣﺞ ‪ IDE‬ﯾﺗم ﺿﻐط اﯾﻘوﻧﺔ ‪ Verify‬ﻟﻠﺗﺄﻛد ﻣن ﺧﻠو اﻟﺑرﻧﺎﻣﺞ ﻣن اى اﺧطﺎء ﻟﻐوﯾﺔ‬
‫او ﺑرﻣﺟﯾﺔ وﺳﺗظﻬر ﻧﺗﯾﺟﺔ اﻻﺧﺗﺑﺎر ﻓﻰ اﻟﺷﺎﺷﺔ اﻟﺳﻔﻠﻰ‪ ،‬وﻫﻧﺎ ﻓﻰ ﻫذا اﻻﺳﻛﺗش ظﻬرت ﻫذﻩ اﻟﻧﺗﯾﺟﺔ‬

‫ﺣﯾث ان ﻛﻠﻣﺔ ‪ Done compiling‬ﺗﻌﻧﻰ ان اﻟﺑرﻧﺎﻣﺞ ﺻﺣﯾﺢ وﻻ ﯾﺣﺗوى ﻋﻠﻰ اى اﺧطﺎء‪ .‬اﻣﺎ ﻓﻰ ﺣﺎﻟﺔ وﺟود ﺧطﺎء‬
‫ﯾﺗم إظﻬﺎر رﺳﺎﻟﺔ ﺑﻧوع اﻟﺧطﺎء ورﻗم اﻟﺳطر اﻟﻣوﺟود ﺑﻪ ﻫذا اﻟﺧطﺎء‪ ،‬وﻫذا ﻣﺛﺎل ﯾﺣﺗوى ﻋﻠﻰ ﺧطﺎء ﺑﺎﻟﺳطر رﻗم ‪١٦‬‬
‫ﺣﯾث ﻟم ﯾﻧﺗﻬﻰ ﺳطر اواﻣر ﺑﻌﻼﻣﺔ ;‬

‫‪22‬‬
‫‪ARDUINO FROM ZERO TO HERO‬‬

‫ﻧﻘﻞ اﻟﺒﺮﻧﺎﻣﺞ اﻟﻰ اﻻردوﯾﻨﻮ‬


‫ﺑﻌد اﻟﺗﺄﻛد ﻣن ﺻﺣﺔ اﻟﺑرﻧﺎﻣﺞ‪ ،‬ﯾﺗم ﺣﻔظ ﻧﺳﺧﺔ ﻣﻧﻪ ﻓﻰ اﻟﻛﻣﺑﯾوﺗر ﺛم ﻧﻘل ﻧﺳﺧﻪ ﻣﻧﻪ اﻟﻰ اﻻردوﯾﻧو ﻣن ﺧﻼل ﺿﻐط‬
‫ﻣﻔﺗﺎح ‪ ،Upload‬ﺣﯾث ﺗﻼﺣظ اﺛﻧﺎء ﻋﻣﻠﯾﺔ اﻟﻧﺳﺦ إﺿﺎءة ﻟﻣﺑﺎت ‪ RX & TX‬واﻟﺗﻰ ﺗﻌﻧﻰ ان ﻫﻧﺎك ﺑﯾﺎﻧﺎت ﯾﺗم ﻧﻘﻠﻬﺎ ﺑﯾم‬
‫اﻻردوﯾﻧو واﻟﻛﻣﺑﯾوﺗر‪ .‬ﺑﻌد اﻧﺗﻬﺎء ﻋﻣﻠﯾﺔ اﻟﻧﺳﺦ ﺗﻼﺣظ ان اﻟﻠﻣﺑﺔ ‪ LED L‬ﻓﻰ ﻟوﺣﺔ اﻻردوﯾﻧو ﺗﺿﺊ ﻟﻣدة ﺛﺎﻧﯾﺔ واﺣدة ﻓﻘط‬
‫ﺛم ﺗﻧطﻔﺊ ﻟﻣدة ﺛﺎﻧﯾﺔ واﺣدة ﺛم ﺗﺿﺊ ﻣرة اﺧرى وﻫﻛذا ﺗﺗﻛر ﺗﻠك اﻟﺧطوات ﺑﺈﺳﺗﻣرار‪.‬‬

‫ﺗﻌﺪﯾﻞ اﻻﺳﻜﺘﺶ‬
‫ﯾﻣﻛﻧك ﺗﻌدﯾل اﻻﺳﻛﺗش ﻓﻰ اى وﻗت ﺟﺳﺑﻣﺎ ﺗرﯾد‪ ،‬ﻓﻘط اﻓﺗﺢ اﻻﺳﻛﺗش ٕواﺟرى اﻟﺗﻌدﯾﻼت اﻟﺗﻰ ﺗرﯾدﻫﺎ ﺗﺎﻛد ﻣن ﺻﺣﺔ‬
‫اﻻﺳﻛﺗش ﺛم اﺣﻔظﻪ ﻣرة اﺧرى‪ ،‬ﻫﻧﺎ ﺳﻧﻘوم ﺑﺗﻌدﯾل اﻻﺳﻛﺗش ﺑﺗﻐﯾﯾر ﻗﯾﻣﺔ اﻻﻧﺗظﺎر ﻣن ‪ ١٠٠٠‬ﻣﻠﻰ ﺛﺎﻧﯾﺔ اﻟﻰ ‪٢٥٠‬‬
‫ﻣﻠﻰ ﺛﺎﻧﯾﺔ ﻟﻛﻰ ﺗﺿﺊ اﻟﻠﻣﺑﺔ ﻟﻣدة رﺑﻊ ﺛﺎﻧﯾﺔ ﻓﻘط )‪ ٢٥٠‬ﻣﻠﻰ ﺛﺎﻧﯾﺔ( ﺛم ﺗﻧطﻔﺊ ﻟﻣدة رﺑﻊ ﺛﺎﻧﯾﺔ وﻫﻛذا ;)‪ .delay(250‬ﯾﻣﻛن‬
‫إﺟراء ﻫذا اﻟﺗﻌدﯾل ﺑزﯾﺎدة او ﺗﻘﻠﯾل اﻟوﻗت وﻣﻼﺣظﺔ اﻟﺗﻌدﯾﻼت ﻋﻠﻰ ﺳرﻋﺔ إﺿﺎءة اﻟﻠﻣﺑﺔ‪.‬‬

‫ﻣﺎذا ﺑﻌﺪ!‬
‫ﻓﻰ ﻫذا اﻟﻔﺻل ﺗم ﺷرح ﻣﻛوﻧﺎت ﻟوﺣﺔ اﻻردوﯾﻧو واﯾﺿﺎ ﻣﻛوﻧﺎت ﺑرﻧﺎﻣﺞ ‪ ،IDE‬ﻣﻊ ﺗﻧﻔﯾذ اول اﺳﻛﺗش ﻋﻣﻠﻰ ﺗﻘوم ﺑﻪ‬
‫ﺑﻧﻔﺳك وﺗﺗﺄﻛد ﻣن ﺻﺣﺗﻪ وﺗﻌدﯾﻠﻪ وﺣﻔظﻪ وﻧﻘل ﻧﺳﺧﻪ ﻣن اﻟﻰ اﻻردوﯾﻧو ﻣن ﺧﻼل وﺻﻠﺔ ‪ ،USB‬ﺳوف ﻧﻘوم ﻓﻰ‬
‫اﻟﻔﺻل اﻟﺗﺎﻟﻰ ﺑﺷرح اواﻣر ﺟدﯾدة وﻋﻣل ﺑراﻣﺞ ﺟدﯾدة ﺗﻘوم ﺑوظﺎﺋف ﻣﺧﺗﻠﻔﺔ‪ ،‬ﻣﻊ اﻟﺗطرق اﻟﻰ اﺳﺎﺳﯾﺎت اﻟ دواﺋر‬
‫اﻻﻟﻛﺗروﻧﯾﺔ‪.‬‬

‫‪23‬‬
‫‪ARDUINO FROM ZERO TO HERO‬‬

‫‪3‬‬
‫اﻟﺨﻄﻮات اﻟﻤﺒﺪﺋﯿﺔ‬

‫ﻓﻰ ﻫذا اﻟﻔﺻل ﺳوف ﻧﺗﻌﻠم اﺳﺎﺳﯾﺎت اﻟد واﺋر اﻻﻟﻛﺗروﻧﯾﺔ وﻛﯾﻔﯾﺔ اﻟﺗﺣﻛم ﻓﻰ اﻟﺗﯾﺎر اﻟﻛﻬرﺑﻰ ﺑﻣﺎ ﯾﺗﻧﺎﺳب ﻣﻊ اﺣﺗﯾﺎﺟﺎت‬
‫اﻟﻣﺷروع اﻟﻣراد ﺗﻧﻔﯾذﻩ‪ ،‬واﻟﺗطرق اﻟﻰ ﺗﻧﻔﯾذ ﻣﺷروﻋﺎت ﻣﺗﻘدﻣﺔ اﻛﺛر ﻣن ﺧﻼل ﺧطوات ﺑﺳﯾطﺔ وﺷﯾﻘﺔ‪ ،‬ﻫل اﻧت ﻣﺳﺗﻌد؟‬
‫ﻫﯾﺎ ﺑﻧﺎ‪...‬‬

‫اﻟﺘﺨﻄﯿﻂ ﻟﻤﺸﺮوﻋﻚ‬
‫ﻗﺑل ﺗﻧﻔﯾذ اى ﻣﺷروع ﻣن ﺧﻼل اﻻردوﯾﻧو‪ ،‬ﯾﺟب ان ﺗﺧطط ﺑدﻗﺔ ﻟﻬذا اﻟﻣﺷروع ﻟﻠﺣﺻول ﻋﻠﻰ اﻟﻧﺗﺎﺋﺞ اﻟﻣرﺟوة ﻓﻰ اﻗل‬
‫وﻗت ﻣﻣﻛن وﺑﺄﻗل ﻣﺟﻬود‪ ،‬ﻟﻬذا ﺗم وﺿﻊ ﻣﺟﻣوﻋﺔ ﺧطوات ﻣﺑدﺋﯾﺔ ﺗﺳﺎﻋد ﻓﻰ اﻟﺗﺧطﯾط ﻟﺑﻧﺎء ﻣﺷروﻋك وﻫذﻩ اﻟﺧطوات‬
‫ﻟﺗﻧظﯾم ﻋﻣﻠك وﻣن اﻻﻓﺿل إﺗﺑﺎﻋﻬﺎ ﻓﻰ ﻣﺷروﻋك‪.‬‬

‫اﻟﺨﻄﻮات اﻟﻤﺴﺎﻋﺪة ﻟﺘﺨﻄﯿﻂ وﺗﻨﻔﯿﺬ ﻣﺸﺮوﻋﻚ‬


‫‪ -١‬ﺣدد اﻻﻫداف اﻟﺗﻰ ﺗرﯾدﻫﺎ ﻣن اﻟﻣﺷروع‪.‬‬
‫‪ -٢‬اﻛﺗب ﺧطوات اﻟﻣﺷروع ﻛﻣﺎ ﺗﺗوﻗﻊ ان ﯾﺗم ﺗﻧﻔﯾذﻫﺎ )اﻟﺧوارزﻣﯾﺔ ‪ (Algorithm‬ﺑﺣﯾث ﺗظﻬر ﺧطوات ﺗﻧﻔﯾذ‬
‫اﻟﻣﺷروع ﻣﺗﺳﻠﺳﻠﺔ ﺑﺷﻛل ﻣﻧطﻘﻰ‪.‬‬
‫‪ -٣‬ﺣدد اﻻدوات واﻻﺟﻬزة اﻟﻣﺳﺗﺧدﻣﺔ ﻓﻰ ﺗﻧﻔﯾذ ﻫذا اﻟﻣﺷروع‪.‬‬
‫‪ -٤‬اﻛﺗب اﻻﺳﻛﺗش اﻟﺧﺎص ﺑﺎﻟﻣﺷروع ﺑﻣﺎ ﺑﺗﻧﺎﺳب ﻣﻊ اﻻﻫداف اﻟﻣراد ﺗﺣﻘﯾﻘﻬﺎ‪.‬‬

‫‪24‬‬
‫‪ARDUINO FROM ZERO TO HERO‬‬

‫‪ -٥‬ﻗم ﺑﺗوﺻﯾل اﻻﺟزاء واﻻدوات ﻣﻌﺎً واﻟﺗﺄﻛد ﻣن ﺳﻼﻣﺔ ﺗوﺻﯾل ﻛل اﻻﺟزاء ﺑﻠوﺣﺔ اﻻردوﯾﻧو‪.‬‬
‫‪ -٦‬ﻗم ﺑﻌﻣل ﻧﺳﺧﺔ ﻣن اﻻﺳﻛﺗش اﻟﻰ اﻻردوﯾﻧو ﻣﻊ اﻟﺗﺄﻛد ﻣن ان اﻻﺳﻛﺗش ﯾﺗم ﺗﻧﻔﯾذﻩ ﺑدﻗﺔ ﻣن ﺧﻼل اﻟﻣﻛوﻧﺎت‬
‫اﻻﻟﻛﺗروﻧﯾﺔ اﻟﻣﺗﺻﻠﺔ ﺑﺎﻻردوﯾﻧو طﺑﻘﺎ ﻻﻫداف اﻟﻣﺷروع اﻟﻣذﻛورة ﺑﺎﻟﺧطوة اﻻوﻟﻰ‪ ،‬ﻣﻊ ﺗﺻﺣﯾﺢ اى اﺧطﺎء ﻓﻰ‬
‫اﻻﺳﻛﺗش او اﻟﻣﻛوﻧﺎت اﻻﻟﻛﺗروﻧﯾﺔ‪.‬‬

‫اﺳﺎﺳﯿﺎت اﻟﻜﮭﺮﺑﺎء‬
‫ﻛل اﻟدواﺋر واﻟﻣﻛوﻧﺎت اﻻﻟﻛﺗروﻧﯾﺔ اﻟﺗﻰ ﺳوف ﺗﺗﻌﺎﻣل ﻣﻌﻬﺎ ﺑﻣﺎ ﻓﯾﻬﺎ اﻻردوﯾﻧو ﺗﻌﺗﻣد ﻋﻠﻰ اﻟﻛﻬرﺑﺎء‪ ،‬ﻟﻬذا ﯾﺟب ان‬
‫ﯾﻛون ﻟدﯾك ﺧﻠﻔﯾﺔ ﺑﺳﯾطﺔ ﻋن اﻟﻛﻬرﺑﺎء وﻛﯾﻔﯾﺔ اﻟﺗﻌﺎﻣل ﻣﻌﻬﺎ وﻗراءة ﻗﯾم اﻟﺗﯾﺎر ﻟﺗﺳﻬﯾل ﺗﻧﻔﯾذ ﻣﺷروﻋﺎﺗك ﺑدون اﻟﺣﺎﺟﺔ‬
‫اﻟﻰ ﻣﻬﻧدس ﻛﻬرﺑﺎء او اﻟﻛﺗروﻧﯾﺎت‪ ،‬ﺑل ﺗﻘوم اﻧت ﺑﺗﻧﻔﯾذ ﻣﺎ ﺗرﯾد دون اﻧﺗظﺎر ﻣﺳﺎﻋدة اﻻﺧرﯾن‪.‬‬

‫اﻟﺘﯿﺎر اﻟﻜﮭﺮﺑﻰ )‪(Current = volume of elecricrity‬‬


‫ﻫو ﻣرور اﻟﺷﺣﻧﺎت اﻟﻛﻬرﺑﯾﺔ ﺧﻼل ﺳﻠك ﻣﻌدﻧﻰ‪ ،‬ﺑﺣﯾث ﯾﻣر اﻟﺗﯾﺎر ﻣن اﻟطرف اﻟﻣوﺟب )طرف اﻟﺑطﺎرﯾﺔ ‪ (+‬اﻟﻰ‬
‫اﻟطرف اﻟﺳﺎﻟب )طرف اﻟﺑطﺎرﯾﺔ ‪ (-‬ﺣﯾث ﯾﺳﻣﻰ ﻫذا ﺗﯾﺎر ﻣﺳﺗﻣر )‪.DC (Direct Current‬‬

‫ﻣﻼﺣظﺔ‪ :‬اﻟطرف اﻟﻣوﺟب وﻫو ﻣﺻدر اﻟﺗﯾﺎر اﻟﻛﻬرﺑﻰ ﯾﺳﻣﻰ )‪ (VCC or VSS‬اﻣﺎ اﻟطرف اﻟﺳﺎﻟب وﻫو اﻟﻣﺳﺗﻘﺑل‬
‫ﻟﻠﺷﺣﻧﺎت اﻟﻛﻬرﺑﯾﺔ اﻟﻣﻧﺗﻘﻠﺔ ﻣن اﻟطرف اﻟﻣوﺟب ﯾﺳﻣﻰ اﻟطرف اﻟﺳﺎﻟب او اﻻرﺿﻰ )‪.(GND = Ground‬‬

‫ﯾﺗم ﻗﯾﺎس اﻟﺗﯾﺎر اﻟﻛﻬرﺑﻰ ﺑﻌدد اﻟﺷﺣﻧﺎت اﻟﻛﻬرﺑﯾﺔ اﻟﺗﻰ ﻣرت ﺧﻼل ﻧﻘطﺔ ﻣﻌﯾﻧﺔ ﻣن اﻟﺳﻠك اﻟﻣﻌدﻧﻰ ﺧﻼل ﻓﺗرة ﻣﻌﯾﻧﺔ‪،‬‬
‫ورﻣز ﻗﯾﺎس ﻣرور اﻟﺗﯾﺎر ﻫو اﻻﻣﺑﯾر )‪ ،(A = amperes = amps‬وﻧظ ار ﻻﺳﺗﺧدام اﺟزاء ﺻﻐﯾرة ﺟدا ﻣن اﻟﺗﯾﺎر‬
‫اﻟﻛﻬرﺑﻰ ﻓﻰ ﺣﯾﺎﺗﻧﺎ اﻟﯾوﻣﯾﺔ ﻓﻘد ﺗم ﺗﻘﺳﯾم وﺣدة ﻗﯾﺎس اﻟﺗﯾﺎر ‪ A‬اﻟﻰ اﻗﺳﺎم اﺻﻐر ﺗﺳﻣﻰ ﻣﻠﻰ اﻣﺑﯾر )‪1000‬ﻣﻠﻰ اﻣﺑﯾر =‬
‫‪ 1‬أﻣﺑﯾر‪ (1A = 1000 mA ،‬وﻫذا ﻣﺛل ﺗﻘﺳﯾم اﻟﺛﺎﻧﯾﺔ اﻟﻰ ‪ 1000‬ﺟزء وﺗﺳﻣﯾﺗﻬﺎ ﻣﻠﻰ ﺛﺎﻧﯾﺔ ﻛﻣﺎ ﻫو ﻣذﻛور ﺑﺎﻟﻔﺻل‬
‫اﻟﺛﺎﻧﻰ ﻋﻧد ﻛﺗﺎﺑﺔ اول اﺳﻛﺗش ﻟﻼردوﯾﻧو‪.‬‬

‫اﻟﻔﻮﻟﺖ )‪(Volt = pressure of electricity‬‬


‫ﻫو ﻓرق اﻟﺿﻐط ﺑﯾن اﻟطرﻓﯾن اﻟﻣوﺟب واﻟﺳﺎﻟب‪ ،‬ﺣﯾث ﻛﻠﻣﺎ زاد اﻟﻔرق زاد اﻟﺿﻐط ﻣﻣﺎ ﯾزﯾد ﺳرﻋﺔ اﻧﺗﻘﺎل اﻟﺷﺣﻧﺎت‬
‫اﻟﻛﻬرﺑﯾﺔ داﺧل اﻟﺳﻠك اﻟﻣﻌدﻧﻰ‪ ،‬ﻟﻬذا ﯾﺗم ﺗﻐﯾﯾر ﺑطﺎرﯾﺔ اﻟرﯾﻣوت )اﻟﺑطﺎرﯾﺔ ﺿﻌﯾﻔﺔ( ﻋﻧدﻣﺎ ﯾﻘل اﻟﻔوﻟت )اﻟﺿﻐط( ﺑﯾن‬
‫طرﻓﻰ اﻟﺑطﺎرﯾﺔ ﻟﺑطﺊ اﻧﺗﻘﺎل اﻟﺷﺣﻧﺎت اﻟﻛﻬرﺑﯾﺔ ﺑﯾن طرﻓﻰ ﺑطﺎرﯾﺔ اﻟرﯾﻣوت‪ .‬وﺣدة ﻗﯾﺎس اﻟﻔوﻟت ﻫﻰ )‪.(V = voltage‬‬

‫‪25‬‬
‫‪ARDUINO FROM ZERO TO HERO‬‬

‫اﻟﻄﺎﻗﺔ )‪(Power‬‬
‫ﻫو ﺳرﻋﺔ ﺗﺣوﯾل ﺟﻬﺎز ﻛﻬرﺑﻰ اﻟطﺎﻗﺔ اﻟﻛﻬرﺑﯾﺔ ﻣن ﺷﻛل اﻟﻰ ﺷﻛل اﺧر‪ ،‬ووﺣدة اﻟﻘﯾﺎس ﻫﻰ اﻟ وات )‪ ،W(watt‬ﻓﻣﺛﻼ‬
‫ﻣﺻﺑﺎح طﺎﻗﺗﻪ ‪ 100‬وات ﺗﻛون ﻗوة اﻹﺿﺎءة اﻛﺑر ﻣن ﻣﺻﺑﺎح طﺎﻗﺗﻪ ‪ 50‬وات ﻻن اﻟﻣﺻﺑﺎح اﻻﻛﺑر ﻓﻰ اﻟ وات ﯾﺳﺗطﯾﻊ‬
‫ﺗﺣوﯾل ﻛﻣﯾﺔ ﻛﺑﯾ رة ﻣن اﻟطﺎﻗﺔ اﻟﻛﻬرﺑﯾﺔ اﻟﻰ ﺿؤ ﻣﻣﺎ ﯾﺟﻌﻠﻪ ﯾﺳﺗﻬﻠك ﺗﯾﺎر ﻛﻬرﺑﻰ اﻛﺑر ﻓﺗﺻﺑﺢ طﺎﻗﺗﻪ اﻛﺑر )ﻋﻼﻗﺔ‬
‫طردﯾﺔ ﺑﯾن اﺳﺗﻬﻼك اﻟﻛﻬرﺑﺎء واﻟطﺎﻗﺔ ﻓﻛﻠﻣﺎ زاد اﺳﺗﻬﻼك اﻟﻛﻬرﺑﺎء زادت اﻟطﺎﻗﺔ واﻟﻌﻛس ﺻﺣﯾﺢ(‪.‬‬

‫اﻟﻌﻼﻗﺔ ﺑﯾن اﻟﺛﻼث ﻋﻧﺎﺻر اﻟﺳﺎﺑﻘﺔ ﻣن ﺧﻼل ﻫذا اﻟﻘﺎﻧون‬

‫)‪Power (W) = Voltage (V) × Current (A‬‬

‫اﻟﻌﻨﺎﺻﺮ اﻻﻟﻜﺘﺮوﻧﯿﺔ‬
‫ﻧﺳﺗﺧدم اﻟﻛﻬرﺑﺎء ﻓﻰ ﺟﻣﯾﻊ ﻣﻧﺎﺣﻰ ﺣﯾﺎﺗﻧﺎ داﺧل اﻟﻣﻧزل وﺧﺎرﺟﻪ‪ ،‬وﻧﻌﺗﻣد ﻋﻠﯾﻬﺎ اﻋﺗﻣﺎد ﻛﻠﻰ‪ ،‬وﺣﯾث إﻧﻧﺎ ﺑﺻدد اﻟﺗﻌﺎﻣل‬
‫ﻣﻊ ﻣﺻﺎدر ﻛﻬرﺑﺎء ﻓﻰ اﻟﻣﺷروﻋﺎت داﺧل ﻫذا اﻟﻛﺗﺎب‪ ،‬ﻟﻬذا ﺳوف ﻧﺣﺗﺎج اﻟﻰ اﻟﺗﺣﻛم ﻓﻰ اﻟﺗﯾﺎر اﻟﻛﻬرﺑﻰ ﺑﻣﺎ ﯾﻧﺎﺳب‬
‫ﻣﺷروﻋﺎﺗﻧﺎ‪ ،‬وﻟﻛﻰ ﺗﺗﺣﻛم ﻓﻰ اﻟﺗﯾﺎر اﻟﻛﻬرﺑﻰ ﯾﺟب اﺳﺗﺧدام ادوات ﺗﺣﻛم ﻛﻬرﺑﯾﺔ وﻫﻰ اﻟﻌﻧﺎﺻر اﻻﻟﻛﺗروﻧﯾﺔ واﻟﺗﻰ ﺳوف‬
‫ﻧﺳﺗﻌرض اﻫم ﻫذﻩ اﻟﻌﻧﺎﺻر اﻻن‬

‫اﻟﻤﻘﺎوﻣﺔ )‪(Resistor‬‬
‫ﺑﻌض اﻻﺟﻬزة اﻟﻛﻬرﺑﯾﺔ ﺗﺣﺗﺎج اﻟﻰ ﺗﯾﺎر ﻣﻌﯾن ‪ ،‬وﻫذا اﻟﺗﯾﺎر ﻣﻣﻛن ان ﯾﻛون اﻗل ﻣن ﺿﻐط اﻟﺗﯾﺎر اﻟﻣﺗوﻟد ﻣن اﻟﻣﺻدر‬
‫اﻟﻛﻬرﺑﻰ‪ ،‬ﻟﻬذا ﻧرﯾد ﺗﻘﻠﯾل ﻣرور اﻟﺗﯾﺎر ﻓﻰ اﻟﺳﻠك ﻟﯾﻧﺎﺳب اﺣﺗﯾﺎج اﻟﺟﻬﺎز اﻟﻛﻬرﺑﻰ ﻟﻬذا ﻧﺳﺗﺧدم ﻣﻛون اﻟﻛﺗروﻧﻰ ﯾﻘﻠل‬
‫ﻣن ﺗدﻓق اﻟﺗﯾﺎر اﻟﻛﻬرﺑﻰ )إﻋﺎﻗﺔ ﻣرور اﻟﺗﯾﺎر( ﯾﺳﻣﻰ ﻣﻘﺎوﻣﺔ ﻛﻬرﺑﯾﺔ‪ ،‬ﻓﻣﺛﻼ اﻟﺗﯾﺎر اﻟﻛﻬرﺑﻰ ﺑﺎﻟﻣﻧزل ﻫو ‪ 220‬ﻓوﻟت‬
‫وﯾﺳﺗﺧدم ﻟﺗﻐذﯾﺔ اﻟﻛﻣﺑﯾوﺗر ﻣﺛﻼً‪ ،‬ﻟﻛن ﻛل ﺟزء ﻣن اﻟﻛﻣﺑﯾوﺗر ﯾﺣﺗﺎج اﻟﻰ ﻓوﻟت ﻣﻌﯾن ﯾﺗراوح ﻣن ‪ 1‬اﻟﻰ ‪ 16‬ﻓوﻟت‪ ،‬ﻟﻬذا‬
‫ﯾﺗم اﺳﺗﺧدام ﻣﻘﺎوﻣﺔ ﻣﺧﺗﻠﻔﺔ اﻟﻘﯾﻣﺔ ﻟﻛل ﺟزء داﺧل اﻟﻛﻣﺑﯾوﺗر ﻟﻠﺣﺻول ﻋﻠﻰ اﻟﺗﯾﺎر اﻟﻣﻧﺎﺳب ﻟﻬذا اﻟﺟزء‪.‬‬

‫وﺣدة ﻗﯾﺎس اﻟﻣﻘﺎوﻣﺔ ﻫﻰ اﻻوم ‪ (Ω = ohms‬وﯾﻣﻛن ان ﺗﻛون اﻟف اوم )ﻛﯾﻠو اوم( او ﻣﻠﯾون اوم )ﻣﯾﺟﺎ اوم(‪.‬‬

‫‪26‬‬
‫‪ARDUINO FROM ZERO TO HERO‬‬

‫ﻣﻌﺮﻓﺔ ﻗﯿﻤﺔ اﻟﻤﻘﺎوﻣﺔ‬


‫ﻧﻼﺣظ ان اﻟﻣﻘﺎوﻣﺔ ﻣرﺳوم ﻋﻠﯾﻬﺎ ﺧطوط ﻣﻠوﻧﺔ‪ ،‬وﺗﺧﺗﻠف ﻗﯾﻣﺔ اﻟﻣﻘﺎوﻣﺔ طﺑﻘﺎً ﻟﻌدد اﻟﺧطوط اﻟﻣرﺳوﻣﺔ ﻋﻠﯾﻬﺎ وﻟون ﻛل‬
‫ﺧط ﻣﻧﻬﺎ‪ ،‬ﺣﯾث ﯾﻣﻛﻧﻧﺎ ﻣﻌرﻓﺔ ﻗﯾﻣﺔ اﻟﻣﻘﺎوﻣﺔ ﻣن ﺧﻼل إﺣدى اﻟطرق اﻻﺗﯾﺔ‬

‫‪ -١‬إﺳﺗﺧدام اﻟﻣﺎﻟﺗﯨﻣﯾﺗر ﻣن ﺧﻼل اﻹﺷﺎرة اﻟﻰ وﺿﻊ اﻟﻣﻘﺎوﻣﺔ ﻟﻘراءة ﻗﯾﻣﺔ اﻟﻣﻘﺎوﻣﺔ‪.‬‬
‫‪ -٢‬ﺗﺣوﯾل اﻟﺧطوط اﻟﻣرﺳوﻣﺔ ﻋﻠﻰ اﻟﻣﻘﺎوﻣﺔ اﻟﻰ ارﻗﺎم ﺗوﺿﺢ ﻗﯾﻣﺔ اﻟﻣﻘﺎوﻣﺔ ﻣن ﺧﻼل ﺗﻠك اﻟﺧطوات‬
‫أ‪ -‬وﺿﻊ اﻟﺧط اﻻﺻﻔر او اﻟذﻫﺑﻰ ﺟﻬﺔ اﻟﯾﻣﯾن‪ ،‬ﺛم ﺑدء ﻗراءة اﻻﻟوان ﻣن اول ﺧط ﻣن ﺟﻬﺔ اﻟﯾﺳﺎر‪.‬‬
‫ب‪ -‬ﺗﺣدﯾد ﻋدد اﻟﺧطوط اﻟﻣﻠوﻧﺔ‪ ،‬إن ﻛﺎﻧت ﺧﻣﺳﺔ ﺧطوط إذاً اول ﺛﻼث ﺧطوط ﻧﺣوﻟﻬﺎ اﻟﻰ ارﻗﺎم )طﺑﻘﺎً‬
‫ﻟﻠﺟدول ﺑﺎﻟﺻورة اﻟﺗﺎﻟﯾﺔ(‪ ،‬واﻟﺧط اﻟراﺑﻊ ﻫو اﻟﻘﯾﻣﺔ اﻟﻣﺿروﺑﺔ ﻓﻰ اول ﺛﻼث ارﻗﺎم )طﺑﻘﺎً ﻟﻠﺟدول اﻟﺗﺎﻟﻰ(‪،‬‬
‫ﯾﺣﺗوى اﺧر ﺧط ﻋﻠﻰ اﻟﻔﺎﻗد ﻓﻰ اﻟﻣﻘﺎوﻣﺔ )ﻛل ﻣﻘﺎوﻣﺔ ﻟﻬﺎ ﻓﺎﻗد ﻣن ﻗﯾﻣﺗﻬﺎ(‪ ،‬اﻟﻣﺛﺎل ا ﻻول ﯾﺣﺗوى ﻋﻠﻰ‬
‫ﻓﺎﻗد ‪ 1%‬ﻣن ﻗﯾﻣﺔ اﻟﻣﻘﺎوﻣﺔ ‪) 47kΩ‬اﻟﻣﺛﺎل اﻻول ﺑﺎﻟﺟدول(‪.‬‬
‫ت‪ -‬إذا ﻛﺎﻧت اﻟﺧطوط ﻫﻰ ارﺑﻌﺔ ﺧطوط ﻓﻘط ﻣﺗﻘﺎرﺑﺔ ﻣﻌﺎً‪ ،‬ﻓﯾﺗم ﺗﺣوﯾل اول ﺛﻼث ارﻗﺎم اﻟﻰ ﻗﯾم وﺿرﺑﻬﺎ ﻓﻰ‬
‫ﻗﯾﻣﺔ اﻟﺧط اﻟراﺑﻊ ﻟﻧﺣﺻل ﻋﻠﻰ اﻟﻘﯾﻣﺔ اﻟﻛﻠﯾﺔ ﻟﻠﻣﻘﺎوﻣﺔ )ﻻﯾوﺟد ﻓﺎﻗد ﻓﻰ ﻫذﻩ اﻟﺣﺎﻟﺔ ﻻن اﻟﺧطوط‬
‫ﻣﺗﻘﺎرﺑﺔ‪ ،‬اﻟﻣﺛﺎل اﻟﺛﺎﻧﻰ ﺑﺎﻟﺟدول(‪.‬‬
‫ث‪ -‬إذا ﻛﺎﻧت اﻟﺧطوط ارﺑﻌﺔ وﻣﻧﻬﺎ اول ﺧط ﺑﺎﻟﺟﻬﺔ اﻟﯾﻣﻧﻰ ﺑﻌﯾد ﻋن اﻟﺛﻼث ﺧطوط اﻻﺧرى‪ ،‬ﻓﯾﺗم ﺗﺣوﯾل‬
‫اول رﻗﻣﺎن ﻓﻘط اﻟﻰ ﻗﯾم وﺿرﺑﻬﺎ ﻓﻰ ﻗﯾﻣﺔ اﻟﺧط اﻟﺛﺎﻟث ﻟﻧﺣﺻل ﻋﻠﻰ اﻟﻘﯾﻣﺔ اﻟﻛﻠﯾﺔ ﻟﻠﻣﻘﺎوﻣﺔ‪ ،‬ﺛم ﻧطرح‬
‫اﻟﻘﯾﻣﺔ اﻟﻣﻔﻘودة ﻟﻠﺧط اﻟراﺑﻊ ﻣن اﻟﻘﯾﻣﺔ اﻟﻛﻠﯾﺔ ﻟﻧﻣﺣﺻل ﻋﻠﻰ اﻟﻘﯾﻣﺔ اﻟدﻗﯾﻘﺔ ﻟﻠﻣﻘﺎوﻣﺔ )اﻟﻣﺛﺎل اﻻﺧﯾر(‪.‬‬

‫‪27‬‬
‫‪ARDUINO FROM ZERO TO HERO‬‬

‫اﯾﺿﺎ ﯾﻣﻛن ﻗ راءة ﻗﯾﻣﺔ اﻟﻣﻘﺎوﻣﺔ اﻟﻣﺻﻧوﻋﺔ ﻋﻠﻰ ﺷﻛل ﺷرﯾﺣﺔ ﺣﯾث ﯾوﺟد ﻋﻠﯾﻬﺎ ‪ 3‬ارﻗﺎم‪ ،‬اول رﻗﻣﺎن ﻣن‬
‫ً‬ ‫‪-٣‬‬
‫اﻟﯾﺳﺎر ﯾﺣدد ﻗﯾﻣﺔ اﻟﻣﻘﺎوﻣﺔ‪ ،‬واﺧر رﻗم ﯾﺣدد ﻋدد اﻻﺻﻔﺎر اﻟﺗﺎﻟﯾﺔ ﻻول رﻗﻣﺎن‪ ،‬ﻣﺛﺎل رﻗم ‪ 103‬ﺗﻌﻧﻰ ان ﻗﯾﻣﺔ‬
‫اﻟﻣﻘﺎوﻣﺔ ﻫﻰ ‪ 10,000‬اوم‪.‬‬

‫)‪(Multimeter‬‬ ‫ﻣﺘﻌﺪد اﻟﻘﯿﺎس‬


‫ﻫو اداة اﻟﻘﯾﺎس اﻻﺳﺎﺳﯾﺔ اﻟﺗﻰ ﻻ ﻏﻧﻰ ﻋﻧﻬﺎ ﻓﻰ ﻋﻣﻠﻧﺎ‪ ،‬ﺣﯾث ﯾﺳﺗﺧدم ﻓﻰ ﻗﯾﺎس ﻗﯾﻣﺔ اﻟﻣﻘﺎوﻣﺔ واﻟﻔوﻟت واﻟﺗﯾﺎر‬
‫اﻟﻣﺳﺗﻣر واﻟﺗﯾﺎر اﻟﻣﺗﻐﯾر وﻏﯾرﻫﺎ اﻟﻛﺛﯾر ﻣن اﻟﻘﯾﺎﺳﺎت طﺑﻘﺎ ﻟﻣواﺻﻔﺎت ٕواﻣﻛﺎﻧﯾﺎت ﻫذا اﻟﺟﻬﺎز‪ ،‬وﯾﺟب اﺧﺗﯾﺎر ﻧوع ﺟﯾد‬
‫ﻗﺑل اﻟﺷراء ﻻﻧﻪ ﻣﻬم ﺟدا ﻟﻠﺣﺻول ﻋﻠﻰ ﻧﺗﺎﺋﺞ ﺻﺣﯾﺣﺔ ﻟﺿﻣﺎن اﻟوﺻول اﻟﻰ اﻓﺿل اﻟﻧﺗﺎﺋﺞ‬

‫ﻗﯿﻤﺔ اﻟﻄﺎﻗﺔ‬
‫ﻧﻼﺣظ ان اﻟﻣﻘﺎوﻣﺔ ﺗﺳﺗﺧدم ﻟﺗﻘﻠﯾل ﻣرور اﻟﺗﯾﺎر اﻟﻛﻬرﺑﻰ داﺧل اﻟﺳﻠك اﻟﻣﻌدﻧﻰ ﻟﻠﺣﺻول ﻋﻠﻰ ﺗﯾﺎر ﻣﻌﯾن ﯾﻧﺎﺳب‬
‫اﻟﻣﻛوﻧﺎت اﻟﻛﻬرﺑﯾﺔ اﻟﻣﺧﺗﻠﻔﺔ داﺧل اﻻﺟﻬزة‪ ،‬ﻟﻬذا ﻧﺟد ان اﻟﻣﻘﺎوﻣﺔ ﺗﺗﺣﻣل ﺗﯾﺎر ﻛﻬرﺑﻰ ﻣن اﻟﻣﺻدر ﻟﺗﻘﻠﯾﻠﻪ ﻣﻣﺎ ﯾﻧﺗﺞ‬
‫ﻋﻧﻪ ﺣ اررة ﻗد ﺗؤدى اﻟﻰ ﺗﻠف ﻫذﻩ اﻟﻣﻘﺎوﻣﺔ‪ ،‬وﻟزﯾﺎدة ﻋﻣر ﻫذﻩ اﻟﻣﻘﺎوﻣﺔ ﯾﺗم زﯾﺎدة ﺣﺟم اﻟﻣﻘﺎوﻣﺔ ﻟﻣﻧﻊ اﺣﺗراﻗﻬﺎ ﻟﻬذا ﻧﺟد‬
‫ﻋﻼﻗﺔ ﺑﯾن اﻟﻣﻘﺎوﻣﺔ وﻗﯾﻣﺔ اﻟطﺎﻗﺔ واﻟﺗﯾﺎر واﻟﻔوﻟت‪ ،‬ﻓﻛﻠﻣﺎ زاد اﻟﺗﯾﺎر واﻟﻔوﻟت اﻟداﺧل اﻟﻰ اﻟﻣﻘﺎوﻣﺔ زاد ﺣﺟم اﻟﻣﻘﺎوﻣﺔ‪.‬‬
‫اﻟﻣﺛﺎل اﻟﺗﺎﻟﻰ ﯾﺣﺗوى ﻋﻠﻰ ﻣﻘﺎوﻣﺔ ﻗﯾﻣﺔ اﻟطﺎﻗﺔ اﻟﺗﻰ ﯾﻣﻛن ان ﺗﺗﺣﻣﻠﻬﺎ ‪ 5‬وات‬

‫‪28‬‬
‫‪ARDUINO FROM ZERO TO HERO‬‬

‫اﻟﻠﯿﺪ )‪(LED = Ligt-Emitting Diode‬‬


‫ﺟﻬﺎز ﺻﻐﯾر اﻟﺣﺟم ﯾﺣول اﻟﻛﻬرﺑﺎء اﻟﻰ ﺿؤ‪ ،‬وﺗﺟدﻩ ﻣﺳﺗﺧدم ﺗﻘرﯾﺑﺎ ﻓﻰ ﻛل اﻻﺟﻬزة اﻻﻟﻛﺗروﻧﯾﺔ‪ ،‬ﻣﺛﺎل اﻟﺗﻠﯾﻔزﯾون‬
‫واﻟﻛﻣﺑﯾوﺗر واﻻﺑﺗوب واﻟراوﺗر وﻏﯾرﻩ ﺣﯾث اﻧﻪ ﻗﺎدر ﻋﻠﻰ اﻟﻌﻣل اﻟﻰ اﻻف اﻟﺳﺎﻋﺎت دون ان ﯾﺗﻠف‪.‬‬

‫ﯾوﺟد ﻣﻧﻪ اﺷﻛﺎل واﻟوان وﻣﻘﺎﺳﺎت ﻣﺧﺗﻠﻔﺔ ﻻﻧﻪ ﯾﺳﺗﺧدم ﻋﻠﻰ ﻧطﺎق واﺳﻊ ﺟدا ﻓﻰ اﻻﺟﻬزة اﻻﻟﻛﺗروﻧﯾﺔ وﻻﯾوﺟد ﺑﯾت‬
‫ﺧﺎﻟﻰ ﻣن اﻟﻠﯾد‪.‬‬

‫اﻟﺗﯾﺎر اﻟﻛﻬرﺑﻰ ﯾﻣر داﺧل اﻟﻠﯾد ﻓﻰ اﺗﺟﺎﻩ واﺣد ﻓﻘط ﻟﻬذا ﯾﺟب اﻟﺣذر ﻋﻧد ﺗوﺻﯾﻠﻪ اطراﻓﻪ ﻟﺗﺟﻧب إﺣﺗراﻗﻪ‪ ،‬اﻟطرف‬
‫اﻟﻣوﺟب ﯾﺳﻣﻰ )‪ (Anode‬اﻣﺎ اﻟطرف اﻟﺳﺎﻟب ﯾﺳﻣﻰ )‪ ،(Cathode‬وﻟﺗﻣﯾﯾز اﻟطرﻓﺎن ﻓﻧﺟد اﻟطرف اﻟﻣوﺟب اطول ﻣن‬
‫اﻟطرف اﻟﺳﺎﻟب‬

‫اﻟﻠﯿﺪ واﻟﻤﻘﺎوﻣﺔ‬
‫ﺳوف ﻧﺳﺗﺧدم اﻟﻠﯾد ﻛﺛﯾ ار ﺧﻼل ﻫذا اﻟﻛﺗﺎب ﻣﻊ اﻻردوﯾﻧو‪ ،‬واﻟﻠﯾد اﻟﻣﺳﺗﺧدم ﯾﺣﺗﺎج اﻟﻰ ‪ 1.7‬ﻓوﻟت وﺗﯾﺎر ‪،5:7 mA‬‬
‫وﺑﻧﻔس اﻟوﻗت ﻧﺟد ان اﻻردوﯾﻧو ﯾﻧﺗﺞ ‪ 5‬ﻓوﻟت وﺗﯾﺎر ‪ ،40mA‬ﻟﻬذا ﺳوف ﻧﺣﺗﺎج اﻟﻰ ﺗﻘﻠﯾل ﻗﯾم اﻟﺗﯾﺎر! ﻫﻧﺎ ﯾظﻬر دور‬
‫اﻟﻣﻘﺎوﻣﺔ اﻟﺗﻰ ﺗم ﺷرﺣﻬﺎ ﻣﻧذ ﻗﻠﯾل‪ ،‬ﻟﻛن ﻣﺎﻫﻰ ﻗﯾﻣﺔ اﻟﻣﻘﺎوﻣﺔ اﻟﻣﻧﺎﺳﺑﺔ اﻟﺗﻰ ﺗﺳﻣﺢ ﺑﻣرور ‪ 5‬ﻓوﻟت وﺧروج ‪1.7‬ﻣﻠﻰ‬
‫ﻓوﻟت؟‬
‫اﻻﺟﺎﺑﺔ ﻧﺟدﻫﺎ ﻣن ﺧﻼل ﻗﺎﻧون ﺷﻬﯾر ﺟدا ﺳوف ﻧﺳﺗﺧدﻣﻪ داﺋﻣﺎ وﻫو ﻗﺎﻧون اوم‬

‫‪R = (Vs − Vf) ÷ I‬‬

‫ﺣﯾث ان‪:‬‬

‫‪ :R‬ﻫﻰ ﻗﯾﻣﺔ اﻟﻣﻘﺎوﻣﺔ اﻟﻣراد اﻟﺣﺻول ﻋﻠﯾﻬﺎ‬

‫‪29‬‬
‫‪ARDUINO FROM ZERO TO HERO‬‬

‫‪ :Vs‬ﻫﻰ ﻗﯾﻣﺔ اﻟﻔوﻟت اﻟداﺧل‪ ،‬وﻫﻧﺎ ﯾﺳﺎوى ‪ 5‬ﻓوﻟت‪.‬‬

‫‪ :Vf‬ﻫﻰ ﻗﯾﻣﺔ اﻟﻔوﻟت اﻟﺧﺎرج‪ ،‬وﻫﻧﺎ ﻫو ‪ 1.7‬ﻓوﻟت‪.‬‬

‫‪ :I‬ﻫو اﻟﺗﯾﺎر اﻟﻣراد اﻟﺣﺻول ﻋﻠﯾﻪ‪ ،‬وﻫﻧﺎ ﯾﺳﺎوى ‪ ،10mA‬وﻻﺑد ﻣن وﺿﻊ اﻟﻘﯾﻣﺔ ‪ A‬ﻟﻬذا ﺳﺗﻛون ‪0.01A‬‬

‫ﺑﺎﻟﻧﺗﻌوﯾض ﻓﻰ اﻟﻣﻌﺎدﻟﺔ ﻧﺟد اﻟﻧﺗﯾﺟﺔ ﻫﻰ‬

‫‪R = (5-1.7) ÷0.01‬‬

‫‪R = 3.3 ÷ 0.01 = 330 Ω‬‬

‫ﻟﻬذا ﺳوف ﻧﺳﺗﺧدم ﻣﻘﺎوﻣﺔ ﻗﯾﻣﺗﻬﺎ ‪ 330‬اوم‪.‬‬

‫ﻣﻼﺣﻈﺔ‬
‫اﻟﻣﻛوﻧﺎت اﻻﻟﻛﺗروﻧﯾﺔ ﺣﺳﺎﺳﺔ ﺟدا ﻟﻠﺗﯾﺎر اﻟﻛﻬرﺑﻰ وﯾﻣﻛن ان ﺗﺗﻠف ﺑﺳرﻋﺔ ﻓﻰ ﺣﺎﻟﺔ ﺷدة اﻟﺗﯾﺎر ﻟﻬذا ﻣن اﻻﻓﺿل‬
‫اﺳﺗﺧدام ﻗﯾم ﻣﻘﺎوﻣﺔ اﻛﺑر ﻣﻣﺎ ﺗﺣﺻل ﻋﻠﯾﻪ ﻣن اﻟﻣﻌﺎدﻻت )وﻗﺎﯾﺔ ﻓﻘط(‪ ،‬ﻟﻬذا ﺳوف ﻧﺳﺗﺧدم ﻣﻘﺎوﻣﺔ ‪ 560‬اوم ﺑدﻻً ﻣن‬
‫‪ 330‬اوم واﻟﺗﻰ ﺗﻧﺗﺞ ‪ 6mA‬وﻟﯾس ‪ 10mA‬ﻛﻣﺎ ﺳﺑق‪.‬‬

‫ﻟﻮﺣﺔ اﻟﺘﺠﺎرب ‪Breadboard‬‬


‫ﺳوف ﻧﺳﺳﺗﺧدم ﻣﻛوﻧﺎت اﻟﻛﺗروﻧﯾﺔ وﻛﻬرﺑﯾﺔ ﻣﺧﺗﻠﻔﺔ وﺳﯾﺗم ﺗوﺻﯾﻠﻬﺎ ﻣﻌﺎ ﻟﺗﻧﻔﯾذ ﻛل اﻟﻣﺷروﻋﺎت‪ ،‬وﻟﻛﻰ ﯾﺗم اﻟﺗوﺻﯾل‬
‫وﺗﻐﯾﯾر اﻟوﺻﻼت اﻛﺛر ﻣن ﻣرة ﺳوف ﻧﺣﺗﺎج اﻟﻰ ﻟوﺣﺔ ﻣرﻧﺔ ﯾﻣﻛن ﻣن ﺧﻼﻟﻬﺎ ﺗوﺻﯾل اﻟﻣﻛوﻧﺎت اﻻﻟﻛﺗروﻧﯾﺔ ﻣﻌﺎ‬
‫ﺑﺳﻬوﻟﺔ‪ ،‬ﺛم ﺧﻠﻌﻬﺎ ﻣرة اﺧرى دون اﻟﺣﺎﺟﺔ اﻟﻰ ادوات ﺧﺎﺻﺔ ﻟﻠﺗوﺻﯾل او ﻟﻠﺧﻠﻊ‪ ،‬ﻫﻧﺎ ﯾﺄﺗﻰ دور ﻟوﺣﺔ اﻟﺗﺟﺎرب واﻟﺗﻰ ﺗم‬
‫ﺗﺻﻣﯾﻣﻬﺎ ﻟﺗﻠﺑﻰ ﻛﺎﻓﺔ اﻻﺣﺗﯾﺎﺟﺎت واﻟﺗﻰ ﻻﻏﻧﻰ ﻋﻧﻬﺎ ﻟﻧﺎ ﺟﻣﯾﻌﺎ‪.‬‬

‫‪30‬‬
‫‪ARDUINO FROM ZERO TO HERO‬‬

‫ﺗﺎﺗﻰ ﻟوﺣﺔ اﻟﺗﺟﺎرب ﺑﺄﺷﻛﺎل ﻋدﯾدة واﻟ وان ﻣﺧﺗﻠﻔﺔ واﻻﻛﺛر ﺷﯾوﻋﺎً ﻫو اﻟﻠون اﻻﺑﯾض‪ ،‬وﺗﺟد اﻧﻬﺎ ﺗﺗﻛون ﻣن ﺻﻔوف‬
‫ﻗﺻﯾرة واﻋﻣدة طوﯾﻠﺔ‪ ،‬ﻛل ﺻف او ﻋﻣود ﯾﺣﺗوى ﻋﻠﻰ ﺛﻘوب ﺻﻐﯾرة ﻣﺗﺻﻠﺔ ﻣﻌﺄ‪ ،‬وﻻﯾوﺟد ﺻﻔوف ﻣﺗﺻﻠﺔ ﻣﻊ ﺑﻌﺿﻬﺎ‬

‫وﻟﯾﺗم ﺗوﺻﯾل ﺻف ﻣﻊ اﺧر ﯾﺗم اﺳﺗﺧدام اﺳﻼك ﻧﺣﺎس ذات ﻣﻘﺎﺳﺎت ﻣﺧﺗﻠﻔﺔ ﻛﺎﻟﺗﺎﻟﻰ‬

‫‪31‬‬
‫‪ARDUINO FROM ZERO TO HERO‬‬

‫ﻣﺸﺮوع رﻗﻢ ‪ :1‬ﺗﻮﻟﯿﺪ ﻣﻮﺟﺔ ﺿﻮﺋﯿﺔ‬


‫ﻫدف ﻫذا اﻟﻣﺷروع ﻫو ﺗوﻟﯾد ﻣوﺟﺔ ﺿوﺋﯾﺔ ﺑﺎﺳﺗﺧدام ﺧﻣس ﻟﯾدات ذات اﻟوان ﻣﺧﺗﻠﻔﺔ‪ ،‬ﺣﯾث ﯾﺿﺊ اﻟﻠﯾد رﻗم ‪ 1‬ﻟﻣدة‬
‫ﻧﺻف ﺛﺎﻧﯾﺔ ﺛم ﯾﻧطﻔﺊ وﯾﺿﺊ اﻟﻠﯾد رﻗم ‪ 2‬ﻟﻣدة ﻧﺻف ﺛﺎﻧﯾﺔ ﺛم ﯾﻧطﻔﺊ وﯾﺿﺊ اﻟﺗﺎﻟﻰ ﺣﺗﻰ اﻟﺧﺎﻣس وﺗﺗﻛرر ﻫذﻩ‬
‫اﻟﻌﻣﻠﯾﺔ ﺑﺈﺳﺗﻣرار‪ ،‬وﻟﻠﺣﺻول ﻋﻠﻰ اﻓﺿل واﺳرع اﻟﻧﺗﺎﺋﺞ ﺳوف ﻧﺳﺗﺧدم اﻻﺳﻠوب اﻟﻌﻠﻣﻰ ﻓﻰ اﻟﺗﺧطﯾط ﺑﺎﺳﺗﺧدام‬
‫اﻟﺧوارزﻣﯾﺔ ﻛﺎﻟﺗﺎﻟﻰ‬

‫‪ -١‬إﺿﺎءة ﻟﯾد رﻗم ‪.1‬‬


‫‪ -٢‬اﻻﻧﺗظﺎر ﻧﺻف ﺛﺎﻧﯾﺔ‪.‬‬
‫‪ -٣‬إطﻔﺎء ﻟﯾد رﻗم ‪ 1‬ﺛم إﺿﺎءة ﻟﯾد رﻗم ‪.2‬‬
‫‪ -٤‬اﻻﻧﺗظﺎر ﻧﺻف ﺛﺎﻧﯾﺔ‪.‬‬
‫‪ -٥‬إطﻔﺎء ﻟﯾد رﻗم ‪ٕ 2‬واﺿﺎءة ﻟﯾد رﻗم ‪.3‬‬
‫‪ -٦‬وﻫﻛذا ﺗﺗﻛرر اﻟﺧطوات اﻟﺳﺎﺑﻘﺔ ﺣﺗﻰ ﻟﯾد رﻗم ‪ 5‬ﺛم ﻧﺑدأ ﻣن ﺟدﯾد ﻣن اﻟﺧطوة رﻗم ‪ 1‬وﻫﻛذا‪.‬‬

‫ﻣﺘﻄﻠﺒﺎت اﻟﻤﺸﺮوع‬
‫‪ -١‬ﻟﯾد‪ :‬ﻋدد ‪.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‬وﻫﻛذا ﺗﺳﺗﻣر ﺑدون ﺗوﻗف‪.‬‬

‫‪PWM‬‬ ‫ﺗﻐﯿﯿﺮ ﻋﺮض اﻟﻨﺒﻀﺔ‬


‫ﻛﻠﻧﺎ ﻛﻧﺎ وﻣﺎزﻟﻧﺎ ﻧﻠﻌب ﺑﺎﻟﻌﺎب اﻻطﻔﺎل اﻟﺗﻰ ﺗﺳﺗﺧدم اﻟﺑطﺎرﯾﺔ ﻛﺎﻟﺳﯾﺎرات او اﺳﺗﺧدام ﻓﺎﻧوس رﻣﺿﺎن ﺑﺑطﺎ رﯾﺔ وﻏﯾرﻫﺎ‬
‫ﻣن اﻻﻟﻌﺎب‪ ،‬وﺑﻌد ﻓﺗرة ﻣن اﺳﺗﺧدام اى ﻟﻌﺑﺔ ﻧﻼﺣظ اﻧﻧﺎ ﻧرﯾد ﺗﻐﯾﯾر اﻟﺑطﺎرﯾﺔ اﻟﻣﺳﺗﺧدﻣﺔ ﺑﺎﺧرى ﺟدﯾدة‪ ،‬ﻫذا ﯾوﺿﺢ ﻟﻧﺎ‬
‫اﻣران ﻏﺎﯾﺔ ﻓﻰ اﻻﻫﻣﯾﺔ اﻟﻌﻠﻣﯾﺔ‪:‬‬

‫‪ -١‬ﺿﻌف اﻟﺑطﺎرﯾﺔ‪ :‬وﻫو ﻧﺗﯾﺟﺔ ﻹﻧﺧﻔﺎض اﻟﻔوﻟت )اﻟﺿﻐط( ﺑﯾن طرﻓﻰ اﻟﺑطﺎرﯾﺔ ﻣﻣﺎ ﯾﻘﻠل ﻣن ﻣرور اﻟﺗﯾﺎر‬
‫اﻟﻛﻬرﺑﻰ داﺧل اﻟﻠﻌﺑﺔ واﻟذى ﯾﻧﺗﺞ ﻋﻧﻪ ﺑطء ﺣرﻛﺔ اﻟﻠﻌﺑﺔ او ﺿﻌف اﻻﺿﺎءة )ﺗﺣدﺛﻧﺎ ﻓﻰ ﻫذا اﻟﻔﺿل ﻋن‬
‫اﻟﻔوﻟت واﻧﻪ اﻟﻣﺳؤل ﻋن ﻣرور اﻟﺗﯾﺎر اﻟﻛﻬرﺑﻰ وﻛﻠﻣﺎ زاد اﻟﻔوﻟت زاد ﻣرور اﻟﺗﯾﺎر اﻟﻛﻬرﺑﻰ واﻟﻌﻛس ﺻﺣﯾﺢ(‪.‬‬

‫‪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‬ﺑﺟوارﻫﺎ وﻫو )~(‪.‬‬

‫ﻟﻠﺗﺣﻛم ﻓﻰ ﻋرض اﻟﻣوﺟﺔ ﯾﺗم ﻣن ﺧﻼل اﻻﻣر اﻟﺗﺎﻟﻰ‬


‫)‪analogWrite(x, y‬‬

‫ﺣﯾث ان ‪ x‬ﻫو رﻗم اﻟطرف ﺑﺎﻻردوﯾﻧو اﻣﺎ ‪ y‬ﻫﻰ ﻗﯾﻣﺔ ﻋرض اﻟﻣوﺟﺔ واﻟﺗﻰ ﺗﺗراوح ﻣن ‪ (0%) 0‬اﻟﻰ ‪،(100%) 255‬‬
‫ﺣﯾث ان ﻫذﻩ اﻻطراف ﺗﺳﺗﺧدم ‪ 8‬ﺑت واﻟﺗﻰ ﺗﺳﺎوى ﺑﺎﻟﻧظﺎم اﻟﻌﺷرى ‪ 0‬اﻟﻰ ‪.255‬‬

‫‪PWM‬‬ ‫اﻟﻤﺸﺮوع ‪ :2 #‬إﺳﺘﺨﺪام‬


‫ﺣﯾث ﺳﯾﺗم ﺗوﺻﯾل ﻟﯾد ﻟﻠطرف ‪) 3‬ﻣﺗواﻓق ﻣﻊ ‪ (pwm‬ﺛم ﯾﺗم ﺗﻐﯾﯾر طول اﻟﻣوﺟﺔ ﻣن ‪ 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‬‬

‫ﻣﻼﺣظﺔ‪ :‬ﯾﺟب ﻗراءة دﻟﯾل اﺳﺗﺧدام اﻟﺗرازﺳﺗور ﻗﺑل اﺳﺗﺧداﻣﻪ ﺣﯾث ﯾوﺟد ﺑﻌض اﻻﺧﺗﻼف ﻓﯾﻣﺎ ﺑﯾﻧﻬم طﺑﻘﺎ ﻟﻣودﯾل‬
‫اﻟﺗراﻧزﺳﺗور‪.‬‬

‫)‪(Diode‬‬ ‫ﻣﻮﺣﺪ اﺗﺠﺎه اﻟﺘﯿﺎر‬


‫ﺑﻌض اﻻوﻗﺎت ﻧرﯾد ان ﯾﻣر اﻟﺗﯾﺎر ﻓﻰ اﺗﺟﺎﻩ واﺣد ﻓﻘط ﻟﻣﻧﻊ ﺗﻠف اى ﻣن اﻟﻣﻛوﻧﺎت اﻟﻛﺗروﻧﯾﺔ ﻟو ﻣر ﻓﯾﻬﺎ اﻟﺗﯾﺎر ﻓﻰ‬
‫اﻻﺗﺟﺎﻩ اﻟﻣﻌﺎﻛس‪ ،‬وﻫذا ﯾﺗم ﻣن ﺧﻼل إﺳﺗﺧدام ﻣوﺣد اﺗﺟﺎﻩ اﻟﺗﯾﺎر ‪) diode‬ﺳوف ﻧﺳﺗﺧدﻣﻪ ﻓﻰ ﻓﺻل اﻟﻣواﺗﯾر ﻟﻣﻧﻊ‬
‫ﻣرور اﻟﺗﯾﺎر ﻓﻰ اﻻﺗﺟﺎﻩ اﻟﻣﻌﺎﻛس ﻟﻌدم ﺗوﻟﯾد ﻣﺟﺎل ﻣﻐﻧﺎطﯾﺳﻰ ﯾؤﺛر ﻋﻠﻰ ﺳﻼﻣﺔ اﻻردوﯾﻧو(‬

‫‪38‬‬
‫‪ARDUINO FROM ZERO TO HERO‬‬

‫‪Relay‬‬ ‫اﻟﻤﺮﺣﻞ‬
‫ﯾﺳﺗﺧدم ﻣﺛل اﻟﺗراﻧزﺳﺗور ﻟﻛن ﯾﺗﻌﺎﻣل ﻣﻊ ﺗﯾﺎر اﻋﻠﻰ ﻣﺛل ‪ 220v‬ﻟﻣﻧﻊ ﺗﻠف اﻻردوﯾﻧو‪ ،‬وﯾﺗﻛون ﻣن ﺧﻣس اطراف‪،‬‬
‫طرﻓﺎن ﻟﻠﺗﯾﺎر اﻟﺻﻐﯾر اﻟﺧﺎص ﺑﺎﻻردوﯾﻧو وﺛﻼث اطراف ﻟﻠﺗﺣﻛم ﻓﻰ اﻟﺗﯾﺎر اﻟﻛﺑﯾر‪ ،‬ﯾﻘوم ﺑﺈﺻدار ﺻوت ﻋﻧدﻣﺎ ﯾﻌﻣل‬
‫ﻧﺗﯾﺟﺔ ﺗﺣرك ﯾد ﺗوﺻﯾل اﻟﺗﯾﺎر اﻟﻛﺑﯾر او ﻓﺻﻠﻪ‬

‫ﻣﺎذ ﺑﻌﺪ!‬
‫ﻟﻘد ﺗم اﻻﻧﺗﻬﺎء ﻣن اﻟﻔﺻل اﻟﺛﺎﻟث واﻟذى ﺗم ﻓﯾﻪ إﺳﺗﻌراض اﺳﺎﺳﯾﺎت اﻟﻛﻬرﺑﺎء واﻫم اﻟﻣﻛوﻧﺎت اﻻﻟﻛﺗروﻧﯾﺔ اﻟﺗﻰ ﺳﯾﺗم‬
‫اﺳﺗﺧداﻣﻬﺎ ﺧﻼل اﻟﻣﺷروﻋﺎت ﻓﻰ ﻫذا اﻟﻛﺗﺎب‪ ،‬واﯾﺿﺎ ﺗم ﺷرح ‪ 3‬ﻣﺷروﻋﺎت ﺟدﯾدة ﻛﺗطﺑﯾق ﻟﻠﻣﻛوﻧﺎت اﻻﻟﻛﺗروﻧﯾﺔ‬
‫واﻟﻣﻌﻠوﻣﺎت اﻟﺟدﯾدة ﻓﻰ ﻫذا اﻟﻔﺻل‪ ،‬ﻣﻊ ﻣﻌرﻓﺔ اﻻﺳﻠوب اﻟﻌﻠﻣﻰ ﻟﺑرﻣﺟﺔ اﻟﻣﺗﺣﻛم اﻟدﻗﯾق وﻛﯾﻔﯾﺔ ﺗﻠﺧﯾص اﻻواﻣر‬
‫اﻟﺑرﻣﺟﯾﺔ ﻣﻊ اﻟﺣﺻول ﻋﻠﻰ ﻧﻔس اﻟﻧﺗﺎﺋﺞ اﻟﻣطﻠوﺑﺔ‪.‬‬

‫ﻓﻰ اﻟﻔﺻل اﻟ ارﺑﻊ ﺳﺗﺟد اﻟﻣزﯾد ﻣن اﻟﻣﺗﻌﺔ واﻟﺗﺷوﯾق ﻣن ﺧﻼل ﺗطﺑﯾق ﺑراﻣﺞ اﻛﺛر واﻗﻌﯾﺔ ﻓﻰ ﺣﯾﺎﺗﻧﺎ اﻟﯾوﻣﯾﺔ ﻣﺛل ﻋﻣل‬
‫إﺷﺎرة ﻣرور‪ ،‬وﻗﯾﺎس درﺟﺔ اﻟﺣ اررة‪ ،‬واﺧﺗﺑﺎر ﻣﺳﺗوى ﺷﺣن اﻟﺑطﺎرﯾﺔ وﻏﯾرﻫﺎ ﻣن اﻟﺑراﻣﺞ اﻟﻣذﻫﻠﺔ‪ ،‬ﻫل اﻧت ﻣﺳﺗﻌد‪ ،‬ﻫﯾﺎ‬
‫ﺑﻧﺎ اﻻن‪...‬‬

‫‪39‬‬
‫‪ARDUINO FROM ZERO TO HERO‬‬

‫‪4‬‬
‫ﺗﺼﻤﯿﻢ وﺗﻨﻔﯿﺬ ﻣﺸﺮوﻋﺎت ﺣﻘﯿﻘﯿﺔ‬

‫ﻓﻰ ﻫذا اﻟﻔﺻل ﺳﻧﺗﻌرف اﻛﺛر ﻋﻠﻰ اﻻردوﯾﻧو وﻣزﯾد ﻣن اﻟﻌﻧﺎﺻر اﻻﻟﻛﺗروﻧﯾﺔ‪ ،‬وﻛﯾف ﯾﻣﻛن ﻗراءة اﻟﺗﺻﻣﯾم اﻟﻬﻧدﺳﻰ‬
‫اﯾﺿﺎ اﻧواع اﻻﺷﺎرات اﻟﻛﻬرﺑﯾﺔ اﻟﺗﻰ ﯾﻣﻛن اﻟﺗﻌﺎﻣل ﻣﻌﻬﺎ‪ .‬ﺛم ﻧﻧﺗﻘل اﻟﻰ ﻛﯾﻔﯾﺔ ﺗﺧزﯾن اﻟﻣﺗﻐﯾرات‬
‫ﻟﻠدواﺋر اﻻﻟﻛﺗروﻧﯾﺔ‪ ،‬و ً‬
‫داﺧل اﻻردوﯾﻧو وﺗﻧﻔﯾذ اﻟﻌﻣﻠﯾﺎت اﻟﺣﺳﺎﺑﯾﺔ واﻟﻣﻧطﻘﯾﺔ ﻣﻊ اﻟﺗطﺑﯾق اﻟﻌﻣﻠﻰ ﻟﻬذﻩ اﻟﻣﻌﻠوﻣﺎت اﻟﺟدﯾدة‪.‬‬

‫‪schematic diagrams‬‬ ‫اﻟﺘﺼﻤﯿﻤﺎت اﻟﮭﻨﺪﺳﯿﺔ‬


‫ﻟﺗﺳﻬﯾل ﺗﺻﻣﯾم وﺗﻧﻔﯾذ اﻟﻣﺷروﻋﺎت ﺑﺎﻻردوﯾﻧو‪ ،‬ﯾﺗم ﻋﻣل ﺗﺻﻣﯾم ﻣﺑدئ ﻟﻠﻣﻛوﻧﺎت واﻟﻌﻧﺎﺻر اﻻﻟﻛﺗروﻧﯾﺔ اﻟﺗﻰ ﺳﯾﺗم‬
‫ﺗوﺻﯾﻠﻬﺎ ﻣﻌﺎً ﻟﻠﺗﺄﻛد ﻣن ﺻﺣﺔ اﻟﻣﺷروع وﺗﺳﻬﯾل ﺗﻌدﯾﻠﻪ ﻗﺑل واﺛﻧﺎء اﻟﺗﻧﻔﯾذ‪ ،‬وﻗد اﺳﺗﻌرﺿﻧﺎ ﺗﺻﻣﯾم ﻫﻧدﺳﻰ ﻟﻣﺷروع‬
‫ﺧﻣس ﻟﯾدات ﺑﺎﻻردوﯾﻧو ﺑﺎﻟﻔﺻل اﻟﺛﺎﻟث‪ ،‬ﻟﻛن ﻫذا اﻟﺗﺻﻣﯾم اﻟﻬﻧدﺳﻰ ﻣﻊ ﺳﻬوﻟﺗﻪ ﺳوف ﯾزداد ﺻﻌوﺑﺔ ﺑزﯾﺎدة ﻋدد‬
‫اﻟﻌﻧﺎﺻر اﻻﻟﻛﺗروﻧﯾﺔ اﻟﻣﺗﺻﻠﺔ ﺑداﺧﻠﻪ ﻻﻧﻪ ﯾﻌرض ﺻور اﻻردوﯾﻧو واﻟﻌﻧﺎﺻر اﻻﻟﻛﺗروﻧﯾﺔ ﻛﻣﺎ ﻫﻰ‪ ،‬وﻟﺗﺳﻬﯾل ﻗراءة‬
‫اﻟﺗﺻﻣﯾم اﻟﻬﻧدﺳﻰ ﻟﻠﻣﺷروﻋﺎت ﺗم ﻋﻣل اﺷﻛﺎل ﻫﻧدﺳﯾﺔ ‪ schematic diagrams‬ﻛرﻣوز ﻟﻠﻌﻧﺎﺻر اﻻﻟﻛﺗروﻧﯾﺔ )ﻛل‬
‫ﻋﻧﺻر اﻟﻛﺗروﻧﻰ ﻟﻪ ﺷﻛل ﻫﻧدﺳﻰ( ﻟﯾﺻﺑﺢ ﺗﺻﻣﯾم وﻗراءة اﻻﺷﻛﺎل اﻟﻬﻧدﺳﯾﺔ اﻛﺛر ﺳﻬوﻟﺔ‪ .‬دﻋﻧﺎ ﻧﺗﻌرف ﻋﻠﻰ اﻻﺷﻛﺎل‬
‫اﻟﻬﻧدﺳﯾﺔ ﻟﻛل اﻟﻌﻧﺎﺻر اﻻﻟﻛﺗروﻧﯾﺔ ﻗﺑل اﻟﺑدء ﻓﻰ ﻗراءة ﻫذﻩ اﻻﺷﻛﺎل اﻟﻬﻧدﺳﯾﺔ‪.‬‬

‫‪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µ‬ﻛﻣﺎ ﺑﺎﻟﺻورة اﻟﺳﺎﺑﻘﺔ‪.‬‬

‫ﺗﻌﻠﻣﻧﺎ ﺳﺎﺑﻘﺎً ﻛﯾف ﯾﻣﻛن إﺿﺎءة ﻟﯾدات ﻣﺗﺻﻠﺔ ﺑﺎﻻردوﯾﻧو ﻣن ﺧﻼل إﺧ ارج ﺗﯾﺎر ﻛﻬرﺑﻰ او إطﻔﺎء اﻟﻠﯾد ﺑﺈﯾﻘﺎف‬
‫ﻫذا اﻟﺗﯾﺎر‪ ،‬ﻟﻛن اﻻن ﻧرﯾد ﺗﻌﻠم ﻛﯾف ﯾﻣﻛن إﺳﺗﻘﺑﺎل ﺗﯾﺎر ﻛﻬرﺑﻰ ﻣن ﺧﺎرج اﻻردوﯾﻧو واﻟﺗﻌﺎﻣل ﻣﻌﻪ طﺑﻘﺎ‬
‫ﻟﻠﺷروط اﻟﻣوﺟودة ﻣﺳﺑﻘﺎً‪.‬‬

‫إﺳﺘﻘﺒﺎل إﺷﺎرات اﻟﺪﯾﺠﯿﺘﺎل‬


‫ﯾﻣﻛن ﻻطراف اﻻردوﯾﻧو إﺳﺗﻘﺑﺎل اﺷﺎرت دﯾﺟﯾﺗﺎل ﺧﺎرﺟﯾﺔ واﻟﺗﻌﺎﻣل ﻣﻌﻬﺎ‪ ،‬ﻣﺛﺎل اﻟﺗﻌرف ﻋﻠﻰ ﺣﺎﻟﺔ ﻣﻔﺗﺎح‬
‫ﻣﺗﺻل ﺑﺎﻻردوﯾﻧو ﻫل اﻟﻣﻔﺗﺎح ﻣﻐﻠق ام ﻻ؟ ﺣﯾث ان اﻟﻔﻛرة اﻟرﺋﯾﺳﯾﺔ ﻫﻰ ﻫل اﻟﻣﻔﺗﺎح ﯾﻌطﻰ ﻗﯾﻣﺔ ‪ 0‬او ‪5‬‬
‫ﻓوﻟت )ﻫﻰ ﻧﻔس اﻟﻘﯾم اﻟﻣﺳﺗﺧدﻣﺔ ﻓﻰ اﻟﺑراﻣﺞ اﻟﺳﺎﺑق ﺷرﺣﻬﺎ ‪.(HIGH or LOW‬‬
‫ﺳوف ﻧﺳﺗﺧدم ﻣﻔﺗﺎح ﻟﻐﻠق وﻓﺗﺢ اﻟداﺋرة اﻟﻛﻬرﺑﯾﺔ ﻟﻣرور ﺗﯾﺎر ﻛﻬرﺑﻰ ﻓﻰ ﺣﺎﻟﺔ ﺿﻐط اﻟﻣﻔﺗﺎح او ﻣﻧﻊ ﻣرور‬
‫اﻟﺗﯾﺎر اﻟﻛﻬرﺑﻰ ﻓﻰ ﺣﺎﻟﺔ ﻋدم ﺿﻐط اﻟﻣﻔﺗﺎح‬

‫ﻋﻧدﻣﺎ ﯾﺗم ﺿﻐط اﻟﻣﻔﺗﺎح ﻓﻰ اﻟﺻورة اﻟﺳﺎﺑﻘﺔ ﯾﺗم ﺗوﺻﯾل اﻟﺳف رﻗم ‪ 23‬ﻣﻊ اﻟﺻف رﻗم ‪ ،25‬ﻣﻣﺎ ﯾﻌﻧﻰ ﻏﻠق‬
‫اﻟداﺋرة وﻣرور اﻟﺗﯾﺎر اﻟﻛﻬرﺑﻰ‪ ،‬واﻟﺷﻛل اﻟﻬﻧدﺳﻰ ﻟﻠﻣﻔﺗﺎح ﯾﻛون ﻫﻛذا‬

‫‪46‬‬
‫‪ARDUINO FROM ZERO TO HERO‬‬

‫ﻋﻧد ﺿﻐط اﻟﻣﻔﺗﺎح ﻓﯾﺗم ﺗﺣرﯾك اﻟﺳﻠك ﺑﯾن اﻟطرﻓﺎن ﻓﺗﻧﻐﻠق اﻟداﺋرة وﯾﻣر اﻟﺗﯾﺎر اﻟﻛﻬرﺑﻰ ﻣن ﺧﻼل اﻟﻣﻔﺗﺎح‪،‬‬
‫ﯾﺗم اﻻﺷﺎرة اﻟﻰ اﻟﻣﻔﺗﺎح ﻓﻰ اﻻﺷﻛﺎل اﻟﻬﻧدﺳﯾﺔ ﺑﺎﻟرﻣز ‪.S‬‬

‫اﻟﻜﮭﺮﺑﻰ )‪(Bouncing‬‬ ‫إرﺗﺪاد اﻟﻤﻔﺘﺎح‬


‫ﻻﺣظ اﻟﻌﻠﻣﺎء اﻧﻪ ﻋﻧد ﺗرك اﻟﻣﻔﺗﺎح وﻓﺗﺢ اﻟداﺋ رة اﻟﻛﻬرﺑﯾﺔ ﺗﺣدث ظﺎﻫرة ﻏرﯾﺑﺔ ﺧﻼل اﻟﻣﻠﻰ ﺛﺎﻧﯾﺔ‪ ،‬ﺣﯾث ﯾﻘوم‬
‫اﻟﻣﻔﺗﺎح ﺑﺎﻻرﺗداد )ﻓﺗﺢ وﻏﻠق( اﻛﺛر ﻣن ﻣرة ﻧﺗﯾﺟﺔ وﺟود ﺻﻔﺎﺋﺢ ﻣﻌدﻧﯾﺔ داﺧل اﻟﻣﻔﺗﺎح ﺗرﺗد ﺑﺳرﻋﺔ ﺟدا ﻋﻧد‬
‫ﻓﺗﺢ او ﻏﻠق اﻟﻣﻔﺗﺎح ﻣﻣﺎ ﯾؤدى اﻟﻰ ﺗوﺻﯾل واﻧﻘطﺎع اﻟﺗﯾﺎر اﻟﻛﻬرﺑﻰ ﻋدة ﻣرات ﻗﺑل ان ﯾﺛﺑت اﻟﻣﻔﺗﺎح ﻋﻠﻰ‬
‫اﻟﺣﺎﻟﺔ اﻻﺧﯾرة‪ ،‬ﻫذا اﻻرﺗداد ﺗم ﻗﯾﺎﺳﻪ ﻣن ﺧﻼل اﻻوﻟﯾﺳﻛوب )ﺟﻬﺎز إظﻬﺎر ﺷﻛل اﻟﻣوﺟﺔ ﺧﻼل ﻓﺗ رة زﻣﯾﻧﺔ‬
‫ﻣﻌﯾﻧﺔ( ﺧﻼل اﻟﻣﻠﻰ ﺛﺎﻧﯾﺔ‪ ،‬ﺣﯾث ﯾظﻬر ﻓﻰ اﻟﺻورة اﻟﺗﺎﻟﯾﺔ إرﺗداد اﻟﻣﻔﺗﺎح ﻣرﺗﺎن ‪ B + C‬ﺑﻌد ﻏﻠق اﻟﻣﻔﺗﺎح‬

‫ﺣﯾث اﻧﻪ ﻛﺎن ﻣن اﻟﻣﻔﺗرض ﺛﺑوت اﻟﻣﻔﺗﺎح ﻋﻧد اﻟﻧﻘطﺔ ‪) A‬ﻻ ﺗﯾﺎر( ﻟﻛن ﺗم رﺟوع اﻟﻣﻔﺗﺎح اﻟﻰ وﺿﻊ إﺗﺻﺎل‬
‫اﻟداﺋرة ﺑﯾن ‪ A,B‬ﺛم ﻣرة اﺧرى ﺑﯾن ‪ B,C‬وﻫذا اﻻرﺗداد ﯾﻣﻛن ان ﯾؤدى اﻟﻰ ﺗﻠف اﻟﻌﻧﺎﺻر اﻻﻟﻛﺗروﻧﯾﺔ ﻻﻧﻬﺎ‬
‫ﺗﺳﺗﻘﺑل ﺗﯾﺎر ﻣﺷوﻩ ﺧﻼل ﻓﺗرة زﻣﻧﯾﺔ ﺻﻐﯾرة ﺟدا ﻗﺑل ﺛﺑوت اﻟﺗﯾﺎر ﻓﻰ اﻟوﺿﻊ اﻟﻧﻬﺎﺋﻰ‪.‬‬

‫‪47‬‬
‫‪ARDUINO FROM ZERO TO HERO‬‬

‫اﻟﻤﺸﺮوع ‪ :3 #‬ادﺧﺎل اﺷﺎرة ﻛﮭﺮﺑﯿﺔ ﻟﻼردوﯾﻨﻮ‬


‫اﻟﻬدف ﻣن ﻫذا اﻟﻣﺷروع ﻫو إﺿﺎءة ﻟﯾد ﻓﻰ ﺣﺎﻟﺔ اﻟﺿﻐط ﻋﻠﻰ ﻣﻔﺗﺎح ﻣﺗﺻل ﺑﺎﻻردوﯾﻧو‪ ،‬وﯾﺗم إطﻔﺎء اﻟﻠﯾد‬
‫ﻓﻰ ﺣﺎﻟﺔ ﻋدم اﻟﺿﻐط ﻋﻠﻰ اﻟﻣﻔﺗﺎح‬

‫اﻟﺨﻮارزﻣﯿﺔ‬
‫‪ -١‬اﻟﺗﺎﻛد ﻣن ان اﻟﻣﻔﺗﺎح ﻗد ﺗم اﻟﺿﻐط ﻋﻠﯾﻪ‪.‬‬
‫‪ -٢‬ﻟو ﺗم اﻟﺿﻐط ﻋﻠﻰ اﻟﻣﻔﺗﺎح‪ ،‬ﺳﯾﺗم إﺿﺎءة اﻟﻠﯾد ﻟﻣدة ﻧﺻف ﺛﺎﻧﯾﺔ‪ ،‬ﺛم ﯾﻧطﻔﺊ وﺗﺗﻛرر طﺎﻟﻣﺎ اﻟﻣﻔﺗﺎح‬
‫ﻣﺿﻐوط ﻋﻠﯾﻪ‪.‬‬
‫‪ -٣‬ﻟو اﻟﻣﻔﺗﺎح ﻏﯾر ﻣﺿﻐوط‪ ،‬ﻻ ﺷﺊ ﯾﺗم ﺗﻧﻔﯾذﻩ‪.‬‬
‫‪ -٤‬ﻛرر اﻟﺧطوات اﻟﺳﺎﺑﻘﺔ ﺑﺈﺳﺗﻣرار‪.‬‬

‫ﻣﺘﻄﻠﺒﺎت اﻟﻤﺸﺮوع‬
‫‪ -١‬ﻣﻔﺗﺎح‪ ،‬ﻋدد‪.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‬ﻟﺗﺳﻬﯾل اﻟﺗﻌﺎﻣل ﻣﻌﻬم داﺧل اﻟﺑرﻧﺎﻣﺞ ﻛﻣﺎ ﻋﻠﻣﻧﺎ ﻣن ﻗﺑل ﻣن ﺧﻼل اﺳﺗﺧدام اﻟﻣﺗﻐﯾرات ﻟﺗﺳﻬﯾل‬
‫ﻛﺗﺎﺑﺔ اواﻣر اﻟﻣﺷروع‪.‬‬

‫ﻗﺮاءة اﻻﺷﺎرات اﻟﻜﮭﺮﺑﯿﺔ‬


‫اﻟطرف رﻗم ‪ 7‬ﯾﺳﺗﺧدم ﻟﻘراءة اﻻﺷﺎرات اﻟﻛﻬرﺑﯾﺔ اﻟﻣدﺧﻠﺔ ﻧﺗﯾﺟﺔ اﻟﺿﻐط ﻋﻠﻰ اﻟﻣﻔﺗﺎح‪ ،‬وﻟﻛﺗﺎﺑﺔ ﺳطر اﻻواﻣر اﻟﺧﺎص‬
‫ﺑﻘراءة اﻹﺷﺎرات اﻟﻛﻬرﺑﯾﺔ اﻟﻣدﺧﻠﺔ ﯾﺗم ﺑﺈﺳﺗﺧدام اﻻﻣر ‪ input‬ﻛﺎﻟﺗﺎﻟﻰ‬

‫‪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‬‬
‫}‬

‫اﻟﻤﺘﻐﯿﺮات اﻟﺒﻮﻟﯿﺎﻧﯿﺔ )‪(Boolean‬‬


‫ﻫﻰ ﻣﺗﻐﯾرات ﺗﺣﻣل ﻧﺗﯾﺟﺔ واﺣدة ﻓﻘط إﻣﺎ ﺻﺣﯾﺣﺔ )‪ (true = 1‬او ﺧطﺎء )‪ ،(false = 0‬ﺣﯾث إﻧﻧﺎ ﻧﺣﺗﺎج ﻓﻰ ﺑﻌض‬
‫اﻟﻣواﻗف اﻟﺣﺻول ﻋﻠﻰ ﻧﺗﯾﺟﺔ واﺣدة إﻣﺎ ﺻﺢ او ﺧطﺄ‪ .‬ﻣﺛل ﻫل اﻟﺳﻣﺎء ﺗﻣطر؟ ﻫل اﻟﻣﻔﺗﺎح ﻣﻐﻠق؟‬

‫ﻣﺛﺎل‪ :‬ﺣﯾث ﻧﺧﺗﺑر ﻫل اﻟﺳﻣﺎء ﺗﻣطر ﻓﯾﻛون ﺳطر اﻻواﻣر ﻫﻛذا‬

‫‪52‬‬
‫‪ARDUINO FROM ZERO TO HERO‬‬

‫) ‪if ( raining == true‬‬


‫{‬
‫‪-------‬‬
‫‪-------‬‬
‫}‬

‫ﻓﻰ ﺣﺎﻟﺔ اﻧﻧﺎ ﻧرﯾد ﻧﻔﻰ اﻟﺷرط ﻟﯾﻛون ﻫل اﻟﺳﻣﺎء ﻻ ﺗﻣطر‪ ،‬ﻓﯾﺗم إﺳﺗﺧدام )=!(‪ ،‬ﻓﯾﻣﻛن ﻛﺗﺎﺑﺔ اواﻣر ﺗﺣﺗوى ﻋﻠﻰ ﺷرطﺎن‬
‫ﺻﯾﻔﺎ‬
‫ً‬ ‫ﻣﺗداﺧﻼن ﻫل اﻟﺳﻣﺎء ﺗﻣطر ﺛم ﺷرط اﺧر ﻫل اﻟﻔﺻل ﻟﯾس‬
‫) ‪if ( raining == true‬‬
‫{‬
‫) ‪if ( summer != true‬‬
‫{‬
‫‪// it is raining and not summer‬‬
‫}‬
‫}‬

‫ﻣﻌﺎﻣﻼت اﻟﻤﻘﺎرﻧﺔ‬
‫ﻧﺳﺗﺧدم اﻟﻣﻘﺎرﻧﺔ ﻓﻰ ﺳطور اﻻواﻣر داﺋﻣﺎً‪ ،‬ﻟﻬذا ﻧﺣﺗﺎج اﻟﻰ ﻣﻘﺎرﻧﺔ ﺑﻌض اﻟﺟﻣل ﻣﻌﺎً ﻟﻠﺣﺻول ﻋﻠﻰ ﻧﺗﺎﺋﺞ ﻣﻌﯾﻧﺔ‪ ،‬ﻣﺛﺎل‬
‫ﻧرﯾد ان ﻧﺗﺄﻛد ﻣن ان اﻟﺳﻣﺎء ﺗﻣطر واﻟﻔﺻل ﺻﯾف‪ ،‬ﻟﻬذا ﺳﻧﺣﺗﺎج اﻟﻰ اﻟﺗﺄﻛد ﻣن ﺻﺣﺔ اﻟﺷرط اﻻول واﻟﺛﺎﻧﻰ ﻟﻬذا‬
‫ﻧﺳﺗﺧدم ﻋﻼﻣﺔ )&&(‪ ،‬اﻣﺎ ﻟو اردﻧﺎ اى ﺷرط ﻣﻧﻬﻣﺎ ان ﯾﺗﺣﻘق دون اﻻﺧر ﻣﺛل اﻟﺳﻣﺎء ﺗﻣطر او اﻟﻔﺻل ﺻﯾف ﻓﯾﺗم‬
‫ذﻟك ﻣن ﺧﻼل ﻋﻼﻣﺔ )||( وﺗﻌﻧﻰ اى ﺷرط ﻣﻧﻬم‪ ،‬اﻣﺎ ﻟو اردﻧﺎ ان ﻧﻘول ﻻﯾﺳﺎوى ﻧﺳﺗﺧدم اﻟﻌﻼﻣﺔ )!( ﻣﺛل اﻟﺳﻣﺎء ﻻ‬
‫ﺗﻣطر‪.‬‬

‫ﻋﻼﻣﺔ ﺻﺣﺔ ﺟﻣﯾﻊ اﻟﺷروط )&&(‬

‫)) ‪if (( raining == true ) && ( !summer‬‬


‫{‬
‫)‪// it is raining and not summer (raining == true and summer == false‬‬
‫}‬

‫ﻋﻼﻣﺔ ﺻﺣﺔ اى ﺷرط ﻣن اﻟﺷروط )||(‬

‫)) ‪if (( raining == true ) || ( summer == true‬‬


‫{‬
‫‪// it is either raining or 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‬‬
‫}‬

‫ﯾﻣﻛن إﺧﺗﺻﺎر اﻟﺳطور اﻟﺳﺎﺑﻘﺔ ﻛﺎﻟﺗﺎﻟﻰ‬ ‫‪-‬‬


‫) ‪if (( snow || rain ) && !hot‬‬
‫{‬
‫‪// it is either snowing or raining and not hot‬‬
‫‪// ( snow is true OR rain is true ) AND it is not hot‬‬
‫}‬

‫اﻟﻤﺸﺮوع ‪ :4 #‬إﺷﺎرة اﻟﻤﺮور‬


‫اﻟﻬدف ﻣن اﻟﻣﺷروع ﻫو ﻋﻣل إﺷﺎرة ﻣرور ﻟﻛوﺑرى ﻋﺑر ﻧﻬر ﯾوﺟد ﺑﻪ ﻣﺳﺎر واﺣد ﻓﻘط‪ ،‬ﺑﺣﯾث ﻻ ﺗﻣر اى ﺳﯾﺎرة ﻗﺑل ان‬
‫ﺗﺗﺄﻛد ان اﻟﻣﺳﺎر ﺧﺎﻟﻰ ٕواﺷﺎرة اﻟﻣرور ﺧﺿراء‪ ،‬اﻣﺎ ﻟو ﻫﻧﺎك ﺳﯾﺎرة ﺗﻌﺑر اﻟﻛوﺑرى ﯾﺗم إﺿﺎءة اﻹﺷﺎرة اﻟﺣﻣراء ﻟﻣﻧﻊ‬
‫ﻣرور اﻟﺳﯾﺎرة ﺣﺗﻰ ﯾﺧﻠوا اﻟﻛوﺑرى ﻣن اﻟﺳﯾﺎرات‪.‬‬

‫اﻟﺨﻮارزﻣﯿﺔ‬
‫‪ -١‬وﺿﻊ ﺛﻼث ﻟﻣﺑﺎت ﺗﺣﻣل اﻟوان اﺷﺎرة اﻟﻣرور ﻓﻰ ﻛل اﺗﺟﺎﻩ ﻣن اﻟﻛوﺑرى‪.‬‬
‫‪ -٢‬ﺟﻌل اﻻوﻟوﯾﺔ ﻟﻠﺳﯾﺎرات ﻓﻰ اﻟﻐرب ﺑﺣﯾث ﺗﻣر وﯾﺑﻘﻰ اﻻﺗﺟﺎﻩ اﻻﺧر ذو اﻟﻠون اﻻﺣﻣر‪.‬‬
‫‪ -٣‬ﻋﻧدﻣﺎ ﺗﺻل اﻟﺳﯾﺎرة اﻟﻰ اﻻﺗﺟﺎﻩ اﻻﺧر )ﻧﺳﺗﺧدم ﻫﻧﺎ ﻣﻔﺗﺎح ﻟﻣﺣﺎﻛﺎة وﺻول اﻟﺳﯾﺎرة( ﯾﺗم ﺗﻐﯾﯾر اﻟوان اﻻﺷﺎرة‬
‫ﻣن اﻻﺧﺿر اﻟﻰ اﻻﺻﻔر ﺛم اﻻﺣﻣر واﻻﻧﺗظﺎر ﻗﻠﯾﻼً ﻟﻠﺗﺄﻛد ﻣن ﺧﻠو اﻟطرﯾق ﻣن اﻟﺳﯾﺎرات‪ ،‬ﺛم ﺗﺣوﯾل ﻟون‬
‫اﻻﺷﺎرة ﻣن اﻻﺣﻣر اﻟﻰ اﻻﺻﻔر ﺛم اﻻﺧﺿر ﻓﻰ اﻻﺗﺟﺎﻩ اﻟﻣﻌﺎﻛس‪.‬‬
‫‪ -٤‬ﺗﺗﻛرر ﻫذﻩ اﻟﺧطوات ﻣرة اﺧرى‪.‬‬

‫ﻣﺘﻄﻠﺒﺎت اﻟﻤﺸﺮوع‬
‫‪ -١‬ﻟﯾد ذو اﻟﻠون اﻻﺣﻣر )ﻟﯾد ‪ 1‬وﻟﯾد ‪ :(2‬ﻋدد ‪.2‬‬
‫‪ -٢‬ﻟﯾد ذو اﻟﻠون اﻻﺻﻔر )ﻟﯾد ‪ 3‬وﻟﯾد ‪ :(4‬ﻋدد ‪.2‬‬
‫‪ -٣‬ﻟﯾد ذو اﻟﻠون اﻻﺧﺿر )ﻟﯾد ‪ 5‬وﻟﯾد ‪ :(6‬ﻋدد ‪.2‬‬
‫‪ -٤‬ﻣﻘﺎوﻣﺔ ﻗﯾﻣﺗﻬﺎ ‪ 650‬اوم‪ ،‬ﻋدد ‪.6‬‬
‫‪ -٥‬ﻣﻘﺎوﻣﺔ ﻗﯾﻣﺗﻬﺎ ‪ 10kΩ‬اوم‪ ،‬ﻋدد ‪.2‬‬
‫‪ -٦‬ﻣﻔﺗﺎح ﻧوع ‪ ،push button‬ﻋدد ‪.2‬‬

‫‪54‬‬
ARDUINO FROM ZERO TO HERO

.1 ‫ ﻋدد‬،‫ ﻟوﺣﺔ ﺗﺟﺎرب‬-٧


.‫ اﺳﻼك ﺗوﺻﯾل ﻟوﺣﺔ اﻟﺗﺟﺎرب ﻣﺧﺗﻠﻔﺔ اﻟﻣﻘﺎﺳﺎت‬-٨
.USB ‫ ﻟوﺣﺔ اردوﯾﻧو ووﺻﻠﺔ‬-٩


‫اﻟﺘﺼﻤﯿﻢ اﻟﮭﻨﺪﺳﻰ‬

‫اﻻﺳﻜﺘﺶ‬
#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

v boolean trafficWest = true; // west = true, east = false


w int flowTime = 10000; // amount of time to let traffic flow
x int changeDelay = 2000; // amount of time between color changes
void setup()
{
// setup digital I/O pins
pinMode(westButton, INPUT);
pinMode(eastButton, INPUT);
pinMode(westRed, OUTPUT);
pinMode(westYellow, OUTPUT);
pinMode(westGreen, OUTPUT);
pinMode(eastRed, OUTPUT);
pinMode(eastYellow, OUTPUT);
pinMode(eastGreen, OUTPUT);
// set initial state for lights - west side is green first
digitalWrite(westRed, LOW);
digitalWrite(westYellow, LOW);
digitalWrite(westGreen, HIGH);
digitalWrite(eastRed, HIGH);
digitalWrite(eastYellow, LOW);
digitalWrite(eastGreen, LOW);
}
void loop()
{
if ( digitalRead(westButton) == HIGH ) // request west>east traffic flow
{
if ( trafficWest != true )
// only continue if traffic flowing in the opposite (east) direction
{
trafficWest = true; // change traffic flow flag to west>east
delay(flowTime); // give time for traffic to flow
digitalWrite(eastGreen, LOW); // change east-facing lights from green
// to yellow to red
digitalWrite(eastYellow, HIGH);
delay(changeDelay);
digitalWrite(eastYellow, LOW);
digitalWrite(eastRed, HIGH);
delay(changeDelay);
for ( int a = 0; a < 5; a++ ) // blink yellow light
{
digitalWrite(westYellow, LOW);
delay(yellowBlinkTime);
digitalWrite(westYellow, HIGH);
delay(yellowBlinkTime);
}
digitalWrite(westYellow, LOW);
digitalWrite(westRed, LOW); // change west-facing lights from red to green
digitalWrite(westGreen, HIGH);
}
}

if ( digitalRead(eastButton) == HIGH ) // request east>west traffic flow


{
if ( trafficWest == true )
// only continue if traffic flow is in the opposite (west) direction
{
trafficWest = false; // change traffic flow flag to east>west
delay(flowTime); // give time for traffic to flow
digitalWrite(westGreen, LOW);
// change west lights from green to yellow to red

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‬‬
‫}‬
‫}‬
‫}‬

‫اﻟﻔﺮق ﺑﯿﻦ اﻻﺷﺎرة اﻟﺪﯾﺠﯿﺘﺎل واﻻﻧﺎﻟﻮج‬


‫ﻟﻘد اﺳﺗﺧدﻣﻧﺎ ﻓﻰ اﻟﻣﺷروﻋﺎت اﻟﺳﺎﺑﻘﺔ اﻻﺷﺎرات اﻟدﯾﺟﯾﺗﺎل واﻟﺗﻰ ﺗﻌﻧﻰ ﻟﻧﺎ إﻣﺎ وﺟود ﺗﯾﺎر )‪ (HIGH = ON = 1‬او ﻻﯾوﺟد‬
‫ﺗﯾﺎر )‪ ،(LOW = OFF = 0‬ﻓﻬﻧﺎ ﯾوﺟد ﻗﯾﻣﺗﺎن ﻓﻘط اﻟﻘﯾﻣﺔ اﻟﻌظﻣﻰ او اﻟﺻﻐرى ﻣﺛل اﻟﻣﻔﺗﺎح اﻟﻛﻬ رﺑﻰ إﻣﺎ ﻣﻐﻠق او‬
‫ﻣﻔﺗوح‪ ،‬وﺻورة اﻻﺷﺎرة اﻟدﯾﺟﯾﺗﺎل ﺗظﻬر ﺑﺎﻟﺷﻛل اﻟﺗﺎﻟﻰ‬

‫اﻣﺎ اﻻﺷﺎرة اﻻﻧﺎﻟوج ﻓﻰ ﺗﺣﺗوى ﻋﻠﻰ ﻗﯾم ﻣﺗﻌددة ﺑﯾن اﻟﻘﯾﻣﺔ اﻟﺻﻐرى واﻟﻘﯾﻣﺔ اﻟﻌظﻣﻰ‪ ،‬ﺣﯾث ﺗﺟد ان درﺟﺔ اﻟﺣ اررة ﻓﻰ‬
‫اﻟﺗرﻣوﻣﺗر ﺗﺗﺣرك ﻣﺎ ﺑﯾن اﻟﻘﯾﻣﺔ اﻟﺻﻐرى واﻟﻌظﻣﻰ‪ ،‬واﯾﺿﺎً ﺳرﻋﺔ اﻟﺳﯾﺎرة ﺗﺗﺣرك ﻣﺎ ﺑﯾن اﻟﻘﯾﻣﺔ اﻟﺻﻐرى واﻟﻌظﻣﻰ‪،‬‬
‫وﯾظﻬر ﺷﻛل اﻻﺷﺎرة اﻻﻧﺎﻟوج ﻛﺎﻟﺗﺎﻟﻰ‬

‫‪57‬‬
‫‪ARDUINO FROM ZERO TO HERO‬‬

‫اﻻردوﯾﻧو ﯾﺣﺗوى ﻋﻠﻰ ‪ 6‬اطراف ﻟﻘراءة اﻻﺷﺎرات اﻻﻧﺎﻟوج‪ ،‬وﺗﻠك اﻻطراف ﻟدﯾﻬﺎ اﻟﻘدرة ﻋﻠﻰ ﺗﺣوﯾل اﻻﺷﺎرات اﻻﻧﺎﻟوج‬
‫اﻟﻰ ﻗﯾم ﺗﺗراوح ﻣن )‪ (0:1023‬واﻟﺗﻰ ﺗﺳﺎوى )‪ (10bits‬ﺑﺎﻟﻧظﺎم اﻟﺛﻧﺎﺋﻰ ﻣن ﺧﻼل اﺳﺗﺧدام ﻣﺣول اﻻﺷﺎرات اﻻﻧﺎﻟوج اﻟﻰ‬
‫دﯾﺟﺗﺎل‪ ،‬ﻓﻬﻧﺎ ﯾﺗم ﺗرﺟﻣﺔ ﻛل ﻧﻘطﺔ ﻣن اﻻﺷﺎرة اﻻﻧﺎﻟوج اﻟﻰ ﻗﯾﻣﺔ ﻣﻘﺎﺑﻠﺔ ﻟﻬﺎ‪ ،‬اﻻطراف اﻻﻧﺎﻟوج ﻓﻰ اﻻردوﯾﻧو ﻫﻰ‬

‫ﯾﻣﻛن ﻛﺗﺎﺑﺔ ﺳطر اﻻواﻣر ﻟﻘراءة ﻗﯾﻣﺔ اﻧﺎﻟوج ﻣن اﻟطرف )‪ (A0‬ﻣن ﺧﻼل اﻻﻣر‬
‫;)‪a = analogRead(0‬‬

‫اﻟﻤﺸﺮوع‪ :5 #‬ﻗﯿﺎس ﻣﺴﺘﻮى ﺷﺤﻦ اﻟﺒﻄﺎرﯾﺔ‬


‫اﻟﻬدف ﻣن اﻟﻣﺷروع ﻫو ﻣﻌرﻓﺔ ﻗﯾﻣﺔ اﻟﻔوﻟت ﻟﻠﺑطﺎرﯾﺔ اﻟﻣﺗﺻﻠﺔ ﺑﺎﻻردوﯾﻧو‪ ،‬ﺣﯾث ان اﻗﺻﻰ ﻗﯾﻣﺔ ﯾﺗم ﺣﺳﺎﺑﻬﺎ ﻫﻰ ‪5‬‬
‫ﻓوﻟت‪ ،‬ﻣﻊ اﻟﻌﻠم ان اﻟﻘﯾﻣﺔ اﻟﺗﻰ ﺳﯾﺗم ﻗﯾﺎﺳﻬﺎ ﻫﻰ ﻓﻰ اﻻﺻل ﻧﺎﺗﺞ ﻗﺳﻣﺔ ‪ 5‬ﻓوﻟت ﻋﻠﻰ ‪ 1023‬ﻻﻧﻬﺎ ﻗﯾﻣﺔ اﻧﺎﻟوج )ﻧﺎﺗﺞ‬
‫اﻟﻘﺳﻣﺔ ﻫو ‪ ،(0.0048‬اى ﻗﯾﻣﺔ ﯾﺗم ﻗراءﺗﻬﺎ ﺳﯾﺗم ﺗﺣوﯾﻠﻬﺎ اﻟﻰ اﻟﻘﯾﻣﺔ اﻻﺻﻠﯾﺔ ﺑﺿرب ﺗﻠك اﻟﻘﯾﻣﺔ ﻓﻰ ‪ ،0.0048‬ﻣﺛﺎل ﺗم‬
‫ﻗراءة ﺑطﺎرﯾﺔ ﺑﻘﯾﻣﺔ ‪ 512‬ﻓﯾﺗم ﺿرب ﺗﻠك اﻟﻘﯾﻣﺔ ﻓﻰ ‪ 0.0048‬ﻓﯾظﻬر اﻟﻧﺎﺗﺞ اﻟﻧﻬﺎﺋﻰ ‪.2.456v‬‬

‫اﻟﺨﻮارزﻣﯿﺔ‬
‫‪ -١‬ﺗوﺻﯾل اﻟﺑطﺎرﯾﺔ ﺑﺎﻟطرف ‪) A0‬اﻧﺎﻟوج(‪.‬‬
‫‪ -٢‬ﻗراءة ﻗﯾﻣﺔ اﻟﺑطﺎرﯾﺔ‪ ،‬ﺛم ﺿرب اﻟﻧﺎﺗﺞ ﻓﻰ ‪ 0.0048‬ﻟﺗﺣوﯾﻠﻬﺎ اﻟﻰ ﻗﯾﻣﺔ اﻟﻔوﻟت اﻟﺣﻘﯾﻘﻰ‪.‬‬
‫‪ -٣‬ﻟو ﻗﯾﻣﺔ اﻟﻘراءة اﻛﺑر ﻣن او ﺗﺳﺎوى ‪ 1.6v‬ﻓﯾﺗم إﺿﺎءة اﻟﻠﯾد اﻻﺧﺿر‪.‬‬

‫‪58‬‬
‫‪ARDUINO FROM ZERO TO HERO‬‬

‫‪ -٤‬ﻟو ﻗﯾﻣﺔ اﻟﻘراءة اﻛﺑر ﻣن ‪ 1.4v‬واﻗل ﻣن ‪ 1.6v‬ﻓﯾﺗم إﺿﺎءة اﻟﻠﯾد اﻻﺻﻔر‪.‬‬


‫‪ -٥‬ﻟو ﻗﯾﻣﺔ اﻟﻘراءة اﻗل ﻣن ‪ 1.4v‬ﻓﯾﺗم إﺿﺎءة اﻟﻠﯾد اﻻﺣﻣر‪.‬‬

‫ﻣﺘﻄﻠﺒﺎت اﻟﻤﺸﺮوع‬
‫‪ -١‬ﻣﻘﺎوﻣﺔ ﻗﯾﻣﺗﻬﺎ ‪ 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);
}
}

‫إﺟﺮاء اﻟﻌﻤﻠﯿﺎت اﻟﺤﺴﺎﺑﯿﺔ ﺑﺈﺳﺘﺨﺪام اﻻردوﯾﻨﻮ‬


‫اﻻردوﯾﻧو ﻟدﯾﻪ اﻟﻘدر ﻋﻠﻰ إﺟراء اﻟﻌﻠﻣﯾﺎت اﻟﺣﺳﺎﺑﯾﺔ ﻣﺛل اﻟﻛﻣﺑﯾوﺗر ﻛﺎﻟﺗﺎﻟﻰ‬
a = 100;
b = a + 20;
c = b - 200;

(Float variables) ‫اﻟﻤﺘﻐﯿﺮات اﻟﻌﺸﺮﯾﺔ‬


‫ ﻟﻬذا ﻋﻧدﻣﺎ ﺗرﯾد ﻣﺗﻐﯾرات ﻟﻬذﻩ اﻻرﻗﺎم‬،(‫ﯾﻣﻛن اﻟﺗﻌﺎﻣل ﻣﻊ اﻻرﻗﺎم اﻟﻌﺷرﯾﺔ )ﯾوﺟد ﺑﻬﺎ ﻓﺎﺻﻠﺔ ﺑﻌد اﻟرﻗم اﻟﺻﺣﯾﺢ‬
3.4028235 × 1038 and −3.4028235 × ) ‫ﻧﺳﺗﺧدم ﻣﺗﻐﯾرات ﻋﺷرﯾﺔ ﺑذاﻛرة اﻻردوﯾﻧو واﻟﺗﻰ ﺗﺗﯾﺢ ﺗﺧزﯾن ارﻗﺎم‬
‫( ﻣﻌﺎ وﺗﺧزﯾن اﻟﻧﺎﺗﺞ ﻓﻰ ﻣﺗﻐﯾر ﻋﺷرى‬int a) ‫( واﺧرى ﺻﺣﯾﺣﺔ‬float f) ‫ ﯾﻣﻛﻧك اﻟﺗﻌﺎﻣل ﻣﻊ ﻣﺗﻐﯾرات ﻋﺷرﯾﺔ‬،(1038
int a = 100;
float f;
float g;

60
‫‪ARDUINO FROM ZERO TO HERO‬‬

‫‪f = a / 3; // f = 33.333333‬‬
‫‪g = a + f; // g = 133.333333‬‬

‫ﻣﻌﺎﻣﻼت اﻟﻤﻘﺎرﻧﺔ ﺑﺎﻟﻌﻤﻠﯿﺎت اﻟﺤﺴﺎﺑﯿﺔ‬


‫ﻟﻘد ﺗم إﺳﺗﺧدام ﻣﻌﺎﻣﻼت ﻓﻰ اﻟﺟﻣﻠﺔ اﻟﺷرطﯾﺔ )‪ (if‬ﻟﻣﻘﺎرﻧﺔ ﻗﯾم او ﺷروط ﻣﻌﺎً ﻟﻠﺣﺻول ﻋﻠﻰ ﻧﺗﺎﺋﺞ ﻣﺣددة‪ ،‬ﻫذا‬
‫اﻟﻣﻌﺎﻣﻼت ﻛﺎﻧت )‪ ،(== and, || or, ! not‬ﻟﻛن ﻫﻧﺎك ﻣﻌﺎﻣﻼت اﺧرى ﯾﻣﻛﻧﻧﺎ اﻟﺗﻌﺎﻣل ﻣﻌﻬﺎ ﻣﺛل اﻗل ﻣن )<(‪ ،‬اﻛﺑر‬
‫ﻣن )>(‪ ،‬اﻗل ﻣن او ﯾﺳﺎوى )=<(‪ ،‬واﻛﺑر ﻣن او ﯾﺳﺎوى )=>(‪ .‬ﺳوف ﺗﻼﺣظ اﻧﻧﺎ اﺳﺗﺧدﻣﻧﺎ ﺑﻌض ﻣن ﺗﻠك اﻟﻣﻌﺎﻣﻼت‬
‫ﻓﻰ اﻟﻣﺷروع رﻗم ‪ 6‬واﻟذى ﺗم ﺷرﺣﻪ ﺳﺎﺑﻘﺎً ‪.‬‬

‫ﺗﺤﺴﯿﻦ ﻗﯿﺎس اﻻﺷﺎرات اﻻﻧﺎﻟﻮج‬


‫ﻓﻰ اﻟﻣﺛﺎل اﻟﺧﺎص ﺑﻘﯾﺎس ﻣﺳﺗوى ﺷﺣن اﻟﺑطﺎرﯾﺔ‪ ،‬ﻛﺎن اﻗﺻﻰ ﻗﯾﻣﺔ ﻟﻠﯾﺗﺎر ﻫﻰ ‪ 5v‬وﻟﻬذا ﻛﺎﻧت اﻟﺗﻣﺛﯾل اﻟﻣﻘﺎﺑل ﻟﻬﺎ ﻫو‬
‫)‪ (0:1023‬ﻛﻣﺎ ﻋﻠﻣﻧﺎ ﻗﺑل ذﻟك‪ ،‬ﻟﻛن ﻟو اردﻧﺎ ﺗﻌدﯾل ﻣﺳﺗوى اﻟﻘﯾﺎس ﻟﯾﺻﺑﺢ ﻣﺛﻼً ‪ 2v‬وﻟﯾس ‪ 5v‬ﺣﯾث ان ﻗﯾﻣﺔ اﻟﻔوﻟت‬
‫)‪ (0:2 v‬ﺳوف ﺗﺗﻣﺛل ﺑﺎﻟﻘﯾﻣﺔ )‪ ،(0:1023‬ﯾﻣﻛن ان ﯾﺗم ذﻟك ﻣن ﺧﻼل ﻣرﺟﻊ ﺧﺎرﺟﻰ او داﺧﻠﻰ ﻟﻠﻔوﻟت ﻛﻣﺎ ﺳﻧرى‬
‫اﻻن‪.‬‬

‫اﻟﻤﺮﺟﻊ اﻟﺨﺎرﺟﻰ ﻟﻠﻔﻮﻟﺖ‬


‫ﯾﺗم ذﻟك ﻣن ﺧﻼل ﺗوﺻﯾل اﻟطرف اﻟﻣوﺟب )اﻟﻘﯾﻣﺔ اﻟﻌظﻣﻰ ﻟﻠﺗﯾﺎر اﻟﺟدﯾد( ﺑطرف اﻻردوﯾﻧو اﻟﺧﺎص ﺑﺎﻟﻘﯾم اﻻﻧﺎﻟوج‬
‫اﻟﻘﺻوى وﻫو ﻫﻧﺎ اﻟطرف )‪ (AREF = Analog REFerence‬وﻫو ﻣوﺿﺢ ﺑﺎﻟﺷﻛل اﻟﺗﺎﻟﻰ‪ ،‬ﺛم ﺗوﺻﯾل اﻟطرف اﻟﺳﺎﻟب‬
‫)اﻟﻘﯾﻣﺔ اﻟﺻﻐرى ﻟﻠﺗﯾﺎر اﻟﺟدﯾد( ﺑﺎﻟطرف اﻻرﺿﻰ ﻓﻰ اﻻردوﯾﻧو ﻟﻠﺣﺻول ﻋﻠﻰ ﻣرﺟﻊ ﺧﺎرﺟﻰ ﻟﻠﺗﯾﺎر اﻟﻣراد ﻗﯾﺎﺳﻪ‬

‫ﻣﺛﺎل‪ :‬ﯾﻣﻛن ﺗوﺻﯾل ﻣﺻدر ﺗﯾﺎر اﻗل ﻣن ‪ 5v‬ﺑﺣﯾث ﯾﻛون اﻟطرف اﻟﻣوﺟب ﻣﺗﺻل ﺑﺎﻟطرف ‪ AREF‬واﻟطرف اﻟﺳﺎﻟب‬
‫ﻣﺗﺻل ﺑﺎﻟطرف ‪ GND‬ﻟﻼردوﯾﻧو‪ ،‬ﻫﻧﺎ ﺗﻛون اﻟﻘﯾﻣﺔ اﻟﻌظﻣﻰ ﻟﻠﺗﯾﺎر ﻫﻰ ﻗﯾﻣﺔ اﻟطرف اﻟﻣوﺟب اﻟﻣﺗﺻل ﺣﺎﻟﯾﺎً ﺑﺎﻟطرف‬
‫‪ ،AREF‬وﺑﻬذﻩ اﻟطرﯾﻘﺔ ﯾﻣﻛن ﺗﻐﯾﯾر ﻗﯾﻣﺔ ﻗﯾﺎس اﻻﺷﺎرات اﻻﻧﺎﻟوج ﻣن ‪ 5v‬اﻟﻰ اى ﻗﯾﻣﺔ اﺧرى‪.‬‬

‫ﺑﻣﺟرد ﺗوﺻﯾل ﻣﺻدر ﺗﯾﺎر ﺧﺎرﺟﻰ ﺑﺎﻟطرف ‪ ،AREF‬ﯾﺟب ﺗوﺟﯾﻪ اﻻردوﯾﻧو اﻟﻰ اﺳﺗﺧدام ﻗﯾﻣﺔ اﻟﺗﯾﺎر اﻟﺧﺎرﺟﻰ ﻛﻣرﺟﻊ‬
‫ﻟﻠﻘﯾﺎس وذﻟك ﻣن ﺧﻼل اﻻﻣر اﻟﺗﺎﻟﻰ‬
‫;)‪analogReference(EXTERNAL‬‬

‫‪61‬‬
‫‪ARDUINO FROM ZERO TO HERO‬‬

‫اﻟﻤﺮﺟﻊ اﻟﺪاﺧﻠﻰ ﻟﻠﻔﻮﻟﺖ‬


‫ﻫﻧﺎك ﻣﺻدر ﺗﯾﺎر داﺧل اﻻردوﯾﻧو ﻗﯾﻣﺗﻪ اﻟﻌظﻣﻰ ‪ ،1.1v‬ﯾﻣﻛن ﺗوﺟﯾﻪ اﻻردوﯾﻧو اﻟﻰ اﺳﺗﺧداﻣﻪ ﻣن ﺧﻼل ﺳطر اواﻣر‬
‫ﻓﻘط دون ﻋﻣل ﺗوﺻﯾﻼت ﺧﺎرﺟﯾﺔ‬
‫;)‪analogReference(INTERNAL‬‬

‫‪Potentiometer‬‬ ‫اﻟﻤﻘﺎوﻣﺔ اﻟﻤﺘﻐﯿﺮة‬


‫ﻛﻣﺎ ﻋﻠﻣﻧﺎ ﻣن ﻗﺑل ان اﻟﻣﻘﺎوﻣﺔ ﻫﻰ ﻗطﻌﺔ واﺣدة ﻟﻬﺎ ﻗﯾﻣﺔ ﺛﺎﺑﺗﺔ‪ ،‬وﻋﻧدﻣﺎ ﻧرﯾد ﺗﻐﯾﯾر ﻗﯾﻣﺔ اﻟﻣﻘﺎوﻣﺔ ﻧﺣﺗﺎج اﻟﻰ اﻟﺣﺻول‬
‫ﻋﻠﻰ ﻣﻘﺎوﻣﺔ اﺧرى ذات ﻗﯾﻣﺔ ﻣﺧﺗﻠﻔﺔ وﻫﻛذا‪ ،‬ﻟﻛن ﻫذا ﻟﯾس ﺣل ﻋﻣﻠﻰ ﻓﻰ ﺣﺎﻟﺔ اﻧﻧﺎ ﻧرﯾد اﻟﺗﺣﻛم ﻓﻰ ﻗﯾﻣﺔ اﻟﻣﻘﺎوﻣﺔ‬
‫داﺧل اى ﺟﻬﺎز دون اﻟﺣﺎﺟﺔ اﻟﻰ اﺳﺗﺧدام ﻋدة ﻣﻘﺎوﻣﺎت‪ ،‬ﻟﻬذا ﺗم ﺻﻧﺎﻋﺔ ﻣﻘﺎوﻣﺔ اﺧرى ﺗﺣﺗوى ﻋﻠﻰ ﻋدة ﻣﻘﺎوﻣﺎت‬
‫ﻣﺧﺗﻠﻔﺔ اﻟﻘﯾﻣﺔ ﯾﻣﻛن اﺳﺗﺧدام اى ﻣﻧﻬﺎ ﻋن طرﯾق ﺗوﺟﯾﻪ ذراع ﻟﻠﺗﺣرك ﺑﯾن اﻟﻣﻘﺎوﻣﺎت اﻟﻣﺧﺗﻠﻔﺔ ﻟﻠﺣﺻول ﻋﻠﻰ اﻟﻣﻘﺎوﻣﺔ‬
‫اﻟﻣراد اﻟﺗﻌﺎﻣل ﻣﻌﻬﺎ‪ ،‬ﻫذﻩ اﻟﻘطﻌﺔ اﻻﻟﻛﺗروﻧﯾﺔ اﻟﺟدﯾدة ﺗﺳﻣﻰ اﻟﻣﻘﺎوﻣﺔ اﻟﻣﺗﻐﯾرة‪ ،‬وﻟﻬﺎ اﻛﺛر ﻣن ﺷﻛل‬

‫اﻟﺷﻛل اﻟﻬﻧدﺳﻰ ﻟﻠﻣﻘﺎوﻣﺔ اﻟﻣﺗﻐﯾرة ﯾﺷﺑﻪ اﻟﺷﻛل اﻟﻬﻧدﺳﻰ ﻟﻠﻣﻘﺎوﻣﺔ اﻟﺛﺎﺑﺗﺔ ﻟﻛن ﺑوﺿﻊ ﺳﻬم ﻋﻠﯾﻬﺎ ﻛﺄﻧﻪ ﯾد ﻣﺗﺣرﻛﺔ‬

‫ﻣﺛﺎل ﻟﻠﻣﻘﺎوﻣﺔ اﻟﻣﺗﻐﯾرة ﻫو اﻟﺗﺣﻛم ﻓﻰ ﺻوت اﻟﺳﻣﺎﻋﺎت ﺑﺗﺣ رﯾك ﻣﻔﺗﺎح واﻟذى ﺑدورﻩ ﯾﻐﯾر ﻗﯾﻣﺔ اﻟﻣﻘﺎوﻣﺔ ﻣﻣﺎ ﯾﻧﺗﺞ ﻋﻧﻪ‬
‫ﺗﻐﯾر ﻗﯾﻣﺔ اﻟﺗﯾﺎر اﻟﻣﻐذى ﻟﻠﺳﻣﺎﻋﺎت ﻣﻣﺎ ﯾؤدى اﻟﻰ اﻧﺧﻔﺎض او ارﺗﻔﺎع اﻟﺻوت اﻟﺻﺎدر ﻣن اﻟﺳﻣﺎﻋﺎت‪.‬‬

‫‪62‬‬
‫‪ARDUINO FROM ZERO TO HERO‬‬

‫‪buzzer‬‬ ‫اﻟﺔ اﻟﺘﻨﺒﯿﮫ‬


‫ﻛﺛﯾ ار ﻧﺣﺗﺎج اﻟﻰ إﺻدار ﺻوت ﻓﻰ ﻣﺷروع ﻣﺎ ﻣﺛل ﺻوت ﺗﻧﺑﯾﻪ ﻋﻧدﻣﺎ ﺗﺻل درﺟﺔ اﻟﺣ اررة ‪ 40‬درﺟﺔ ﻣﺋوﯾﺔ ﻟﻬذا‬
‫ﻧﺳﺗﺧدم ﺟﻬﺎز ﺻﻐﯾر اﻟﺣﺟم )ﺣﺟم اﻟﻌﻣﻠﺔ اﻟﻣﻌدﻧﯾﺔ( ﻹﺻدار ﺻوت ﺗﻧﺑﯾﻪ )‪.(buzzer or piezo‬‬

‫ﯾﺗﻛون ﺟﻬﺎز اﻟﺗﻧﺑﯾﻪ ﻣن رﻗﺎﻗﺔ ﻣﻌدﻧﯾﺔ داﺧﻠﯾﺔ ﺗﺗﺣرك ﻋﻧد ﺗوﺻﯾل ﺗﯾﺎر ﻛﻬرﺑﻰ ﻟﻬﺎ‪ ،‬وﻋﻧد ﺗﻛرار ﺗوﺻﯾل وﻗطﻊ اﻟﺗﯾﺎر‬
‫اﻟﻛﻬرﺑﻰ ﺗﺻدر ﺻوت ﺗﻧﺑﯾﻪ ﻣﻊ اﻫﺗزاز ﺑﻧﻔس اﻟوﻗت‪ .‬ﯾﻣﻛن ﺗوﺻﯾل اى ﻣن اﻟطرﻓﯾن ﺑﺎﻟﻣوﺟب ﺣﯾث اﻧﻬﺎ ﻻﺗﻧﺣرق‬
‫ﺑﻣرور اﻟﺗﯾﺎر ﻓﻰ اى اﺗﺟﺎﻩ ﻛﺎن‪.‬‬

‫اﻟﺷﻛل اﻟﻬﻧدﺳﻰ ﻟﺟﻬﺎز اﻟﺗﻧﯾﻪ ﻛﺎﻟﺗﺎﻟﻰ‬

‫اﻟﻤﺸﺮوع ‪ :6 #‬إﺳﺘﺨﺪام ﺟﮭﺎز اﻟﺘﻨﺒﯿﮫ‬


‫ﻫدف اﻟﻣﺷروع ﻫو إﺻدار ﺻوت ﻣن ﺟﻬﺎز اﻟﺗﻧﺑﯾﻪ ﺑﺣﯾث ﯾﺗم ﺗوﺻﯾل اﻟﺟﻬﺎز ﺑﺎﻟطرف رﻗم ‪ 3‬اﻧﺎﻟوج ﻟﻣدة ﻧﺻف ﺛﺎﻧﯾﺔ‬
‫ﺛم ﻗطﻊ اﻟﺗﯾﺎر ﻣرة اﺧرة ﻟﻧﺻف ﺛﺎﻧﯾﺔ وﺗﻛرار ﺗﻠك اﻟﺧطوات ﺑﺈﺳﺗﻣرار‪.‬‬
‫‪#define PIEZO 3‬‬
‫;‪int del = 500‬‬
‫)(‪void setup‬‬
‫{‬
‫;)‪pinMode(PIEZO, OUTPUT‬‬
‫}‬
‫)(‪void loop‬‬
‫{‬
‫;)‪u analogWrite(PIEZO, 128 p‬‬
‫;)‪delay(del‬‬
‫;)‪digitalWrite(PIEZO, LOW‬‬
‫;)‪delay(del‬‬
‫}‬

‫‪63‬‬
‫‪ARDUINO FROM ZERO TO HERO‬‬

‫ﺟﻬﺎز اﻟﺗﻧﺑﯾﻪ ﯾﻣﻛﻧﻪ اﻟﺗﻌﺎﻣل ﻣﻊ ‪ 12v‬ﻣﻣﺎ ﯾﺟﻌﻠﻪ ﯾﺻدر ﺻوت ﻣرﺗﻔﻊ ﺟدا‪ ،‬وﻫذا اﻟﺗﯾﺎر ﻻﯾﻣﻛن اﻟﺣﺻول ﻋﻠﯾﻪ ﻣن‬
‫ﺧﻼل اﻻردوﯾﻧو )‪ 5v‬اﻗﺻﻰ ﺗﯾﺎر ﯾﺻدر ﻣن اﻻردوﯾﻧو( ﻟﻬذا ﯾﻣﻛن إﺳﺗﺧدام ﺗراﻧزﺳﺗور ﻟﻠﺣﺻول ﻋﻠﻰ ﺗﯾﺎر اﻋﻠﻰ‪،‬‬
‫وﯾﻣﻛن ﻋﻣل اﻟﻣﺷروع اﻟﺳﺎﺑق ﻣرة اﺧرى ﺑﺈﺳﺗﺧدام ﻣﺻدر ﺗﯾﺎر اﻛﺑر ﻣن ‪.5v‬‬

‫اﻟﻤﺸﺮوع ‪ :7 #‬ﻗﺮاءة درﺟﺔ اﻟﺤﺮارة‬


‫اﻟﻬدف ﻣن اﻟﻣﺷروع ﻫو ﻗﯾﺎس درﺟﺔ ﺣ اررة اﻟﺟو‪ ،‬إذا ﻛﺎﻧت درﺟﺔ اﻟﺣ اررة اﻗل ﻣن ‪ 20‬ﺳﯾﺗم إﺿﺎءة ﻟﯾد ازرق‪ ،‬اﻣﺎ إذا‬
‫ﻛﺎﻧت درﺟﺔ اﻟﺣ اررة ﻣﺎ ﺑﯾن ‪ 20:26‬ﺳﯾﺗم إﺿﺎءة ﻟﯾد اﺧﺿر‪ ،‬اﻣﺎ إذا ﻛﺎﻧت درﺟﺔ اﻟﺣ اررة اﻋﻠﻰ ﻣن ‪ 26‬ﺳﯾﺗم إﺿﺎءة ﻟﯾد‬
‫اﺣﻣر‪.‬‬

‫ﺳوف ﻧﺳﺗﺧدم ﻓﻰ ﻫذا اﻟﻣﺷروع ﺟﻬﺎز ﻗﯾﺎس درﺟﺔ اﻟﺣ اررة )ﺟﻬﺎز ﯾﺻدر إﺷﺎ رات اﻧﺎﻟوج ﻻن درﺟﺔ اﻟﺣ اررة ﻣﺗﻐﯾرة‬
‫وﻟﯾﺳت ﻗﯾﻣﺗﺎن ﻓﻘط(‪ .‬اﻟﺟﻬﺎز اﻟﻣﺳﺗﺧدم ﻫو‬

‫‪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‬‬
‫إﺳﺘﺨﺪام اﻟﺪوال‬

‫ﺳوف ﻧﺗﻌﻠم ﻛﯾﻔﯾﺔ ﺗﺳﻬﯾل ﻛﺗﺎﺑﺔ ﺳطور اواﻣر اﻻﺳﻛﺗش ﻣن ﺧﻼل ﻋﻣل دوال ﺧﺎﺻﺔ ﺑك ﻣﻣﺎ ﯾؤدى اﻟﻰ ﺳﻬوﻟﺔ ﻗراءة‬
‫اﻻﺳﻛﺗش واﻟﺗﻌﺎﻣل ﻣﻌﻪ وﺗوﻓﯾر اﻟﻛﺛﯾر ﻣن اﻟوﻗت ﻓﻰ ﻛﺗﺎﺑﺔ ﺳطور اﻻواﻣر‪.‬‬

‫اﻟداﻟﺔ ﻋﺑﺎرة ﻋن ﻣﺟﻣوﻋﺔ ﻣن ﺳطور اﻻواﻣر ﯾﺗم ﺗﺧزﯾﻧﻬﺎ واﺳﺗدﻋﺎﺋﻬﺎ اى ﻋدد ﻣن اﻟﻣرات داﺧل اﻻﺳﻛﺗش ﻟﺗﻧﻔﯾذ‬
‫اﻻواﻣر اﻟﺗﻰ ﺑداﺧﻠﻬﺎ‪ ،‬ﺣﯾﻧﻣﺎ ﺗﺗﻛرر ﻣﺟﻣوﻋﺔ ﻣن اﻻواﻣر داﺧل اﻻﺳﻛﺗش ﯾﺗم ﺗﺧزﯾﻧﻬﺎ ﻛداﻟﺔ ﺛم إﺳﺗدﻋﺎﺋﻬﺎ ﻓﻰ اى ﻣﻛﺎن‬
‫ﺑﺎ ﻻﺳﻛﺗش ﻣﻣﺎ ﯾؤدى ﻟﻌدم ﺗﻛرار ﻛﺗﺎﺑﺔ ﺗﻠك اﻻواﻣر ﻋدة ﻣرات وﺗوﻓﯾر اﻟوﻗت واﻟﺟﻬد وﺗوﻓﯾر ﻣﺳﺎﺣﺔ اﻟذاﻛرة ﻓﻰ اﻟﻣﺗﺣﻛم‬
‫اﻟدﻗﯾق‪ ،‬ﻫﻧﺎك اﻟﻌدﯾد ﻣن اﻟدوال اﻟﺟﺎﻫزة ﺧﺎﺻﺔ ﺑﺎﻻردوﯾﻧو وﻟﻛن ﯾﻣﻛﻧك ﻛﺗﺎﺑﺔ داﻟﺔ ﺧﺎﺻﺔ ﺑك طﺑﻘﺎ ﻻﺣﺗﯾﺎﺟﺎﺗك‪.‬‬

‫اﻟﻤﺸﺮوع ‪ :8 #‬ﻛﺘﺎﺑﺔ داﻟﺔ ﻟﺘﻜﺮار وظﯿﻔﺔ ﻣﻌﯿﻨﺔ‬


‫اﻟﻬدف ﻣن اﻟﻣﺷروع ﻫو ﻛﺗﺎﺑﺔ داﻟﺔ ﺧﺎﺻﺔ ﺑﺗﻛرار إﺿﺎءة اﻟﻠﯾد رﻗم ‪ 13‬ﺛم إطﻔﺎءﻩ وﺗﻛرار ﺗﻠك اﻟﺧطوات ﻋدة ﻣرات‪،‬‬
‫ﺗﻠك اﻟﺧطوات ﻛﺎﻟﺗﺎﻟﻰ‬
‫)(‪void blinkLED‬‬
‫{‬
‫;)‪digitalWrite(13, HIGH‬‬
‫;)‪delay(1000‬‬
‫;)‪digitalWrite(13, LOW‬‬
‫;)‪delay(1000‬‬
‫;)‪digitalWrite(13, HIGH‬‬
‫;)‪delay(1000‬‬
‫;)‪digitalWrite(13, LOW‬‬
‫;)‪delay(1000‬‬
‫}‬

‫‪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‬و ً‬
‫ﻧﻐﯾر ﺗﻠك اﻟﻘﯾم اﺛﻧﺎء ﺗﻧﻔﯾذ داﻟﺔ اﻟﺗﻛرار ﺑﺣﯾث ﯾﺗم ﻛﺗﺎﺑﺔ ﺗﻠك اﻟﻘﯾم داﺧل ﺳطر اﺳﺗدﻋﺎء اﻟداﻟﺔ ﻛﺎﻟﺗﺎﻟﻰ‬

‫اﻟﻤﺸﺮوع ‪ :9 #‬ﻛﺘﺎﺑﺔ داﻟﺔ وﺗﺤﺪﯾﺪ ﻗﯿﻢ اﻟﻤﺘﻐﯿﺮات ﺑﺪاﺧﻠﮭﺎ‬


‫‪#define LED 13‬‬
‫)(‪void setup‬‬
‫{‬
‫;)‪pinMode(LED, OUTPUT‬‬
‫}‬
‫)‪void blinkLED(int cycles, int del‬‬
‫{‬
‫) ‪for ( int z = 0 ; z < cycles ; z++‬‬
‫{‬
‫;)‪digitalWrite(LED, HIGH‬‬
‫;)‪delay(del‬‬
‫;)‪digitalWrite(LED, LOW‬‬
‫;)‪delay(del‬‬
‫}‬
‫}‬
‫)(‪void loop‬‬
‫{‬
‫;)‪blinkLED(12, 100‬‬
‫;)‪delay(1000‬‬
‫}‬

‫‪68‬‬
‫‪ARDUINO FROM ZERO TO HERO‬‬

‫ﻧﻼﺣظ اﻧﻪ ﺗم إدﺧﺎل رﻗم اﻟﻠﯾد )‪ (12‬واﯾﺿﺎً وﻗت اﻻﻧﺗظﺎر )‪ (100‬ﻓﻰ ﺳطر اﺳﺗدﻋﺎء اﻟداﻟﺔ ))‪(blinkLED(12, 100‬‬
‫وﻫذﻩ طرﯾﻘﺔ اﺧرى ﻻدﺧﺎل ﻗﯾم اﻟﻣﺗﻐﯾرات ﺑﺷﻛل اﺧر دون ﻛﺗﺎﺑﺗﻬﺎ ﻓﻰ اول ﺳطور اﻻﺳﻛﺗش ﻛﻣﺎ ﻓﻰ اﻟﻣﺷروع ‪.9 #‬‬

‫ﻛﺘﺎﺑﺔ داﻟﺔ ﻟﻠﺤﺼﻮل ﻋﻠﻰ ﻧﺘﺎﺋﺞ‬


‫ﺗﻌﻠﻣﻧﺎ ﻓﻰ اﻟﻣﺷروع رﻗم ‪ 10‬ﻋﻣل داﻟﺔ ﺗﺳﺗﻘﺑل ﻣﺗﻐﯾرات ﻟﺗﻧﻔﯾذﻫﺎ داﺧل اﻟﺑرﻧﺎﻣﺞ‪ ،‬ﻓﻣﺎذا ﻟو اردﻧﺎ اﻟﺣﺻول ﻋﻠﻰ ﻧﺗﺎﺋﺞ ﻣن‬
‫اﻟداﻟﺔ )ﻣﺛل ﻧﺎﺗﺞ ﺟﻣﻊ ﻣﺗﻐﯾران(‪ ،‬وﻟﻠﺗﻣﯾﯾز ﺑﯾن اﻟداﻟﺔ اﻟﺗﻰ ﺗﺣﺻل ﻣﻧﻬﺎ ﻋﻠﻰ ﻧﺗﺎﺋﺞ واﻟﺗﻰ ﻻ ﺗﺣﺻل ﻣﻧﻬﺎ ﻋﻠﻰ ﺷﺊ ﯾﺗم‬
‫ﻣن ﺧﻼل ﻛﻠﻣﺔ )‪ (void‬ﺣﯾث ان اﻟداﻟﺔ اﻟﻰ ﻻ ﺗﺣﺻل ﻣﻧﻬﺎ ﻋﻠﻰ ﻧﺗﺎﺋﺞ ﻧﺿﻊ ﻗﺑل اﺳﻣﻬﺎ ﻛﻠﻣﺔ )‪ ،(void‬ﻟﻬذا اﻟداﻟﺔ‬
‫اﻟرﺋﯾﺳﯾﺔ ﻓﻰ اﻻﺳﻛﺗش )‪ (main‬ﻻ ﺗﺣﺻل ﻣﻧﻬﺎ ﻋﻠﻰ ﻧﺗﺎﺋﺞ ﺑل ﺗﻧﻔذ ﺳطور اﻻواﻣر داﺧﻠﻬﺎ ﻓﻘط ﻟﻬذا ﻧﻛﺗﺑﻬﺎ ﻫﻛذا ‪void‬‬
‫‪ main‬ﻛﻣﺎ ﺗم ﺷرﺣﻪ ﺳﺎﺑﻘﺎً‪.‬‬

‫ﻣﺛﺎل ﻋﻣﻠﻰ‪ :‬ﻧرﯾد ﻋﻣل داﻟﺔ ﯾﺗم ﻣن ﺧﻼﻟﻬﺎ إدﺧﺎل درﺟﺔ اﻟﺣ اررة ﺳﻠﯾزﯾوس واﻟﺣﺻول ﻣﻧﻬﺎ ﻋﻠﻰ درﺟﺔ اﻟﺣ اررة‬
‫ﻓﻬرﻧﻬﺎﯾت‪ ،‬ﻫذﻩ داﻟﺔ ﺳوف ﻧﺣﺻل ﻣﻧﻬﺎ ﻋﻠﻰ ﻧﺗﺎﺋﺞ ﻟﻬذا ﻟن ﻧﻛﺗب ‪ void‬ﻗﺑل اﺳم اﻟداﻟﺔ ﺑل ﻧﻛﺗب ﻧوع اﻟﻧﺎﺗﺞ اﻟﻣراد‬
‫اﻟﺣﺻول ﻋﻠﯾﻪ وﻫو ‪float‬‬

‫)‪float convertTemp(float celsius‬‬


‫{‬
‫;‪float fahrenheit = 0‬‬
‫;‪fahrenheit = (1.8 * celsius) + 32‬‬
‫;‪return fahrenheit‬‬
‫}‬

‫ﯾﻣﻛن اﺳﺗﺧدام ﺗﻠك اﻟداﻟﺔ داﺧل اﻟﺑرﻧﺎﻣﺞ ﺑﺎﻻﺷﺎرة اﻟﯾﻬﺎ ﻣﻊ إرﺳﺎل ﻗﯾﻣﺔ اﻟﻣﺗﻐﯾر )‪ (Celsius‬ﻟﻠﺣﺻول ﻋﻠﻰ اﻟﻘﯾﻣﺔ‬
‫)‪ (fhrenheit‬وﺣﻔظﻬﺎ داﺧل اﻟﻣﺗﻐﯾر )‪ (tempf‬ﻛﺎﻟﺗﺎﻟﻰ‬
‫;)‪tempf = convertTemp(40‬‬

‫اﻟﻤﺸﺮوع ‪ :10 #‬ﻗﺮاءة درﺟﺔ اﻟﺤﺮارة ﻹﺿﺎءة اﻟﻠﯿﺪ‬


‫ﻓﻰ ﻫذا اﻟﻣﺷروع ﺳوف ﻧﻘوم ﺑﺈﺳﺗﺧدام ﺣﺳﺎس ﻗراءة درﺟﺔ اﻟﺣ اررة ﻣن اﻟﻧوع )‪ (TMP36‬واﻟذى ﺗم إﺳﺗﺧداﻣﻪ ﻓﻰ اﻟﻔﺻل‬
‫اﻟراﺑﻊ‪ ،‬ﻓﺈذا ﻛﺎﻧت درﺟﺔ اﻟﺣ اررة اﻗل ﻣن ‪ 20‬ﺳﯾﻠزﯾوس ﺳوف ﯾﺿﺊ اﻟﻠﯾد ﻣ رﺗﺎن‪ ،‬اﻣﺎ إذا ﻛﺎﻧت درﺟﺔ اﻟﺣ اررة ﺑﯾن ‪20-26‬‬
‫ﺳوف ﯾﺿﺊ اﻟﻠﯾد ارﺑﻊ ﻣرات ﻓﻘط‪ ،‬اﻣﺎ إذا ﻛﺎﻧت درﺟﺔ اﻟﺣ اررة اﻋﻠﻰ ﻣن ‪ 26‬ﺳوف ﯾﺿﺊ اﻟﻠﯾد ﺳت ﻣرات‪.‬‬

‫‪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‬‬

‫‪voltage = (sensor * 5000) / 1024; // convert raw sensor value to millivolts‬‬


‫‪voltage = voltage - 500; // remove voltage offset‬‬
‫‪celsius = voltage / 10; // convert millivolts to Celsius‬‬
‫‪// act on temperature range‬‬
‫)‪if (celsius < coldTemp‬‬
‫{‬
‫;‪result = 2‬‬
‫}‬
‫)‪else if (celsius >= coldTemp && celsius <= hotTemp‬‬
‫{‬
‫;‪result = 4‬‬
‫}‬
‫‪else‬‬
‫{‬
‫)‪result = 6; // (celsius > hotTemp‬‬
‫}‬
‫;‪return result‬‬
‫}‬
‫)‪void blinkLED(int cycles, int del‬‬
‫{‬
‫) ‪for ( int z = 0 ; z < cycles ; z++‬‬
‫{‬
‫;)‪digitalWrite(LED, HIGH‬‬
‫;)‪delay(del‬‬
‫;)‪digitalWrite(LED, LOW‬‬
‫;)‪delay(del‬‬
‫}‬
‫}‬
‫)(‪void loop‬‬
‫{‬
‫;)(‪blinks = checkTemp‬‬
‫;)‪blinkLED(blinks, 500‬‬
‫;)‪delay(2000‬‬
‫}‬

‫ﻣﻼﺣﻈﺔ‪:‬‬
‫ﻟﺳﻬوﻟﺔ ﻗراءة اﻻﺳﻛﺗش‪ ،‬إﺑداء داﺋﻣﺎً ﺑﺎﻟداﻟﺔ اﻟﺗﻛ اررﯾﺔ )‪ (loop‬ﺣﯾث إﻧﻬﺎ ﻫﻰ ﺑداﯾﺔ ﺗﺷﻐﯾل ﻛل اﻟدوال اﻻﺧرى وﻫﻰ‬
‫اﻟﻣﺗﺣﻛم اﻟرﺋﯾﺳﻰ ﻓﻰ اى إﺳﻛﺗش‪.‬‬

‫ﻋﺮض اﻟﻨﺘﺎﺋﺞ ﻣﻦ ﺧﻼل اﻟﺸﺎﺷﺔ اﻟﺘﺴﻠﺴﻠﯿﺔ‬


‫ﻻﺣظﻧﺎ ﺧﻼل اﻟﻣﺷروع اﻟﺳﺎﺑق اﻧﻧﺎ ﻧﺗﻌرف ﻋﻠﻰ ﻧﺗﺎﺋﺞ اﻟﻣﺷروع ﻣن ﺧﻼل إﺿﺎءة اﻟﻠﯾد‪ ،‬وﻟﻛن ﻫﻧﺎك طرق اﺧرى‬
‫ﻟﻠﺣﺻول ﻋﻠﻰ ﻧﺗﺎﺋﺞ اﻛﺛر دﻗﺔ وﺑﺄﻗل ﻣﺟﻬود وﻫﻰ إظﻬﺎر اﻟﻧﺗﺎﺋﺞ ﻋﻠﻰ ﺷﺎﺷﺔ اﻟﻛﻣﺑﯾوﺗر ﻣﺑﺎﺷرة‪ ،‬وذﻟك ﻣن ﺧﻼل ﺷﺎﺷﺔ‬
‫ﻧﺗﺎﺋﺞ اﻻردوﯾﻧو )‪ (serial monitor‬واﻟﻣوﺟودة داﺧل ﺑرﻧﺎﻣﺞ اﻻردوﯾﻧو ‪ ،IDE‬ﺣﯾث اﻧﻧﺎ ﻧﺣﺻل ﻋﻠﻰ ﺗﻠك اﻟﻧﺗﺎﺋﺞ ﻣن‬
‫ﺧﻼل اﻻردوﯾﻧو اﻟذى ﯾرﺳﻠﻬﺎ ﺑدورﻩ اﻟﻰ ﺷﺎﺷﺔ اﻟﻛﻣﺑﯾوﺗر ﻣن ﺧﻼل ﻛﺎﺑل ‪ USB‬اﻟﻣﺗﺻل ﺑﯾن اﻻردوﯾﻧو واﻟﻛﻣﺑﯾوﺗر‪،‬‬
‫واﯾﺿﺎَ ﯾﻣﻛن إدﺧﺎل ﺑﯾﺎﻧﺎت اﻟﻰ اﻻردوﯾﻧو ﻣن ﺧﻼل ﻧﻔس اﻟﻛﺎﺑل ﺑﻛﺗﺎﺑﺔ ﻣﺎ ﺗرﯾد ﻣن ﺧﻼل ﻟوﺣﺔ اﻟﻣﻔﺎﺗﯾﺢ ﻟﯾﺗم إرﺳﺎﻟﻬﺎ‬
‫اﻟﻰ اﻻردوﯾﻧو ﻣﺑﺎﺷرة‪.‬‬

‫‪71‬‬
‫‪ARDUINO FROM ZERO TO HERO‬‬

‫‪Serial Monitor‬‬ ‫اﻟﺸﺎﺷﺔ اﻟﺘﺴﻠﺴﻠﯿﺔ‬


‫ﯾﻣﻛﻧك ﻓﺗﺣﻬﺎ ﻣن ﺧﻼل اﻻﯾﻘوﻧﺔ اﻗﺻﻰ ﯾﻣﯾن ﺷرﯾط اﻻدوات ﺑﺑرﻧﺎﻣﺞ ‪ IDE‬وﺗظﻬرﺑﺎﻟﺷﻛل اﻟﺗﺎﻟﻰ‬

‫اول ﻣﺳﺗطﯾل ﻓﻰ اﻟﺷﺎﺷﺔ ﯾﺗم ﻣن ﺧﻼﻟﻪ إدﺧﺎل اﻟﺑﯾﺎﻧﺎت اﻟﻰ اﻻردوﯾﻧو ﺛم ﺿﻐط ﻣﻔﺗﺎح إرﺳﺎل ‪ ،send‬وﺗظﻬر اﻟﻧﺗﺎﺋﺞ‬
‫ﺑﺎﻟﻣﺳﺗطﯾل اﻟﺗﺎﻟﻰ ﻟﻪ‪ ،‬ﻧﻼﺣظ وﺟود ﻣرﺑﻊ اﺳﻔل اﻟﺷﺎﺷﺔ ﯾﺳﻣﻰ ‪ autoscroll‬ﻟﺗﺣدﯾث اﻟﻧﺗﺎﺋﺞ ﻋﻠﻰ اﻟﺷﺎﺷﺔ ﺑﺣﯾث اﻟﻧﺗﺎﺋﺞ‬
‫اﯾﺿﺎ ان اﻻردوﯾﻧو ﯾرﺳل‬
‫ً‬ ‫اﻟﺟدﯾدة ﺗظﻬر ﺑﺈﺳﺗﻣ ارر ﻣﻊ إﺧﻔﺎء اﻟﻧﺗﺎﺋﺞ اﻟﻘدﯾﻣﺔ ﻓﻰ ﺣﺎﻟﺔ إﻣﺗﻸ اﻟﺷﺎﺷﺔ ﺑﺎﻟﻣﺧرﺟﺎت‪ .‬ﻧﻼﺣظ‬
‫وﯾﺳﺗﻘﺑل اﻟﺑﯾﺎﻧﺎت ﻣﻊ اﻟﻛﻣﺑﯾوﺗر ﻟﻬذا ﯾﺟب ﺗﺣدﯾد ﺳرﻋﺔ ﻣﻧﺎﺳﺑﺔ ﻟﻠطرﻓﺎن ﻟﯾﺗم اﻟﺗﻧﺳﯾق ﺑﯾﻧﻬﻣﺎ ﺑدون ﻓﻘد اى ﺑﯾﺎﻧﺎت ﻧﺗﯾﺟﺔ‬
‫إﺧﺗﻼف ﺳرﻋﺔ اﻻﺗﺻﺎل ﺑﯾﻧﻬﻣﺎ‪ ،‬ﻟﻬذا ﯾﺗم ﺗوﺣﯾد ﺳرﻋﺔ اﻻﺗﺻﺎل ﺑﯾن اﻻردوﯾﻧو واﻟﻛﻣﺑﯾوﺗر ﻣن ﺧﻼل اﻟﻘﯾﻣﺔ اﺳﻔل‬
‫اﻟﺷﺎﺷﺔ وﯾﺗم ﺣﺳﺎب اﻟﺳرﻋﺔ ﺑﺎﻟﻘﯾﻣﺔ ‪ ،baud‬ﻫﻧﺎ ﻧﺳﺗﺧدم اﻟﺳرﻋﺔ اﻻﻓﺗراﺿﯾﺔ وﻫﻰ ‪.9600 baud‬‬

‫ﺗﺸﻐﯿﻞ اﻟﺸﺎﺷﺔ اﻟﺘﺴﻠﺴﻠﯿﺔ‬


‫ﯾﺗم ﻛﺗﺎﺑﺔ ﺳطر ﺑدأ اﻻﺗﺻﺎل ﺑﯾن اﻻردوﯾﻧو واﻟﻛﻣﺑﯾوﺗر ﻣﻊ ﺗﺣدﯾد ﺳرﻋﺔ اﻻﺗﺻﺎل ﻣن ﺧﻼل ﺳطر اﻻواﻣر داﺧل داﻟﺔ‬
‫)(‪void setup‬‬
‫;)‪Serial.begin(9600‬‬

‫ﯾﺗم إظﻬﺎر اﻟﻧﺗﺎﺋﺞ ﻋﻠﻰ اﻟﺷﺎﺷﺔ اﻟﺗﺳﻠﺳﻠﯾﺔ ﻣن ﺧﻼل ﺳطر اﻻواﻣر )‪ (serial print‬وﻣﻧﻬﺎ إظﻬﺎر ﻛﻠﻣﺎت ﻣﺣددة ﻓﯾﺗم‬
‫وﺿﻌﻬﺎ ﺑﯾن “ “‪ ،‬او إظﻬﺎر ﻗﯾﻣﺔ ﻣﺗﻐﯾر ﺑوﺿﻊ اﺳم اﻟﻣﺗﻐﯾر ﻣﺑﺎﺷرة ﻛﺎﻟﺗﺎﻟﻰ‬

‫;)"!‪Serial.println("Arduino from Zero to Hero‬‬ ‫طﺑﺎﻋﺔ اﻟﻛﻠﻣﺎت اﻟﻣوﺟودة ﺑﯾن " " ‪‬‬

‫طﺑﺎﻋﺔ ﻗﯾﻣﺔ اﻟﻣﺗﻐﯾر ﻓﻘط ‪Serial.println(results); ‬‬

‫‪72‬‬
ARDUINO FROM ZERO TO HERO

‫ إظﮭﺎر درﺟﺔ اﻟﺤﺮارة ﻣﻦ ﺧﻼل اﻟﺸﺎﺷﺔ اﻟﺘﺴﻠﺴﻠﯿﺔ‬:11 # ‫اﻟﻤﺸﺮوع‬


‫ ﺗم ﺗﻧﻔﯾذ ﻫذا‬،‫ﯾﻬدف ﻫذا اﻟﻣﺷروع اﻟﻰ ﻋرض درﺟﺔ اﻟﺣ اررة ﺑﺎﻟﻘﯾﻣﺔ ﺳﯾﻠزﯾوس وﻓﻬرﻧﻬﺎﯾت ﻣن ﺧﻼل اﻟﺷﺎﺷﺔ اﻟﺗﺳﻠﺳﻠﯾﺔ‬
‫اﻟﺑرﻧﺎﻣﺞ ﻣن ﻗﺑل ﺑﺎﺳﺗﺧدام اﻟﻠﯾد‬
float celsius = 0;
float fahrenheit = 0;
void setup()
{
Serial.begin(9600);
}
void findTemps()
{
float voltage = 0;
float sensor = 0;
sensor = analogRead(0);
voltage = (sensor * 5000) / 1024; // convert the raw sensor value to millivolts
voltage = voltage - 500; // remove the voltage offset
celsius = voltage / 10; // convert millivolts to Celsius
fahrenheit = (1.8 * celsius) + 32; // convert Celsius to Fahrenheit
}
void displayTemps()
{
Serial.print("Temperature is ");
Serial.print(celsius, 2);
Serial.print(" deg. C / ");
Serial.print(fahrenheit, 2);
Serial.println(" deg. F");
// use .println here so the next reading starts on a new line
}
void loop()
{
findTemps();
displayTemps();
delay(1000);
}

‫ﺗظﻬر اﻟﻧﺗﺎﺋﺞ ﻋﻠﻰ اﻟﺷﺎﺷﺔ ﺑﺎﻟﺷﻛل اﻟﺗﺎﻟﻰ‬

73
‫‪ARDUINO FROM ZERO TO HERO‬‬

‫‪while‬‬ ‫إﺗﺨﺎذ ﻗﺮارت ﺑﺈﺳﺘﺨﺪام‬


‫ﯾﻣﻛﻧك إﺗﺧﺎذ ﻗ اررات داﺧل اﻻﺳﻛﺗش ﺑﻧﺎء ﻋﻠﻰ ﺷروط ﻣﻌﯾﻧﺔ‪ ،‬ﻣﺛﻼ ﯾﻣﻛﻧك ﺗﻧﻔﯾذ ﺳطور اواﻣر ﻣﻌﯾﻧﺔ ﻓﻰ ﺣﺎﻟﺔ ﺻﺣﺔ‬
‫ﺷرط ﻣﻌﯾن‪ ،‬طﺎﻟﻣﺎ ان اﻟﺷرط ﺻﺣﯾﺢ ﻓﯾﺗم ﺗﻧﻔﯾذ ﺑﻌض ﺳطور اﻻواﻣر وذﻟك ﻣن ﺧﻼل إﺳﺗﺧدام اﻟﺟﻣﻠﺔ اﻟﺷرطﯾﺔ‬
‫‪ ،while‬ﻓﻣﺛﻼ ﯾﻣﻛن ان ﻧﺣﺗﺎج اﻟﻰ اﻟﺗﺄﻛد ﻣن ان ﻗﯾﻣﺔ )‪ (a‬اﻗل ﻣن )‪ (10‬ﻟﯾﺗم ﺗﻧﻔﯾذ ﺑﻌض اﻻواﻣر ﻛﺎﻟﺗﺎﻟﻰ‬
‫;‪int a = 0‬‬
‫) ‪while ( a < 10‬‬
‫{‬
‫;‪a = a + 1‬‬
‫;)‪delay(1000‬‬
‫}‬

‫ﻫﻧﺎ ﻧﺟد اﻧﻪ طﺎﻟﻣﺎ اﻟﺷرط ﺻﺣﯾﺢ ) ‪ (a < 10‬ﻓﯾﺗم ﺗﻧﻔﯾذ اﻻواﻣر اﻟﻣوﺟودة ﺑﯾن }{ وﻓﻰ ﻛل ﻣرة ﯾﺗم ﺗﻧﻔﯾذ اﻻواﻣر ﻣﺎ ﺑﯾن‬
‫}{ ﻓﯾﻬﺎ ﯾﺗم زﯾﺎدة ﻗﯾﻣﺔ )‪ (a‬ﺑﻣﻘدار واﺣد ﺻﺣﯾﺢ‪ ،‬إﻟﻰ ان ﺗﺻﺑﺢ ﻗﯾﻣﺔ )‪ (a = 10‬وﻫﻧﺎ ﻻﯾﺗﺣﻘق اﻟﺷرط ﻓﻼ ﯾﺗم ﺗﻧﻔﯾذ‬
‫اﻻواﻣر اﻟﺧﺎﺻﺔ ﺑﺟﻣﻠﺔ )‪ ،(while‬ﺛم ﯾﺗم اﻻﻧﺗﻘﺎل اﻟﻰ اﻻواﻣر اﻟﺗﻰ ﺗﻠﯾﻬﺎ ﺣﺗﻰ ﺗﻧﻔﯾذ ﻛل اواﻣر اﻟداﻟﺔ اﻟﺗﻛ اررﯾﺔ ‪void‬‬
‫‪.loop‬‬

‫‪do-while‬‬ ‫إﺗﺨﺎذ ﻗﺮارت ﺑﺈﺳﺘﺨﺪام‬


‫ﻻﺣظﻧﺎ ﻓﻰ ﺟﻣﻠﺔ )‪ (while‬ان اﻟﺷرط ﯾﺗم اﻟﺗﺣﻘق ﻣن ﺻﺣﺗﻪ ﻗﺑل ﺗﻧﻔﯾذ اﻻواﻣر ﺑﯾن }{‪ ،‬اﻣﺎ ﻟو اردﻧﺎ ﻋﻛس ذﻟك وﻫو‬
‫ﺗﻧﻔﯾذ اﻻواﻣر ﺑﯾن }{ اوﻻً ﺛم اﻟﺗﺣﻘق ﻣن ﺻﺣﺔ اﻟﺷرط )ﻋﻠﻰ اﻻﻗل ﯾﺗم ﺗﻧﻔﯾذ اﻻواﻣر ﺑﯾن }{ ﻣرة واﺣدة ﺣﺗﻰ ٕوان ﻛﺎن‬
‫اﻟﺷرط ﻏﯾر ﺻﺣﯾﺢ(‪ ،‬ﻟﻬذا ﯾوﺟد اﻟﺧﯾﺎران اﻣﺎﻣك ﻟﻛﻰ ﺗﺳﺗﺧدم ﻣﺎ ﺗرﯾد طﺑﻘﺎ ﻟﻣﺗطﻠﺑﺎت اﻟﺑرﻧﺎﻣﺞ اﻟﺧﺎص ﺑك‪.‬‬

‫ﻣﺛﺎل‪ :‬ﺳﯾﺗم ﺗﻧﻔﯾذ اواﻣر اﻟﻣﺛﺎل اﻟﺳﺎﺑق اﻟﺧﺎﺻﺔ ﺑﺟﻣﻠﺔ )‪ (while‬وﻟﻛن ﻣرة واﺣدة ﻓﻘط ﻗﺑل اﻟﺗﺄﻛد ﻣن ﺻﺣﺔ اﻟﺷرط‬
‫ﻛﺎﻟﺗﺎﻟﻰ‬
‫;‪int a = 0‬‬
‫‪do‬‬
‫{‬
‫;)‪delay(1000‬‬
‫;‪a = a + 1‬‬
‫;) ‪} while ( a < 100‬‬

‫‪74‬‬
‫‪ARDUINO FROM ZERO TO HERO‬‬

‫ﺗﺨﺰﯾﻦ اﻟﻤﺪﺧﻼت داﺧﻞ اﻻدروﯾﻨﻮ‬


‫ﻋﻧدﻣﺎ ﯾﺗم إدﺧﺎل ﺑﯾﺎﻧﺎت اﻟﻰ اﻻردوﯾﻧو ﻣن ﺧﻼل ﻟوﺣﺔ اﻟﻣﻔﺎﺗﯾﺢ‪ ،‬ﯾﺗم إرﺳﺎل ﺗﻠك اﻟﺑﯾﺎﻧﺎت اﻟﻰ اﻻردوﯾﻧو ﻣن ﺧﻼل‬
‫اﻟﻛﺎﺑل ‪ USB‬اﻟﻣﺗﺻل ﺑﺎﻟﻛﻣﺑﯾوﺗر وﻋﻧدﻣﺎ ﺗﺻل اﻟﺑﯾﺎﻧﺎت اﻟﻰ اﻻردوﯾﻧو ﯾﺗم إﺳﺗﻘﺑﺎﻟﻬﺎ ﻣن ﺧﻼل اﻻطراف )‪(0 + 1‬‬
‫اﻟدﯾﺟﯾﺗﺎل‪ ،‬وﻧﻼﺣظ ان ﻫذان اﻟطرﻓﺎن ﻣﻛﺗوب ﻋﻠﯾﻬﻣﺎ )‪ ،RX (Receiving data‬واﯾﺿﺎ )‪TX ( Transmitting data‬‬
‫وﻟﻬﻣﺎ ﻟﯾدان )ﺗم اﻻﺷﺎرة اﻟﯾﻬﻣﺎ ﻓﻰ اﻟﻔﺻل اﻻول(‪ ،‬وﺑﻣﺟرد ان ﺗم إﺳﺗﻘﺑﺎل اﻟﺑﯾﺎﻧﺎت ﻣن ﺧﻼل اﻻطراف )‪ (0+1‬ﯾﺗم‬
‫ﺗﺧزﯾن ﺗﻠك اﻟﺑﯾﺎﻧﺎت ﻓﻰ ﻣﺧزن ﻣؤﻗت داﺧل اﻻردوﯾﻧو ﻟﯾﺗم اﻟﺗﻌﺎﻣل ﻣﻌﻬﺎ ﻻﺣﻘﺎً‪ ،‬ﻫذا اﻟﻣﺧزن اﻟﻣؤﻗت ﯾﺳﻣﻰ ‪Serial‬‬
‫‪.buffer‬‬

‫اﻟﻤﺸﺮوع ‪ :12 #‬ﺿﺮب اﻟﺮﻗﻢ ‪2 X‬‬


‫ﯾﻬدف ﻫذا اﻟﻣﺷروع اﻟﻰ إدﺧﺎل ارﻗﺎم اﻟﻰ اﻻردﯾوﻧو ﻣن ﺧﻼل ﻟوﺣﺔ اﻟﻣﻔﺎﺗﯾﺢ اﻟﺧﺎﺻﺔ ﺑﺎﻟﻛﻣﺑﯾوﺗر ﻓﯾﺗم ﻣﺿﺎﻋﻔﺔ اﻟ رﻗم‬
‫ٕواظﻬﺎر اﻟﻧﺗﯾﺟﺔ ﻋﻠﻰ اﻟﺷﺎﺷﺔ اﻟﺗﺳﻠﺳﻠﯾﺔ ‪.‬‬

‫اﻻﺳﻜﺘﺶ‬
‫;‪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 variables ‫اﻟﻤﺘﻐﯿﺮات اﻟﻜﺒﯿﺮة‬


32,767 ‫اﻟﻣﺗﻐﯾرات اﻟﺻﺣﯾﺣﺔ ﯾﺗم ﺗﺧزﯾﻧﻬﺎ ﻓﻰ ﻣﻛﺎن ﻣﺧﺻص ﻟﻬﺎ ﻓﻰ ذاﻛرة اﻻردوﯾﻧو واﻟذى ﻻﯾﻘﺑل ارﻗﺎم اﻛﺑر ﻣن‬
‫ﻟﻬذا ﻧﺣﺗﺎج اﻟﻰ ﻣﺳﺎﺣﺔ ﺗﺧزﯾن اﻛﺑر ﻟﻛﻰ ﺗﻘﺑل ارﻗﺎم اﻛﺑر ﻟﻬذا ﻧﺳﺗﺧدم اﻟﻣﺗﻐﯾرات اﻟﻛﺑﯾرة اﻟﺗﻰ ﻟﻬﺎ ﻗدرة ﺗﺧزﯾن ﺣﺗﻰ‬
.2,147,483

‫ اﺳﺘﺨﺪام اﻟﻤﺘﻐﯿﺮات اﻟﻜﺒﯿﺮة‬:13 # ‫اﻟﻤﺸﺮوع‬


2 X ‫ﯾﻬدف ﻫذا اﻟﻣﺷروع اﻟﻰ إدﺧﺎل ﻣﺗﻐﯾرات ﻛﺑﯾرة ﻣن ﺧﻼل اﻟﺷﺎﺷﺔ اﻟﺗﺳﻠﺳﻠﯾﺔ ﺛم ﺿرب اﻻرﻗﺎم اﻟﻣدﺧﻠﺔ‬

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

// from it to convert it to the actual integer number


a = Serial.read() - '0';
// add this value a into the accumulating number
number = number + a;
// allow a short delay for more serial data to come into Serial.available
delay(5);
}
Serial.print("You entered: ");
Serial.println(number);
Serial.print(number);
Serial.print(" multiplied by two is ");
number = number * 2;
Serial.println(number);
}

‫ﺗظﻬر اﻟﻧﺗﺎﺋﺞ ﻋﻠﻰ اﻟﺷﺎﺷﺔ ﺑﺎﻟﺷﻛل اﻟﺗﺎﻟﻰ‬

،‫ﻣﺎذا ﺑﻌﺪ‬
‫ﺗﻌﻠﻣﻧﺎ ﻓﻰ ﻫذا اﻟﻔﺻل ﻛﺗﺎﺑﺔ دوال ﺧﺎﺻﺔ ﺑﻧﺎ ﻛﻰ ﺗﺳﺎﻋد ﻋﻠﻰ ﺳﻬوﻟﺔ وﺳرﻋﺔ ﺗﻧﻔﯾذ اﻟﺑراﻣﺞ ﻣن ﺧﻼل إﺧﺗﺻﺎر ﺳطور‬
‫ ﻓﻰ اﻟﻔﺻل اﻟﺗﺎﻟﻰ ﺳوف ﺑﻛﺗب ﻋدة دوال‬،‫ وﻗد ﺗم اﻟﺗدرﯾب ﻋﻠﯾﻬﺎ ﻣن ﺧﻼل ﺑﻌض اﻟﻣﺷروﻋﺎت‬، ‫اﻻواﻣر اﻟﻰ ﻋدد أﻗل‬
......‫ ﻫل اﻧت ﻣﺳﺗﻌد؟ ﻫﯾﺎ ﺑﻧﺎ‬،‫اﺧرى ﻟﺗﺳﺎﻋدﻧﺎ ﻓﻰ ﺗﻧﻔﯾذ ﻣﺷروﻋﺎﺗﻧﺎ اﻟﺟدﯾدة‬

77
‫‪ARDUINO FROM ZERO TO HERO‬‬

‫‪6‬‬
‫اﻻرﻗﺎم‪ ،‬اﻟﻤﺘﻐﯿﺮات‪ ،‬واﻟﻌﻤﻠﯿﺎت اﻟﺤﺴﺎﺑﯿﺔ‬

‫ﺧﻼل ﻫذا اﻟﻔﺻل ﺳوف ﻧﺗﻌرف ﻋﻠﻰ اﻟﻌدﯾد ﻣن اﻟﺧﺻﺎﺋص اﻟﺟدﯾدة اﻟﺗﻰ ﺗﺳﺎﻋدﻧﺎ ﻋﻠﻰ ﺗﻧﻔﯾذ ﻣﺷروﻋﺎت اﻛﺛر ﻣﺗﻌﺔ‬
‫وﻗوة‪ ،‬ﻣﺛل اﻟﺣﺻول ﻋﻠﻰ ارﻗﺎم ﻋﺷواﺋﯾﺔ‪ ،‬وﻋﻣل ﻣﺻﻔوﻓﺎت‪ ،‬وﻛﯾﻔﯾﺔ اﻟﺗﻌﺎﻣل ﻣﻊ ﺷﺎﺷﺔ ‪ LED‬ﻹظﻬﺎر ﺑﯾﺎﻧﺎت وﺻور‪.‬‬

‫ﺗﻮﻟﯿﺪ ارﻗﺎم ﻋﺸﻮاﺋﯿﺔ‬


‫ﺗﺳﺗﺧدم اﻻرﻗﺎم اﻟﻌﺷواﺋﯾﺔ داﺋﻣﺎً ﻓﻰ اﻻﻟﻌﺎب واﻟﺣﺻول ﻋﻠﻰ ﺗﺄﺛﯾرات ﺿؤﯾﺔ ﻣﺧﺗﻠﻔﺔ‪ ،‬ﻟﻬذا ﺳوف ﻧﺗﻌﻠم ﻛﯾف ﯾﻣﻛﻧﻧﺎ‬
‫إﺳﺗﺧدام اﻻردوﯾﻧو ﻓﻰ ﺗوﻟﯾد ارﻗﺎم ﻋﺷواﺋﯾﺔ‪.‬‬

‫ﺗﻮﻟﯿﺪ ارﻗﺎم ﻋﺸﻮاﺋﯿﺔ ﻣﻦ اﻟﻤﻮﺟﺎت اﻟﻜﮭﺮﺑﯿﺔ ﺑﺎﻟﮭﻮاء‬


‫ﯾﻣﻛﻧﻧﺎ إﺳﺗﺧدام طرف اﻧﺎﻟوج ﻣن اطراف اﻻردوﯾﻧو ﻟﻘراءة ﻗﯾﻣﺔ اﻟﺗﯾﺎر اﻟﻛﻬرﺑﻰ اﻟﻣﺣﯾط ﺑﻪ )ﺗﺳﻣﻰ اﻟﻛﻬرﺑﺎء اﻻﺳﺗﺎﺗﯾﻛﯾﺔ(‬
‫واﻟﺗﻰ ﺗﺗﻐﯾر داﺋﻣﺎ‪ ،‬وذﻟك ﻣن ﺧﻼل ﻫذا اﻻﻣر)ﻗراءة ﻗﯾﻣﺔ اﻟﺗﯾﺎر اﻟﻛﻬرﺑﻰ اﻟﻣﺣﯾط ﺑﺎﻟطرف ‪ 0‬اﻧﺎﻟوج(‬
‫;))‪randomSeed(analogRead(0‬‬

‫ﯾﻣﻛﻧﻧﺎ ﺗﺣدﯾد ﻣدى اﻻرﻗﺎم اﻟﻌﺷواﺋﯾﺔ‪ ،‬ﻓﻣﺛﻼ ﻟو ﻧرﯾد رﻗم ﺑﯾن )‪ (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‬‬

‫اﻟﻤﺸﺮوع ‪ :14 #‬ﺗﻮﻟﯿﺪ ارﻗﺎم ﻋﺸﻮاﺋﯿﺔ ﺧﻼل ﻣﺼﺪران ﻣﺨﺘﻠﻔﺎن‬


‫ﯾﻣﻛﻧﻧﺎ ان ﻧﺳﺗﺧدم ﺗﻠك اﻻواﻣر ﺧﻼل ﻣﺷروع ﺑﺳﯾط‪ ،‬واﻟذى ﯾﻘوم ﺑﺗوﻟﯾد ارﻗﺎم ﻋﺷواﺋﯾﺔ ﻣن ﺧﻼل اﻟﻣدى )‪(0:1000‬‬
‫واﯾﺿﺎ اﻟﻣدى )‪ (10:51‬ﻟﻬذا ﯾﺻﺑﺢ اﻻﺳﻛﺗش ﺑﺎﻟﺷﻛل اﻟﺗﺎﻟﻰ‬
‫;‪int r = 0‬‬
‫)(‪void setup‬‬
‫{‬
‫;))‪randomSeed(analogRead(0‬‬
‫;)‪Serial.begin(9600‬‬
‫}‬
‫)(‪void loop‬‬
‫{‬
‫;)" ‪Serial.print("Random number between zero and 1000 is:‬‬
‫;)‪r = random(0, 1001‬‬
‫;)‪Serial.println(r‬‬
‫;)" ‪Serial.print("Random number between ten and fifty is:‬‬
‫;)‪r = random(10, 51‬‬
‫;)‪Serial.println(r‬‬
‫;)‪delay(1000‬‬
‫}‬

‫ﻧﻼﺣظ إﻧﻧﺎ إﺳﺗﺧدﻣﻧﺎ اﻻﻣر )‪ (random‬واﻟذى ﯾﺧﺗﺎر رﻗم ﻋﺷواﺋﻰ ﻣن اﻟﻣدى اﻟذى ﯾﻠﯾﻪ‪.‬‬

‫ﺗظﻬر اﻟﻧﺗﺎﺋﺞ ﻋﻠﻰ اﻟﺷﺎﺷﺔ ﺑﺎﻟﺷﻛل اﻟﺗﺎﻟﻰ‬

‫‪79‬‬
‫‪ARDUINO FROM ZERO TO HERO‬‬

‫‪Binary system‬‬ ‫اﻟﻨﻈﺎم اﻟﺜﻨﺎﺋﻰ‬


‫ﻧﺣن ﻧﺳﺗﺧدم اﻻرﻗﺎم ﻣن )‪ (0:9‬وﻫﻰ ﻋﺷرة ارﻗﺎم ﻟﻬذا ﯾﺳﻣﻰ اﻟﻧظﺎم اﻟﻌﺷرى‪ ،‬اﻣﺎ اﻟﻛﻣﺑﯾوﺗر ﻓﯾﺳﺗﺧدم ﺣﺎﻟﺔ اﻟﺳﻠك واﻟﺗﻰ‬
‫ﺗﻌﻧﻰ ﻫل ﯾﻣر ﺑداﺧﻠﻪ ﻛﻬرﺑﺎء ) ‪ ( 1 = ON = HIGH‬او ﻻ ﯾﻣر ﺑداﺧﻠﻪ ﻛﻬرﺑﺎء ) ‪ ،( 0 = OFF = LOW‬ﻟﻬذا ﯾﺳﻣﻰ‬
‫ﺑﺎﻟﻧظﺎم اﻟﺛﻧﺎﺋﻰ ﻹﻋﺗﻣﺎدﻩ ﻋﻠﻰ رﻗﻣﺎن ﻓﻘط )‪.(0:1‬‬

‫ﻟﻠﺗﺣوﯾل ﻣن اﻟﻧظﺎم اﻟﺛﻧﺎﺋﻰ اﻟﻰ اﻟﻧظﺎم اﻟﻌﺷرى‪ ،‬ﯾﺗم وﺿﻊ اﻻﺳﺎس رﻗم ‪ 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‬‬ ‫زﯾﺎدة اطﺮاف اﻻردوﯾﻨﻮ ﺑﺈﺳﺘﺨﺪام‬


‫اﺣﯾﺎﻧﺎ ﻧﺣﺗﺎج اﻟﻰ اطراف اﻛﺛر ﻣن )‪ (13‬طرف دﯾﺟﯾﺗﺎل اﻟﺧﺎص ﺑﺎﻻردوﯾﻧو‪ ،‬ﻟﻬذا ﺗم ﺗطوﯾر ‪ IC‬ﯾﺳﻣﻰ ) ‪shift‬‬
‫‪ (register‬ﯾﺣﺗوى ﻋﻠﻰ )‪ (8‬اطراف دﯾﺟﯾﺗﺎل ﻛﺧرج‪ ،‬وﯾﺗﺻل ﺑﺎﻻردوﯾﻧو ﻣن ﺧﻼل )‪ (3‬اطراف دﯾﺟﯾﺗﺎل ﻛدﺧل‪ ،‬ﻟﻬذا‬
‫ﻧﺣﺻل ﻣﻧﻪ )‪ (shift register‬ﻋﻠﻰ )‪ (5‬اطراف اﻛﺛر‪ ،‬ﻫﻧﺎك اﻧواع اﺧرى ﻣﺧﺗﻠﻔﺔ ﻓﻰ ﻋدد اﻻطراف ﯾﻣﻛﻧك إﺳﺗﺧدام ﻣﺎ‬
‫ﯾﻧﺎﺳب ﻣﺷروﻋك‪.‬‬

‫ﻓﻛرة ﻋﻣل )‪ (shift register‬ﺑﺳﯾطﺔ ﺣﯾث ﺗﻌﺗﻣد ﻋﻠﻰ إرﺳﺎل ‪ byte‬واﺣد اﻟﻰ )‪ (shift register‬ﻓﯾﺗم إرﺳﺎل إﺷﺎرة‬
‫ﻛﻬرﺑﯾﺔ ﻟﻛل )‪ (bit‬ﯾﺣﺗوى ﻋﻠﻰ رﻗم )‪ (1‬وﻋدم إرﺳﺎل إﺷﺎرة ﻛﻬرﺑﯾﺔ ﻟﻛل )‪ (bit‬ﯾﺣﺗوى ﻋﻠﻰ رﻗم )‪ .(0‬ﻣﺛﻼً ﻟو ﺗم إرﺳﺎل‬
‫ﻫذا )‪ (B10000110‬ﻓﺳﯾﺗم إرﺳﺎل إﺷﺎرة ﻛﻬرﺑﯾﺔ ﻣن ﺧﻼل اﻻطراف اﻟﺗﺎﻟﯾﺔ ‪) 1+2+7‬اﻟﺗرﻗﯾم ﯾﺑدأ ب ‪ 0‬ﻓﻰ ﻧظﺎم اﻟﻛﻣﺑﯾوﺗر‬
‫واﻻردوﯾﻧو ﻛﻣﺎ ﻋﻠﻣﻧﺎ ﻣن ﻗﺑل(‪ ،‬ﯾﻣﻛن ﺗوﺻﯾل اﻛﺛر ﻣن )‪ (shift register‬ﻣﻌﺎ ﻓﻰ ﻧﻔس اطراف اﻻردوﯾﻧو ﻟﻠﺣﺻول‬
‫ﻋﻠﻰ اطراف اﻛﺛر ﻹﺿﺎءة اﻛﺛر ﻣن ﻟﯾد ﻓﻰ ﻧﻔس اﻟوﻗت ﻛﻣﺎ ﺳﻧرى اﻻن‪.‬‬

‫‪81‬‬
‫‪ARDUINO FROM ZERO TO HERO‬‬

‫اﻟﻤﺸﺮوع ‪ :15 #‬ﻋﺮض اﻻرﻗﺎم اﻟﺜﻨﺎﺋﯿﺔ ﻣﻦ ﺧﻼل إﺿﺎءة اﻟﻠﯿﺪ‬


‫ﯾﻬدف ﻫذا اﻟﻣﺷروع اﻟﻰ ﻋرض اﻻرﻗﺎم ﻣن ‪ 0-255‬ﻣن ﺧﻼل اﻟﻧظﺎم اﻟﺛﻧﺎﺋﻰ ﺑﺈﺿﺎءة اﻟﻠﯾدات اﻟﻣﻘﺎﺑﻠﺔ ﻟﻛل رﻗم ﻋﺷرى‪.‬‬

‫ﻣﺘﻄﻠﺒﺎت اﻟﻤﺸﺮوع‬
‫‪ ،74HC595 shift register -١‬ﻋدد ‪.3‬‬
‫‪ -٢‬ﻣﻘﺎوﻣﺔ ﻗﯾﻣﺗﻬﺎ ‪ 560‬اوم‪ ،‬ﻋدد ‪.8‬‬
‫‪ -٣‬ﻟﯾد ذو اﻟﻠون ﻣﺧﺗﻠﻔﺔ‪ ،‬ﻋدد ‪.٨‬‬
‫‪ -٤‬ﻟوﺣﺔ ﺗﺟﺎرب‪ ،‬ﻋدد ‪.1‬‬
‫‪ -٥‬اﺳﻼك ﺗوﺻﯾل ﻣﺧﺗﻠﻔﺔ اﻟﻣﻘﺎﺳﺎت‪.‬‬
‫‪ -٦‬ﻟوﺣﺔ اردوﯾﻧو ووﺻﻠﺔ ‪.USB‬‬

‫‪shift register‬‬ ‫اﻟﺘﺼﻤﯿﻢ اﻟﮭﻨﺪﺳﻰ اﻟﺨﺎص‬

‫ﻧﻼﺣظ ان‬

‫‪ -١‬اﻻطراف ‪ Q1‬اﻟﻰ ‪ Q7‬ﻣﻊ ‪ Q15‬ﻫﻰ ‪ 8‬اطراف ﻟﺗوﯾل اﻟﻠﯾداﺗز‬


‫‪ -٢‬اﻟطرف رﻗم ‪ 8‬ﯾﺗم ﺗوﺻﯾﻠﻪ ﺑﺎﻻرﺿﻰ‪.‬‬
‫‪ -٣‬اﻟطرف رﻗم ‪ 9‬ﯾﺗﺻل ﻣﻊ ‪ shift register‬اﺧر ﻟو ﻫﻧﺎك ﺣﺎﺟﺔ اﻟﯾﻪ‪.‬‬
‫‪ -٤‬اﻟطرف ‪ 10‬ﻣﺗﺻل ﺑطرف اﻟﻛﻬرﺑﺎء ‪.5v‬‬
‫‪ -٥‬اﻟطرف ‪ 11‬ﻟﻠﺗﺣﻛم ﻓﻰ ‪.clock‬‬
‫‪ -٦‬اﻟطرف ‪ 12‬ﻟﻠﺗﺣﻛم ﻓﻰ ‪.latch‬‬

‫‪82‬‬
ARDUINO FROM ZERO TO HERO

.‫ ﯾﺳﺗﻘﺑل اﻟﺑﯾﺎﻧﺎت ﻣن اﻻردوﯾﻧو‬14 ‫ اﻟطرف‬-٧


.‫ ﻣن اﻻردوﯾﻧو‬5v ‫ ﯾﺳﺗﻘﺑل ﻛﻬرﺑﺎء‬15 ‫ اﻟطرف‬-٨

shift register ‫اﻟﺘﺼﻤﯿﻢ اﻟﮭﻨﺪﺳﻰ ﻟﻼردوﯾﻨﻮ ﻣﻊ‬

‫اﻻﺳﻜﺘﺶ‬
#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‬ﻛﻔﺗرة إﺿﺎءة ﺗﻠك اﻟﻠﯾدات‪.‬‬

‫اﻟﻤﺸﺮوع ‪ :16 #‬ﻋﻤﻞ ﻟﻌﺒﺔ اﻟﺘﺤﻮﯾﻞ ﺑﯿﻦ اﻻرﻗﺎم‬


‫ﯾﻬدف ﻫذا اﻟﻣﺷروع اﻟﻰ ﻋرض رﻗم ﺛﻧﺎﺋﻰ ﻋﺷواﺋﻰ ﻣن ﺧﻼل اﻟﻠﯾدات‪ ،‬ﻓﯾﻘوم اﻟﻣﺳﺗﺧدم ﺑﺈدﺧﺎل اﻟﻘﯾﻣﺔ اﻟﻣﻘﺎﺑﻠﺔ ﻟﻬذا‬
‫اﻟرﻗم ﺑﺎﻟﻧظﺎم اﻟﻌﺷرى‪ ،‬ﻟو اﻻﺟﺎﺑﺔ ﺻﺣﯾﺣﺔ ﺳوف ﯾذﻫب اﻟﻣﺳﺗﺧدم اﻟﻰ اﻟﺳؤال اﻟﺗﺎﻟﻰ وﻫﻛذا‪.‬‬

‫اﻟﺨﻮارزﻣﯿﺔ‬
‫ﯾﻣﻛن ﺗﻘﺳﯾم اﻟﺑرﻧﺎﻣﺞ اﻟﻰ ﺛﻼث دوال ﻛﺎﻟﺗﺎﻟﻰ‬

‫‪ -١‬داﻟﺔ ﺗﻌرض ﻟﻠﻣﺳﺗﺧدم رﻗم ﺛﻧﺎﺋﻰ ﺑﺷﻛل ﻋﺷواﺋﻰ ﻣن ﺧﻼل اﻟﻠﯾدات‪.‬‬


‫‪ -٢‬داﻟﺔ ﺗﺳﺗﻘﺑل ﻣن اﻟﻣﺳﺗﺧدم اﻟﻘﯾﻣﺔ اﻟﻌﺷرﯾﺔ اﻟﻣﻘﺎﺑﻠﺔ ﻟﻠرﻗم اﻟظﺎﻫر اﻣﺎﻣﻪ‪.‬‬
‫‪ -٣‬داﻟﺔ ﻣﻘﺎرﻧﺔ اﻟرﻗم اﻟﻌﺷرى واﻟرﻗم اﻟﺛﻧﺎﺋﻰ وﻋرض ﻧﺗﯾﺟﺔ اﻟﺳؤال ﻋﻠﻰ اﻟﺷﺎﺷﺔ‪ ،‬ﻣﻊ إظﻬﺎر اﻟﻧﺗﯾﺟﺔ اﻟﺻﺣﯾﺣﺔ‬
‫ﻓﻰ ﺣﺎﻟﺔ ان إﺟﺎﺑﺔ اﻟﻣﺳﺗﺧدم ﺧﺎطﺋﺔ‪.‬‬

‫اﻻﺳﻜﺘﺶ‬
‫‪#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

shiftOut(DATA, CLOCK, MSBFIRST, a);


digitalWrite(LATCH, HIGH);
}
w void getAnswer()
{
// receive the answer from the player
int z = 0;
Serial.flush();
while (Serial.available() == 0)
{
// do nothing until something comes into the serial buffer
}
// 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
answer = answer * 10;
// read the next number in the buffer and subtract the character '0'
// from it to convert it to the actual integer number
z = Serial.read() - '0';
// add this digit into the accumulating value
answer = answer + z;
// allow a short delay for any more numbers to come into Serial.available
delay(5);
}
Serial.print("You entered: ");
Serial.println(answer);
}
x void checkAnswer()
{
//check the answer from the player and show the results
if (answer == number) // Correct!
{
Serial.print("Correct! ");
Serial.print(answer, BIN);
Serial.print(" equals ");
Serial.println(number);
Serial.println();
}
else // Incorrect
{
Serial.print("Incorrect, ");
Serial.print(number, BIN);
Serial.print(" equals ");
Serial.println(number);
Serial.println();
}
answer = 0;
delay(10000); // give the player time to review his or her answers
}
void loop()
{
number = random(256);
displayNumber(number);
Serial.println("What is the binary number in base-10? ");
getAnswer();
checkAnswer();
}

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‬‬
‫}‬

‫وﺗظﻬر ﻧﺗﯾﺟﺔ ﺗﻧﻔﯾذ اﻟﺑرﻧﺎﻣﺞ ﻋﻠﻰ اﻟﺷﺎﺷﺔ ﺑﺎﻟﺷﻛل اﻟﺗﺎﻟﻰ‬

‫ﻋﺮض اﻻرﻗﺎم ﻣﻦ ﺧﻼل اﻟﺸﺎﺷﺔ اﻟﺴﺒﺎﻋﯿﺔ ‪seven-segment‬‬


‫ﯾﻣﻛن ﻋرض اﻻرﻗﺎم ﻣن ﺧﻼل ﻋدة طرق ﻣﺧﺗﻠﻔﺔ‪ ،‬ﻟﻛن ﻣن اﻫم ﺗﻠك اﻟطرف ﻫﻰ اﻟﺷﺎﺷﺔ اﻟﺳﺑﺎﻋﯾﺔ ‪(seven-‬‬
‫)‪ segment‬واﻟﺗﻰ ﻧراﻫﺎ ﻛﺛﯾ ار ﺣوﻟﻧﺎ ﺧﺎﺻﺔ ﻓﻰ اﻟﻣﺻﺎﻋد واﻟﺑﻧوك‪ ،‬وﻫﻰ ﺑﺎﻟﺷﻛل اﻟﺗﺎﻟﻰ‬

‫ﺗﺣﺗوى ﻫذﻩ اﻟﻘطﻌﺔ ﻋﻠﻰ ﺳﺑﻊ ﻟﯾدات‪ ،‬وﯾﻣﻛن ﻣن ﺧﻼﻟﻬﺎ ﻋرض اﻻرﻗﺎم اﻟﻌﺷرﯾﺔ )‪ (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‬‬

‫اﻟﻤﺸﺮوع ‪ :17 #‬إظﮭﺎر اﻻرﻗﺎم واﻟﺤﺮوف‬


‫ﯾﻬدف ﻫذا اﻟﻣﺷروع اﻟﻰ ﻋرض اﻻرﻗﺎم ﻣن )‪ (0:9‬واﯾﺿﺎ اﻟﺣروف ﻣن )‪.(A:F‬‬

‫ﻣﺘﻄﻠﺒﺎت اﻟﻤﺸﺮوع‬
‫‪‬‬
‫‪ ،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);
}
}

‫ﺗظﻬر اﻟﻧﺗﺎﺋﺞ ﻋﻠﻰ اﻟﺷﺎﺷﺔ ﺑﺎﻟﺷﻛل اﻟﺗﺎﻟﻰ‬

‫ﺗﻮﺻﯿﻞ اﻛﺜﺮ ﻣﻦ ﺷﺎﺷﺔ رﻗﻤﯿﺔ‬


‫( ﺣﯾث ﯾﺗم‬shift register) ‫ ﻓﯾﻣﻛﻧك ﺗوﺻﯾل اﺛﻧﺎن‬،‫ﯾﻣﻛن ﺗوﺻﯾل اﻛﺛر ﻣن ﺷﺎﺷﺔ رﻗﻣﯾﺔ ﻟﻠﺣﺻول ﻋﻠﻰ ارﻗﺎم اﻛﺛر‬
‫ وﻫﻧﺎ ﯾﻣﻛن إرﺳﺎل‬،‫( اﻟﺛﺎﻧﻰ‬shift register) ‫ اﻟﺧﺎص‬14 ‫( اﻻول ﺑﺎﻟطرف‬shift register) ‫ اﻟﺧﺎص‬9 ‫ﺗوﺻﯾل اﻟطرف‬

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‬‬

‫اﻟﻤﺸﺮوع ‪ :18 #‬اﻟﺘﺤﻜﻢ ﻓﻰ ﻛﺜﺮ ﻣﻦ ﺷﺎﺷﺔ ﺳﺒﺎﻋﯿﺔ‬


‫ﯾﻬدف ﻫذا اﻟﻣﺷروع اﻟﻰ إظﻬﺎر رﻗﻣﺎن ﻣن ﺧﻼل إﺳﺗﺧدام ﻋدد اﺛﻧﺎن ﺷﺎﺷﺔ ﺳﺑﺎﻋﯾﺔ‬

‫ﻣﺘﻄﻠﺒﺎت اﻟﻤﺸﺮوع‬
‫‪ ،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‬واﻟﺗﻰ ﻧﺳﺗﺧدﻣﻬﺎ ﺟﻣﯾﻌﺎً‪ ،‬واﻟﺗﻰ ﯾﻣﻛﻧك ﺗوﺻﯾﻠﻬﺎ ﺑﺎﻻردوﯾﻧو وﻋرض‬
‫اﻻرﻗﺎم واﻟﺣروف واﻟرﺳوﻣﺎت )ﻧﺣﺗﺎج اﻟﻰ ﺷﺎﺷﺔ ﺧﺎﺻﺔ ﻟﻌرض اﻟرﺳوم(‪.‬‬

‫ﺷﺎﺷﺔ ﻋﺮض اﻟﺤﺮوف‬


‫ﻫﻰ ﺷﺎﺷﺔ رﺧﯾﺻﺔ اﻟﺛﻣن ﺣﯾث اﻧﻬﺎ ﺗﻌرض ﻋدد ﻣﺣدود ﺟدا ﻣن اﻟﺣروف واﻻرﻗﺎم‪ ،‬ﺣﯾث ﯾﺗم ﺗﻌرﯾف ﻫذﻩ اﻟﺷﺎﺷﺔ ﺑﻌدد‬
‫اﻟﺻﻔوف واﻻﻋﻣدة‪ ،‬ﻓﻣﺛﻼً ﯾﻣﻛن إﺳﺗﺧدام ﺷﺎﺷﺔ ‪ 2x16‬واﻟﺗﻰ ﺗﻌﻧﻰ ﺻﻔﺎن‪ ،‬وﻛل ﺻف ﯾﻣﻛﻧﻪ ﻋرض ‪ 16‬ﺣرف او‬
‫رﻗم‪.‬‬

‫‪94‬‬
‫‪ARDUINO FROM ZERO TO HERO‬‬

‫ﻧﺟد ﻓﻰ اﻟﺻورة ﻣﻘﺎوﻣﺔ ﻗﯾﻣﺗﻬﺎ ‪ 10 kΩ‬ﺗﺳﺗﺧدم ﻟﻠﺗﺣﻛم ﻓﻰ درﺟﺔ وﺿوح اﻟﺷﺎﺷﺔ‪ ،‬اﻣﺎ ﺷرﯾط اﻟوﺻﻼت ﻓﯾﺗم ﺗوﺻﯾﻠﻪ‬
‫ﺑﺎﻟطرف اﻟﻌﻠوى ﻣن اﻟﺷﺎﺷﺔ واﻟذى ﯾﺳﻣﺢ ﺑﺗوﺻﯾل اﻟﺷﺎﺷﺔ ﻣﺑﺎﺷرة اﻟﻰ ﻟوﺣﺔ اﻟﺗﺟﺎرب ﻣﺛل اى ﺟﻬﺎز اﺧر‪ ،‬ﻫذا اﻟﺷرﯾط‬
‫ﯾﺣﺗوى ﻋﻠﻰ ‪ 16‬طرف ﻛﻣﺎ ﻫو ﻧﻔس ﻋدد اﻻطراف ﺑﺎﻟﺷﺎﺷﺔ‪.‬‬

‫ﯾﻣﻛن ﺟﻣﻠﺔ )‪ (Hello World‬ﻣن ﺧﻼل اﻟﺳطور اﻟﺗﺎﻟﯾﺔ‬


‫>‪#include <LiquidCrystal.h‬‬
‫‪LiquidCrystal lcd(4, 5, 6, 7, 8, 9); // pins for RS, E, DB4, DB5, DB6, DB7‬‬
‫)(‪void setup‬‬
‫{‬
‫;)‪lcd.begin(16, 2‬‬
‫;)(‪lcd.clear‬‬
‫}‬
‫)(‪void loop‬‬
‫{‬
‫;)‪lcd.setCursor(0, 5‬‬
‫;)"‪lcd.print("Hello‬‬
‫;)‪lcd.setCursor(1, 6‬‬
‫;)"!‪lcd.print("world‬‬
‫;)‪delay(10000‬‬
‫}‬

‫‪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‬‬

‫ﻹظﻬﺎر ﻛﻠﻣﺎت ﻋﻠﻰ اﻟﺷﺎﺷﺔ ﯾﺗم ﻣن ﺧﻼل اﻻﻣر اﻟﺗﺎﻟﻰ‬


‫;)"‪lcd.print("text‬‬

‫إظﮭﺎر اﻟﻤﺘﻐﯿﺮات واﻻرﻗﺎم‬


‫ﯾﻣﻛﻧك إظﻬﺎر ﻗﯾم اﻟﻣﺗﻐﯾرات ﻋﻠﻰ اﻟﺷﺎﺷﺔ وﺗﺣدﯾد ﻧوع اﻟﻣﺗﻐﯾر ﻛرﻗم ﺻﺣﯾﺢ او ﻋﺷرى‪ ،‬ﻓﻣﺛﻼ ﯾﻣﻛن إظﻬﺎر درﺟﺔ‬
‫اﻟﺣ اررة ﻛﻣﺗﻐﯾر ﻣن اﻟﻧوع اﻟﻌﺷرى وﺗﺣدﯾد ﻋدد اﻻرﻗﺎم اﻟظﺎﻫرة ﺑﻌد اﻟﻌﻼﻣﺔ اﻟﻌﺷرﯾﺔ ﻛﺎﻟﺗﺎﻟﻰ‬
‫;‪float pi = 3.141592654‬‬
‫;)" ‪lcd.print("pi:‬‬
‫;)‪lcd.print(pi, 3‬‬

‫ﻓﻰ اﻟﺳطر اﻻول ﺗم ﺗوﺿﯾﺢ ﻗﯾﻣﺔ اﻟﻣﺗﻐﯾر اﻟﻌﺷرى ﻛﺎﻣﻼً‪ ،‬اﻣﺎ اﻟﺳطر اﻟﺛﺎﻧﻰ ﺗم إظﻬﺎر اﻟﻛﻠﻣﺔ )‪ (pi:‬ﻓﻘط‪ ،‬اﻣﺎ ﻓﻰ‬
‫اﯾﺿﺎ ﺗﺣدﯾد ﻋدد اﻻرﻗﺎم ﺧﻠف اﻟﻌﻼﻣﺔ اﻟﻌﺷرﯾﺔ )‪.(3‬‬
‫اﻟﺳطر اﻻﺧﯾر ﻓﺗم إظﻬﺎر ﻗﯾﻣﺔ اﻟﻣﺗﻐﯾر )‪ (pi‬و ً‬

‫ﺗظﻬر اﻟﻧﺗﯾﺟﺔ ﻋﻠﻰ اﻟﺷﺎﺷﯨﺔ ﺑﺎﻟﺷﻛل اﻟﺗﺎﻟﻰ‬

‫‪96‬‬
‫‪ARDUINO FROM ZERO TO HERO‬‬

‫إظﮭﺎر اﻟﻘﯿﻢ ﺑﺎﻻﻧﻈﻤﺔ اﻟﺮﻗﻤﯿﺔ اﻟﻤﺨﺘﻠﻔﺔ‬


‫ﻓﻣﺛﻼ‬
‫ً‬ ‫ﯾﻣﻛن إظﻬﺎر اﻟﻘﯾم ﺑﺎﻻﻧظﻣﺔ اﻟرﻗﻣﯾﺔ اﻟﻣﺧﺗﻠﻔﺔ ﻣن ﺧﻼل اﻟﺷﺎﺷﺔ ﻋﻧدﻣﺎ ﻧﺣدد ﻧوع اﻟﻧظﺎم اﻟرﻗﻣﻰ اﻟﻣراد إﺳﺗﺧداﻣﻪ‪،‬‬
‫ﯾﻣﻛن إظﻬﺎر ﻧﻔس ﻗﯾﻣﺔ اﻟﻣﺗﻐﯾر ﺑﺎﻟﻧظﺎم اﻟﺛﻧﺎﺋﻰ ﻣرة واﯾﺿﺎ ﺑﺎﻟﻧظﺎم اﻟﺳﺎدس ﻋﺷر ﻣرة اﺧرى دون إﺳﺗﺧدام اى ﻋﻣﻠﯾﺔ‬
‫ﺗﺣوﯾل ﺑﯾن اﻻﻧظﻣﺔ‪ ،‬ﻓﻘط ﺗم ﻛﺗﺎﺑﺔ إﺳم اﻟﻧظﺎم ﻓﻰ ﺳطر إظﻬﺎر اﻟﺑﯾﺎﻧﺎت ﻋﻠﻰ اﻟﺷﺎﺷﺔ ﻛﺎﻟﺗﺎﻟﻰ‬
‫;‪int zz = 170‬‬
‫;)‪lcd.setCursor(0, 0‬‬
‫;)" ‪lcd.print("Binary:‬‬
‫‪lcd.print(zz, BIN); // display 170 in binary‬‬
‫;)‪lcd.setCursor(0, 1‬‬
‫;)" ‪lcd.print("Hexadecimal:‬‬
‫;)‪lcd.print(zz, HX‬‬

‫ﻧﺟد ﻫﻧﺎ اﻟﻣﺗﻐﯾر )‪ (zz‬ﺗم طﺑﺎﻋﺔ ﻗﯾﻣﺗﻪ )‪ (170‬ﻓﻰ اﻟﺳطر اﻻول ﺑﺎﻟﻧظﺎم اﻟﺛﻧﺎﺋﻰ ﺣﯾث ﺗم وﺿﻊ ﻛﻠﻣﺔ )‪ (BIN‬ﻟﻠﺗﻌرﯾف‬
‫اﻧﻧﺎ ﻧرﯾد اﻟﻧﺎﺗﺞ ﺑﺎﻟﻧظﺎم اﻟﺛﻧﺎﺋﻰ‪ ،‬وﺗم طﺑﺎﻋﺔ ﻧﻔس اﻟﻘﯾﻣﺔ ﺑﺎﻟﻧظﺎم اﻟﺳﺎدس ﻋﺷر ﻣن ﺧﻼل ﺗﻌرﯾف ﻧوع اﻟﻧظﺎم اﻟﻣارد‬
‫طﺑﺎﻋﺔ ﻗﯾﻣﺗﻪ )‪ ،(HEX‬وﺗظﻬر اﻟﻧﺗﯾﺟﺔ ﻋﻠﻰ اﻟﺷﺎﺷﺔ ﺑﺎﻟﺷﻛل اﻟﺗﺎﻟﻰ‬

‫اﻟﻤﺸﺮوع ‪ :19#‬إظﮭﺎر اﺷﻜﺎل ﻣﺨﺘﻠﻔﺔ ﻋﻠﻰ اﻟﺸﺎﺷﺔ‬


‫ﯾﻣﻛﻧك اﻟﺗﺣﻛم ﻓﻰ اﻻﺷﻛﺎل اﻟظﺎﻫرة ﻋﻠﻰ اﻟﺷﺎﺷﺔ ﻣن ﺧﻼل اﻟﺗﺣﻛم ﻓﻰ ﻧﻘﺎط ﻛل ﺣرف‪ ،‬ﻧﺟد ان اﻟﺷﺎﺷﺔ ﺗﺗﻛون ﻣن‬
‫اﺣرف ﻣﺗﺟﺎورة ﻣﻌﺎ ﻟﺗﻛوﯾن ﻛﻠﻣﺔ ﻣﺛل ‪ 16‬ﺣرف ﺑﺎﻟﺷﺎﺷﺔ اﻟﻣﺳﺗﺧدﻣﺔ ﺣﺎﻟﯾﺎً‪ ،‬اﻟﺣرف ﯾﺗم رﺳﻣﻪ ﻣن ﺧﻼل ﻧﻘﺎط ﺗﺳﻣﻰ‬
‫)‪ ،(pixels‬اﻟﺷﺎﺷﺔ اﻟﺣﺎﻟﯾﺔ ﺗﺣﺗوى ﻋﻠﻰ ﺧﻣﺳﺔ ﺑﻛﺳل ﻓﻰ ﺛﻣﺎﻧﯾﺔ ﺻﻔوف ﻟﺗﻛوﯾن اﻟﺣرف او اﻟرﻗم‬

‫‪97‬‬
‫‪ARDUINO FROM ZERO TO HERO‬‬

‫ﯾﻣﻛﻧﻧﺎ اﻟﺗﺣﻛم ﻓﻰ ﻛل ﺑﻛﺳل ﻹظﻬﺎر ﺷﻛل ﻣﻌﯾن ﻓﯾﻪ ﻣن ﺧﻼل إﺳﺗﺧدام ﻣﺻﻔوﺻﺔ ﺗﺗﻛون ﻣن ﺛﻣﺎﻧﻰ ﺑﺎﯾت )ﺛﻣﺎﻧﯾﺔ‬
‫ﺻﻔوف(‪ ،‬ﻛل ﺑﺎﯾت ﯾﺣﺗوى ﻋﻠﻰ ﺧﻣﺳﺔ ﺑت ﻟرﺳم ﻛل ﺑﻛﺳل ﻓﻰ اﻟﺳطر )اﻟﺳطر ﯾﺣﺗوى ﻋﻠﻰ ﺧﻣﺳﺔ ﺑﻛﺳل(‪ ،‬وﻫﻧﺎ‬
‫ﯾﻣﻛﻧﻧﺎ رﺳم اﻻﺷﻛﺎل اﻟﺗﻰ ﻧرﯾدﻫﺎ‪.‬‬

‫اﻟﻣﺻﻔوﻓﺔ ﻗد ﺗﻛون ﺑﺎﻟﺷﻛل اﻟﺗﺎﻟﻰ‬


‫‪byte a[8] = { B00000,‬‬
‫‪B01010,‬‬
‫‪B01010,‬‬
‫‪B00000,‬‬
‫‪B00100,‬‬
‫‪B10001,‬‬
‫‪B01110,‬‬
‫;} ‪B00000‬‬

‫ﺣﯾث ان اول ﺑﺎﯾت ﯾﻘوم ﺑﺗﺷﻛﯾل اﻟﺑﻛﺳل اﻟﺧﺎص ﺑﺎﻟﺳطر اﻻول وﻫﻛذا‪ ،‬ﻧﻼﺣظ ان اﻟﻘﯾﻣﺔ )‪ (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‬‬

‫اﻟﺸﺎﺷﺔ اﻟﺮﺳﻮﻣﯿﺔ‬
‫اﻟﺷﺎﺷﺔ اﻟرﺳوﻣﯾﺔ ﻫﻰ ﺷﺎﺷﺔ ﻣﺧﺻﺻﺔ ﻟﻌرض اﻟﺻور واﻟﺧطوط واﻟدواﺋر وﻏﯾرﻫﺎ اﻟﻛﺛﯾر ﻣن اﻻﺷﻛﺎل اﻟﻣﺧﺗﻠﻔﺔ‪ ،‬وﻫﻰ‬
‫ﺗﺧﺗﻠف ﻋن ﺷﺎﺷﺔ ﻋرض اﻟﺣروف واﻻرﻗﺎم ﺣﯾث ان اﻟﺷﺎﺷﺔ اﻟرﺳوﻣﯾﺔ اﻛﺑر ﻓﻰ اﻟﺣﺟم واﻏﻠﻰ ﻓﻰ اﻟﺛﻣن‪.‬‬

‫ﺗﻮﺻﯿﻞ اﻟﺸﺎﺷﺔ اﻟﺮﺳﻮﻣﯿﺔ ﺑﺎﻻردوﯾﻨﻮ‬


‫ﯾﺗم ﺗوﺻﯾل ‪ 20‬ﻛﺎﺑل ﻟرﺑط اﻻردوﯾﻧو ﺑﺎﻟﺷﺎﺷﺔ اﻟرﺳوﻣﯾﺔ‪ ،‬وﻟﺗﺳﻬﯾل ﻋﻣﻠﯾﺔ اﻟرﺑط ﯾﺗم إﺳﺗﺧدام اﻟﺟدول اﻟﺗﺎﻟﻰ واﻟذى‬
‫ﯾوﺿﺢ رﻗم ﻛل طرف ﻓﻰ اﻟﺷﺎﺷﺔ ورﻗم اﻟطرف اﻟﻣﻘﺎﺑل ﻟﻪ ﻓﻰ اﻻردوﯾﻧو ﻛﺎﻟﺗﺎﻟﻰ‬

‫‪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);

‫ ﻋﺮض ﻋﺪة ﺳﻄﻮرﻣﺨﺘﻠﻔﺔ‬:20 # ‫اﻟﻤﺸﺮوع‬


‫ﯾﻬدف ﻫذا اﻟﻣﺷروع اﻟﻰ ﻋرض ﻋدة ﺳطور ﻣﺧﺗﻠﻔﺔ ﻋﻠﻰ اﻟﺷﺎﺷﺔ اﻟرﺳوﻣﯾﺔ‬

‫اﻻﺳﻜﺘﺶ‬
#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‬‬

‫ﺧﺼﺎﺋﺺ اﻟﺸﺎﺷﺔ اﻟﺮﺳﻮﻣﯿﺔ‬


‫اﻟﺷﺎﺷﺔ اﻟرﺳوﻣﯾﺔ ﯾﻣﻛﻧﻬﺎ ﻋرض اﺷﻛﺎل ﻋدﯾدة‪ ،‬ﺣﯾث ﻧﺟد اﻧﻬﺎ ﺗﺣﺗوى ﻋﻠﻰ ‪ 128‬ﻋﻣود )‪ ،(0:127‬وﺗﺣﺗوى ﻋﻠﻰ ‪64‬‬
‫ﺻف )‪.(0:63‬‬

‫ﯾﻣﻛن رﺳم ﻧﻘطﺔ ﻣﻌﯾﻧﺔ )إﺿﺎءة اﻟﻧﻘطﺔ = ﻋرﺿﻬﺎ ﺑﺎﻟﻠون اﻻﺳود( ﻣﻊ ﺗﺣدﯾد ﻟوﻧﻬﺎ )اﺑﯾض او اﺳود‬ ‫‪-‬‬
‫ﻓﻘط( ﺑﻌد ﺗﺣدﯾد ﻣﺣﺎور اﻟﻧﻘطﺔ )‪ (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‬‬

‫اﻟﻤﺸﺮوع‪ :21 #‬ﻋﺮض درﺟﺎت اﻟﺤﺮارة ﻋﻠﻰ اﻟﺸﺎﺷﺔ‬


‫ﯾﻬدف ﻫذا اﻟﻣﺷروع اﻟﻰ ﻗﯾﺎس درﺟﺔ اﻟﺣ اررة ﻛل ‪ 20‬دﻗﯾﻘﺔ‪ ،‬ﺛم ﻋرض اﺧر ‪ 100‬ﻗراءة ﻋﻠﻰ اﻟﺷﺎﺷﺔ ﺑﺷﻛل رﺳم ﺑﯾﺎﻧﻰ‪،‬‬
‫ﺣﯾث ﺗظﻬر ﻛل درﺟﺔ ﺣ اررة ﻋﻠﻰ ﺷﻛل ﻧﻘطﺔ )ﺑﻛﺳل( ﺗوﺿﺢ درﺟﺔ اﻟﺣﺎرة ﻋﻠﻰ ﻣﺣور )‪ (x‬واﻟوﻗت ﻋﻠﻰ ﻣﺣور )‪، (y‬‬
‫اﺧر ﻧﺗﯾﺟﺔ ﺗظﻬر ﻓﻰ اﻟﺟﺎﻧب اﻻﯾﺳر ﻣن اﻟﺷﺎﺷﺔ وﯾﺗﺣرك اﻟﺷﻛل اﻟﺑﯾﺎﻧﻰ ﻣن اﻟﯾﺳﺎر اﻟﻰ اﻟﯾﻣﯾن ﻟﻌرض درﺟﺎت اﻟﺣ اررة‬
‫اﻟﻣﺗﺗﺎﻟﯾﺔ‪.‬‬

‫اﻟﺨﻮارزﻣﯿﺔ‬
‫اﻟﻣﺷروع ﯾﺑدو ﺻﻌب ﻟﻛﻧﻪ ﻏﺎﯾﺔ ﻓﻰ اﻟﺳﻬوﻟﺔ‪ ،‬ﺣﯾث اﻧﻧﺎ ﻧرﯾد ﺗﺧزﯾن ‪ 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‬‬

‫اﻟﻤﺸﺮوع ‪ :22 #‬ﺻﻨﺎﻋﺔ ﺷﯿﻠﺪ ﻟﺘﻮﺻﯿﻞ ﺛﻤﺎﻧﻰ ﻟﯿﺪات‬


‫ﯾﻬدف ﻫذا اﻟﻣﺷروع اﻟﻰ ﺻﻧﺎﻋﺔ ﺷﯾﻠد ﯾﺣﺗوى ﻋﻠﻰ ‪ 8‬ﻟﯾدات وﻣﻘﺎوﻣﺎت‪.‬‬

‫ﻣﺘﻄﻠﺒﺎت اﻟﻤﺸﺮوع‬
‫‪ -١‬ﺷﯾﻠد ﺗﺟﺎرب ﺧﺎص ﺑﺎﻻردوﯾﻧو ‪ ،‬ﻋدد ‪.1‬‬
‫‪ -٢‬ﻣﻘﺎوﻣﺔ ﻣﺗﻐﯾرة ﻗﯾﻣﺗﻬﺎ ‪ ،560‬ﻋدد ‪.8‬‬
‫‪ -٣‬ﻟﯾد ذو اﻟوان ﻣﺧﺗﻠﻔﺔ‪ ،‬ﻋدد ‪.8‬‬
‫‪ ،6-pin Arduino stackable headers -٤‬ﻋدد ‪.2‬‬
‫‪ ،8-pin Arduino stackable headers -٥‬ﻋدد ‪.2‬‬
‫‪ -٦‬ﻟوﺣﺔ ﺗﺟﺎرب‪ ،‬ﻋدد ‪.1‬‬

‫‪108‬‬
‫‪ARDUINO FROM ZERO TO HERO‬‬

‫‪ -٧‬اﺳﻼك ﺗوﺻﯾل ﻣﺧﺗﻠﻔﺔ اﻟﻣﻘﺎﺳﺎت‪.‬‬


‫‪ -٨‬ﻟوﺣﺔ اردوﯾﻧو ووﺻﻠﺔ ‪.USB‬‬

‫اﻟﺘﺼﻤﯿﻢ اﻟﮭﻨﺪﺳﻰ‬

‫ﻣﻜﻮﻧﺎت ﺷﯿﻠﺪ اﻟﺘﺠﺎرب‬


‫ﺗﺗﻛون ﺷﯾﻠد اﻟﺗﺟﺎرب ﻣن ﺻﻔوف واﻋﻣدة ﻣن اﻟﻣﺳﺎرات اﻟﻛﻬرﺑﯾﺔ واﻟﺗﻰ ﺗﺷﺑﻪ ﻟوﺣﺔ اﻻردوﯾﻧو ﻗﺑل ﺗﺻﻧﯾﻌﻬﺎ‪ ،‬وﻗد ﺗم رﺳم‬
‫ﺧطوط ﺑﺎﻟﻠون اﻻﺳود ﺣول اﻟﻧﻘﺎط اﻟﻣﺗﺻﻠﺔ ﻣﻌﺎً ﻛﻣﺎ ﺑﺎﻟﺷﻛل اﻟﺗﺎﻟﻰ‬

‫اﻟﺨﻄﻮات اﻟﻌﻤﻠﯿﺔ ﻟﺼﻨﺎﻋﺔ ﺷﯿﻠﺪ ﺧﺎص ﺑﻤﺸﺮوﻋﻚ‬


‫‪ -١‬ﯾﺗم اﻻﺳﺗﻌﺎﻧﺔ ﺑﺎﻟﺗﺟﺎرب اﻟﺗﻰ ﺗﻣت ﻋﻠﻰ ﻟوﺣﺔ اﻟﺗﺟﺎرب اوﻻً واﻟﺗﺄﻛد ﻣن ان ﻛل اﻟﻣﻛوﻧﺎت ﻣ رﺗﺑطﺔ ﻣﻌﺎً وﺗﻌﻣل‬
‫ﺑﺎﻟﺷﻛل اﻟذى ﺗرﯾدﻩ‪.‬‬

‫‪109‬‬
‫‪ARDUINO FROM ZERO TO HERO‬‬

‫‪ -٢‬رﺳم اﻟداﺋرة اﻟﻛﻬرﯾﺔ اﻟﺣﺎﻟﯾﺔ ﻋﻠﻰ ﺷﻛل ﺗﺻﻣﯾﻣﻲ ﻫﻧدﺳﻰ ﻟﻺﺳﺗﻌﺎﻧﺔ ﺑﻪ ﻓﯾﻣﺎ ﺑﻌد ﻋﻧد ﺗﺛﺑﯾت وﻟﺣﺎم ﺗﻠك‬
‫اﻟﻣﻛوﻧﺎت ﻣﻌﺎً‪.‬‬
‫‪ -٣‬ﺗﺣدﯾد ﻣﻛﺎن ﻛل ﻣﻛون اﻟﻛﺗروﻧﻰ ﻋﻠﻰ ﺷﯾﻠد اﻟﺗﺟﺎرب‪ ،‬ﯾﻣﻛن اﻻﺳﺗﻌﺎﻧﺔ ﺑﺎﻟﺗﺻﻣﯾم اﻟﺟﺎﻫز اﻟﻣرﺳوم ﻋﻠﻰ ﺷﯾﻠد‬
‫اﻟﺗﺟﺎرب واﻻﺳﺗﻔﺎدة ﻣﻧﻪ‪.‬‬
‫‪ -٤‬ﺗﺛﺑﯾت ﻛل ﻗطﻌﺔ اﻟﻛﺗروﻧﯾﺔ ﺑﺎﻟﻣﻛﺎن اﻟﻣﺧﺻص ﻟﻬﺎ‪ ،‬ﻣﻊ اﻟﺑدء ﻓﻰ ﻟﺣﺎم ﺗﻠك اﻟﻘطﻊ ﺑﻣﻛﺎﻧﻬﺎ ﻣن ﺧﻼل إﺳﺗﺧدام‬
‫ﻣﻛوة اﻟﻠﺣﺎم‪.‬‬

‫‪ -٥‬اﻟﺗﺄﻛد ﻣن ﺗﺛﺑﯾت ﻛل اﻟﻘطﻊ اﻻﻟﻛﺗروﻧﯾﺔ ﻓﻰ اﻣﺎﻛﻧﻬﺎ اﻟﺻﺣﯾﺣﺔ ﺛم ﺗﺟرﺑﺔ اﻟﺷﯾﻠد ﺑﻌد ذﻟك‪.‬‬
‫‪ -٦‬ﺑﻣﺟرد اﻟﺗﺄﻛد ﻣن ﺳﻼﻣﺔ اﻟﻠﺣﺎم ﻟﻛل اﻟﻘطﻊ اﻻﻟﻛﺗروﻧﯾﺔ‪ ،‬ﯾﺗم ﺗوﺻﯾل اﻟﺷﯾﻠد ﺑﺎﻻردوﯾﻧو ﻟﯾﺻﺑﺢ ﺷﻛﻠﻬﺎ ﻣﺷﺎﺑﻪ‬
‫ﻟﻠﺷﻛل اﻟﺗﺎﻟﻰ‬

‫ﺗﺤﻤﯿﻞ ﻣﻜﺘﺒﺎت اﻟﻘﻄﻊ اﻻﻟﻜﺘﺮوﻧﯿﺔ‬


‫ﻛل ﻗطﻌﺔ اﻟﻛﺗروﻧﯾﺔ ﺗﺣﺗﺎج اﻟﻰ ﺳطور ا واﻣر ﻣﻌﯾﻧﺔ ﻟﻛﻰ ﺗﻌﻣل ﺑﺷﻛل دﻗﯾق وﺗﻌطﻰ اﻟﻧﺗﺎﺋﺞ اﻟﻣرﺟوة ﻣﻧﻬﺎ‪ ،‬وﻋﻧد‬
‫ﺻﻧﺎﻋﺔ ﺷﯾﻠد ﯾﺣﺗوى ﻋﻠﻰ اﻟﻌدﯾد ﻣن اﻟﻘطﻊ اﻻﻟﻛﺗروﻧﯾﺔ ﻧﺟد ان ذﻟك اﻟﺷﯾﻠد ﯾﺣﺗﺎج اﻟﻰ اواﻣر ﻋدﯾدة ﻟﻛﻰ ﺗﻧﺎﺳب‬
‫وظﺎﺋف ﻛل اﻟﻘطﻊ اﻻﻟﻛﺗروﻧﯾﺔ اﻟﻣﺛﺑﺗﺔ ﻓﻰ ﻫذا اﻟﺷﯾﻠد‪ ،‬وﻟﺗﺳﻬﯾل اﻟﺗﻌﺎﻣل ﻣﻊ ﺗﻠك اﻟﺷﯾﻠد ﻗﺎم اﻟﻣﺻﻧﻌون ﺑﻌﻣل ﺳطور‬
‫اواﻣر ﺟﺎﻫزة ﯾﻣﻛن إﺳﺗﻌداﺋﻬﺎ اﺛﻧﺎء إﺳﺗﺧدام ﺗﻠك اﻟﺷﯾﻠد ﻟﻠﻘﯾﺎم ﺑﺎﻟوظﺎﺋف ﻛﻠﻬﺎ دون اﻟﺣﺎﺟﺔ اﻟﻰ ﻛﺗﺎﺑﺔ ﻛل اﻻواﻣر ﻣرة‬
‫اﺧرى اﻟﺧﺎﺻﺔ ﺑﻛل ﺷﯾﻠد‪ ،‬ﺗﻠك اﻻواﻣر اﻟﺟﺎﻫزة اﻟﺧﺎﺻﺔ ﺑﻛل ﺷﯾﻠد ﺗﺳﻣﻰ ﻣﻛﺗﺑﺔ اﻟﺷﯾﻠد )‪ ،(shield libarary‬وﺗﻠك‬

‫‪110‬‬
‫‪ARDUINO FROM ZERO TO HERO‬‬

‫اﻟﻣﻛﺗﺑﺎت ﯾوﺟد ﺑﻌﺿﻬﺎ ﺟﺎﻫز داﺧل ‪ IDE‬وﻫﻧﺎك ﻣﻛﺗﺑﺎت اﺧرى ﯾﻣﻛن ﺗﺣﻣﯾﻠﻬﺎ ﻣن اﻻﻧﺗرﻧت ﻣﺑﺎﺷرة ﺑﺷﻛل ﻣﺟﺎﻧﻰ‪،‬‬
‫ﻛل ﺷﯾﻠد ﺗﺣﺗوى ﻋﻠﻰ ﻣﻛﺗﺑﺔ ﺧﺎﺻﺔ ﺑﻬﺎ ﺗﻧﺎﺳب ﻣﻛوﻧﺎﺗﻬﺎ اﻻﻟﻛﺗروﻧﯾﺔ‪.‬‬
‫ﻟﻣﻌرﻓﺔ اﻟﻣﻛﺗﺑﺎت اﻟﻣوﺟودة ﺣﺎﻟﯾﺎً ﻓﻰ ﺑرﻧﺎﻣﺞ ‪ IDE‬ﯾﺗم ﻣن ﺧﻼل ﻓﺗﺢ ﻗﺎﺋﻣﺔ ‪ Sketech  import library‬ﻓﺳﺗﺟد‬
‫ﻫﻧﺎك ﻛل اﻟﻣﻛﺗﺑﺎت اﻟﻣﺟﺎﻧﯾﺔ اﻟﺗﻰ ﺗم ﺗﺣﻣﯾﻠﻬﺎ‪ ،‬ﯾﻣﻛن إﺿﺎﻓﺔ ﻣﻛﺗﺑﺎت اﺧرى اﻟﻰ ﺗﻠك اﻟﻣوﺟودة ﺑﺟﻬﺎزك ﻣن ﺧﻼل‬
‫ﻧﺳﺦ اﻟﻣﻛﺗﺑﺔ اﻟﺟدﯾدة اﻟﻰ ﻫذا اﻟﻣﺳﺎر ﺑﺟﻬﺎزك ‪ ،documentes\arduino\libararies‬ﺛم إﻋﺎدة ﺗﺷﻐﯾل ﺑرﻧﺎﻣﺞ ‪IDE‬‬
‫ﺛم ﻓﺗﺢ ﻣﺧزن اﻟﻣﻛﺗﺑﺎت ‪ sketch  import library‬ﻓﺗﺟد ﻟﺳم اﻟﻣﻛﺗﺑﺔ اﻟﺟدﯾدة ﻫﻧﺎك‪.‬‬

‫‪MicroSD‬‬ ‫ذاﻛﺮة‬
‫ﯾﻣﻛﻧﻬﺎ ﺗﺧزﯾن اﻟﻌدﯾد ﻣن اﻟﻣﻌﻠوﻣﺎت اﻟﺗﻰ ﻗد ﺗﺳﺗﺧدم ﻻﺣﻘﺎً‪ ،‬ﻓﻣﺛﻼ ﯾﻣﻛن ﺗﺧزﯾن درﺟﺔ اﻟﺣ اررة ﻋﻠﻰ ﻓﺗرات ﻣﺧﺗﻠﻔﺔ‬
‫واﯾﺿﺎً ﺗﺧزﯾن ﻣﻠﻔﺎت ﻟرﺑطﻬﺎ ﺑﺎﻻﻧﺗرﻧت وﻫﻛذا‪.‬‬

‫ﯾﻣﻛﻧﻧﺎ اﻟﺗﻌﺎﻣل ﻣﻌﻬﺎ ﻣن ﺧﻼل ﺗوﺻﯾﻠﻬﺎ ﺑﺷﯾﻠد ﺧﺎص ﺑﻬﺎ واﻟذى ﺑدورﻩ ﯾﺗم ﺗوﺻﯾﻠﻪ ﺑﺎﻻردوﯾﻧو ﻟﺗﺧزﯾن اﻟﻣﻌﻠوﻣﺎت اﻟﺗﻰ‬
‫ﯾﺗم ﺗﺟﻣﯾﻌﻬﺎ‪.‬‬
‫ﻣﻼﺣظﺔ‪ :‬ﯾﺟب ﺗﻬﯾﺋﺔ وﻣﺳﺢ ﻛل اﻟﺑﯾﺎﻧﺎت اﻟﻣوﺟودة ﻋﻠﻲ ﺷرﯾﺣﺔ اﻟذاﻛرة ﻗﺑل إﺳﺗﺧداﻣﻬﺎ ﻣن ﺧﻼل ﺗوﺻﯾﻠﻬﺎ‬
‫ﺑﺎﻟﻛﻣﺑﯾوﺗر وﻋﻣل ﺗﻬﯾﺋﺔ ﻟﻬﺎ ﻣﺛل ﺗﻬﯾﺋﺔ اﻟﻘرص اﻟﺻﻠب اﻟﺟدﯾد‪.‬‬

‫إﺧﺘﺒﺎر ﺳﻼﻣﺔ اﻟﺬاﻛﺮة‬


‫ﯾﻣﻛن اﻟﺗﺄﻛد ﻣن ﺳﻼﻣﺔ اﻟذاﻛرة ﻗﺑل إﺳﺗﺧداﻣﻬﺎ ﻣن ﺧﻼل ﺗﻠك اﻟﺧطوات‬
‫‪ -١‬وﺿﻊ اﻟذاﻛرة داﺧل اﻟﺷﯾﻠد‪ ،‬ﺛم ﺗوﺻﯾل اﻟﺷﯾﻠد ﺑﺎﻻردوﯾﻧو‪.‬‬
‫‪ -٢‬ﺗوﺻﯾل اﻻردوﯾﻧو ﺑﺎﻟﻛﻣﺑﯾوﺗر ﻣن ﺧﻼل ﻛﺎﺑل ‪.USB‬‬
‫‪ - ٣‬ﻓﺗﺢ ﺑرﻧﺎﻣﺞ ‪ IDE‬ﺛم اﺧﺗﯾﺎر ذﻟك اﻻﺳﻛﺗش ﻓﻰ ﻫذا اﻟﻣﺳﺎر ‪.FileExamplesSdFatSdInfo‬‬
‫‪ - ٤‬ﻓﺗﺢ اﻟﺷﺎﺷﺔ اﻟﺗﺳﻠﺳﻠﯾﺔ وﺿﺑط ﺳرﻋﺔ اﻻﺗﺻﺎل اﻟﻰ ‪ ،9600‬ﺛم ﺿﻐط اى ﻣﻔﺗﺎح ﺑﻠوﺣﺔ اﻟﻣﻔﺎﺗﯾﺢ ﯾﻠﯾﻪ ﻣﻔﺗﺎح ‪enter‬‬
‫واﻻﻧﺗظﺎر ﻗﻠﯾﻼً ﻓﺗظﻬر ﻟﻧﺎ ﻣﻌﻠوﻣﺎت ﻋن اﻟذاﻛرة ﻛﻣﺎ ﺑﺎﻟﺷﻛل اﻟﺗﺎﻟﻰ‬

‫‪111‬‬
‫‪ARDUINO FROM ZERO TO HERO‬‬

‫ﻣﻼﺣﻈﺎت‪:‬‬
‫ﻣن اﻟﻣﺣﺗﻣل ان اﻟذاﻛرة ﻻ ﺗﻌﻣل ﻟﻬذا ﯾﺗم ﺗﻧﻔﯾذ اﻟﺧطوات اﻟﺗﺎﻟﯾﺔ‪:‬‬

‫‪ -١‬ﻧزع وﺻﻠﺔ ‪ USB‬ﻣن اﻻدروﯾﻧو‪ ،‬ﻣﻊ إﺧراج ﺑطﺎﻗﺔ اﻟذاﻛرة ﻣن اﻟﺷﯾﻠد‪.‬‬


‫‪ -٢‬إدﺧﺎل ﺑطﺎﻗﺔ اﻟذاﻛرة ﻣرة اﺧرى واﻟﺗﺄﻛد ﻣن ﻣﻼﻣﺳﺔ اطراﻓﻬﺎ ﺑﺎﻻطراف اﻟﻣوﺟودة داﺧل اﻟﺷﯾﻠد ﺑﺷﻛل ﻣﺣﻛم‪.‬‬
‫‪ -٣‬إﻋﺎدة ﺗﻬﯾﺋﺔ ﺑطﺎﻗﺔ اﻟذاﻛرة ﻣرة اﺧرى ﻣن ﺧﻼل اﻟﻛﻣﺑﯾوﺗر‪.‬‬
‫‪ -٤‬ﺗوﺻﯾل اﻻردوﯾﻧو ﺑﺎﻟﻛﻣﺑﯾوﺗر ﻣرة اﺧرى ﻣن ﺧﻼل ﻛﺎﺑل ‪.USB‬‬

‫اﻟﻤﺸﺮوع‪ : 23 #‬ﺗﺨﺰﯾﻦ ﺑﯿﺎﻧﺎت ﻓﻰ ﺑﻄﺎﻗﺔ اﻟﺬاﻛﺮة‬


‫ﯾﻬدف ﻫذا اﻟﻣﺷروع اﻟﻰ ﺗﺧزﯾن ﺑﯾﺎﻧﺎت ﻓﻰ ﺑطﺎﻗﺔ اﻟذاﻛرة ﺑﻌد ﺗوﺻﯾﻠﻬﺎ ﺑﺎﻟﺷﯾﻠد واﻻردوﯾﻧو‪.‬‬

‫اﻻﺳﻜﺘﺶ‬
‫;‪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);
}

‫ﺳوف ﺗظﻬر اﻟﻧﺗﺎﺋﺞ ﺑﺎﻟﺷﻛل اﻟﺗﺎﻟﻰ‬

‫ﻧﻼﺣظ ان ﺳطر اﻻواﻣر اﻟﺧﺎص ﺑﺎﻟﻛﺗﺎﺑﺔ ﻋﻠﻰ ﺑطﺎﻗﺔ اﻟذاﻛرة ﻫو‬


dataFile.print(); or dataFile.println();

113
ARDUINO FROM ZERO TO HERO

‫ ﺗﺨﺰﯾﻦ درﺟﺔ اﻟﺤﺮارة اﺗﻮﻣﺎﺗﯿﻜﯿﺎ‬:24 # ‫اﻟﻤﺸﺮوع‬


.(‫ﯾﻬدف ﻫذا اﻟﻣﺷروع اﻟﻰ ﺗﺧزﯾن درﺟﺔ اﻟﺣ اررة ﻛل دﻗﯾﻘﺔ ﻟﻣدة ﺛﻣﺎﻧﻰ ﺳﺎﻋﺎت )ﻣﺷﺎﺑﻪ ﻟﻣﺎ ﺗم ﺗﺟرﺑﺗﻪ ﻓﯾﻣﺎ ﺳﺑق‬

‫ﻣﺘﻄﻠﺒﺎت اﻟﻤﺸﺮوع‬
.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‬‬
‫}‬
‫}‬

‫ﺑﻌد ﺗﺷﻐﯾل اﻻﺳﻛﺗش ﻟﻣدة ﺛﻣﺎﻧﻰ ﺳﺎﻋﺎت‪ ،‬ﯾﺗم إﺧراج ﺑطﺎﻗﺔ اﻟذاﻛرة ﻣن اﻟﺷﯾﻠد ﺛم إدﺧﺎﻟﻬﺎ ﻓﻰ اﻟﻛﻣﺑﯾوﺗر وﻓﺗﺢ ﻣﻠف‬
‫درﺟﺔ اﻟﺣ اررة ﺑداﺧﻠﻪ‪ ،‬ﻧﺟد اﻟﻧﺗﺎﺋﺞ ﻛﻣﺎ ﺑﺎﻟﺻورة اﻟﺗﺎﻟﯾﺔ‬

‫اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻤﯿﻠﻰ واﻟﻤﯿﻜﺮو ﺛﺎﻧﯿﺔ‬


‫اﻻردوﯾﻧو ﯾﺳﺗطﯾﻊ ﺗﻧﻔﯾذ ﻋدة ﻋﻣﻠﯾﺎت ﻗد ﺗﺻل اﻟﻰ ‪ 16‬ﻣﻠﯾون ﻋﻣﻠﯾﺔ ﻓﻰ اﻟﺛﺎﻧﯾﺔ اﻟواﺣدة‪ ،‬وﻟﻛﻰ ﻧﺳﺗطﯾﻊ اﻟﺗﻌﺎﻣل ﻣﻊ‬
‫ﺗﻠك اﻟﻌﻣﻠﯾﺎت ﯾﺟب ﺗﺣدﯾد زﻣن ﻟﻬﺎ‪ ،‬ﻟﻬذا ﺗم ﺗﻘﺳﯾم اﻟﺛﺎﻧﯾﺔ اﻟﻰ اﺟزاء اﺻﻐر ﻛﺎﻟﺗﺎﻟﻰ‬

‫‪ 1‬ﺛﺎﻧﯾﺔ = ‪ 1,000‬ﻣﻠﻠﻰ ﺛﺎﻧﯾﺔ = ‪ 1,000,000‬ﻣﯾﻛرو ﺛﺎﻧﯾﺔ‬

‫ﯾﻣﻛن ﻗﯾﺎس زﻣن ﺗﻧﻔﯾذ ﺑﻌض اﻻواﻣر ﻣن ﺧﻼل ﺣﺳﺎب اﻟوﻗت ﻗﺑل ﺗﻧﻔﯾذ اﻟﻌﻣﻠﯾﺔ ﺛم ﺣﺳﺎب اﻟوﻗت ﺑﻌد ﺗﻧﻔﯾذ اﻟﻌﻣﻠﯾﺔ‬
‫ﻓﯾﺻﺑﺢ اﻟﻧﺎﺗﺞ ﻫو اﻟزﻣن اﻟﻣﺳﺗﻐرق ﻟﺗﻧﻔﯾذ اﻣر او ﻋدة اواﻣر‪.‬‬

‫ﻣﺜﺎل‬
‫ﻧرﯾد ﻣﻌرﻓﺔ اﻟزﻣن اﻟﻣﺳﺗﻐرق ﻟﺗﺣوﯾل اﻟﻠﯾد ﻣن ﺣﺎﻟﺔ اﻹﺿﺎءة اﻟﻰ ﺣﺎﻟﺔ اﻟﻐﻠق واﻟﻌﻛس ﻛﺎﻟﺗﺎﻟﻰ‬
‫)(‪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‬واﻟذى ﯾﻌطﻰ وﻗت اﻻردوﯾﻧو اﻟﺣﺎﻟﻰ‪ ،‬ﺛم ﯾﺗم ﺗﻧﻔﯾذ اﻻواﻣر وﺑﻌدﻫﺎ ﻧﺄﺧد ﻗﯾﻣﺔ اﻟوﻗت‬
‫ﻣرة اﺧرى ﻟﻧﻌرف اﻟزﻣن اﻟﻣﺳﺗﻐرق ﻟﺗﻧﻔﯾذ اﻻواﻣر‪.‬‬

‫ﺗظﻬر ﻧﺗﯾﺟﺔ ﺗﻧﻔﯾذ اﻟﺑرﻧﺎﻣﺞ ﺧﻼل اﻟﺷﻛل اﻟﺗﺎﻟﻰ‬

‫‪stop watch‬‬ ‫اﻟﻤﺸﺮوع ‪ : 25#‬ﺻﻨﺎﻋﺔ ﺳﺎﻋﺔ اﻟﺘﻮﻗﻒ‬


‫ﯾﻬدف ﻫذا اﻟﻣﺷروع اﻟﻰ ﻗﯾﺎس ﻣدة ﺗﻧﻔﯾذ اواﻣر ﻣﻌﯾﻧﺔ‪ ،‬ﺣﯾث ﺳﻧﺳﺗﺧدم ﻣﻔﺗﺎح ﻟﺑدء ﺗﺷﻐﯾل ﺳﺎﻋﺔ اﻟﺗوﻗف ﺛم ﻧﻧﻔذ ﺑﻌض‬
‫اﻻواﻣر‪ ،‬ﺑﻌدﻫﺎ ﻧﺿﻐط ﻋﻠﻰ ﻣﻔﺗﺎح اﺧر ﻓﯾﺗم ﺣﺳﺎب اﻟوﻗت اﻟﻣﺳﺗﻐرق ﻟﺗﻧﻔﯾذ ﺗﻠك اﻻواﻣر‪.‬‬

‫ﻣﺘﻄﻠﺒﺎت اﻟﻤﺸﺮوع‬
‫‪ -١‬ﻣﻔﺗﺎح ﻧوﻋﻪ ‪ ،push button‬ﻋدد ‪.2‬‬
‫‪ -٢‬ﻣﻘﺎوﻣﺔ ﺛﺎﺑﺗﺔ ﻗﯾﻣﺗﻬﺎ ‪ ،10kΩ‬ﻋدد ‪.2‬‬
‫‪ -٣‬ﻟوﺣﺔ ﺗﺟﺎرب‪ ،‬ﻋدد ‪.1‬‬
‫‪ -٤‬اﺳﻼك ﺗوﺻﯾل ﻣﺧﺗﻠﻔﺔ اﻟﻣﻘﺎﺳﺎت‪.‬‬

‫‪116‬‬
ARDUINO FROM ZERO TO HERO

.1 ‫ ﻋدد‬،‫ ﺷﯾﻠد ذاﻛرة ﻣﻊ ﺑطﺎﻗﺔ ﺗﺧزﯾن‬-٥


.USB ‫ ﻟوﺣﺔ اﻻردوﯾﻧو وﻛﺎﺑل‬-٦


‫اﻟﺘﺼﻤﯿﻢ اﻟﮭﻨﺪﺳﻰ‬

‫اﻻﺳﻜﺘﺶ‬
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

Serial.print("Raw elapsed time: ");


Serial.println(elapsed);
Serial.print("Elapsed time: ");
Serial.print(h, 0);
Serial.print("h ");
Serial.print(m, 0);
Serial.print("m ");
Serial.print(s, 0);
Serial.print("s ");
Serial.print(ms, 0);
Serial.println("ms");
Serial.println();
}
void loop()
{
 if (digitalRead(2) == HIGH)
{
start = millis();
delay(200); // for debounce
Serial.println("Started...");
}
 if (digitalRead(3) == HIGH)
{
finished = millis();
delay(200); // for debounce
displayResult();
}
}

‫ﺳوف ﺗظﻬر اﻟﻧﺗﺎﺋﺞ ﺑﺎﻟﺷﻛل اﻟﺗﺎﻟﻰ‬

،،،‫ﻣﺎذا ﺑﻌﺪ‬
‫ ﻓﻰ اﻟﻔﺻل‬،‫ﺗﻌﻠﻣﻧﺎ ﻓﻰ ﻫذا اﻟﻔﺻل اﻟﻌدﯾد ﻣن اﻟﻣﻛوﻧﺎت اﻻﻟﻛﺗروﻧﯾﺔ اﻟﺟدﯾدة وﻛﯾﻔﯾﺔ ﺗﺻﻧﯾﻊ ﻟوﺣﺔ اﻟﻛﺗروﻧﯾﺔ ﺑﺷﻛل ﯾدوى‬
‫اﻟﺗﺎﻟﻰ ﺳوف ﻧﺗﻌﻠم اﻟﻛﺛﯾر ﻋن ﻟوﺣﺔ اﻟﻣﻔﺎﺗﯾﺢ اﻟرﻗﻣﯾﺔ )ﻟوﺣﺔ ارﻗﺎم ﻣﺎﻛﯾﻧﺔ اﻟﻔﯾ از ﺑﺎﻟﺑﻧوك( وﻛﯾﻔﯾﺔ اﻻﺳﺗﻔﺎدة ﻣﻧﻬﺎ ﻓﻰ‬
....‫ ﻫل اﻧت ﻣﺳﺗﻌد؟ ﻫﻰ ﺑﻧﺎ‬،‫ﻣﺷروﻋﺗﻧﺎ ﻣﻊ اﻟﺗطﺑﯾق اﻟﻌﻣﻠﻰ‬

118
‫‪ARDUINO FROM ZERO TO HERO‬‬

‫‪9‬‬
‫ﻟﻮﺣﺔ اﻻرﻗﺎم‬

‫ﺳوف ﻧﺗﻌﻠم ﻓﻰ ﻫذا اﻟﻔﺻل ﻛﯾﻔﯾﺔ اﻻﺳﺗﻔﺎدة ﻣن ﻟوﺣﺔ اﻻرﻗﺎم ﻓﻰ إدﺧﺎل ارﻗﺎم اﻟﻰ اﻟﻣﺷروﻋﺎت اﻟﺧﺎﺻﺔ ﺑﻧﺎ‪ ،‬ﺣﯾث ان‬
‫ﻟوﺣﺔ اﻻرﻗﺎم ﺗﻌد ﺟزء اﺳﺎﺳﻰ ﻣن اﺟزاء اﻟروﺑوت‪.‬‬

‫ﻟﻮﺣﺔ اﻻرﻗﺎم‬
‫داﺋﻣﺎ ﻧﺣﺗﺎج اﻟﻰ إدﺧﺎل ﺑﻌض اﻟﻣﻌﻠوﻣﺎت اﻟﻰ اﻻردوﯾﻧو اﺛﻧﺎء ﺗﺷﻐﯾﻠﻪ ﻣن ﺧﻼل إﺳﺗﺧدام ﻟوﺣﺔ ﻣﻔﺎﺗﯾﺢ اﻟﻛﻣﺑﯾوﺗر‬
‫اﻟﻣﺗﺻل ﺑﺎﻻردوﯾﻧو‪ ،‬ﻟﻛن ﻟو ﻟدﯾﻧﺎ ﻣﺷروع ﻣﺳﺗﻘل وﻏﯾر ﻣﺗﺻل ﺑﺎﻟﻛﻣﺑﯾوﺗر وﻧﺣﺗﺎج اﻟﻰ إدﺧﺎل ارﻗﺎم اﻟﻰ اﻻردوﯾﻧو‪،‬‬
‫ﻣﺎﻫو اﻟﺣل؟‬

‫اﻟﺣل ﻫو إﺳﺗﺧدام ﻟوﺣﺔ ارﻗﺎم ﻣﻧﻔﺻﻠﺔ ﯾﺗم ﺗوﺻﯾﻠﻬﺎ ﺑﺎﻻردوﯾﻧو ﻣﺑﺎﺷرة ﻣﺛل ﻟوﺣﺔ اﻻرﻗﺎم اﻟﻣﺗﺻﻠﺔ ﺑﻣﺎﻛﯾﻧﺎت ﺻرف‬
‫اﻻﻣوال ﺑﺎﻟﺑﻧوك‪.‬‬

‫ﻋﻧد ﺗوﺻﯾل ﻟوﺣﺔ اﻻرﻗﺎم ﺑﺎﻻردوﯾﻧو ﻧﺣﺗﺎج ﻓﻘط اﻟﻰ ‪ 7‬اطراف ﻣن اﻻردوﯾﻧو ﻟﻺﺗﺻﺎل ﺑﻠوﺣﺔ اﻻرﻗﺎم واﻟﺗﻰ ﺗﻌطﻰ ‪12‬‬
‫ﻣﻔﺗﺎح )ﻛﻣﺎ ﻫو ﻣوﺟود ﺑﺎﻟﺻورة اﻟﺳﺎﺑﻘﺔ(‪ ،‬وﻣن اﻟﻣﺛﯾر اﻧﻧﺎ ﻻﻧﺣﺗﺎج اﻟﻰ ﻣﻘﺎوﻣﺔ رﻓﻊ او ﺧﻔض اﻟﺗﯾﺎر اﻟﻣﺳﺗﺧدﻣﺔ ﻣﻊ‬

‫‪119‬‬
ARDUINO FROM ZERO TO HERO

‫ ﻧﺣﺗﺎج ﻓﻘط اﻟﻰ ﻣﻛﺗﺑﺔ ﻟوﺣﺔ اﻻرﻗﺎم اﻟﺗﻰ ﯾﻣﻛن ﺗﺣﻣﯾﻠﻬﺎ ﻣن اﻟﻣوﻗﻊ اﻟﺗﺎﻟﻰ‬،‫اﻟﻣﻔﺎﺗﯾﺢ اﻻﺧرى ﻋﻧد ﺗوﺻﯾﻠﻬﺎ ﺑﺎﻻردوﯾﻧو‬
http://arduino.cc/
playground/uploads/Code/Keypad.zip

‫ اطراف ﻣن اﻻردوﯾﻧو ﻟﻠﺗوﺻﯾل وﺗﻠك اﻻطراف ﯾﺗم ﺗوﺻﯾﻠﻬﺎ طﺑﻘﺎً ﻟﻠﺟدول اﻟﺗﺎﻟﻰ‬7 ‫ﺗﺣﺗﺎج ﻟوﺣﺔ اﻻرﻗﺎم‬

‫إﺧﺘﺒﺎر ﺗﻮﺻﯿﻞ ﻟﻮﺣﺔ اﻻرﻗﺎم ﺑﺎﻻردوﯾﻨﻮ‬


‫ﯾﻣﻛن إﺳﺗﺧدام ﺳطور اﻻواﻣر اﻟﺗﺎﻟﯾﺔ ﻹﺧﺗﺑﺎر ﺗوﺻﯾل ﻟوﺣﺔ اﻻرﻗﺎم ﺑﺎﻻردوﯾﻧو وﻫﻰ‬
#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
void setup()
{
Serial.begin(9600);
}
void loop()
{
char key = keypad.getKey();
if (key != NO_KEY)
{
Serial.print(key);
}
}

120
‫‪ARDUINO FROM ZERO TO HERO‬‬

‫ﺑﻌد ﺗﺷﻐﯾل اﻻﺳﻛﺗش ﺳﺗظﻬر اﻟﻧﺗﺎﺋﺞ ﺑﺎﻟﺷﻛل اﻟﺗﺎﻟﻰ‬

‫إﺗﺨﺎذ اﻟﻘﺮارات ﺑﺈ ٍﺳﺘﺨﺪام ‪switch-case‬‬


‫ﻋﻧدﻣﺎ ﻧﺣﺗﺎج اﻟﻰ ﻣﻘﺎرﻧﺔ اﻟﻣدﺧﻼت ﻹﺗﺧﺎذ ﻗرار طﺑﻘﺎ ﻟﻠﻘﯾﻣﺔ اﻟﺗﻰ ﺗم إدﺧﺎﻟﻬﺎ‪ ،‬ﻓﺈن اﻓﺿل اﻣر ﻫو )‪(switch-case‬‬
‫واﻟﺗﻰ ﺗﻧﺗﻘل اﻟﻰ ﺗﻧﻔﯾذ ﺳطور اواﻣر ﻣﻌﯾﻧﺔ طﺑﻘﺎً ﻟﻠﻘﯾﻣﺔ اﻟﺗﻰ ﺗم إدﺧﺎﻟﻬﺎ‪ ،‬ﻓﻣﺛﻼً ﻟو اردﻧﺎ ان ﻧﻌرف اﻟرﻗم اﻟذى ﺗم إدﺧﺎﻟﻪ‬
‫ﺑﻧﺎء ﻋﻠﯾﻪ ﺳوف ﻧﻧﻔذ ﺳطور اواﻣر ﺧﺎﺻﺔ ﺑﻛل رﻗم )اﻻرﻗﺎم ‪ (1, 2, 3‬ﻓﯾﺗم ذﻟك ﻣن ﺧﻼل اﻟﺳطور اﻟﺗﺎﻟﯾﺔ‬
‫واﻟذى ً‬
‫)‪switch(xx‬‬
‫{‬
‫‪case 1:‬‬
‫‪// do something as the value of xx is 1‬‬
‫‪break; // finish and move on with sketch‬‬
‫‪case 2:‬‬
‫‪// do something as the value of xx is 2‬‬
‫;‪break‬‬
‫‪case 3:‬‬
‫‪// do something as the value of xx is 3‬‬
‫;‪break‬‬
‫‪default:‬‬
‫‪// do something if xx is not 1, 2 or 3‬‬
‫‪// default is optional‬‬
‫}‬

‫ﺣﯾث ﻧﻼﺣظ ان ﻟو اﻟﻘﯾﻣﺔ اﻟﺗﻰ ﺗم إدﺧﺎﻟﻬﺎ ﻫﻰ ‪ 1, 2, 3‬ﻓﺈن ﺳطور ﻣﻌﯾﻧﺔ ﺧﺎﺻﺔ ﺑﻛل رﻗم ﺳوف ﯾﺗم ﺗﻧﻔﯾذﻫﺎ‪ ،‬اﻣﺎ ﻟو ﻟم‬
‫ﯾﺗم إدﺧﺎل اى ﻣن ﻫذﻩ اﻻرﻗﺎم ﻓﺳوف ﯾﺗم ﺗﻧﻔﯾذ ﺳطور اﻻواﻣر اﻻﻓﺗراﺿﯾﺔ واﻟﺗﻰ ﺗﺗواﺟد ﻓﻰ ﻧﻬﺎﯾﺔ ﺟﻣﻠﺔ )‪(switch-‬‬
‫‪.case‬‬

‫اﻟﻤﺸﺮوع ‪ : 26#‬إدﺧﺎل ﻛﻠﻤﺔ اﻟﺴﺮ‬


‫ﯾﻬدف ﻫذا اﻟﻣﺷروع اﻟﻰ إﺳﺗﺧدام ﻟوﺣﺔ اﻟﻣﻔﺎﺗﯾﺢ ﻟﻛﻰ ﯾﻘوم اﻟﻣﺳﺗﺧدم ﺑﺈدﺧﺎل ﻛﻠﻣﺔ اﻟﺳر ﻗﺑل اﻟﺗﻌﺎ ﻣل ﻣﻊ اﻟﺑرﻧﺎﻣﺞ‪،‬‬
‫وﺳوف ﺗظﻬر ﻟﻠﻣﺳﺗﺧدم ﺻﺣﺔ او ﺧطﺄ ﻛﻠﻣﺔ اﻟﺳر ﻋﻠﻰ اﻟﺷﺎﺷﺔ‪ ،‬ﺣﯾث ﯾﺟب ان ﯾﻘوم اﻟﻣﺳﺗﺧدم ﺑﺈدﺧﺎل ‪ 6‬ارﻗﺎم ﺑﯾن‬
‫ﻋﻼﻣﺔ )*‪ (#،‬ﺛم ﺿﻐط ﻣﻔﺗﺎح اﻻدﺧﺎل ﺑﻠوﺣﺔ اﻻرﻗﺎم‪.‬‬

‫‪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‬‬

You might also like