Bagaimana saya bisa menggunakan input 12 V pada pin Arduino digital?

38

Saya membuat pengontrol untuk sistem 12 V menggunakan mikrokontroler Arduino Uno. Untuk output saya menggunakan pelindung relay untuk mengganti komponen 12 V. Saya memiliki 12 toggle switch yang menyalakan beberapa komponen 12 V dalam sistem dan saya ingin menggunakan sinyal pemicu dari switch yang sama ini untuk mengirim ke input digital Arduino. Saya tahu bahwa Arduino hanya dapat menangani 5 V maks. Apa cara terbaik untuk mengecilkan 12 V yang keluar dari sakelar ke 5 V untuk input?

EDIT: Sistem ini untuk digunakan dalam mobil. Apakah ampere aki mobil perlu diturunkan entah bagaimana agar tidak meledakkan komponen?

DW
sumber
3
arus mobil tidak relevan - komponen hanya menggunakan arus sebanyak yang mereka butuhkan. Aki mobil mampu memasok ratusan amp, seperti yang dibutuhkan untuk motor starter. Ini tidak berarti selalu ada ratusan ampli yang mengalir dan dapat merusak banyak hal. :)
KyranF

Jawaban:

44

Kabar baik! Ini akan menjadi murah! :-)

Pembagi resistor sederhana akan membawa 12 V ke bawah ke 5 V yang bisa dicerna oleh Arduino. Tegangan output dapat dihitung sebagai

VHAIUT=R2R1+R2VsayaN

Nilai resistor di kisaran 10 kΩ adalah pilihan yang baik. Jika R2 Anda adalah 10 kΩ maka R1 harus menjadi 14 kΩ. Sekarang 14 kΩ bukan nilai standar, tetapi 15 kΩ adalah. Tegangan input Anda akan menjadi 4,8 V, bukan 5 V, tetapi Arduino akan melihatnya sebagai level tinggi. Anda juga memiliki sedikit ruang kepala jika 12 V harus agak terlalu tinggi. Bahkan 18 kΩ masih akan memberi Anda 4.3 V yang cukup tinggi, tetapi kemudian Anda harus mulai memikirkan 12 V agak terlalu rendah. Apakah voltase masih terlihat tinggi? Saya akan tetap dengan 15 kΩ.

sunting
Anda menyebutkan lingkungan otomotif, dan kemudian Anda memang membutuhkan perlindungan ekstra. Mobil 12 V tidak pernah cukup 12 V, tetapi sebagian besar waktu lebih tinggi, dengan puncak beberapa volt di atas nominal 12 V. (Sebenarnya nominal lebih seperti 12.9 V, pada 2.15 V per sel.) Anda dapat menempatkan zener 5 V dioda secara paralel dengan R2, dan ini harus memotong tegangan lebih tinggi dari zener's 5 V. Tapi tegangan zener bervariasi dengan arus, dan pada arus input rendah resistor memberi Anda itu akan terputus pada tegangan yang lebih rendah. Solusi yang lebih baik adalah memiliki dioda Schottky antara input Arduino dan suplai 5 V. Maka setiap tegangan input lebih tinggi dari sekitar 5,2 V akan membuat dioda Schottky melakukan, dan tegangan input akan terbatas pada 5,2 V. Anda benar-benar membutuhkan dioda Schottky untuk ini, dioda PN umum memiliki 0.

Optocoupler
Michael yang lebih baik adalah alternatif yang baik, meskipun sedikit lebih mahal. Anda akan sering menggunakan optocoupler untuk mengisolasi input dari output, tetapi Anda juga dapat menggunakannya untuk melindungi input seperti yang Anda inginkan di sini.

masukkan deskripsi gambar di sini

Cara kerjanya: arus input menyala LED inframerah internal, yang menyebabkan arus keluaran melalui phototransistor. Rasio antara input dan arus keluaran disebut CTR , untuk Current Transfer Ratio. The CNY17 memiliki minimal CTR 40%, yang berarti Anda perlu 10 mA masukan untuk 4 mA output. Mari kita pergi untuk input 10 mA. Maka R1 harus (12 V - 1,5 V) / 10 mA = 1 kΩ. Resistor output harus menyebabkan penurunan 5 V pada 4 mA, maka itu harus 5 V / 4 mA = 1250 Ω. Lebih baik memiliki nilai yang sedikit lebih tinggi, toh tegangan tidak akan turun lebih dari 5 V. 4,7 kΩ akan membatasi arus sekitar 1 mA.

Vcc adalah suplai 5 V Arduino, Vout pergi ke input Arduino. Perhatikan bahwa input akan terbalik: akan rendah jika 12 V ada, tinggi ketika tidak. Jika Anda tidak menginginkannya, Anda dapat menukar posisi output optocoupler dan resistor pull-up.

sunting 2
Bagaimana solusi optocoupler tidak memecahkan masalah kelebihan tegangan? Pembagi resistor adalah ratiometrik: tegangan keluaran adalah rasio tetap dari input. Jika Anda telah menghitung 5 V pada 12 V in, maka 24 V in akan memberikan 10 V out. Tidak OK, karenanya dioda perlindungan.

Dalam rangkaian optocoupler Anda dapat melihat bahwa sisi kanan, yang terhubung ke pin input Arduino tidak memiliki tegangan lebih tinggi dari 5 V sama sekali. Jika optocoupler aktif maka transistor akan menarik arus, saya menggunakan 4 mA pada contoh di atas. 1,2 kΩ akan menyebabkan penurunan tegangan 4,8 V, karena Hukum Ohm (resistansi kali saat ini = tegangan). Maka tegangan output akan menjadi 5 V (Vcc) - 4,8 V melintasi resistor = 0,2 V, itu level yang rendah. Jika arus akan lebih rendah drop tegangan akan lebih kecil juga, dan tegangan output akan naik. Arus 1 mA, misalnya, akan menyebabkan penurunan 1,2 V, dan output akan menjadi 5 V - 1,2 V = 3,8 V. Arus minimum adalah nol. Maka Anda tidak memiliki tegangan melintasi resistor, dan output akan menjadi 5 V. Itu maksimum, ada '

Bagaimana jika tegangan input akan menjadi terlalu tinggi? Anda secara tidak sengaja menghubungkan baterai 24 V dan bukannya 12 V. Kemudian arus LED akan berlipat ganda, membentuk 10 mA hingga 20 mA. 40% CTR akan menyebabkan arus keluaran 8 mA dan bukannya 4 mA yang dihitung. 8 mA melalui resistor 1,2 kΩ akan menjadi penurunan 9,6 V. Tetapi dari pasokan 5 V itu akan menjadi negatif, dan itu tidak mungkin; Anda tidak bisa lebih rendah dari 0 V di sini. Jadi sementara optocoupler sangat ingin menggambar 8 mA, resistor akan membatasi itu. Arus maksimum yang melaluinya adalah ketika 5 V penuh melewatinya. Outputnya akan benar-benar 0 V, dan 5 V / 1.2 kΩ saat ini = 4.2 mA. Jadi catu daya apa pun yang Anda pasang arus keluaran tidak akan lebih tinggi dari itu, dan tegangan akan tetap antara 0 V dan 5 V. Tidak ada perlindungan lebih lanjut yang diperlukan.

Jika Anda mengharapkan tegangan lebih, Anda harus memeriksa apakah LED optocoupler dapat menangani peningkatan arus, tetapi 20 mA tidak akan menjadi masalah bagi sebagian besar optocoupler (mereka sering diberi nilai maksimum 50 mA), dan selain itu, itu untuk double tegangan input, yang mungkin tidak akan terjadi IRL.

stevenvh
sumber
Sistem ini untuk digunakan di dalam mobil. Apakah ampere aki mobil perlu diturunkan entah bagaimana agar tidak meledakkan komponen? Aku pemula dalam hal ini. Terima kasih
DW
@ DW Uh-oh, mobil! :-(. Saya akan memperbarui jawaban saya.
stevenvh
@ WD - Tidak, kapasitas aki mobil tidak masalah. Arus akan ditentukan oleh tegangan (12 V) dan hambatan (total 25 kohm). Maka menurut Hukum Ohm saat ini akan menjadi 12 V / 25 kohm = 0,5 mA. Tidak masalah apakah baterai adalah tipe 40 Ah atau tipe 400 Ah; resistor tidak akan membiarkan lebih.
stevenvh
Itu keren. Terima kasih atas bantuan Anda. Hanya ingin tahu tetapi apakah sesuatu seperti ini akan berhasil? robotshop.com/ca/productinfo.aspx?pc=RB-Spa-750&lang=en-US
DW
2
@stevenvh Terima kasih Steve. Saya berharap dapat kembali untuk mendukung seseorang yang baru di bidang elektronik begitu saya yakin dengan itu. Terima kasih
DW
15

Cara yang baik untuk mengisolasi sinyal sakelar 12V adalah dengan melewatkannya melalui coupler opto. Sirkuit akan dikonfigurasi mirip dengan yang berikut ini.

masukkan deskripsi gambar di sini

Vi dalam diagram mewakili 12V di sirkuit Anda yang diaktifkan oleh saklar Anda (S1). Pilih R1 untuk membatasi arus melalui bagian D1 dari coupler opto ke tingkat yang berada dalam peringkat komponen yang Anda pilih.

Opto coupler bukan komponen tercepat di dunia, terutama yang termurah, tetapi untuk kasus aksi lambat seperti sakelar yang dikendalikan manusia, kecepatan coupler tidak terlalu diperhatikan.

Michael Karas
sumber
15

Anda juga dapat menggunakan dioda dan resistor, sebagai berikut:

skema

mensimulasikan rangkaian ini - Skema dibuat menggunakan CircuitLab

Saya akan membuat resistor sesuatu yang cukup kaku, kalau tidak Anda akan tenggelam banyak daya dari rangkaian ini. Keindahan sirkuit ini (dibandingkan dengan pembagi tegangan) adalah bahwa ia tidak peduli apakah tegangan asli Anda adalah 12V, 14V, atau 15V: itu akan menjadi 5V (sebenarnya 5.2-5.3V tergantung pada dioda) terlepas dari tegangan input.

angelatlarge
sumber
itu cukup pintar, +1 untuk independensi tegangan!
Florian Castellane
5
Hati-hati dengan tegangan lebih pada pin nilai maksimum absolut. Misalnya, lembar data ATmega32u4: Tegangan pada Pin apa pun terkait dengan Ground (8): -0.5V ke VCC + 0.5V. Jika menggunakan dioda biasa, tegangan akan lebih besar dari VCC + 0.5V jika menggunakan sesuatu yang kurang dari 170kOhm resistor. Saya pikir dioda Schottky adalah yang paling aman untuk ini.
cyberponk
13

Untuk independensi tegangan, gunakan resistor untuk mengatur arus dan Zener untuk mengatur tegangan, seperti ini:

skema

mensimulasikan rangkaian ini - Skema dibuat menggunakan CircuitLab

Dengan resistor 30k, ini akan menghasilkan 4.99V dan hanya menggunakan sekitar 234uA @ 12Vin.
Dalam hal ini:
R1 mengkonsumsi 234uA x (12V - 4.99V) = 1.64mW
D1 mengkonsumsi 234uA x 4.99V = 1.17mW

Total konsumsi daya: 2.81mW (saat input tinggi)

cyberponk
sumber
Untuk apa pun yang terlihat saya akan menggunakan pembagi LED + resistor secara seri untuk memberikan sinyal 5V pada 12V dan menempatkan dioda zener secara paralel dengan bagian bawah pembagi dan LED untuk melindungi terhadap tegangan lebih. Dengan begitu LED menyala ketika Anda memiliki sinyal input dan memberikan umpan balik visual.
Goswin von Brederlow
@ GoswinvonBrederlow dapatkah Anda menarik rangkaian led / diode / resistor?
mendesis
Dalam skema di atas set R1 ke 770 Ohm dan tambahkan 330Ohm dan LED merah secara paralel ke dioda Zener. Kemudian pada input 12V ~ 9mA akan mengalir melalui LED dan Anda mendapatkan sinyal output 5V. Jika tegangan input naik meskipun dioda zener akan membatasi sinyal output ke 5.1V dan melindungi arduino dan LED.
Goswin von Brederlow
-2

Sedikit terlambat tetapi di mobil saya saya menggunakan LM7805. Bekerja dengan baik dan murah.

Ton Nies
sumber
1
Tidak semurah 2 resistor atau resistor dan dioda.
Dave Tweed
7
@TonNies Anda salah menjawab pertanyaan. OP tidak mencari tegangan suplai untuk pengontrolnya. Ini lebih tentang pengkondisian sinyal.
Ariser
1
Tidak ada yang salah dengan menggunakan LM7805 untuk memindahkan sinyal 12v.
chugadie
1
@ Chugadie: Tapi pendekatan berlebihan yang sangat tidak umum dan relatif mahal jika yang Anda inginkan adalah menurunkan 12V untuk satu pin IO.
Rev1.0