PROJEKTOVANJE I IZRADA VIŠEKANALNOG KONTROLERA ZA PROGRAMIBILNI LED IZVOR DIPLOMSKI RAD IZ FIZIČKE ELEKTRONIKE.

Slides:



Advertisements
Similar presentations
EMS1EP Lecture 4 Intro to Programming Dr. Robert Ross.
Advertisements

ARDUINO CLUB What we’re really doing. BASICS The setup() and loop() functions.
Formal Language, chapter 4, slide 1Copyright © 2007 by Adam Webber Chapter Four: DFA Applications.
Core Java Lecture 4-5. What We Will Cover Today What Are Methods Scope and Life Time of Variables Command Line Arguments Use of static keyword in Java.
Lab7: Introduction to Arduino
Anurag Dwivedi & Rudra Pratap Suman.  Open Source electronic prototyping platform based on flexible easy to use hardware and software.
What is Arduino?  Arduino is a ATMEL 168 micro-controller kit designed specially for small projects  User friendly IDE(Integrated Development Environment)
How to use Arduino By: Andrew Hoffmaster.
Panasonic EVE-KC2F2024B 24 pulses per revolution 6mm diameter flattened output shaft output type: quadrature (incremental) minimum life: 15,000 rotations.
Digital & Analog Inputs. Review Fundamental parts of an Arduino program are … Setting output types using pinMode. Declaring variables Can write a digital.
Khaled A. Al-Utaibi  Digital Vs Analog Signals  Converting an Analog Signal to a Digital One  Reading Analog Sensors with the.
Introduction to Arduino Programming January MER-421:Mechatronic System Design.
IR Object Detection living with the lab IR light from LED IR light reflected off object IR LED IR receiver Infrared (IR) light leaving an LED reflects.
Electrical and Computer Engineering iLights Nick Wittemen, EE Chris Merola, EE José Figueroa, EE Matt Ryder, EE Comprehensive Design Review.
Electrical and Computer Engineering iLights Nick Wittemen, EE Chris Merola, EE José Figueroa, EE Matt Ryder, EE Midway Design Review.
Overview Intro to Project 2 - Serial I/O – RS232, USB Assembly Language Programming Using the LC-3 Simulator.
Embedded Programming and Robotics Lesson 2 C Programming Refresher C Programming1.
Parallax 4x20 LCD (part number 27979) with Arduino Duemilanove
Arduino John Marcoux Christopher Lesch Thomas Dodge Unless otherwise noted, all information and pictures came from:
Arduino Part 2 Topics: Serial Communication Programming Constructs: functions, loops and conditionals Digital Input.
Basic Circuits – Lab 2 Arduino and Sensors
DPNM Lab., POSTECH 1/25 CS490K - Internet of Things (IoT) Jonghwan Hyun DPNM Lab. Department of Computer Science and Engineering, POSTECH
Practical Electronics & Programming
MCU: Interrupts and Timers Ganesh Pitchiah. What’s an MCU ?
ProtoSnap Introduction to Arduino Casey Haskell, Pete Lewis, David Stillman, Jim Lindblom, Pete Dokter, Lindsay Levkoff, Trevor Zylstra.
Introduction to Sensor Technology Week Five Adam Taylor
Pulse Width Modulation (PWM). 100% Pulse Width Modulation (PWM) 0% On the chipKIT there are 490 periods per second. Use analogWrite(pin, value) to control.
习 题 4.23 编写一个 applet ,读取一个矩形的边长,然后 用在 paint 方法中使用 drawString 方法画出用星组成 的空心矩形。程序应能画出边长从 1 到 20 的任何矩 形。
Sparkfun Electronics ATtiny85 Arduino Quick Reference Sheet
Suleyman Demirel University CSS340 Microprocessor Systems – Lecture 1 Getting Started to Arduino.
Introduction to Java Lecture Notes 3. Variables l A variable is a name for a location in memory used to hold a value. In Java data declaration is identical.
Timers and Interrupts Anurag Dwivedi. Let Us Revise.
Code The Arduino Environment.
ARDUINO 1. Basics  Comments  /* * Blink * * The basic Arduino example. Turns on an LED on for one second, * then off for one second, and so on... We.
Basic Circuits – Lab 4 Serial and OSC (maybe some theory too) Xmedia Spring 2011.
Reading and Writing Text over USB A Colony Project Tutorial.
INTERNET OF EVERYTHING SDU 2016 Week 4. Simple Digital and Analog Inputs  The Arduino’s ability to sense digital and analog inputs allows it to respond.
Photoresistor resistance changes dramatically with light level living with the lab Using Photoresistors with an Arduino © 2011 LWTL faculty team.
Welcome to Processing Who does not have access to digital camera?
C# SERIAL COMMUNICATION TEMPERATURE CONTROL WITH ARDUINO KAAN EREN
Serial Communication RS-232. In order to make two devices communicate, whether they are desktop computers, microcontrollers, or any other form of integrated.
Microcontroller basics Embedded systems for mortals.
Microcontroller basics Embedded systems for mortals.
Introduction to Programming the Arduino Dr Gaw 3/21/14.
Electronic instrumentation Digitization of Analog Signal in TD
SMART CART Group 20 Ciju Francis, Tom Rosengrant.
Pulse-Width Modulation: Simulating variable DC output
Session 6 John Wolf (WolfDenElectronics.com). Objectives – We’ll Learn  Code to Voice  PIR sensors – motion detection  Quadrature Encoders  Audio.
Ultrasonic Sensor TYWu.
Pulse Width Modulation Instructor Dr Matthew Khi Yi Kyaw.
Embedded Programming Keeping Time Serial Data and PWM Signals A/D Conversion Data Formats and Constructs Interrupts MAE 156A Ardunio UNO Development Board.
Sparkfun Electronics ATtiny85 Arduino Quick Reference Sheet
Assist. Prof. Rassim Suliyev - SDU 2017
Microcontroller basics
Arduino & its hardware interfacing
Microcontroller basics
UTA010 : Engineering Design – II
Arduino Part 1 Topics: Microcontrollers Programming Basics
Sound Sensor TYWu.
INC 161 , CPE 100 Computer Programming
Programi,Podaci,Varijable,Računanje- Uvod
1 Code
null, true, and false are also reserved.
Arduino : Introduction & Programming
Programming 2: The Arduino IDE & First Sketches
Agenda Types and identifiers Practice Assignment Keywords in Java
Setting up a basic program with Arduino
Model Blimp Design Competition Programming Workshop by Youth College (International) / VTC May
Pulse-Width Modulation: Simulating variable DC output
Presentation transcript:

PROJEKTOVANJE I IZRADA VIŠEKANALNOG KONTROLERA ZA PROGRAMIBILNI LED IZVOR DIPLOMSKI RAD IZ FIZIČKE ELEKTRONIKE

UVOD Spektralno modulisani LED izvori sa različitim spektralnim doprinosima, namenjeni kalibraciji optičkih detektora. Podesiti doprinose pojedinačnih LED u ukupnom spektru. Podešavanje pomoću odgovarajuće struje. Dobijanje željenog spektra pomoću LED različitih karakteristika. Za kalibraciju optičkih radijacionih pirometara, spektar će imati oblik Plankovog zakona zračenja. Sumiranje unutar integrišuće sfere.

Zadatak

PWM Tehnika dobijanja analognih rezultata digitalno. 1 – 5V, 0 – 0V. Simuliramo napone u rasponu od 0V do 5V menjajući odnos signal-pauza. Velika frekvencija  stabilni napon.

BLOK ŠEMA URE Đ AJA Arduino daje najviše 40mA  moramo da povećamo struju  strujni izvori za svaki kanal.

ARDUINO ATMega 16MHz 15 pina za PWM USB kontroler Napajanje zasebno ili preko USB

PWM LED TESTER

LED PANEL I NIZ LED ZA TESTIRANJE DIP ZIF Kontaktna letvica 1x15 Kontaktna letvica 2x15 sa jumper-ima 5mm LED 20mA (u praksi 40mA) 2.1V pad napona 3 diode u red i 7 paralelno  250mA i 6.3V

STRUJNI IZVORI

POTENCIOMETRI

PCB

KUĆIŠTE I RASPORED KOMPONENATA

PROGRAMIRANJE Kontrola odnosa signal-pauza preko računara za svaki kanal zasebno. Baud Rate = 9600b/s. Određivanje COM porta Unos vrednosti za PWM u % Između 0 i 100 Prijava greške Pretvaranje u 8-bit Kreiranje stringa sa deliteljima String u Int Int u String Slanje na COM port Mapiranje pinova Menjanje frekvencije Čitanje sa serijskog Deljenje stringa String u int PWM

ARDUINO PWM analogWrite(pin, vrednost) Podrazumevane PWM frekvencije: 490Hz i 976Hz Menjamo vrednosti 5 tajmera. Prescaler 1 daje najveću frekvencu: 31.25kHz i 62.5kHz int myEraser = 7; // 111 se koristi za brisanje // postavljamo prescaler za timer 1 na 0 TCCR1B &= ~myEraser; // upisujemo novu vrednost int myPrescaler = 1; TCCR1B |= myPrescaler; // upisujemo prescaler

Provera na osciloskopu: desno pinovi 4 i 13, levo ostali pinovi.

ARDUINO - PROGRAMIRANJE char inputBuffer[100]; // For incoming serial data String s; int pwm[15]; // 0 – 255 String pod; int ledPin[] = {2,3,4,5,6,7,44,45,46,8,9,10,11,12,13}; // maps Arduino pins void setup() { Serial.begin(9600); // Opens serial port, sets data rate to 9600 bit/s. int myEraser = 7; // sets integer that erases timers TCCR0B &= ~myEraser; // erase timer 0 TCCR1B &= ~myEraser; // erase timer 1 TCCR2B &= ~myEraser; // erase timer 2 TCCR3B &= ~myEraser; // erase timer 3 TCCR4B &= ~myEraser; // erase timer 4 TCCR5B &= ~myEraser; // erase timer 5 // Write timers values int myPrescaler = 1; // chose max frequency // write into timers TCCR0B |= myPrescaler; // 62kHz, it affects timing functions by reducing them 62 times TCCR1B |= myPrescaler; // 31kHz TCCR2B |= myPrescaler; // 31kHz TCCR3B |= myPrescaler; // 31kHz TCCR4B |= myPrescaler; // 31kHz TCCR5B |= myPrescaler; // 31kHz } void loop() { if (Serial.available() > 0) { // writes while there is something to read from serial Serial.readBytes(inputBuffer, Serial.available()); // reads from serial into inputBuffer array Serial.print(inputBuffer); // writes what has been read from serial Serial.print("END"); // puts an END at the end of read string } delay(20000); // for default timer 0, enough is this value divided by 62 set it to 20k pod = String(inputBuffer); // PWM starts here, for all pins for (int x=0; x =parserCnt){ rFromIndex = rToIndex+1; rToIndex = s.indexOf(parser,rFromIndex); if(index == parserCnt){ if(rToIndex == 0 || rToIndex == -1){ return '\0'; } return s.substring(rFromIndex,rToIndex); } else{ parserCnt++; } } return rs; }

JAVA FORMA PWM LED br. poklapaju se sa onima na kućištu. Arduino Pin odgovaraju rednom br. PWM pina na boardu. Unosimo vrednosti od 0 do 100. Ukoliko unesemo vrednost van ovog opsega, izaći će prozor koji prijavljuje grešku. Pritiskom na dugme „Apply“, procenti se pretvaraju u 8-bitne vrednosti (od 0 do 255), što se i ispisuje za svaki pin. Tako đ e se šalje informacija na USB i ispisuje koji je COM port odredio operativni sistem za Arduino.

JAVA KOD package arduinoserialtest; import javax.swing.JOptionPane; import jssc.SerialPort; import jssc.SerialPortEvent; import jssc.SerialPortEventListener; import jssc.SerialPortException; import jssc.SerialPortList; public class NewJDialog extends javax.swing.JDialog { jssc.SerialPort serialPort; String izabraniPort = ""; String tmp=""; String primljeno=""; int percent[]; String percents[]; int bin[]; String bins[]; String percentInput; String zaSlanje = ""; public NewJDialog() { initComponents();} class SerialPortReader implements SerialPortEventListener { public void serialEvent(SerialPortEvent event) { if (event.getEventValue() == 0) { return;} //Read from serial until the END is received if (event.isRXCHAR()) {try { byte buffer[] = serialPort.readBytes(event.getEventValue()); tmp = tmp + new String(buffer); if (new String(buffer).indexOf("END") > -1) { primljeno = tmp.split("END")[0]; tmp = ""; //clear what has been read}} catch (SerialPortException ex) { // System.out.println(ex);}}}} private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { try { // detect com port for Arduino String[] portNames = SerialPortList.getPortNames(); if (portNames == null) { System.out.println("sout"); //print if nothing is detected return;} // Print out working COM port for (int i = 0; i < portNames.length; i++) { // System.out.println("port: " + portNames[i].toString()); izabraniPort = portNames[i].toString(); comport.setText(izabraniPort); // write com port into textbox}} serialPort = new SerialPort(izabraniPort); serialPort.openPort(); serialPort.setParams(SerialPort.BAUDRATE_9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE, false, false); // speed is 9600 to match Arduino, false statements at the end exist so that Arduino does not get reset each time there is a read int mask = SerialPort.MASK_RXCHAR + SerialPort.MASK_CTS + SerialPort.MASK_DSR;//Prepare mask serialPort.setEventsMask(mask);//Set mask serialPort.addEventListener(new SerialPortReader()); // Catch port package arduinoserialtest; import javax.swing.JOptionPane; import jssc.SerialPort; import jssc.SerialPortEvent; import jssc.SerialPortEventListener; import jssc.SerialPortException; import jssc.SerialPortList; public class NewJDialog extends javax.swing.JDialog { jssc.SerialPort serialPort; String izabraniPort = ""; String tmp=""; String primljeno=""; int percent[]; String percents[]; int bin[]; String bins[]; String percentInput; String zaSlanje = ""; public NewJDialog() { initComponents();} class SerialPortReader implements SerialPortEventListener { public void serialEvent(SerialPortEvent event) { if (event.getEventValue() == 0) { return;} //Read from serial until the END is received if (event.isRXCHAR()) {try { byte buffer[] = serialPort.readBytes(event.getEventValue()); tmp = tmp + new String(buffer); if (new String(buffer).indexOf("END") > -1) { primljeno = tmp.split("END")[0]; tmp = ""; //clear what has been read}} catch (SerialPortException ex) { // System.out.println(ex);}}}} private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { try { // detect com port for Arduino String[] portNames = SerialPortList.getPortNames(); if (portNames == null) { System.out.println("sout"); //print if nothing is detected return;} // Print out working COM port for (int i = 0; i < portNames.length; i++) { // System.out.println("port: " + portNames[i].toString()); izabraniPort = portNames[i].toString(); comport.setText(izabraniPort); // write com port into textbox}} serialPort = new SerialPort(izabraniPort); serialPort.openPort(); serialPort.setParams(SerialPort.BAUDRATE_9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE, false, false); // speed is 9600 to match Arduino, false statements at the end exist so that Arduino does not get reset each time there is a read int mask = SerialPort.MASK_RXCHAR + SerialPort.MASK_CTS + SerialPort.MASK_DSR;//Prepare mask serialPort.setEventsMask(mask);//Set mask serialPort.addEventListener(new SerialPortReader()); // Catch port

// Calculations percent = new int[16]; // define array length percents = new String[16]; // define array length bin = new int[16]; bins = new String[16]; // get string values from textboxes percents[1] = percentInput1.getText(); percents[2] = percentInput2.getText(); percents[3] = percentInput3.getText(); percents[4] = percentInput4.getText(); percents[5] = percentInput5.getText(); percents[6] = percentInput6.getText(); percents[7] = percentInput7.getText(); percents[8] = percentInput8.getText(); percents[9] = percentInput9.getText(); percents[10] = percentInput10.getText(); percents[11] = percentInput11.getText(); percents[12] = percentInput12.getText(); percents[13] = percentInput13.getText(); percents[14] = percentInput14.getText(); percents[15] = percentInput15.getText(); // Do for all 15 fields zaSlanje = ""; for (int x=1; x<=15; x++) { percent[x] = Integer.parseInt(percents[x]); // set int values bin[x] = (int) Math.round(2.55 * percent[x]); //convert percent to 8-bit value bins[x] = Integer.toString(bin[x]); //convert to string zaSlanje = zaSlanje + bins[x] + ","; // Check if values are withing percent range if (percent[x] 100) { // Error input report with message box System.out.println("Error"); NewJDialog.infoBox("Input values must be between 0 and 100", "Error"); } // System.out.println(zaSlanje + "\n"); //test weather it sends proper values // Display 8-bit values in label bitvalue1.setText(bins[1]); bitvalue2.setText(bins[2]); bitvalue3.setText(bins[3]); bitvalue4.setText(bins[4]); bitvalue5.setText(bins[5]); bitvalue6.setText(bins[6]); bitvalue7.setText(bins[7]); bitvalue8.setText(bins[8]); bitvalue9.setText(bins[9]); bitvalue10.setText(bins[10]); bitvalue11.setText(bins[11]); bitvalue12.setText(bins[12]); bitvalue13.setText(bins[13]); bitvalue14.setText(bins[14]); bitvalue15.setText(bins[15]); //serialPort.writeString(text.getText()); // Set String to send over // String zaSlanje = "100,0,100,0,100,0,100,0,100,0,100,0,100,0,100,"; serialPort.writeString(zaSlanje); System.out.println("Sending String" + zaSlanje); try { Thread.sleep(500); } catch (InterruptedException ex) { } // System.out.println("primljeno: " + primljeno); // print what is received over serial serialPort.closePort(); } catch (SerialPortException ex) { System.out.println("greska: " + ex); } // Calculations percent = new int[16]; // define array length percents = new String[16]; // define array length bin = new int[16]; bins = new String[16]; // get string values from textboxes percents[1] = percentInput1.getText(); percents[2] = percentInput2.getText(); percents[3] = percentInput3.getText(); percents[4] = percentInput4.getText(); percents[5] = percentInput5.getText(); percents[6] = percentInput6.getText(); percents[7] = percentInput7.getText(); percents[8] = percentInput8.getText(); percents[9] = percentInput9.getText(); percents[10] = percentInput10.getText(); percents[11] = percentInput11.getText(); percents[12] = percentInput12.getText(); percents[13] = percentInput13.getText(); percents[14] = percentInput14.getText(); percents[15] = percentInput15.getText(); // Do for all 15 fields zaSlanje = ""; for (int x=1; x<=15; x++) { percent[x] = Integer.parseInt(percents[x]); // set int values bin[x] = (int) Math.round(2.55 * percent[x]); //convert percent to 8-bit value bins[x] = Integer.toString(bin[x]); //convert to string zaSlanje = zaSlanje + bins[x] + ","; // Check if values are withing percent range if (percent[x] 100) { // Error input report with message box System.out.println("Error"); NewJDialog.infoBox("Input values must be between 0 and 100", "Error"); } // System.out.println(zaSlanje + "\n"); //test weather it sends proper values // Display 8-bit values in label bitvalue1.setText(bins[1]); bitvalue2.setText(bins[2]); bitvalue3.setText(bins[3]); bitvalue4.setText(bins[4]); bitvalue5.setText(bins[5]); bitvalue6.setText(bins[6]); bitvalue7.setText(bins[7]); bitvalue8.setText(bins[8]); bitvalue9.setText(bins[9]); bitvalue10.setText(bins[10]); bitvalue11.setText(bins[11]); bitvalue12.setText(bins[12]); bitvalue13.setText(bins[13]); bitvalue14.setText(bins[14]); bitvalue15.setText(bins[15]); //serialPort.writeString(text.getText()); // Set String to send over // String zaSlanje = "100,0,100,0,100,0,100,0,100,0,100,0,100,0,100,"; serialPort.writeString(zaSlanje); System.out.println("Sending String" + zaSlanje); try { Thread.sleep(500); } catch (InterruptedException ex) { } // System.out.println("primljeno: " + primljeno); // print what is received over serial serialPort.closePort(); } catch (SerialPortException ex) { System.out.println("greska: " + ex); }

POVEZIVANJE LED I MERENJE JAČINE STRUJE Moguće je priključiti po 3 LED na svakom kanalu. A – merenje struje, V – pada napona. Za tačnu amplitudu struje, podesiti signal na 1.