Menghubungkan fotosel ke arduino. Menghubungkan photoresistor ke arduino dan bekerja dengan sensor cahaya

Fotoresistor memberi Anda kemampuan untuk menentukan intensitas cahaya.

Mereka kecil, murah, membutuhkan sedikit energi, mudah digunakan, dan hampir tidak bisa dihancurkan.

Karena itu sering digunakan dalam mainan, gadget, dan gadget. Tentu saja, proyek DIY berbasis Arduino tidak dapat mengabaikan sensor yang luar biasa ini.

Fotoresistor pada dasarnya adalah resistor yang mengubah resistansinya (diukur dalam ohm) tergantung pada seberapa banyak cahaya mengenai elemen penginderaannya. Seperti disebutkan di atas, mereka sangat murah, memiliki ukuran dan spesifikasi yang berbeda, tetapi kebanyakan dari mereka tidak terlalu akurat. Setiap fotoresistor berperilaku sedikit berbeda dari yang lain, bahkan jika mereka berasal dari batch yang sama dari pabrikan. Perbedaan bacaan bisa sampai 50% atau lebih! Jadi Anda tidak harus mengandalkan pengukuran presisi. Mereka terutama digunakan untuk menentukan tingkat pencahayaan keseluruhan dalam kondisi tertentu, "lokal" daripada "mutlak".

Fotoresistor adalah pilihan yang sangat baik untuk memecahkan masalah seperti "gelap atau terang di sekitar", "apakah ada sesuatu di depan sensor (yang membatasi aliran cahaya)", "area mana yang memiliki tingkat iluminasi maksimum".


Karakteristik teknis rata-rata dari fotoresistor

Spesifikasi di bawah ini adalah untuk photoresistor dari toko Adafruit. Fotoresistor ini memiliki karakteristik yang mirip dengan PDV-P8001. Hampir semua photoresistor memiliki karakteristik teknis yang berbeda, meskipun cara kerjanya sangat mirip. Jika penjual memberi Anda tautan ke lembar data fotoresistor Anda, periksalah, dan bukan yang disebutkan di bawah ini.

  • Ukuran: Bulat, berdiameter 5mm (0,2 ") (fotoresistor lain dapat berdiameter hingga 12mm / 0,4"!).
  • Harga: sekitar $1,00 di toko Adafruit.
  • Rentang resistensi: 200 kΩ (gelap) hingga 10 kΩ (terang).
  • Rentang Sensitivitas: Sensor menangkap panjang gelombang dari 400 nm (ungu) hingga 600 nm (oranye).
  • Catu daya: apa pun dengan tegangan hingga 100 V, gunakan arus rata-rata sekitar 1 mA (tergantung pada tegangan suplai).

Masalah saat menggunakan banyak sensor

Jika saat menambahkan sensor tambahan ternyata suhu tidak konsisten, ini berarti sensor saling tumpang tindih saat membaca informasi dari pin analog yang berbeda. Ini dapat diperbaiki dengan menambahkan dua pembacaan dengan penundaan dan menampilkan yang pertama.

Pengukuran tingkat cahaya

Seperti yang kami katakan sebelumnya, resistansi fotoresistor berubah tergantung pada tingkat pencahayaan. Saat gelap, resistansi resistor meningkat menjadi 10 megaohm. Saat tingkat cahaya meningkat, resistansi turun. Grafik di bawah ini menunjukkan perkiraan resistansi sensor di bawah kondisi pencahayaan yang berbeda. Jangan lupa bahwa karakteristik masing-masing photoresistor akan sedikit berbeda, karakteristik ini hanya mencerminkan tren umum.


Harap dicatat bahwa karakteristiknya adalah non-linear dan memiliki karakter logaritmik.

Fotoresistor tidak merasakan seluruh rentang gelombang cahaya. Dalam kebanyakan versi, mereka sensitif terhadap gelombang cahaya dalam kisaran antara 700 nm (merah) dan 500 nm (hijau).


Artinya, indikasi rentang panjang gelombang cahaya yang sesuai dengan biru tidak akan seefektif indikasi rentang hijau / kuning!

Apa satuan ukuran "lux"?

Sebagian besar lembar data menggunakan lux (lux) untuk menunjukkan resistansi pada tingkat cahaya tertentu. Tapi apa itu - lx? Ini bukan metode yang kami gunakan untuk menggambarkan kecerahan, jadi ini terkait langsung dengan sensor. Di bawah ini adalah tabel korespondensi, yang diambil dari Wikipedia.


Pemeriksaan fotoresistor

Cara termudah untuk menguji fotoresistor Anda adalah dengan menghubungkan multimeter dalam mode pengukuran resistansi ke dua kontak sensor dan melacak perubahan resistansi pada output saat Anda menutupi sensor dengan telapak tangan, mematikan lampu di dalam ruangan, dll. Karena resistansi berubah dalam rentang besar, mode otomatis berfungsi dengan baik. Jika Anda tidak memiliki mode otomatis atau tidak berfungsi dengan benar, coba rentang 1 MΩ dan 1 kΩ.



