Sadržaj:

RGB LED zaslon od 64 piksela - još jedan Arduino klon: 12 koraka (sa slikama)
RGB LED zaslon od 64 piksela - još jedan Arduino klon: 12 koraka (sa slikama)

Video: RGB LED zaslon od 64 piksela - još jedan Arduino klon: 12 koraka (sa slikama)

Video: RGB LED zaslon od 64 piksela - još jedan Arduino klon: 12 koraka (sa slikama)
Video: Как использовать SSD1306 128x32 OLED-дисплей I2C с кодом Arduino 2024, Prosinac
Anonim
RGB LED zaslon od 64 piksela - još jedan Arduino klon
RGB LED zaslon od 64 piksela - još jedan Arduino klon
RGB LED zaslon od 64 piksela - još jedan Arduino klon
RGB LED zaslon od 64 piksela - još jedan Arduino klon
RGB LED zaslon od 64 piksela - još jedan Arduino klon
RGB LED zaslon od 64 piksela - još jedan Arduino klon

Ovaj se zaslon temelji na 8x8 RGB LED matrici. Za potrebe testiranja, spojen je na standardnu Arduino ploču (Diecimila) pomoću 4 registra pomaka. Nakon što sam ga pokrenuo, izradio sam ga na lakiranoj PCB -u. Registri pomaka široki su 8 bita i lako se povezuju sa SPI protokolom. Modulacija širine impulsa koristi se za miješanje boja, o tome kasnije. Dio RAM -a MCU -a koristi se kao framebuffer za držanje slike. Video RAM se raščlanjuje rutinom prekida u pozadini, pa korisnik može raditi i druge korisne stvari poput razgovora s računalom, čitanja gumba i potenciometara. Više informacija o "Arduinu": www.arduino.cc

Korak 1: Modulacija širine impulsa za miješanje boja

Modulacija širine impulsa za miješanje boja
Modulacija širine impulsa za miješanje boja

Modul širine impulsa - ŠTO? Modulacija širine impulsa u osnovi brzo uključuje i isključuje napajanje električnim uređajem. Korisna snaga proizlazi iz matematičkog prosjeka funkcije kvadratnog vala uzetog u intervalu jednog razdoblja. Što dulje funkcija ostaje u položaju ON, dobivate veću snagu. PWM ima isti učinak na svjetlinu LED dioda kao prigušivač svjetla naizmjenične struje. Predstojeći zadatak je pojedinačno kontrolirati svjetlinu 64 RGB LED diode (= 192 pojedinačne LED diode!) Na jeftin i jednostavan način, tako da se može dobiti cjelina spektar boja. Po mogućnosti ne smije biti treperenja ili drugih uznemirujućih učinaka. Nelinearna percepcija svjetline koju pokazuje ljudsko oko ovdje se neće uzeti u obzir (npr. Razlika između 10% i 20% svjetline čini se "većom" nego između 90% i 100%). Slika (1) ilustrira princip rada PWM algoritam. Recimo da je kodu dodijeljena vrijednost 7 za svjetlinu LED -a (0, 0). Nadalje, zna da postoji najviše N koraka u svjetlini. Kôd pokreće N petlji za sve moguće razine svjetline i sve potrebne petlje za servisiranje svake pojedinačne LED diode u svim redovima. U slučaju da je brojač petlje x u petlji svjetline manji od 7, LED se uključuje. Ako je veći od 7, LED se isključuje. Radeći to vrlo brzo za sve LED diode, razine svjetline i osnovne boje (RGB), svaka LED može se pojedinačno prilagoditi kako bi prikazala željenu boju. Mjerenja osciloskopom pokazuju da kod za osvježavanje zaslona traje oko 50% CPU -a. Ostatak se može koristiti za obavljanje serijske komunikacije s računalom, čitanje gumba, razgovor s RFID čitačem, slanje I2C podaci u druge module …

Korak 2: Razgovor s registrima pomaka i LED diodama

Razgovor s registrima pomaka i LED diodama
Razgovor s registrima pomaka i LED diodama
Razgovor s registrima pomaka i LED diodama
Razgovor s registrima pomaka i LED diodama

