ENSIKLOPEDIA ELEKTRONIK RADIO DAN KEJURUTERAAN ELEKTRIK Arduino. Operasi I/O digital. Ensiklopedia elektronik radio dan kejuruteraan elektrik Ensiklopedia elektronik radio dan kejuruteraan elektrik / Pereka amatur radio Setelah memuatkan persekitaran pembangunan IDE Arduino, anda dapat melihat bahawa dalam ruang kosong program masa depan yang dipaparkan dalam tetingkap yang terbuka, terdapat dua fungsi: persediaan () dan gelung (). Fungsi setup() memulakan sebarang program. Ia melaksanakannya sekali sejurus selepas kuasa digunakan pada papan, dan juga setiap kali selepas menekan butang RESET pada papan, yang menetapkan mikropengawal kepada keadaan asalnya. Di dalam fungsi ini, mod operasi port ditetapkan, antara muka bersiri dan peranti persisian lain dimulakan, kedua-dua di dalam mikropengawal dan luaran yang disambungkan kepadanya. Fungsi ini, walaupun kosong, mesti ada dalam program. Fungsi gelung() mengandungi gelung tak terhingga yang mikropengawal laksanakan berulang kali sehingga kuasa dimatikan. Ia meninjau penderia luaran, menghantar arahan kepada penggerak, melakukan pengiraan dan operasi lain. Sebagai contoh, kami akan memberikan program mudah yang, dengan tempoh satu saat, menyala dan kemudian mematikan LED yang dibina ke dalam papan Arduino, ditandakan padanya dengan huruf L dan disambungkan ke pin digital D13. Program ini adalah salah satu contoh standard yang disediakan dengan Arduino IDE. Dalam jadual. 1 menunjukkan teksnya dalam bentuk yang dilampirkan. Ambil perhatian bahawa dalam jargon Arduino, kod sumber program dipanggil "lakaran" - lakaran. Jadual 1 Serpihan program yang berkaitan dengan satu blok dihadkan oleh pendakap kerinting { dan }. Dalam perkara berikut, kami akan merujuknya sebagai kurungan operator. Teks program mungkin mengandungi ulasan yang menerangkan intipati dan nuansa kerjanya. Komen berbilang baris dihadkan kepada gabungan aksara /* (pada permulaan) dan */ (pada akhir). Watak // memulakan ulasan yang berakhir pada penghujung baris yang sama. Semasa terjemahan (transformasi teks program dalam bahasa pengaturcaraan yang boleh difahami oleh seseorang kepada kod mesin yang boleh dilaksanakan oleh mikropengawal), bahagian teks ini diabaikan sepenuhnya. Satu-satunya baris boleh laku dalam badan fungsi persediaan(). pinMode (13, OUTPUT); menetapkan pin D13 papan Arduino kepada mod output. Fungsi gelung() bermula dengan baris digitalwrite(13, TINGGI); Ia menetapkan output D13 tahap logik tinggi. Dalam Arduino UNO, ia adalah sama dengan voltan bekalan (+5 V) berbanding wayar biasa. Ini akan menghidupkan LED. Ia diikuti oleh garisan kelewatan (1000); Ia menyebabkan program boleh laku tidak melompat ke baris seterusnya untuk masa yang dinyatakan dalam kurungan dalam milisaat. Selepas jeda, program menetapkan output D13 ke tahap logik rendah sepadan dengan potensi wayar biasa, yang mematikan LED. Operasi ini diterangkan oleh baris digitalwrite(13, RENDAH); Seterusnya, atur cara sekali lagi mengekalkan jeda 1 s, selepas itu ia mengulangi dari awal keseluruhan urutan operasi yang diterangkan dalam badan fungsi gelung(). Ini berterusan sehingga mikropengawal dimatikan. Fungsi delay() harus digunakan dengan berhati-hati. Jika sebarang peristiwa penting berlaku semasa selang masa yang dinyatakan di dalamnya (contohnya, penderia dicetuskan secara ringkas), program tidak akan bertindak balas kepada acara ini. Perlu diingat bahawa arus maksimum yang diberikan oleh pin Arduino, berfungsi sebagai output, ialah 40 mA, manakala jumlah arus semua output tidak boleh melebihi 300 mA. Ini sudah cukup untuk menghidupkan LED biasa, anda juga boleh menyambung terus relay buluh voltan rendah atau motor getaran kuasa rendah dari telefon bimbit ke output. Anda tidak akan dapat menyambungkan apa-apa yang lebih berkuasa tanpa penguat, dan ia berbahaya - anda boleh merosakkan mikropengawal. Input analog A0-A5 boleh digunakan sebagai input dan output digital bersama-sama dengan D0-D13 jika perlu, merujuk kepada mereka masing-masing dengan nombor 14 hingga 19. Sekarang mari kita ubah suai program itu sedikit. Untuk algoritma yang begitu mudah, pengubahsuaian ini tidak asas, tetapi dalam kes yang lebih kompleks, perubahan sedemikian adalah penting. Pertama sekali, mari kita gantikan ulasan dalam bahasa Inggeris dengan bahasa Rusia. Sebagai contoh, garisan yang menghidupkan LED akan diulas seperti berikut: "Hidupkan LED". Anda tidak sepatutnya menulis: "Kami menetapkan tahap tinggi pada baris D13", ini sudah jelas daripada teks program. Sudah tentu, ulasan terperinci pada setiap baris biasanya berlebihan, tetapi seseorang itu tidak boleh malas untuk menulisnya. Selepas beberapa lama, butiran program akan dilupakan, walaupun penulis sendiri, hanya komen akan membantu anda memahami dengan cepat intipatinya. Seterusnya, kami akan menukar program supaya LED tidak disambungkan ke pin D13, tetapi ke pin D12 Arduino, berkelip. Memandangkan tiada LED disambungkan ke D12 pada papan, LED luaran dengan perintang siri diperlukan. Sambungkannya mengikut rajah yang ditunjukkan dalam Rajah. 1. Perintang tambahan dipilih supaya LED yang dipotong semasa berada dalam 5 ... 10 mA. Ini akan memberikan cahaya yang agak terang untuk kebanyakan LED. Papan Arduino UNO dengan LED luaran yang disambungkan ditunjukkan dalam rajah. 2.
Adalah dinasihatkan untuk membuat beberapa LED dengan perintang tambahan. Mereka akan berguna bukan untuk membuat mesin kesan pencahayaan, tetapi untuk menyemak tahap voltan dengan cepat pada output papan dan memantau perubahannya mengikut program yang dinyahpepijat. Untuk mengawal LED yang disambungkan bukan kepada D13, tetapi ke D12, dalam kes ini, sudah cukup untuk membetulkan semua nombor 13 hingga 12 dalam teks program. Selain daripada komen, nombor 13 muncul dalam teks program hanya tiga kali, jadi tidak sukar untuk mengubahnya. Walau bagaimanapun, apabila jumlah program meningkat, keadaan secara asasnya berubah. Ia adalah satu perkara untuk menggantikan tiga nombor dan agak lain untuk menggantikan beberapa puluh nombor yang sama di tempat yang berbeza dalam program yang panjang. Di samping itu, ia mungkin ternyata di suatu tempat nombor ini bermakna sesuatu yang sama sekali berbeza dan anda tidak perlu mengubahnya. Untuk memudahkan membuat perubahan sedemikian, kami mengisytiharkan pembolehubah pada permulaan program dan memberikannya nilai yang sepadan dengan nombor pin yang dikehendaki: int LEDPIN = 12; Di samping itu, di mana sahaja nombor pin 13 muncul, kami akan menggantikannya dengan nama pembolehubah ini. Jika anda kini perlu menukar sambungan LED sekali lagi, cukup untuk menukar hanya satu nombor dalam perihalan pembolehubah LEDPIN. Program yang diubah suai ditunjukkan dalam Jadual. 2. Ia mesti dimuatkan ke dalam memori mikropengawal papan Arduino. Untuk melakukan ini, pilih "Fail → Muatkan" daripada menu utama IDE. Jika program yang ditaip dalam tetingkap penyuntingan belum disimpan ke fail terlebih dahulu, IDE akan meminta anda untuk menentukan nama fail di mana ia akan menyimpannya. Selepas beberapa lama diperlukan oleh Arduino IDE untuk menterjemah program ke dalam kod mesin yang boleh difahami oleh mikropengawal, LED "Rx" dan "Tx" akan mula berkelip pada papan, menandakan penerimaan dan penghantaran mesej melalui antara muka bersiri mikropengawal. . Jadual 2 Jika semuanya dilakukan dengan betul, laporan mengenai pemuatan yang betul akan muncul di bahagian bawah tetingkap program. Ia akan memaparkan maklumat tentang berapa banyak 32 KB memori program mikropengawal yang tersedia yang diduduki oleh program yang dimuatkan dan berapa banyak RAM yang diperlukan untuk menampung pembolehubah. LED yang disambungkan ke pin D12 akan mula berkelip dengan tempoh 2 saat. Jika anda menyambungkan barisan lima LED ke pin Arduino D8-D12 (Gamb. 3) dan muatkan atur cara yang ditunjukkan dalam Jadual. 3, ia akan dihidupkan secara bergilir-gilir selama 500 ms setiap satu daripada LED ini dan LED yang disambungkan kepada D13, dipasang pada papan. Program ini boleh menjadi lebih lama jika masalah diselesaikan "di dahi", dengan hanya mengulang bilangan kali yang diperlukan dalam baris fungsi persediaan() dengan nombor output yang berbeza, menetapkannya untuk output, dan dalam fungsi gelung() - urutan baris termasuk LED seterusnya yang menjeda dan mematikannya. Pernyataan gelung for membantu memendekkan atur cara.
Jadual 3 Dalam kurungan selepas kata kunci untuk, nilai awal pembolehubah gelung ditunjukkan - LEDPIN=8, syarat untuk melaksanakan badan gelung - LEDPIN<14 dan operasi yang dilakukan dengan pembolehubah gelung selepas setiap pelaksanaan badannya - LEDPIN++, yang bermakna meningkatkan nilai pembolehubah sebanyak satu. Jika perlu, parameter gelung for boleh ditukar dengan mudah. Badan gelung dalam kurungan operator mengikut keadaan. Dalam kes pertama (dalam fungsi persediaan()), ia terdiri daripada satu baris yang akan dilaksanakan enam kali dengan nilai LEDPIN dari 8 hingga 13. Dalam kes kedua (dalam fungsi gelung()), gelung pernyataan menyatakan pelaksanaan urutan tiga baris enam kali dengan nilai pembolehubah yang sama. Selain mengawal peranti luaran dalam mana-mana sistem, adalah perlu untuk menerima maklumat daripada pelbagai sensor. Tanpa mereka, walaupun robot yang paling kompleks hanya akan menjadi mainan jam, tidak dapat mengubah tingkah lakunya bergantung pada keadaan luaran. Dengan voltan bekalan 5 V, dan dalam Arduino UNO ia adalah tepat, input digital mikropengawal dijamin dianggap sebagai voltan logik tinggi (bersamaan dengan unit logik) lebih daripada +3 V, dan sebagai rendah secara logik (bersamaan dengan sifar logik) - voltan kurang daripada +1,5 V Nilai perantaraan (termasuk apabila input tidak disambungkan ke mana-mana) memberikan hasil yang tidak dapat diramalkan, berubah secara huru-hara bergantung pada contoh mikropengawal, voltan bekalannya, suhu dan faktor lain. Oleh itu, adalah wajar bahawa input digital sentiasa mempunyai voltan tahap logik tinggi atau rendah yang diketahui. Sensor yang paling mudah ialah butang biasa tanpa penetapan, disambungkan seperti yang ditunjukkan dalam rajah. 4 ke salah satu pin luar papan Arduino, dalam kes ini ke D7. Apabila butang SB1 dilepaskan, paras voltan pada input mikropengawal akan menjadi rendah (perintang R1 akan menyediakannya), apabila ditekan, ia akan menjadi tinggi. Jika anda menukar butang dan perintang di tempat (Gamb. 5), maka tahap juga akan berubah tempat. Sekarang perintang R1 akan memberikan tahap yang tinggi apabila butang dilepaskan, dan menekannya akan menetapkan tahap yang rendah.
Rintangan perintang R1 tidak boleh terlalu kecil, kerana arus yang mengalir melaluinya apabila butang ditekan dimakan daripada sumber kuasa dan mengurangkan kecekapan peranti. Dalam kes kuasa dari komputer meja atau bekalan kuasa utama, ini tidak begitu penting, tetapi dengan versi bateri Arduino, rintangan rendah perintang R1 akan mengurangkan hayat bateri peranti yang mungkin. Sila ambil perhatian bahawa mikropengawal mempunyai perintang dalaman untuk melaksanakan fungsi perintang R1. Mereka dilumpuhkan secara lalai. Walau bagaimanapun, untuk menyambung, katakan, perintang dalaman kepada input D2, sudah cukup untuk menambah talian ke fungsi persediaan () pinMode(2, INPUT_PULLUP); Pertimbangkan input digital menggunakan contoh yang diberikan dalam Jadual. 4 program yang memadamkan LED yang disambungkan ke pin 13 apabila anda menekan butang yang disambungkan ke pin D7. Ia berdasarkan pengendali bersyarat if (keadaan) { /*Tindakan jika syarat dipenuhi*/ } lagi { /*Tindakan jika syarat tidak dipenuhi*/ } Jadual 4 Ia berfungsi untuk memilih tindakan bergantung kepada sama ada syarat yang dinyatakan di dalamnya dipenuhi atau tidak. Jika tiada apa yang perlu dilakukan jika syarat tidak dipenuhi, serpihan {...} yang lain boleh ditinggalkan. Penggunaan pernyataan bersyarat memberikan fleksibiliti program. Bergantung pada keadaan sensor luaran, mereka mengubah susunan program dan tingkah laku peranti yang dilengkapi dengan mikropengawal. Sebenarnya menyemak keadaan butang dilakukan oleh pengendali logik digitalRead(TETAPI) = TINGGI Dalam kes ini, ia membandingkan nilai yang dikembalikan oleh fungsi membaca keadaan pin TETAPI yang mana butang disambungkan dengan pemalar logik HIGH, dan jika ia sama, ia mengambil nilai TRUE (benar), jika tidak - FALSE (salah). Ambil perhatian bahawa operasi ujian kesamaan dilambangkan dengan dua tanda yang sama berturut-turut. Dan satu tanda sama menunjukkan operasi memberikan nilai kepada pembolehubah. Jangan mengelirukan mereka, ini membawa kepada pepijat yang sukar ditemui. Menggunakan contoh program yang baru sahaja dipertimbangkan, mudah untuk melihat apa yang membawa kepada penggunaan fungsi kelewatan () yang tidak tepat. Jika anda "menyahkomen" (mengalih keluar dua baris pepejal sebelumnya) fungsi kelewatan (10000) dalam baris kedua terakhir program, kemudian selepas setiap pelaksanaan badan fungsi gelung(), program akan menunggu 10 saat sebelum meneruskannya kerja. Sememangnya, semua penekanan butang dalam tempoh masa ini akan diabaikan. Keupayaan Arduino untuk berkomunikasi dengan komputer peribadi melalui antara muka bersiri sangat berguna. Ia boleh digunakan bukan sahaja untuk memuat turun program ke mikropengawal, tetapi juga untuk pertukaran maklumat dua hala semasa pelaksanaannya. Melalui antara muka ini, Arduino boleh memindahkan maklumat yang dikumpul ke komputer untuk pemprosesan atau penyimpanan yang kompleks dan menerima arahan dan data awal daripadanya. Dua peranti mikropengawal juga boleh berinteraksi dengan cara ini. Port bersiri mikropengawal menggunakan pin digital papan D0 dan D1, jadi apabila mengatur dan menggunakan komunikasi melalui port bersiri, ia tidak boleh digunakan untuk perkara lain. Sebagai contoh, pertimbangkan program yang ditunjukkan dalam Jadual. 5, yang menghantar maklumat tentang keadaan output D12 ke komputer. Jika tahap di atasnya tinggi, program menghantar kod simbol H ke komputer, dan jika ia rendah, kod simbol L. Mana-mana program yang boleh berfungsi dengan port COM komputer boleh menerima maklumat ini. Arduino IDE mempunyai monitor port bersiri terbina dalam yang membolehkan komputer memaparkan mesej teks yang diterima daripada papan Arduino dan menghantar mesej yang ditaip oleh pengguna pada papan kekunci komputer. Jadual 5 Baris Serial.begin(9600) dalam fungsi setup() memulakan port bersiri mikropengawal dan menetapkan kelajuan hantar dan terima kepada 9600 Baud. Anda boleh menetapkan nilai kelajuan standard lain: 1200, 2400, 4800, 9600, 19200, 38400, 57600 atau 115200 Baud. Dalam kes ini, kelajuan yang ditetapkan dalam mikropengawal mesti sepadan dengan kelajuan di mana port COM komputer atau peranti lain dengan maklumat yang hendak ditukar dikonfigurasikan. Kelajuan yang dibenarkan di mana penerimaan maklumat yang boleh dipercayai dipastikan bergantung pada panjang kabel yang menyambungkan Arduino ke komputer. Contohnya, menggunakan kabel USB standard sepanjang 1,8 m, komputer akan menerima maklumat daripada Arduino walaupun pada kelajuan 115200 Baud. Dan jika anda menambah kabel sambungan lima meter pada kabel ini, kelajuan yang dibenarkan turun kepada 4800 Baud. Fungsi Seri-al.print() menghantar maklumat ke port bersiri, di mana nama pembolehubah yang nilai Hantarnya akan dihantar, atau rentetan aksara yang akan dipindahkan, ditunjukkan dalam kurungan. Untuk membezakannya daripada nama pembolehubah, rentetan aksara disertakan dalam tanda petikan. Terdapat pengubahsuaian pada fungsi Serial.println() ini. Ia berbeza kerana, setelah lulus maklumat yang disertakan dalam kurungan (jika ada), ia menambahnya dengan pemulangan pengangkutan dan aksara suapan baris. Memulakan baris baharu dan gabungan aksara dalam rentetan yang diberikan. Menggunakan program di atas, adalah mudah untuk mengesahkan bahawa jika tiada isyarat luaran digunakan pada pin mikropengawal yang dikonfigurasikan sebagai input, keadaannya boleh menjadi apa-apa dan berubah secara huru-hara semasa operasi. Anda juga boleh menentukan nilai voltan sebenar yang dihentikan oleh mikropengawal sebagai tahap logik rendah dan mula dirasakan sebagai tahap tinggi. Seterusnya, pertimbangkan program (Jadual 6) yang menghidupkan dan mematikan LED pada papan mengikut arahan yang diterima daripada komputer melalui port bersiri. Perlu diingat bahawa maklumat dihantar melalui port bersiri dalam bait. Penerima port bersiri, beroperasi secara bebas daripada pemproses mikropengawal, menerima bait ini dan menyimpannya dalam penimbal 64-baitnya. Jadual 6. Untuk program menentukan sama ada terdapat bait yang diterima dalam penimbal, terdapat fungsi Serial.available() yang mengembalikan nombornya. Jika ya, program menggunakan Siri. read() membaca bait daripada penimbal dan memberikan nilainya (kod aksara yang diterima) kepada pembolehubah aksara C. Seterusnya, pernyataan bersyarat membandingkan kod dengan corak dan, jika ia sepadan, hidupkan atau matikan LED. Anda boleh menghantar arahan menggunakan monitor port bersiri yang sama yang digunakan untuk menerima maklumat. Di bahagian atas tetingkapnya (Rajah 6) terdapat garisan untuk memasukkan aksara yang dihantar. Selepas memasukkan simbol atau urutannya dari papan kekunci, tekan butang skrin "Serah". Pada papan Arduino, LED "Rx" harus berkelip seketika, menunjukkan bahawa mikropengawal telah menerima maklumat. Sudah tentu, penghantaran kod manual adalah mudah, tetapi jauh daripada kaedah pengurusan terbaik. Biasanya, program kawalan komputer khas ditulis untuk ini.
Oleh itu, menggunakan papan mikropengawal Arduino, anda boleh dengan mudah membuat beberapa peranti elektronik ringkas. Jika kita mengehadkan diri kepada input-output digital, ini boleh menjadi kesan pencahayaan automatik, penggera pencuri yang paling mudah, meter pelbagai parameter dengan penderia digital. Selain itu, ia adalah mudah untuk membuat peranti berinteraksi dengan komputer. Sememangnya, keupayaan Arduino adalah jauh dari terhad kepada yang diterangkan dalam artikel ini. Papan ini juga boleh berfungsi dengan isyarat analog, yang akan dibincangkan kemudian. Program untuk Arduino yang disebutkan dalam artikel boleh dimuat turun dari ftp://ftp.radio.ru/pub/2016/08/diginout.zip. Pengarang: D. Lekomtsev Lihat artikel lain bahagian Pereka amatur radio. Baca dan tulis berguna komen pada artikel ini. Berita terkini sains dan teknologi, elektronik baharu: Kandungan alkohol bir hangat
07.05.2024 Faktor risiko utama untuk ketagihan perjudian
07.05.2024 Kebisingan lalu lintas melambatkan pertumbuhan anak ayam
06.05.2024
Berita menarik lain: ▪ Laser super stabil menjadikan GPS lebih tepat ▪ Sains Baharu - Seismologi Forensik ▪ Teknologi untuk mencipta swafoto bersama buatan ▪ Telefon pintar Sony dengan paparan Retina Suapan berita sains dan teknologi, elektronik baharu
Bahan-bahan menarik Perpustakaan Teknikal Percuma: ▪ bahagian tapak Radio amatur teknologi. Pemilihan artikel ▪ artikel Mulakan dengan telur Leda. Ungkapan popular ▪ Dari apa tebuan membina sarangnya? Jawapan terperinci ▪ pasal Sophora berbuah lebat. Legenda, penanaman, kaedah aplikasi ▪ artikel Biofuel: Teori. Ensiklopedia elektronik radio dan kejuruteraan elektrik
Tinggalkan komen anda pada artikel ini: Semua bahasa halaman ini Laman utama | Perpustakaan | artikel | Peta Laman | Ulasan laman web www.diagram.com.ua |