Koneksi fotoresistor

Karena fotoresistor pada dasarnya adalah resistansi, mereka tidak memiliki polaritas. Ini berarti Anda dapat menghubungkan mereka dengan kaki mereka "apa pun yang Anda suka" dan mereka akan berhasil!


Fotoresistor benar-benar bersahaja. Anda dapat menyoldernya, memasangnya di papan tempat memotong roti, menggunakan klip untuk menghubungkan. Satu-satunya hal yang harus dilakukan adalah terlalu sering menekuk "kaki" Anda, karena dapat dengan mudah patah.


Menggunakan fotoresistor

Metode pembacaan tegangan analog

Kasus penggunaan yang paling sederhana adalah menghubungkan satu kaki ke sumber daya dan kaki lainnya ke ground melalui resistor pull-down. Setelah itu, titik antara resistor nilai konstan dan resistor variabel - fotoresistor - dihubungkan ke input analog mikrokontroler. Gambar di bawah ini menunjukkan diagram pengkabelan untuk Arduino.


Dalam contoh ini, catu daya 5V terhubung, tetapi ingat bahwa Anda juga dapat menggunakan catu daya 3.3V. Dalam hal ini, nilai tegangan analog akan berada dalam kisaran dari 0 hingga 5V, yaitu kira-kira sama ke tegangan suplai.

Ini bekerja sebagai berikut: ketika resistansi fotoresistor berkurang, resistansi total fotoresistor dan resistor pull-down berkurang dari 600 kOhm menjadi 10 kOhm. Ini berarti bahwa arus melalui kedua resistor meningkat, yang menyebabkan tegangan pada resistor 10K naik. Itu saja!


Tabel ini menunjukkan perkiraan nilai tegangan analog berdasarkan tingkat iluminasi / resistansi dengan tegangan suplai 5 V dan resistor pull-down 10 kΩ.

Jika Anda ingin menggunakan sensor di area yang terang benderang dan menggunakan resistor 10K, itu akan cepat meledak. Artinya, hampir secara instan mencapai tingkat tegangan yang diizinkan 5 V dan tidak akan dapat membedakan pencahayaan yang lebih intens. Dalam hal ini, Anda harus mengganti resistor 10K dengan resistor 1K. Dengan rangkaian seperti itu, resistor tidak akan dapat mendeteksi tingkat kegelapan, tetapi lebih baik menentukan corak tingkat penerangan yang tinggi. Secara umum, Anda harus bermain dengan ini tergantung pada kondisi Anda!

Atau, Anda juga dapat menggunakan rumus "Axel Benz" untuk pengukuran dasar nilai resistansi minimum dan maksimum dengan multimeter dan kemudian mencari nilai resistansi resistor menggunakan: Pull down resistor = akar kuadrat (Rmin * Rmax), yang akan memberi Anda hasil yang jauh lebih baik.hasilnya dalam bentuk:


Tabel di atas menunjukkan perkiraan tegangan analog saat menggunakan sensor 5 V dengan resistor pull-down 1 kΩ.

Jangan lupa bahwa metode kami tidak memberi kami ketergantungan linier tegangan pada penerangan! Selain itu, masing-masing sensor memiliki karakteristik yang berbeda. Dengan peningkatan level cahaya, tegangan analog akan naik, dan resistansi akan turun:

Vo = Vcc (R / (R + Fotosel))

Artinya, tegangan berbanding terbalik dengan resistansi fotoresistor, yang, pada gilirannya, berbanding terbalik dengan tingkat penerangan.

Contoh sederhana menggunakan fotoresistor

Sketsa ini mengambil pembacaan analog untuk menentukan kecerahan LED. Semakin gelap, semakin terang LED akan bersinar! Ingatlah bahwa LED harus terhubung ke pin PWM agar contoh ini berfungsi. Dalam hal ini, pin 11 digunakan.


Contoh ini mengasumsikan bahwa Anda sudah familiar dengan dasar-dasar pemrograman Arduino.

/ * sketsa uji fotoresistor sederhana.

Hubungkan satu kaki fotoresistor ke 5V, yang lain ke pin Analog 0.

Kemudian hubungkan resistor 10k antara Analog 0 dan ground.

Hubungkan LED melalui resistor antara pin 11 dan ground. * /

int fotoselPin = 0; // sensor dan resistor pull-down 10k terhubung ke a0

int photocellMembaca; // membaca nilai analog dari pembagi sensor

int LEDpin = 11; // sambungkan LED merah ke pin 11 (pin PWM)

int kecerahan LED; //

pengaturan batal (batal) (

// kami akan mengirimkan informasi debug ke monitor serial

Serial.begin (9600);

lingkaran batal (batal) (

Serial.println (membaca fotosel); // nilai analog dari sensor

// LED menyala lebih terang jika tingkat cahaya pada sensor berkurang

// ini berarti kita harus membalikkan nilai baca dari 0-1023 menjadi 1023-0

photocellReading = 1023 - photocellReading;

// sekarang kita harus mengubah rentang 0-1023 menjadi 0-255, karena ini adalah rentang yang digunakan analogWrite

Kecerahan LED = peta (photocellReading, 0, 1023, 0, 255);

analogWrite (pin LED, kecerahan LED);


Anda dapat mencoba resistor lain tergantung pada tingkat cahaya yang ingin Anda ukur!

Kode sederhana untuk pengukuran tingkat cahaya analog

Tidak ada perhitungan dalam sketsa, hanya tampilan nilai yang diartikan sebagai tingkat pencahayaan. Ini cukup untuk banyak proyek.


/ * Sketsa uji fotoresistor sederhana.

Hubungkan satu kaki fotoresistor ke 5V, yang lain ke pin Analog 0.

Kemudian sambungkan pin resistor 10k ke ground, dan yang kedua ke pin analog Analog 0*/

int fotoselPin = 0; // sensor dan resistor pull-down 10k terhubung ke a0

int photocellMembaca; // data dibaca dari pin analog

pengaturan batal (batal) (

// Berikan informasi debug ke monitor serial

Serial.begin (9600);

lingkaran batal (batal) (

photocellReading = analogRead (photocellPin);

Serial.print("Pembacaan analog =");

Serial.print (membaca fotosel); // nilai analog

if (membaca fotosel

Serial.println ("- Gelap");

) else if (photocellReading

Serial.println("- Redup");

) else if (photocellReading

Serial.println ("- Cahaya");

) else if (photocellReading

Serial.println("- Terang");

Serial.println("- Sangat terang");

Pemeriksaan ini dilakukan di dalam ruangan pada siang hari. Saya menutupi sensor dengan tangan saya dan kemudian dengan selembar kain.


Membaca nilai dari fotoresistor tanpa menggunakan pin analog

Karena fotoresistor pada dasarnya adalah resistor biasa, mereka dapat digunakan bahkan jika mikrokontroler Anda tidak memiliki pin analog (atau jika semua pin analog terisi). Metode ini didasarkan pada sifat dasar resistor dan kapasitor. Jika Anda mengambil kapasitor yang dapat mentransfer potensial dan menghubungkannya ke sumber listrik (misalnya, 5V) melalui resistor, perubahan tegangan akan terjadi secara bertahap. Semakin tinggi resistansi resistor, semakin lambat tegangan akan berubah.

Di bawah ini adalah bagian dari osilogram yang mencirikan apa yang sebenarnya terjadi pada pin digital (kuning). Garis biru menunjukkan kapan sketsa Arduino itu sendiri mulai bekerja dan ketika menyelesaikan pekerjaannya (bagian dari durasi sekitar 1,2 ms).


Jika kita menggambar analogi sederhana, maka kapasitor bertindak sebagai keranjang, dan resistor bertindak sebagai tabung. Ini akan memakan waktu lama untuk mengisi keranjang dengan tabung tipis. Tergantung pada ketebalan tabung, kecepatan pengisian keranjang akan berbeda.


Dalam kasus kami, "keranjang" adalah resistor keramik 0,1 F. Anda dapat bereksperimen dengan kapasitansi kapasitor. Dan indikator ini akan langsung mempengaruhi waktu. Jika Anda ingin mengukur tingkat cahaya, gunakan kapasitor 1uF. Jika Anda bekerja dalam kondisi cahaya rendah, Anda dapat menggunakan kapasitor 0,01uF.

/ * sketsa sederhana untuk menguji kinerja fotoresistor.

Hubungkan satu kaki fotoresistor ke daya, yang lain ke pin 2.

Setelah itu, sambungkan satu kaki kapasitor 0,1 uF ke pin 2, dan yang lainnya ke ground * /

int fotoselPin = 2; // fotoresistor terhubung ke pin 2

int fotoselMembaca; // nilai digital

int ledPin = 13; // Anda dapat menggunakan LED bawaan

pengaturan batal (batal) (

// kirim informasi untuk debugging untuk ditampilkan di jendela monitor serial

Serial.begin (9600);

pinMode (ledPin, OUTPUT); // gunakan LED sebagai output

lingkaran batal (batal) (

// membaca pembacaan dari sensor menggunakan teknologi RCtime

photocellReading = RCtime (photocellPin);

if (membaca fotosel == 30000) (

// jika pembacaan mencapai 30.000, ini berarti kita telah mencapai nilai batas

Serial.println("Tidak ada yang terhubung!");

Serial.print("Pembacaan RCtime =");

Serial.println (membaca fotosel); // aliran data analog yang dibaca

// semakin terang, semakin sering LED berkedip!

digitalWrite (ledPin, TINGGI);

penundaan (membaca fotosel);

digitalWrite (ledPin, RENDAH);

penundaan (membaca fotosel);

// gunakan pin digital untuk mengukur resistansi

// kita melakukan ini dengan mensuplai arus ke kapasitor dan

// menghitung berapa lama waktu yang dibutuhkan untuk mencapai Vcc / 2 (untuk sebagian besar Arduino ini adalah 2.5V)

int RCtime (int RCpin) (

int membaca = 0; // mulai dari 0

// inisialisasi pin sebagai output dan set ke LOW (ground)

pinMode (RCpin, OUTPUT);

digitalWrite (RCpin, RENDAH);

// Sekarang atur pin sebagai input dan ...

pinMode (RCpin, INPUT);

while (digitalRead (RCpin) == LOW) (// hitung waktu yang dibutuhkan untuk mendapatkan nilai HIGH

membaca ++; // kenaikan untuk waktu

if (membaca == 30000) (

// jika kita mencapai level ini, resistensinya sangat besar

// bahwa kemungkinan besar tidak ada yang terhubung!

merusak; // keluar dari lingkaran

Video proyek Arduino menggunakan fotoresistor

Mengubah kecepatan mesin menggunakan fotoresistor:

Robot melacak lintasan pergerakan menggunakan fotoresistor:

Tinggalkan komentar, pertanyaan, dan bagikan pengalaman pribadi Anda di bawah. Ide dan proyek baru sering lahir dalam diskusi!

fotoresistor
IMHO spesies yang terancam punah. Terakhir kali aku melihatnya adalah saat aku masih kecil. Biasanya itu adalah kayu bulat logam dengan jendela kaca, di mana orang dapat melihatnya. Saat disinari, resistansinya turun, meskipun tidak signifikan, tiga hingga empat kali.

fototransistor
Akhir-akhir ini saya terus-menerus menemukan mereka, sumber fototransistor yang tidak ada habisnya - floppy drive lima inci. Terakhir kali saya, untuk harga kotoran, memasang di pasar loak radio sekitar 5 buah sapu tangan dari penemuan, ada transistor yang berlawanan lubang untuk mengontrol perekaman dan rotasi floppy disk. Fototransistor ganda lainnya (atau mungkin fotodioda, jika beruntung) ada di mouse bola biasa.
Itu terlihat seperti LED biasa, hanya kasingnya yang transparan. Namun, LED juga sama, jadi bingung mana yang meludah siapa yang hanya sekali. Tapi tidak masalah, partisan mudah dihitung dengan multimeter biasa. Cukup dengan menyalakan ohmmeter antara emitor dan kolektornya (tidak memiliki basis) dan menyinarinya, karena resistansinya akan runtuh begitu saja - dari puluhan kilo-ohm hingga beberapa ohm. Yang saya miliki di detektor rotasi roda gigi di robot mengubah resistansi dari 100 kOhm menjadi 30 Ohm. Fototransistor bekerja seperti biasa - ia menahan arus, tetapi sebagai tindakan kontrol tidak ada arus basis, tetapi fluks bercahaya.

fotodioda
Secara lahiriah, tidak ada bedanya dengan fototransistor atau LED biasa dalam wadah transparan. Juga, terkadang ada fotodioda kuno dalam wadah logam. Biasanya ini adalah perangkat sekop, merek FD-cheto di sana. Seperti silinder logam dengan jendela di ujungnya dan kabel mencuat dari pantat.

Tidak seperti fototransistor, ia dapat beroperasi dalam dua mode berbeda. Dalam fotovoltaik dan fotodioda.
Pada versi pertama, fotovoltaik, fotodioda berperilaku seperti baterai surya, yaitu bersinar di atasnya - tegangan lemah telah muncul di terminal. Itu bisa diperkuat dan diterapkan =). Tetapi jauh lebih mudah untuk bekerja dalam mode fotodioda. Di sini kita menerapkan tegangan balik ke fotodioda. Karena ini adalah foto, tetapi dioda, maka tegangan tidak akan berlawanan arah, yang berarti resistansi akan mendekati putus, tetapi jika menyala, dioda akan mulai mengalami undercut yang sangat kuat dan resistansinya akan berkurang. turun tajam. Dan tajam, beberapa kali lipat, seperti fototransistor.

Spektrum
Selain jenis perangkat, ia juga memiliki spektrum kerja. Misalnya, fotodetektor yang diasah untuk spektrum inframerah (dan ada sebagian besar) praktis tidak bereaksi terhadap cahaya LED hijau atau biru. Bereaksi buruk terhadap lampu neon, tetapi bereaksi dengan baik terhadap lampu pijar dan LED merah, dan tidak ada yang bisa dikatakan tentang inframerah. Jadi jangan heran jika fotosensor Anda bereaksi buruk terhadap cahaya, mungkin Anda membuat kesalahan dengan spektrumnya.

Koneksi
Sekarang saatnya untuk menunjukkan bagaimana menghubungkan ini ke mikrokontroler. Dengan fotoresistor, semuanya jelas, tidak ada masalah di sini - Anda mengambilnya dan memasangnya sesuai dengan skema.
Fotodioda dan fototransistor lebih rumit. Penting untuk menentukan di mana anoda / katoda atau emitor / kolektornya. Ini dilakukan secara sederhana. Anda mengambil multimeter, memasukkannya ke mode panggilan dioda dan berpegang teguh pada sensor Anda. Multimeter dalam mode ini menunjukkan penurunan tegangan melintasi dioda / transistor, dan penurunan tegangan di sini terutama tergantung pada resistansi U = I * R. Anda mengambil dan menyalakan sensor, mengikuti pembacaan. Jika jumlahnya menurun tajam, maka tebakan Anda benar dan kabel merah ada di katoda/kolektor Anda, dan yang hitam ada di anoda/emitor. Jika belum berubah, tukar pin. Jika tidak membantu, maka detektornya mati, atau Anda mencoba untuk mendapatkan respons dari LED (omong-omong, LED juga dapat berfungsi sebagai detektor cahaya, tetapi tidak sesederhana itu. Namun, ketika saya kali saya akan menunjukkan kepada Anda penyimpangan teknologi ini).


Sekarang tentang pekerjaan sirkuit, semuanya dasar di sini. Dalam keadaan gelap, fotodioda tidak melewatkan arus dalam arah yang berlawanan, fototransistor juga tertutup, dan resistansi fotoresistor sangat tinggi. Resistansi input mendekati tak terhingga, yang berarti input akan memiliki tegangan suplai penuh alias unit logis. Layak sekarang untuk menyalakan dioda / transistor / resistor karena resistansi turun tajam, dan outputnya ternyata ditanam dengan kuat di tanah, atau sangat dekat dengan tanah. Bagaimanapun, resistansi akan jauh lebih rendah daripada resistor 10kΩ, yang berarti bahwa tegangan akan tiba-tiba hilang dan akan berada di suatu tempat pada level nol yang logis. Anda bahkan tidak perlu memasang resistor di AVR dan PIC, pull-up internal sudah cukup. Jadi DDRx = 0 PORTx = 1 dan Anda akan senang. Nah, putar seperti tombol biasa. Satu-satunya kesulitan dapat muncul dengan fotoresistor - resistansinya tidak turun begitu tajam, sehingga mungkin tidak mencapai nol. Namun di sini Anda bisa bermain dengan ukuran resistor pull-up dan memastikan bahwa perubahan resistansi cukup untuk melewati level logika.

Jika perlu untuk mengukur iluminasi, dan tidak bodoh untuk menangkap terang / gelap, maka Anda perlu menghubungkan semuanya ke ADC dan membuat variabel resistor pull-up untuk menyesuaikan parameter.

Ada juga jenis fotosensor tingkat lanjut - TSOP ada detektor dan penguat frekuensi bawaan, tetapi saya akan menulisnya nanti.

ZY
Saya punya beberapa taman di sini, jadi situsnya akan sangat bodoh dengan pembaruan, saya pikir itu akan sampai akhir bulan. Kemudian saya berharap untuk kembali ke ritme yang sama.

Hari ini kita akan membuat sketsa dan prototipe rangkaian di Arduino menggunakan fotoresistor. Ini adalah fotoresistor yang terletak di sini, saya telah menyusun tata letak seperti itu, sepertinya karangan bunga LED Tahun Baru dari artikel sebelumnya.

Kami memiliki 8 LED, mereka dipasang sehingga kaki pendek di sebelah kiri adalah minus, kaki panjang di sebelah kanan adalah nilai tambah. Jadi semuanya terpasang, rangkaiannya menggunakan satu resistor 10 kilo-ohm, saya mengambilnya dari kit Arduino Kit, dan 8 resistansi yang terhubung ke kontak positif LED 220 ohm digunakan, ini adalah cara terhubung.


Digunakan 8 kabel hitam negatif, dan hijau 8 buah - pin kontrol dari kedua belas hingga kelima. Dalam proses debugging, warna hitam ekstrim diganti dengan warna hijau, tetapi lebih lanjut tentang itu nanti.

Fotoresistor ada di sini, di sebelahnya ada resistor 10 kiloohm, jumper biru menjadi minus, yang oranye terhubung di satu ujung ke titik tengah, antara resistor dan fotoresistor, ujung lainnya ke papan Arduino, di A0 (pin analog).

Merah adalah 5 Volt, dan rangkaian akan bekerja melalui pembagi tegangan ini, LED akan menyala, tergantung pada tingkat penerangan. Saya akan memperbaiki LED, konstruksinya agak goyah. Mari kembali ke modelnya, tapi sekarang mari kita mulai menulis sketsa.

Mari buat proyek baru, dan mulai menulis, mendeklarasikan konstanta, beberapa bagian, biarkan itu menjadi tipe ke dalam, ini akan menjadi jumlah pin, karena ada 8 LED di sirkuit. Ini akan menunjukkan berapa banyak LED yang digunakan di sirkuit.

const int NbrLED = 8;

Mari kita buat array dengan nomor pin, gunakan konektor digital 5 6 7 8 9 10 11 12, tunjukkan nomor pin yang level iluminasinya dihilangkan, nyatakan variabel untuk fotoresistor, nilai sensor, dan juga deklarasikan level iluminasinya. bahwa kita dapat memecahnya dengan pin.

const int ledPins = (5, 6, 7, 8, 9, 10, 11, 12); const int fotoselPin = A0; int sensorNilai = 0; int tingkat led = 0;

Dalam subrutin pengaturan, kami akan menulis loop di mana, agar tidak menetapkan setiap nilai yang keluar melalui pinMode, kami akan mengulang semua pin, menetapkan mereka nilai dalam pinmode dari array dan menetapkan nilai OUTPUT ke setiap pin.

void setup () (untuk (int led = 0; led< NbrLEDs; led++) { pinMode(ledPins, OUTPUT); } }

Pada prinsipnya, Anda tidak dapat melakukan ini, Anda dapat menentukan pinmode dan kemudian menulis lima, lalu 6, dan seterusnya, tetapi ini adalah waktu yang sangat lama dan ini adalah metode barbar liar. Oleh karena itu, dalam loop, kita akan melewati semua pin dalam satu lintasan.

pinMode (5, OUTPUT); pinMode (6, OUTPUT);

Dalam loop, kami mendapatkan nilai sensor dengan membaca analogRead dari pin A0.

Selanjutnya, mari kita urai nilai sensornya, dengan menggunakan fungsi peta, kita dapatkan nilai sensornya, dan berdasarkan tingkat iluminasi, dengan sensitivitas 300 ke nilai maksimum 1023 , akan didistribusikan melalui 8 pin, yang diumumkan di atas.

Lihat juga video Photoresistor dan LED di Arduino - (video), tautan akan terbuka di tab baru.

Selanjutnya dalam loop, kami akan melewati semua pin, jadi kami menambahkan tanda kurung, dimulai dengan LED pertama, jika penghitung tidak lebih dari 8, kami akan menambahkan, dan kemudian kami akan memeriksa dengan syarat apakah nomor LED kurang dari tingkat pencahayaan, kami akan menerapkan semua tegangan sebelumnya ke LED ini melalui konstanta TINGGI.

Jika tidak, kami akan menuliskan tidak adanya tegangan ke dalamnya, dan LED tidak akan menyala.

void loop () (sensorValue = analogRead (photocellPin); ledLevel = peta (sensorValue, 300, 1023, 0, NbrLEDs); for (int led = 0; led< NbrLEDs; led++) { if (led < ledLevel) { digitalWrite(ledPins, HIGH); } else { digitalWrite(ledPins,LOW); } } }

Menyelaraskan kode melalui pintasan keyboard ctrl + T dan sekarang mari kita lihat apa yang terjadi, jalankan untuk verifikasi, simpan sketsa.

Jadi kompilasi sketsa, sekarang unggah ke Arduino... Mari kita kembali ke diagram, saat ini satu LED tidak menyala saat mengganti pencahayaan karena kontak yang buruk.


Sekarang saya akan memperbaikinya, kami tidak akan menyentuhnya, jika saya mematikan lampu, maka semua LED akan padam. Jika saya menerangi fotoresistor dengan senter, menambahkan pencahayaan dengan lancar, maka hampir semua LED akan menyala, dan, karenanya, saya menghapus, mengurangi tingkat iluminasi, jumlah LED akan berubah.


Kalau saya nyalakan semua lampu, hampir semua nyala, apa masalahnya dengan LED ini. Saya menghabiskan cukup banyak waktu untuk itu, semuanya dirakit dengan benar di sini, bahkan minus diteruskan dengan kabel hijau yang sengaja diservis, tetapi untuk beberapa alasan dia berubah-ubah dan tidak terbakar.


Sekarang mari kita kembali ke sketsa dan melihat apa yang salah. Contoh diambil dari sumber resmi, pada disk ke Arduino ada kode yang sama.

Dalam sketsa, distribusi iluminasi diperoleh dari 300 sebelum 1023 (nilai maksimum), upaya untuk mengubah ambang batas awal ke 0 - tidak memberikan hasil apa pun.

Tetapi jika kita mendistribusikan seluruh nilai ini menjadi 8 bagian, maka kalkulator akan berguna, ternyata, baik resistansi pada 10 kilo-ohm memberikan semacam kesalahan, Anda perlu membagi 1023 dengan 8, kita mendapatkan 128 , jika Anda mengambilnya dengan benar, maka 1024 dibagi 8, ini adalah dan ada 128.

Sekarang Anda perlu mengurangi 128 dari 1023, menempatkan nilai 895 di sini, lalu, menurut logika, semuanya akan baik-baik saja. Ayo unduh dan lihat apa saja perubahannya.

void loop () (sensorValue = analogRead (photocellPin); ledLevel = peta (sensorValue, 0, 895, 0, NbrLEDs); for (int led = 0; led< NbrLEDs; led++) { if (led < ledLevel) { digitalWrite(ledPins, HIGH); } else { digitalWrite(ledPins,LOW); } } }

Sekarang semua LED menyala, mari kita coba memblokir iluminasi, atau mari kita matikan ...

Nilai awal masih perlu dikembalikan 300, karena dipasok ke tiga LED daya pertama ini. Mari kita ubah 0 menjadi 300 di sketsa, seolah-olah, itu dilakukan karena suatu alasan, muat ulang sketsa dan lihat apa yang berubah kali ini ...

void loop () (sensorValue = analogRead (photocellPin); ledLevel = peta (sensorValue, 300, 895, 0, NbrLEDs); for (int led = 0; led< NbrLEDs; led++) { if (led < ledLevel) { digitalWrite(ledPins, HIGH); } else { digitalWrite(ledPins,LOW); } } }

Sekarang LED pertama menyala, dengan penerangan minimal, jika Anda menyalakan semuanya, dan di sana saya memiliki 1800 lux, dari dua meter strip LED, semuanya menyala sebagaimana mestinya.


Saat dimatikan, fotoresistor menangkap sisa pencahayaan di dalam ruangan, lampu gantung menyala, tidak sepenuhnya gelap, dan dipicu. Tetapi jika Anda menerangi dengan senter, dengan lancar menerapkan cahaya ke fotoresistor, rangkaian berfungsi dengan benar.


Jika kita mematikan lampu sepenuhnya, kita akan melihat apa yang terjadi dalam kegelapan total. Seperti yang Anda lihat, tanpa adanya cahaya sama sekali, fotoresistor bereaksi dengan benar, LED menyala secara bertahap, saat iluminasi meningkat. Saat lampu menyala, semuanya menyala. Sketsa seperti itu ternyata, dengan peretasan seumur hidup - menyesuaikan sensitivitas fotoresistor, agar sesuai dengan kebutuhan Anda.


Kami melanjutkan rangkaian pelajaran "". Hari ini kita menghubungkan photoresistor (photocell) ke papan Arduino. Fotoresistor digunakan dalam robot sebagai sensor cahaya. Artikel ini berisi instruksi video, daftar program, diagram koneksi, dan komponen yang diperlukan.

fotoresistor- sebuah resistor, yang resistansinya tergantung pada kecerahan cahaya yang jatuh di atasnya. Dalam model kami, LED menyala hanya jika kecerahan cahaya di atas fotoresistor kurang dari yang tertentu, kecerahan ini dapat disesuaikan secara terprogram.

Fotoresistor digunakan dalam robotika sebagai sensor cahaya. Fotoresistor yang terpasang pada robot memungkinkan Anda untuk menentukan tingkat iluminasi, menentukan area putih atau hitam di permukaan dan, sesuai dengan ini, bergerak di sepanjang garis atau melakukan tindakan lain.

Instruksi video untuk merakit model Arduino dengan fotoresistor:

Untuk merakit model dengan drive servo, kita perlu:

  • papan arduino
  • 6 kabel "ayah-ayah"
  • fotoresistor
  • Dioda pemancar cahaya
  • resistor 220 ohm
  • resistor 10k
  • Program Arduino IDE yang dapat diunduh dari website Arduino.

Diagram pengkabelan untuk model Arduino dengan fotoresistor:

Diagram koneksi fotoresistor Arduino

Agar model ini berfungsi, program berikut ini cocok (Anda cukup menyalin program ke Arduino IDE):

int dipimpin = 13; // variabel dengan nomor pin LED
int ldr = 0; // dan fotoresistor
void pengaturan () // prosedur pengaturan
{
pinMode (dipimpin, OUTPUT); // menunjukkan bahwa LED adalah jalan keluar
}
void loop () // prosedur loop
{
jika (analogRead (ldr)< 800) digitalWrite(led, HIGH);
// jika indeks iluminasi kurang dari 800, nyalakan LED
lain digitalWrite (led, RENDAH); // jika tidak matikan
}

Ini adalah bagaimana model Arduino yang dirakit dengan fotoresistor terlihat seperti:

Model siap untuk menghubungkan fotoresistor ke Arduino

Jika LED tidak merespons perubahan pencahayaan, coba ubah nomornya 800 dalam program, jika menyala sepanjang waktu - berkurang, jika tidak menyala - meningkat.

Postingan pelajaran:

  1. Pelajaran pertama:
  2. Pelajaran kedua:
  3. Pelajaran ketiga:
  4. Pelajaran keempat:
  5. Pelajaran kelima:
  6. Pelajaran keenam:
  7. Pelajaran ketujuh:
  8. Pelajaran kedelapan:
  9. Pelajaran kesembilan:

Semua posting situs "Robot Menghibur" dengan tag.

Kita Saluran Youtube di mana video tutorial diterbitkan.

Artikel Baru

● Proyek 13: Fotoresistor. Kami memproses penerangan dengan menyalakan atau memadamkan LED

Dalam percobaan ini, kita akan berkenalan dengan sensor analog untuk mengukur iluminasi - fotoresistor (Gbr.13.1).

Komponen yang diperlukan:

Penggunaan umum fotoresistor adalah untuk mengukur iluminasi. Dalam gelap, perlawanannya cukup besar. Ketika cahaya mengenai fotoresistor, resistansi turun sebanding dengan iluminasi. Diagram untuk menghubungkan fotoresistor ke Arduino ditunjukkan pada Gambar. 13.2. Untuk mengukur iluminasi, perlu untuk memasang pembagi tegangan, di mana lengan atas akan diwakili oleh fotoresistor, yang lebih rendah - oleh resistor biasa dengan peringkat yang cukup besar. Kami akan menggunakan resistor 10k. Kami menghubungkan lengan tengah pembagi ke input analog A0 dari Arduino.

Beras. 13.2. Diagram pengkabelan fotoresistor ke Arduino

Mari kita menulis sketsa pembacaan data analog dan mengirimkannya ke port serial. Isi sketsa ditunjukkan pada Listing 13.1.

Int cahaya; // variabel untuk menyimpan data fotoresistor batalkan pengaturan ()(Serial.begin (9600);) lingkaran kosong ()(light = analogRead (0); Serial.println (ringan); delay (100);)
Prosedur koneksi:

1. Kami menghubungkan fotoresistor sesuai dengan diagram pada gambar. 13.2.
2. Muat sketsa dari Listing 13.1 ke papan Arduino.
3. Kami mengatur iluminasi photoresistor dengan tangan dan mengamati output ke port serial dari nilai yang berubah, mengingat pembacaan pada penerangan penuh ruangan dan pada pemblokiran penuh fluks bercahaya.

Sekarang mari kita buat indikator lampu menggunakan deretan LED sebanyak 8 LED. Jumlah LED yang menyala sebanding dengan penerangan saat ini. Kami merakit LED sesuai dengan diagram pada Gambar. 13.3 menggunakan resistor pembatas 220 ohm.

Beras. 13.3. Diagram pengkabelan fotoresistor dan LED ke Arduino


Isi sketsa untuk menampilkan iluminasi saat ini pada bilah LED ditunjukkan pada Daftar 13.2.

// Kontak untuk menghubungkan LED const int led = (3, 4, 5, 6, 7, 8, 9, 10); const int CAHAYA = A0; // Pin A0 untuk input fotoresistor const int MIN_LIGHT = 200; // Ambang iluminasi lebih rendah const int MAX_LIGHT = 900; // ambang iluminasi atas // Variabel untuk menyimpan data fotoresistor int nilai = 0; batalkan pengaturan (){ // Konfigurasikan pin LED sebagai output untuk (int i = 0; i<8 ;i++) pinMode(leds[i],OUTPUT); } lingkaran kosong ()(val = analogRead (LIGHT); // Baca pembacaan fotoresistor // Menggunakan fungsi peta () val = peta (val, MIN_LIGHT, MAX_LIGHT, 8, 0); // kita batasi agar tidak melebihi batas val = kendala (val, 0, 8); // nyalakan jumlah LED sebanding dengan iluminasi, // padamkan sisanya untuk (int i = 1; i<9 ;i++) { if (i>= val) // nyalakan lednya digitalWrite (led, TINGGI); lain // matikan LED digitalWrite (led, RENDAH); ) penundaan (1000); // jeda sebelum pengukuran berikutnya }
Prosedur koneksi:

1. Kami menghubungkan fotoresistor dan LED sesuai dengan diagram pada gambar. 13.3.
2. Muat sketsa dari Listing 13.2 ke papan Arduino.
3. Kami menyesuaikan iluminasi fotoresistor dengan tangan dan menentukan tingkat iluminasi saat ini dengan jumlah LED yang menyala (Gbr. 13.3).

Kami mengambil batas bawah dan atas iluminasi dari nilai yang diingat saat melakukan percobaan pada sketsa sebelumnya (Daftar 13.1). Kami menskalakan nilai iluminasi menengah dengan 8 nilai (8 LED) dan menyalakan jumlah LED sebanding dengan nilai antara batas bawah dan atas.

Daftar program