Registar pomaka je uređaj koji omogućuje serijsko učitavanje podataka i paralelni izlaz. Suprotna operacija je također moguća s odgovarajućim čipom. Postoji dobar vodič o registrima pomaka na web stranici arduino. LED diode pokreću 8-bitni registri pomaka tipa 74HC595. Svaki priključak može izvoriti ili potopiti oko 25 mA struje. Ukupna struja po potonulom ili izvoru čipa ne smije prelaziti 70mA. Ovi su čipovi iznimno jeftini pa ne plaćajte više od 40 centi po komadu. Kako LED diode imaju eksponencijalnu karakteristiku struje / napona, moraju postojati otpornici za ograničavanje struje. Koristeći Ohmov zakon: R = (V - Vf) / IR = granični otpornik, V = 5V, Vf = prednji napon LED, I = željena struja Crvene LED diode imaju prednji napon od oko 1,8 V, plavo i zeleno u rasponu od 2,5 V do 3,5 V. Upotrijebite jednostavan multimetar da to utvrdite. Za pravilnu reprodukciju boja potrebno je uzeti u obzir nekoliko stvari: spektralnu osjetljivost ljudskog oka (crveno/plavo: loše, zeleno: dobro), učinkovitost LED na određenoj valnoj duljini i struji. U praksi se jednostavno uzmu 3 potenciometra i namjeste ih dok LED ne pokaže odgovarajuće bijelo svjetlo. Naravno, maksimalna LED struja se ne smije prekoračiti. Ono što je također važno ovdje je da registar pomaka koji pokreće redove mora opskrbljivati struju 3x8 LED diodama, pa je bolje da ne gurate struju previsoko. Bio sam uspješan s ograničavanjem otpornika od 270Ohm za sve LED diode, ali to naravno ovisi o izradi LED matrice. Registri pomaka su povezani sa SPI serijskim. SPI = serijsko periferno sučelje (slika (1)). Nasuprot serijskim portovima na osobnim računalima (asinhrono, bez signala takta), SPI -u je potrebna satna linija (SRCLK). Zatim postoji signalna linija koja govori uređaju kada su podaci valjani (odabir čipa / zasun / RCLK). Konačno, postoje dvije podatkovne linije, jedna se zove MOSI (master out slave in), druga se zove MISO (master in slave out). SPI se koristi za povezivanje integriranih krugova, baš kao i ja2C. Za ovaj projekt potrebni su MOSI, SRCLK i RCLK. Dodatno se koristi i linija za omogućavanje (G). SPI ciklus započinje povlačenjem linije RCLK na LOW (Slika (2)). MCU šalje svoje podatke na MOSI liniju. Njegovo logičko stanje uzorkuje registar pomaka na rastućem rubu linije SRCLK. Ciklus se prekida povlačenjem linije RCLK natrag na HIGH. Sada su podaci dostupni na izlazima.

Korak 3: Shematski prikaz

Shematski
Shematski
Shematski
Shematski

Slika (1) prikazuje način povezivanja registara pomaka. Oni su lanac tratinčica, pa se podaci mogu premjestiti u ovaj lanac, ali i kroz njega. Stoga je dodavanje više registara pomaka jednostavno.

Slika (2) prikazuje ostatak sheme s MCU -om, konektorima, kvarcom … Priložena PDF datoteka sadrži cijela djela, najbolja za ispis.

Korak 4: Izvorni kod C ++

Izvorni kod C ++
Izvorni kod C ++
Izvorni kod C ++
Izvorni kod C ++
Izvorni kod C ++
Izvorni kod C ++

U C/C ++ obično morate prototipirati funkcije prije njihovog kodiranja.#Include int main (void); void do_something (void); int main (void) {do_something ();} void do_something (void) {/ * komentar */ } Arduino IDE ne zahtijeva ovaj korak jer se prototipi funkcija generiraju automatski. Stoga se prototipi funkcija neće pojaviti u kodu prikazanom ovdje. Slika (1): setup () functionImage (2): funkcija spi_transfer () pomoću hardverskog SPI čipa ATmega168 (radi brže) Slika (3): kod framebufera pomoću timeer1 overflow interrupt. Komadi koda koji imaju pomalo kriptičan izgled za početnike, npr dok (! (SPSR & (1 << SPIF))) {} izravno koristite registre MCU -a. Ovaj primjer riječima: "dok SPIF-bit u registru SPSR nije postavljen, ne činite ništa". Samo želim naglasiti da za standardne projekte zaista nije potrebno baviti se tim stvarima koje su toliko povezane s hardverom. Početnike to ne bi trebalo plašiti.

Korak 5: Dovršeni gadget

Gotov gadget
Gotov gadget
Gotov gadget
Gotov gadget
Gotov gadget
Gotov gadget

Nakon što sam riješio sve probleme i pokrenuo kôd, samo sam morao izraditi izgled PCB -a i poslati ga u fab house. Izgleda toliko čišće:-) Slika (1): potpuno popunjena upravljačka pločaSlika (2): prednja strana gole PCB slike (2): stražnja stranaIma konektora koji pucaju PORTC i PORTD čipa ATmega168/328 i 5V/GND. Ovi priključci sadrže serijske RX, TX linije, I2C linije, digitalne I/O linije i 7 ADC linija. Ovo je namjenjeno za slaganje štitova na stražnju stranu ploče. Razmak je prikladan za upotrebu perfboard -a (0,1 inča). Bootloader se može bljeskati pomoću ICSP zaglavlja (radi s adaptrutovim USBtinyISP -om). Čim se to učini, samo upotrijebite standardni FTDI USB/TTL serijski adapter ili slično. Također sam dodao kratkospojnik za automatsko resetiranje i onemogućavanje. Pripremio sam i malu Perl skriptu (pogledajte moj blog) koja omogućuje automatsko resetiranje pomoću FTDI kabela koji obično ne funkcionira gotovo (RTS vs DTR linija). Ovo radi na Linuxu, možda na MAC -u. Na mom blogu su dostupne tiskane ploče i nekoliko DIY KIT -ova. Potrebno SMD lemljenje! Pogledajte PDF datoteke za upute za izgradnju i izvore LED matrica.

Korak 6: Primjena: CPU Load Monitor za Linux pomoću Perla

Ovo je vrlo osnovni monitor opterećenja s povijesnim prikazom. Temelji se na Perl skripti koja prikuplja "prosjek opterećenja" sustava svakih 1 s pomoću iostata. Podaci se pohranjuju u niz koji se pomiče pri svakom ažuriranju. Novi podaci dodaju se pri vrhu popisa, a najstariji se unos gura. Detaljnije informacije i preuzimanja (kod…) dostupni su na mom blogu.

Korak 7: Primjena: Razgovor s drugim modulima pomoću I²C

Primjena: Razgovor s drugim modulima pomoću I²C
Primjena: Razgovor s drugim modulima pomoću I²C

Ovo je samo dokaz principa i daleko ne najjednostavnije rješenje za ovaj posao. Upotrebom I2C omogućuje izravno adresiranje do 127 "slave" ploča. Ovdje je ploča s desne strane u videu "master" (koja pokreće sve prijenose), lijeva ploča je slave (čeka podatke). Ja2C treba 2 signalna voda i uobičajene vodove (+, -, SDA, SCL). Kako se radi o sabirnici, svi su uređaji na nju spojeni paralelno.

Korak 8: Primjena: "Game Cube":-)

Primjena
Primjena

Samo nakaza. Ova se također uklapa u drveno kućište prikazano na uvodnoj stranici. Na stražnjoj strani ima 5 gumba koji bi se mogli koristiti za igranje jednostavne igre. KRAJ?

Korak 9: Prikaz slika / animacija na Matrixu - Quick Hack

Prikaz slika / animacija na Matrixu - Brzi hack
Prikaz slika / animacija na Matrixu - Brzi hack
Prikaz slika / animacija na Matrixu - Quick Hack
Prikaz slika / animacija na Matrixu - Quick Hack
Prikaz slika / animacija na Matrixu - Brzi hack
Prikaz slika / animacija na Matrixu - Brzi hack
Prikaz slika / animacija na Matrixu - Brzi hack
Prikaz slika / animacija na Matrixu - Brzi hack

Dakle, na raspolaganju je samo 8x8 piksela i nekoliko boja. Prvo upotrijebite nešto poput Gimpa da smanjite svoju omiljenu sliku na točno 8x8 piksela i spremite je kao ".ppm" neobrađeni format (ne ASCII). PPM je jednostavan za čitanje i obradu u Perl skripti. Korištenje ImageMagicka i alata za naredbu "convert" neće raditi ispravno. Učitajte novi arduino kôd, a zatim upotrijebite Perl skriptu za prijenos na kontroler. Treperenje je samo neusklađenost osvježavanja LED -a i brzine kadrova moje kamere. Nakon što je kôd malo ažuriran, radi prilično živahno. Sve se slike prenose uživo serijski kako ih vidite. Dulje animacije mogu se pohraniti u vanjski EEPROM, kao što se to radi na raznim govornim pločama.

Korak 10: Interaktivna kontrola pohranjenih animacija

Zašto dopustiti mikrokontroleru da se zabavi? Arduino kult je posvećen fizičkom računanju i interakciji, pa samo dodajte potenciometar i preuzmite kontrolu! Korištenje jednog od 8 analogno -digitalnih ulaza pretvarača čini to vrlo jednostavnim.

Korak 11: Prikaz videozapisa uživo

Korištenje Perl skripte i nekoliko modula čini prilično lakim prikazivanje kvazi videa uživo na X11 sustavima. Kodiran je na linuxu i može raditi i na MAC-ovima. Radi ovako:- postavite položaj pokazivača miša- snimite okvir od NxN piksela centriran na pokazivaču- skalirajte sliku na 8x8 piksela- pošaljite je na LED ploču- ponoviti

Korak 12: Više svjetla gotovo besplatno

Više svjetla gotovo besplatno
Više svjetla gotovo besplatno

S samo dva koraka svjetlina se može prilično povećati. Zamijenite 270 Ω otpornike sa 169 Ω i vratite još jedan registar pomaka 74HC595 na IC5.

Preporučeni: