Close
About
FAQ
Home
Collections
Login
USC Login
Register
0
Selected
Invert selection
Deselect all
Deselect all
Click here to refresh results
Click here to refresh results
USC
/
Digital Library
/
University of Southern California Dissertations and Theses
/
Computerization of Ralph Knowles Heliodon
(USC Thesis Other)
Computerization of Ralph Knowles Heliodon
PDF
Download
Share
Open document
Flip pages
Contact Us
Contact Us
Copy asset link
Request this asset
Transcript (if available)
Content
COMPUTERIZATION OF RALPH KNOWLES HELIODON by Xing Chen A Thesis Presented to the FACULTY OF THE SCHOOL OF ARCHITECTURE UNIVERSITY OF SOUTHERN CALIFORNIA In Partial Fulfillment of the Requirements for the Degree MASTER OF BUILDING SCIENCE August 2008 Copyright 2008 Xing Chen ii DEDICATION To my parents, and my hometown, Shanghai iii ACKNOWLEDGEMENTS I would like to thank my committee members, Douglas Noble, Marc Schiler, Ralph Knowles, and advisors Joseph E. Pingree, Karen Kensek, who had instructed and supported me throughout the whole process. iv Table of Contents DEDICATION ........................................................................................................................ ii ACKNOWLEDGEMENTS .................................................................................................. iii List of Tables ......................................................................................................................... vi List of Figures ...................................................................................................................... vii Abstract ................................................................................................................................. xi Chapter 1. Introduction ........................................................................................................... 1 Part I. Background Research .................................................................................................. 3 Chapter 2. Earth-Sun Geometry ............................................................................................. 4 2.1 earth rotation and earth revolution ................................................................... 4 2.2 geographic coordinates of earth ....................................................................... 5 2.3 solar day, standard time, time zones and daylight saving time ........................ 6 2.4 solar declination, solar altitude and azimuth ................................................... 9 2.5 calculation methods for solar altitude and azimuth ....................................... 10 Chapter 3. Heliodon .............................................................................................................. 17 3.1 different types of heliodon ............................................................................. 17 3.2 heliodon examples ......................................................................................... 19 Part II. Ralph Knowles Heliodon ......................................................................................... 23 Chapter 4. Ralph Knowles Heliodon .................................................................................... 24 4.1 hardware configuration .................................................................................. 24 4.2 calibration of the machine ............................................................................. 27 4.3 current control method ................................................................................... 31 Chapter 5. A Proposed Interface by Tat Fu ........................................................................... 33 Chapter 6. Hypothesis ........................................................................................................... 35 Chapter 7. Brief Process and Different Possibilities ............................................................ 36 Chapter 8. Electric Motors .................................................................................................... 37 8.1 direct current motors ...................................................................................... 37 v 8.2 alternating current motors .............................................................................. 42 8.3 stepper motors ................................................................................................ 43 Part III. New Control Method .............................................................................................. 51 Chapter 9. Hardware ............................................................................................................. 52 9.1 the new motors ............................................................................................... 52 9.2 the circuit ....................................................................................................... 54 Chapter 10. Software ............................................................................................................ 73 10.1 calculation sequence and calculation units .................................................. 74 10.2 communication between the host application and the device ...................... 85 10.3 user interface ................................................................................................ 90 10.4 flow chart of the application, as summary ................................................... 94 Chapter 11. Conclusion and Future Work ............................................................................ 95 11.1 conclusion .................................................................................................... 95 11.2 future work ................................................................................................... 95 Bibliography ......................................................................................................................... 96 Appendices ......................................................................................................................... 103 Appendix I: Data Sheet for SM2006, NEMA23, stepper motor ....................... 104 Appendix II: Data Sheet for 34N104S, stepper motor ...................................... 106 Appendix III: Data Sheet for DLP-USB245M-G .............................................. 108 Appendix IV: Data Sheet for SN74LS273 ......................................................... 121 Appendix V: Data Sheet for SN7416 ................................................................. 126 Appendix VI: Data Sheet for SN754410 ........................................................... 130 Appendix VII: Source Code for the Final Application ...................................... 135 vi List of Tables Table 2-1: coefficient value for Eq. 2-2 (Muneer, 1997) 11 Table 9-1: main specification of the new motors 54 Table 9-2: pin description, self-powered system, DLP-USB245M-G 58 Table 9-3: pin description, sn74ls273 61 Table 9-4: function table, sn74ls273 62 Table 9-5: pin description, sn7416 63 Table 9-6: function table, sn7416 63 Table 9-7: pin description, sn754410 66 Table 9-8: function table, sn754410 67 Table 9-9: example signal flow 71 Table 9-10: signal patterns for forward and backward rotation 71 vii List of Figures Fig. 2-1: Earth Revolution 5 Fig. 2-2: the coordinates of latitude and longitude 6 Fig. 2-3: equation of time throughout the year, at 12:00 GMT, 2008 8 Fig. 2-4: illustration of Solar Altitude and Solar Azimuth 10 Fig. 3-1: structure of the portable heliodon of MIT Daylighting Lab 19 Fig. 3-2: the Sun Emulator 20 Fig. 3-3: the PG&E Energy Center Heliodon 21 Fig. 3-4: the Urp System of MIT Tangible Media Group 22 Fig. 4-1: Ralph Knowles Heliodon 24 Fig. 4-2: parts of Ralph Knowles Heliodon 25 Fig. 4-3: main track gears and main track axis, Ralph Knowles Heliodon 26 Fig. 4-4: light source, Ralph Knowles Heliodon 26 Fig. 4-5: calibration of latitude, Ralph Knowles Heliodon 27 Fig. 4-6: calibration of hours, Ralph Knowles Heliodon 28 Fig. 4-7: calibration of declination, earth position about the Sun during a year 29 Fig. 4-8: calibration of declination, declination-arc and declination chord 30 Fig. 4-9: calibration of declination, projection on declination chord 30 Fig. 4-10: calibration of declination, projection on declination arc 31 viii Fig. 4-11: control units and the motors 32 Fig. 5-1: interface by Tat Fu 33 Fig. 8-1: schematic structure of a DC commutator motor 38 Fig. 8-2: basic drive for a DC commutator motor 40 Fig. 8-3: H-bridge drive for a DC commutator motor 40 Fig. 8-4: pulse-width modulation 41 Fig. 8-5: structures of three basic types of stepper motor 44 Fig. 8-6: winding diagram of unipolar and bipolar stepper motor 46 Fig. 8-7: wave drive control sequence, forward and backward 47 Fig. 8-8: stator and rotor under wave drive (Gieras, 1997) 48 Fig. 8-9: full step drive sequence, forward and backward 48 Fig. 8-10: stator and rotor under full step drive (Gieras, 1997) 49 Fig. 8-11: half step drive sequence, forward and backward 49 Fig. 8-12: stator and rotor under half step drive (Gieras, 1997) 50 Fig. 9-1: picture of sub track motor (Motor 1), wiring diagram 53 Fig. 9-2: picture of main track motor (Motor 2), wiring diagram 53 Fig. 9-3: typical stepper motor drive circuit components (Gieras, 1997) 54 Fig. 9-4: first circuit diagram 56 Fig. 9-5: pin layout and hardware of DLP-USB245M-G 57 ix Fig. 9-6: DLP-USB245M-G self-powered 5V connection 57 Fig. 9-7: pulse generator, part of the first circuit designed 60 Fig. 9-8: pin layout of sn74ls273 61 Fig. 9-9: pin layout of sn7416 62 Fig. 9-10: logic circuit, part of the first circuit designed 64 Fig. 9-11: example of the final output pattern of the logic circuit 65 Fig. 9-12: pin layout of sn754410 66 Fig. 9-13: amplifier IC3, part of the first circuit designed 67 Fig. 9-14: amplifier IC5, IC6, part of the first circuit designed 68 Fig. 9-15: stepper motor 1, part of the first circuit designed 69 Fig. 9-16: bipolar mode, parallel connection for Motor 2, 70 Fig. 10-1: user needs and device function mapping 73 Fig. 10-2: calculation sequence and calculation units 75 Fig. 10-3: azimuth calibration, 1 79 Fig. 10-4: azimuth calibration, 2 80 Fig. 10-5: azimuth calibration, 3 81 Fig. 10-6: interface, an application for calculation part 83 Fig. 10-7: calling calculation units, an application for calculation part 84 Fig. 10-8: D2XX driver architecture 86 x Fig. 10-9: interface, final application 91 Fig. 10-10: message box, final application 92 Fig. 10-11: flow chart, final application 94 xi Abstract This thesis documents the development of a new control method for Ralph Knowles Heliodon, owned by the School of Architecture, University of Southern California. The heliodon has been used to illustrate the solar impact upon architecture by using two manually controlled direct current motors that drive a light source on two tracks to simulate the position of the Sun at a certain time relative to a platform as the ground. In the new method, a Windows application with a user interface is developed to communicate with a circuit that can control a new pair of stepper motors that drive the light source to the target position, which is determined by the user input in the application. The new control method provides a conceptually clear and user-friendly way to operate the device and explores its potential function as an illustration tool. 1 Chapter 1.Introduction The relationship between the Sun and the human environment has been a concern since the beginning of time. Most of the earth's energy is provided by the Sun. Solar radiation and the geometry between earth and the Sun dominate the cycles and natural phenomena of earth's ecosystems, which are the basis of human existence. Architecture, as one important factor in people's daily lives, is also closely related to the patterns of the Sun. Buildings that advantageously use solar radiation can provide a more healthy and comfortable environment for people and reduce non-renewable energy consumption. To better utilize the solar energy, it is important to understand the characteristics and the relative motion between the Sun and earth. A heliodon is an illustrative teaching and research device that can mimic the position of the Sun over a physical model in relation to a location on earth, simulating latitude, time of day and date of year. Thus, the solar impact upon a building can be studied by using a heliodon and a physical model. There are different types of heliodons. One example was created in 1965 by several students and Professor Ralph Knowles, from the School of Architecture, at the University of Southern California. This device was created for the study of solar access and zoning theory, and is operated by two Direct Current (DC) motors which drive the heliodon under manual controls. 2 With the development of modern control technology, it becomes simpler to more precisely control devices like the heliodon, both for position and time, by using electronic circuitries. Meanwhile, working with an innovative computer interface, new functions for the device can be realized based on that precision. These possibilities with the aim to improve the performance and explore future potential for Ralph Knowles Heliodon, by incorporating modern control methods and a user friendly interface are the primary goals of this research. 3 Part I. Background Research 4 Chapter 2. Earth-Sun Geometry 2.1 earth rotation and earth revolution The phenomenon that Earth revolves around the Sun is called Earth Orbit. The average period of one orbit is about 365 days, 6 hours and 9 minutes, or one sidereal year. The elliptical orbit of the revolution causes the variation in the distance between Earth and the Sun in one period, from 147.3 million km, Perihelion on January 3 rd , to 152.1 million km, Aphelion on July 4 th . Earth also spins on its own axis from west to east for a period of about 23 hours, 56 minutes and 4 seconds, or one sidereal day, which is called Earth Rotation. It causes the day and night cycle of Earth and the daily path of the Sun in the sky. The axis of Earth tilts 23°26’22” from the perpendicular of the ecliptic plane, the geometric surface containing the mean orbit of Earth Revolution. In one single revolution, because of this angle, the sun light appears to be normal to Earth surface from an extreme of latitude of 23°26’22”N, the Tropic of Cancer, to an extreme of latitude of 23°26’22”S, the Tropic of Capricorn. This factor causes the seasons, as well as the annual change of the height of the Sun in the sky. The Sun is directly over the Earth’s equator, latitude of 0° on March Equinox, when day and night are divided equally between the hemispheres. After that date, the Sun appears to move northward and daytime becomes longer on the northern hemisphere until June Solstice when it is directly over Tropic of Cancer and daytime becomes 5 longest in a year. It then moves southward and reaches the equator again on September Equinox and Tropic of Capricorn on December Solstice. Fig. 2-1: Earth Revolution http://www.physicalgeography.net/fundamentals/6h.html 2.2 geographic coordinates of earth A geographic coordinate system was developed to define different locations on Earth, based on the mathematic theories of ancient Babylonians and the study of Ptolemy. In the modern system, latitude is the angle between a line connecting any point on the earth surface and the earth center to the plane of the equator, serving as the north-south coordinate. The latitude of the equator is 0°, while the geographic North Pole is defined as 90°N and the geographic South Pole 90°S. The points that have the same latitude form a circle of latitude, which is parallel to the equator. 6 For the east-west coordinate, meridians are defined as a set of imaginary semi-circles that connect the two geographic poles. In general, longitude is the angle between the planes of any two meridians. To obtain a uniform coordinate, in 1884, the International Meridian Conference adopted the meridian that passes the Royal Observatory, Greenwich, UK as the Prime Meridian. Longitude starts from the Prime Meridian, 0°, to +180° eastward and -180° westward. Fig. 2-2: the coordinates of latitude and longitude http://wwp.greenwichmeridian.com/ 2.3 solar day, standard time, time zones and daylight saving time Apparent solar day is the interval of time that the Sun successively crosses the same meridian on Earth. An apparent solar day is shorter than the time of a full Earth rotation because of the revolution around the Sun. Apparent solar time is based on apparent solar day. The length of an apparent solar day changes throughout a year due to two reasons. First, 7 according to Kepler’s laws of planetary motion, the area swept out by the sun-earth vector is constant for equal time interval, which means that Earth moves faster while closer to the Sun in its elliptical orbit. Second, the angle between the earth’s axis and the ecliptic plane causes the difference between the Sun’s motion and its projection on the equator, if it is not March and September Equinox. To solve the problem of the unevenness of apparent solar day as a reference of time, a mathematical concept called mean sun was introduced. Mean sun moves along the ecliptic at the average speed of the Sun and passes the perihelion and aphelion at the same time as the Sun. Mean solar day is the interval of time that mean sun crosses the same meridian on Earth. One mean solar day is defined to be 24 hours, or 1440 minutes, or 86400 seconds. For the convenience of daily life, civil time is defined as mean solar time minus 12 hours because the mean solar day starts at noon when the mean sun is crossing the meridian. Equation of time is the difference between apparent solar time and mean solar time. Fig. 2-3 roughly illustrated the variation of equation of time throughout a year, using the data for the year 2008. 8 Fig. 2-3: equation of time throughout the year, at 12:00 GMT, 2008 http://ourworld.compuserve.com/homepages/Patrick_Powers/EoT.htm In 1884, International Meridian Conference defined the International Date Line and the time zones, GMT +12 to GMT -12, based on Greenwich Mean Time (GMT), the mean solar time of Royal Greenwich Observatory, Great Britain. Greenwich Meridian, 0° longitude, marks the center of GMT 0. Typically, one time zone is bordered by two meridians which are 15° apart and differ in time by one hour, except for GMT +12 and GMT -12, which only extend 7.5°. Theoretically each time zone adopts one standard time, which is the mean solar time of the meridian located at the center of the time zone, instead of using local mean time depending on the different geographic locations. Yet in practice, the boundaries of time zones are often irregular for convenience or political reasons. Universal Time (UT) replaced Greenwich Mean Time to indicate the mean solar time of the Greenwich Meridian in 1928. And in 1955 the International Astronomical Union ‐20 ‐15 ‐10 ‐5 0 5 10 15 20 1‐Jan 14‐Jan 27‐Jan 9‐Feb 22‐Feb 6‐Mar 19‐Mar 1‐Apr 14‐Apr 27‐Apr 10‐May 23‐May 5‐Jun 18‐Jun 1‐Jul 14‐Jul 27‐Jul 9‐Aug 22‐Aug 4‐Sep 17‐Sep 30‐Sep 13‐Oct 26‐Oct 8‐Nov 21‐Nov 4‐Dec 17‐Dec 30‐Dec mean solar time, minute date equation of time, 12:00 GMT, 2008 9 defined UT0, which is “obtained by optical observations of star transits at various astronomical observatories” (Encyclopædia Britannica. Ultimate Reference Suite. 2008). UT1 corrects the effect of the polar motion on UT0, while UT2 corrects the effect of the variation of rotation speed of Earth from year to year. Coordinated Universal Time (UTC) was adopted as the basis of civil and scientific time internationally in 1963. Based on the seconds of International Atomic Time, UTC is modified by adding a leap second when necessary so that UTC and UT1 are kept within a difference of 0.9 second. Daylight saving time is a time system that advances the clock from the standard time in summer, usually between late March, or April, and late September, or October, for the Northern Hemisphere. The actual beginning and ending dates vary throughout history and vary from country to country. The main purpose is to take advantage of daylight in summer and to reduce energy consumption. In the new US law implemented in 2007, most states of the United States start daylight saving time on the second Sunday in March and end on the first Sunday in November. 2.4 solar declination, solar altitude and azimuth Solar declination is the angle between the earth-sun vector and the equatorial plane. Usually the value is positive if the vector appears northward of the equatorial plane. 10 In general, altitude is the height of a thing above a reference plane. To illustrate the position of the Sun in the sky, altitude is defined as the angle between the earth-sun vector and the ground plane. Azimuth is defined as the angle between the projection of sun on the ground plane to a certain reference plane, usually true north. Using these two coordinates, the position of the Sun at any given time during a year can be determined. Fig. 2-4: illustration of Solar Altitude and Solar Azimuth http://www.johnpratt.com/items/astronomy/notes/notes01.html 2.5 calculation methods for solar altitude and azimuth The position of the sun in the sky could be calculated based on various algorithms, with different precision. Algorithms (Muneer, 1997): 1. Day Number (DN): the number of days to a particular date in a year from January 1 st . The DN of January 1 st is 1 in any given year. 2. Equation of Time (EOT): (1) low accuracy, algorithm by Woolf, 1968 11 (Eq. 2-1) x 360 DN 1 365.242 EOT 0.1236 sin x 0.0043 cos x 0.1538 sin 2x 0.0608 cos 2x (2) medium accuracy, algorithm by Lamm, 1981 (Eq. 2-2) EOT A cos 2πkN 365.25 B sin 2πkN 365.25 where N is the number of days to a particular date in a four-year cycle starting after the leap year. The values of coefficient A and B are in Table. 2-1. Table 2-1: coefficient value for Eq. 2-2 (Muneer, 1997) k A k 10 3 h B k 10 3 h 0 0.2087 0.00000 1 9.2869 -122.29000 2 -52.2580 -156.98000 3 -1.3077 -5.16020 4 -2.1867 -2.98230 5 -1.5100 -0.23463 (3) high accuracy, algorithm by Yallop, 1992 (Eq. 2-3) UT h min 60 s 3600 t UT 24 D 30.6m 0.5365.25 y 1976 8707.5 36525 12 where h, min and s are the hour, minute and second values of Universal Time, respectively. If m2 , yy,mm3 ; otherwise, yy2,m m9 . [x] denotes the integer part of x. (Eq. 2-4) G 357.528 35999.05t C 1.915 sin G 0.020 sin 2G L 280.460 36000.770t C α L 2.466 sin 2L 0.053 sin 4L (Eq. 2-5) GHA=15UT 180 C l α where GHA indicates Greenwich Hour Angle. The values of G, L and GHA need to be set within 0 to 360 degrees by adding or subtracting multiples of 360 degrees. (Eq. 2-6) ε 23.4393 0.013t DEC tan tan ε sin α where ε indicates obliquity of the ecliptic, DEC is the solar declination angle. (Eq. 2-7) EOT LCα 15 3. Apparent Solar Time (AST) 13 (Eq. 2-8) standard time h min 60 s 3600 AST standard time EOT LSM LONG 15 where h, min and s are hour, minute and second value of standard time, respectively. LONG indicates the local longitude; LSM indicates the longitude of the meridian of standard time of that time zone. 4. Solar Declination (DEC) (1) low accuracy, algorithm by Boes (Eq. 2-9) DEC sin 0.39795 cos 0.98563DN 1 (2) medium accuracy, algorithm by Duffet-Smith, 1988 (Eq. 2-10) N 360D 365.242191 January 1 st , 1990 is selected as the start of epoch and has a D number of 0. D is calculated as the number of days passed since this date, either before, negative, or after, positive. N needs to be set within 0 to 360 degrees by adding or subtracting multiples of 360 degrees. (Eq. 2-11) MNε ω 14 where ε equals to 279.403303 degrees, which is the ecliptic longitude of the sun at epoch and ω equals to 282.768422 degrees, which is the ecliptic longitude of perigee. M needs to be set positive by adding 360 degrees if necessary. (Eq. 2-12) E 360 π sinM where equals to 0.016713, the eccentricity of orbit. (Eq. 2-13) λNE ε where λ needs to be set within 360 degrees by subtracting 360 if necessary. (Eq. 2-14) DEC sin sin ε sin λ where ε equals to 23.441884 degrees, which is the obliquity of the ecliptic. (3) high accuracy, algorithm by Yallop, 1992, as described above in Eq. 2-6. 5. Solar Altitude (ALT) and Azimuth (AZI) (Eq. 2-15) ALT sin LAT sin DEC cos LAT cos DEC cos GHA AZI cos DEC cos LAT tan DEC sin LAT cos GHA cos ALT where LAT indicates the local latitude. 15 The Solar Position Calculator on Squ1.org adopted the following calculation methods. 1. Solar Declination (DEC), algorithm by Carruthers, et al, 1990 (Eq. 2-16) t 2πJulianDate 366 (Eq. 2-17) DEC 0.322003 22.971 cos t 0.357898 cos 2t 0.14398 cos 3t 3.94638 sin t 0.019334 sin 2t 0.05928 sin 3t 2. Equation of Time (EOT), algorithm by Carruthers, et al, 1990 (Eq. 2-18) t 279.134 0.985647 JulianDate π 180 (Eq. 2-19) EOT 1 3600 5.0323 100.976 sin t 595.275 sin 2t 3.6858 sin 3t 12.47 sin 4t 430.847 cos t 12.5024 cos 2t 18.25 cos 3t where EOT is converted to hours. 3. Solar Altitude (ALT) and Azimuth (AZI), algorithm by Spencer, 1965, and modified by Szokolay, 1996 (Eq. 2-20) HourAngle π 180 15 LocalTime 12 where LocalTime is the local Universal Time in hours. 16 (Eq. 2-21) t sin DEC sin LAT u cos DEC cos LAT cos HourAngle ALT sin t u where LAT indicates the local latitude. (Eq. 2-22) t sin DEC cos LAT u cos DEC sin LAT cos HRA AZI cos tu cos ALT A simplified method of calculating solar altitude and azimuth is as following. 1. Julian Date: defined as the number of days from the first day in a year, January 1 st 2. Solar Declination (DEC) DEC 23.45 sin JulianDate 284 360 365 3. Hour Angle (HRA): the angle that earth has rotated in a day HRA 15hour 12 where hour is the local universal time. 4. Solar Altitude (ALT): sin ALT cos LAT cos DEC cos HRA sin LAT sin DEC 5. Solar Azimuth (AZI): cos AZI sin DEC cos LAT cos DEC sin LAT cos HRA cos ALT where LAT is the local latitude. 17 Chapter 3. Heliodon In general, a heliodon was a device to simulate the angle between the beam of sun light at certain time and the horizontal plane by adjusting the angle between the beam of an artificial light source and a flat surface. It was mainly used in architecture to visualize the solar effect on windows, buildings or at site scale at different locations on earth and at different times during a year by using physical models. The device could help to illustrate the concept of solar geometry. It could also be used in the design process to improve the shading devices, windows and solar access. If using illuminance meters inside the model, data about the illumination level of the interior space could be obtained to facilitate the quantitative analysis of the daylight environment. And cameras could also be used inside the model to capture and record the movement of daylight during an analysis period. Two basic components of a heliodon were the light source, representing the Sun, and the flat surface, representing the horizontal plane. And as mentioned in previous section, the position of sun in the sky could be determined by two parameters, altitude and azimuth, depending on three variables: latitude of the place, date of a year and time of a day, all of which a heliodon should be able to adjust. 3.1 different types of heliodon Heliodons could be classified roughly into two categories, ones with a fixed platform and ones with a rotatable platform. 18 For the first kind, the device used one light source to adjust all three variables along three axes, or using multiple light sources to substitute one variable, usually the latitude, while adjusting the other two variables. For the second kind, the platform rotated along one, two or all three axes while using one light source or multiple light sources to adjust the other variable(s). The most apparent advantage of heliodon with a fixed platform was the conceptual clarity because the result could be easily observed and matches people’s daily experience. The main disadvantage of that was the cost of the corresponding light source. In order to accurately simulate the effect of sun light, the beam of the light source that reached the model should be parallel. Yet this kind of heliodon usually depended on tracks to adjust the position of the light source so that the distance between the light source and the model was largely limited by either cost or space, under which circumstance a professional light source with parallel light beam or a reflector became necessary. While the second kind of heliodon could approximate parallel beams by place the light source at a distance. 19 3.2 heliodon examples 1. The Portable Heliodon of MIT Daylighting Lab Fig. 3-1: structure of the portable heliodon of MIT Daylighting Lab http://web.mit.edu/daylighting/research_3_development.html Portable and easy to assemble, the heliodon had a base that could rotate manually around its normal and a tabletop that could rotate around its normal as well as around a horizontal axis, with three protractors providing accurate values for the rotation angles. The scale model could be placed and fixed on the tabletop. Using the sun as the light source, the shadow of the peg on the sundial for the aiming latitude, which was attached to the tabletop, indicated how to rotate the base and the platform, according to the time of day and date of the year. Under cloudy conditions, an algorithm could calculate the tilting angle of the table, working with a set of stereographic sun charts. The maximum size of the model for this heliodon was about 30 by 30 inches. 20 2. The Sun Emulator Fig. 3-2: the Sun Emulator http://www.cadc.auburn.edu/sun-emulator/mainpage.htm The Sun Emulator was designed by Norbert Lechner, a professor of Building Science from Auburn University, USA. This heliodon had a round fixed platform with a predefined “south” orientation. A large cradle could be rotated with axis mounted on the “east” and “west” end of the platform to simulate the change of latitude from equator to the poles. Seven rings are fixed on the cradle in parallel, representing the path of sun on the 21 st day of the twelve months. On each ring, a MR-16 Halogen lamp can move along the path by sliding its ring, simulating the motion of sun from sunrise to sunset. 21 3. The PG&E Energy Center Heliodon The Building Science Group of UC Berkeley built this heliodon for Pacific Gas and Electric Company Energy Center. The platform of this heliodon rotated around three steel axis shafts to adjust the latitude, time of day as well as solar declination. The light source, a Strand Lighting Fresnelite Spotlight, was mounted at a distance of 32 feet to provide the parallel light beam. Fig. 3-3: the PG&E Energy Center Heliodon http://arch.ced.berkeley.edu/resources/bldgsci/bsl/heliodon.html To overcome the difficulty of observing the interior of the model when the platform rotated to some extreme angles, cameras as the accessories could be placed inside the model to record during the simulation, while transmitting the image to a monitor outside or onto a computer, where the data could be saved and analyzed. 22 4. Urp System, MIT Tangible Media Group Fig. 3-4: the Urp System of MIT Tangible Media Group http://tangible.media.mit.edu/projects/luminousroom/ One unconventional heliodon was the Urp System developed by the Tangible Media Group from MIT for urban planning analysis, based on an I/O Bulb infrastructure and a set of software components. Physical models could be placed on any ordinary desktop. Conceptually, an I/O Bulb included a projector and a camera. The camera captured the colored dots on the models, which were drawn to help define the geometry of the object. A low-level machine vision system called Glimpser identified the dots and reported all the dots found to the software called Voodoo, which restored the original form related to the dots. The projector then cast a shadow on the model, according to the time set by an accessory clock. The shadow pattern of the model could be visualized for just a certain time or continually by a certain time interval. Other application of the Urp system covered visualization of the reflection effect of glass facades on the ground and the wind effect on pedestrian level. 23 Part II. Ralph Knowles Heliodon 24 Chapter 4. Ralph Knowles Heliodon Professor Ralph Knowles from the School of Architecture, University of Southern California did comprehensive research on solar access, solar envelope and zoning theories and how architecture and the built environment could respond to natural rhythms, concerning people within the environment and the nature itself. He built the heliodon with USC students in 1965 to help in studying and analyzing solar access and solar zoning. Fig. 4-1: Ralph Knowles Heliodon 4.1 hardware configuration The hardware part of the heliodon could be divided into four parts, a light source, two aluminum tracks, two wood platforms and the foundation. 25 Fig. 4-2: parts of Ralph Knowles Heliodon The large main track was supported at two pivot points and could be rotated to adjust the latitude. It was locked to the altitude of Los Angeles, 34°N. The small sub track was mounted perpendicularly to the main track. The sub track moved along the main track to change the time during a day. The light source was mounted on the sub track, along which it could move to simulate the solar declination throughout a year. 26 Fig. 4-3: main track gears and main track axis, Ralph Knowles Heliodon Gear teeth mounted along the inner surface of the main track worked together with the gears connected to the shaft of the large motor to move the sub track. High friction material was spread on the inner surface of the sub track so that the rubber roller coupled to the shaft of the small motor could roll smoothly along the track. The higher horizontal platform was fixed at the same height of the axis of the main track, representing the horizon where physical models could be placed for testing. The lower platform was made for the control boxes and miscellaneous. The light source used was a PAR light. Fig. 4-4: light source, Ralph Knowles Heliodon 27 The foundation consisted of a rectangular base, which kept the whole device stable, and two vertical columns supporting a pair of gears for the adjustment of latitude. 4.2 calibration of the machine The machine needed to be calibrated before being used in three aspects, latitude, hours and declination. The following was a brief introduction. Professor Knowles explained this calibration process in detail in his book, The Sun, Heat & Light, 1967, page 58-page 67. 1. Latitude The latitude was evenly distributed and could be calibrated by adjusting the angle between the main track plain and the vertical axis. Fig. 4-5: calibration of latitude, Ralph Knowles Heliodon 28 2. hours In a simplified model, the sun travels 360° in 24 hours around earth, using earth as the reference. So one hour equaled to 15° on the main track. The hour limits were from 4:50a.m. to 7:10p.m., sunrise to sunset, at 35°N, not considering daylight saving time. Fig. 4-6: calibration of hours, Ralph Knowles Heliodon 3. declination In a simplified model, the position of earth in its orbit about the sun during a year could be laid out in a plan as Fig. 4-7. The position of the days distributes evenly on the circle, with an interval of ° per day. The number 366 was used for the total number of days in the year because it allows the solstices to be equally distanced from the two 29 equinoxes (Knowles, 1967). In this calibration, 16 crucial positions are selected to be calibrated on the sub track, which are the first day of each month, two equinoxes and two solstices. Fig. 4-7: calibration of declination, earth position about the Sun during a year (Knowles, R. L., 1967) Mark the plus and minus declination limit lines using the same orbit. The declination arc and its chord could be obtained by projecting the diameter of the orbit to the limit lines as shown in Fig. 4-8. 30 Fig. 4-8: calibration of declination, declination-arc and declination chord (Knowles, R. L., 1967) Project date points illustrated in Fig. 4-9 onto the declination chord. Fig. 4-9: calibration of declination, projection on declination chord (Knowles, R. L., 1967) 31 Project the points on the declination chord onto the declination arc from the center of the orbit. The arc was now calibrated, as shown in Fig. 4-10. Fig. 4-10: calibration of declination, projection on declination arc (Knowles, R. L., 1967) In the real device, D1 and D2 in Fig. 4-10 should be measured from the light source to the center of the platform. And the device needed to be recalibrated if D1 and D2 had ever been changed. 4.3 current control method Controlled separately by speed control units, two DC motors drove the sub track and the light source in the original design. 32 Fig. 4-11: control units and the motors Parameters of the motor on the main track: Bodine Electric Company, speed reducer motor, NSH-12 RG, 115VDC, 0.36A, 14.4R.P.M., 512 in-oz Torque (output). Parameters of the motor on the sub-track: Brevel, gear motor, 6VDC, 0.5A, 12r.p.m., 18 in-oz. (output). Each unit provided two speed ranges for the motor, high and low. For a certain speed setting, a knob could tune the speed within a small range. The units were fully manual controlled. The device could smoothly simulate the motion of sun throughout a year. Yet it was difficult to control the precise position of the light source because the position needed to be observed by the user who manually controlled the movement of the motors, which could very likely cause time lag and error. 33 Chapter 5. A Proposed Interface by Tat Fu A previous MBS student Tat Fu proposed a mock-up computer interface for the heliodon in 2005 to explore the potential of the device. In his interface, there were three control methods, Manual Control, Fixed Position and Motion, which would work with an electrical control system. Fig. 5-1: interface by Tat Fu (Fu, T., 2005) For Manual Control, one slider bar represented the seasonal solar declination, from summer to winter or vice versa, so that the device could simulate the annual change of the height of the Sun and help to study the seasonal change of solar impact upon architecture, as well as shading devices. The other slider bar controlled the path of the sun from sunrise to sunset to illustrate the effect of the daily motion of the Sun. 34 For Fixed Position, users could input year, month, day and time to drive the light source to the specific position of the Sun in the sky at that time. For Motion, two scenarios were provided: fixed date and fixed time. For a fixed date, the user would input year, month and day, as well as a start time and an end time to see the solar pattern on that date for the indicated period of time. For a fixed time, the user would input year and time, as well as a start date and end date. These two sets of input combine the first two methods, yet with precision. 35 Chapter 6. Hypothesis The aim of this thesis is to improve the device that was built in 1965, by adding a user-friendly interface program that can control the performance of the device using a new control circuit, to expand the potential of the currently manual controlled device. The hypothesis is that the new user interface and control method can improve the performance of Ralph Knowles heliodon and introduce new functionality of the device. 36 Chapter 7. Brief Process and Different Possibilities There were three correlated aspects throughout the process. The first one was the design and function of the software. The software should be user-friendly and be able to provide enough options to exploit the function of a heliodon. The second one was the design of a circuit that could be easily connected to the computer and could properly drive the device. The third one was the selection of the hardware to realize the motion. There were a lot of different possibilities, for both the software and the hardware, to realize the new method. Yet for this particular experiment, one basic question from the very beginning of the process was whether or to what extent the existing hardware, most importantly the tracks and the motors, could still be utilized to realize the new method. And once the motors were determined, the circuit and the software could be designed based on the drive for these particular motors. 37 Chapter 8. Electric Motors Motors, or more precisely, electric motors, converts electrical energy to mechanical energy by the interaction of magnetic field and electric current. They can be classified into different categories depending on different criteria, for example, horse power or maximum rating, etc. For general application, most commonly, there are three basic categories, direct current (DC) motors, alternating current (AC) motors and stepper motors. 8.1 direct current motors Direct current (DC) motors run on direct current. Two basic types of DC motors are DC commutator motors and DC brushless motors. 1. DC commutator motor Typically, the major parts of a DC commutator motor include stator, rotor, commutators and brushes. A stationery magnetic field across the rotor can either be established by permanent magnets on the stator poles or be excited by field coils wound on these poles carrying direct current. There may be some variations in the structure of the rotor, following the same principle. A conventional one is a slotted rotor, of which the armature windings fitted in the slots of an iron core. The ends of the windings lead to the bars of the commutator connected on the rotor shaft. The so-called “brushes” are actually electrical contacts to pass the current to the commutator from the external power supply. 38 Fig. 8-1: schematic structure of a DC commutator motor http://hyperphysics.phy-astr.gsu.edu/Hbase/magnetic/motdc.html Fig. 8-1 illustrates briefly how a DC commutator motor works. When the power is applied, the current flows from the brushes to the commutator bars, and then passing through the coil. According to the law of winding force, or Fleming’s Rule, Whenever a current carrying conductor interacts with an external magnetic field, a force results at right angles to both the conductor and the field. (Lancaster, 1997 ) the resulting force from the magnetic field and the current, fBli , rotates the rotor clockwise until the coil is perpendicular to the magnetic flux, when the brushes move to the other commutator bar and reverse the current in rotor winding to continue the rotation in the same direction. 2. DC brushless motor In a brushless DC motor, the rotor is made of permanent magnet while windings are placed in the slots of the stator. Similar to a DC commutator motor, the rotor rotates if the 39 stator windings are energized in certain sequences. Yet instead of the commutator and the brushes, DC brushless motors use electric controllers to switch the current in the stator winding synchronously basing on the feedback of the angular position of the rotor. This position can be obtained by using either sensors or other sensorless techniques. 3. DC motor control The most basic function of a DC motor drive circuitry is to control the direction and magnitude of the current flow through the motor windings. A more complex and sophisticated circuitry can improve the performance of the motor and include versatile control options as well as safety features. (1) DC commutator motor Fig. 8-2 shows a basic drive that controls one DC commutator motor in one direction. Signal A is a digital output of the microcontroller and control a sequent driver, in this case a metal–oxide–semiconductor field-effect transistor (MOSFET) driver, which provides adequate current to energize the motor. 40 Fig. 8-2: basic drive for a DC commutator motor ww1.microchip.com/downloads/en/devicedoc/41233A.pdf An H-bridge drive is a common way to operate a DC commutator motor in both directions. Signal A, B, C and D are digital outputs of a microcontroller. The H-bridge drive for a DC motor realizes forward, backward rotation, coast and brake. Fig. 8-3: H-bridge drive for a DC commutator motor ww1.microchip.com/downloads/en/devicedoc/41233A.pdf 41 The speed of a DC commutator motor varies proportionally to the voltage that is applied to the motor. A common way to control the speed of the motor from a digital controller is to generate a signal with pulse-width modulation (PWM). A PWM modulates the pulse width of a square wave with a certain period to adjust the average value of the waveform. And with proper frequency, this PWM signal establishes a stable current in the winding which acts like an inductance and the average voltage of the signal determined the speed of the motor. Fig. 8-4: pulse-width modulation www.micromouseinfo.com/introduction/dcmotors.html For precise speed control, a feedback system can be included into the control system to correct the speed error. There are two basic ways to realize speed control, sensor feedback and back electro magnetic flux (BEMF) feedback. Sensor feedback uses optical encoders or Hall effect sensors to detect the real speed of the motor and send the 42 information back to the digital controller. The controller adjusts its output signal according to the feedback so that the real speed is always maintained within an acceptable error range. BEMF voltage is the voltage that the motor winding produces between the PWM pulses. This voltage is also proportional to the motor speed. Similarly, the controller adjusts the output signal depending on the feedback BEMF voltage which can be read by an analog-to-digital converted after regulated into the range of 0-5V . (2) DC brushless motor DC brushless motors use electric controllers to switch the current in the stator instead of the commutator and brushes as in DC commutator motors. Two basic types of DC brushless motors are sensor and sensorless. The control circuit of a sensor motor determines the commutation pattern by the feedback of the sensor. While the control circuit of a sensorless motor measures the BEMF voltage to obtain the current speed of the motor. And the next commutation pattern is determined by the time delay from the previous pattern. 8.2 alternating current motors Alternating current (AC) motors run on alternating current. Two basic types of AC motors are AC synchronous motors and AC induction motors. AC current is supplied to the coils on the stator of an AC motor to generate a rotating magnetic field. Using either windings energized by direct current or permanent magnets, the rotor in an AC synchronous motor generates a constant magnetic field, which tends to align 43 the rotor with the rotating magnetic field. So the rotor rotates at a speed that is proportional to the frequency of the supply power. In an AC induction motor, the conductors in the rotor generate an inductive current because of the rotating magnetic field of the stator. And the magnetic field generated by this current rotates the rotor under the interaction with the magnetic field of the stator. The rotor rotates slightly slower than the frequency of the supply power or no inductive current will be generated. So AC induction motors are also referred to as AC asynchronous motors. 8.3 stepper motors A stepper motor is an electromechanical device driven by electrical pulses and output discrete mechanical shaft rotation. The shaft rotation is directly related to the number of input electrical pulses. The sequence of the applied pulses determines the direction of the rotation; the frequency determines the speed of the rotation; while the number of the pulses relates to the angle of the rotation. The mechanism determines some unique advantages of stepper motors in a lot of applications. The most distinct one is the open-loop control method for general position control systems. And high precision can still be obtained. This eliminates the necessity of using large amount of sensors and establishing a complex feedback loop. Other advantages include fine angular displacement and simple synchronization of a set of motors, etc. 44 1. basic types of stepper motors There are three basic types of stepper motor: variable-reluctance, permanent-magnet and hybrid. Fig. 8-5: structures of three basic types of stepper motor solarbotics.net/library/pdflib/pdf/motorbas.pdf Variable-reluctance stepper motor consists of a set of multi-tooth stator and a reactive rotor, both made of soft steel. The stator winding energized with DC current, the stator poles become magnetized. The reluctance torque caused by the tendency of the magnetic flux paths to penetrate through the magnetic circuit with minimal reluctance aligns the rotor with the symmetry axis of the stator salient poles. If different sets of winding are consequently energized, the rotor will be aligned accordingly and rotate discretely. Permanent-magnet stepper motor has a permanent magnet rotor with alternating north and south poles placed parallel to the rotor shaft. The windings on the stator can be energized consequently due to the input pulses and produced stator poles, which attract the opposite 45 poles on the rotor. Compared to variable-reluctance motors, this kind of motor has higher torque because the rotor poles provide an increased magnetic flux. Hybrid stepper motors provide improved performance in resolution, torque and speed by combining the characteristics of variable-reluctance and permanent-magnet stepper motor. The rotor and stator are both made of soft steel. The structure of the stator is essentially the same as a variable-reluctance motor, yet the multi-tooth rotor also has a concentric magnet around the shaft. 2. characteristics (1) step size The step size of a stepper motor indicates the angular displacement of the rotor responding to one single input pulse. It is determined by the relationship between the number of rotor poles and stator poles, and the number of phases. Steps per revolution indicates the number of steps that the rotor rotates in 360°. (2) phase The phase of motor indicates a set of stator poles which composes one or more pairs of oppositely polarized poles. 2-phase stepper motors are the most common type. There are two basic winding arrangements for a 2-phase stepper motor, unipolar and bipolar. 46 A unipolar stepper motor has two windings per phase. Each winding is designed for one direction of current so that the poles could be magnetized reversely when using the same input current, simplifying the control circuit. A bipolar stepper motor has only one winding per phase. The control circuit has to reverse the direction of current to make the motor rotate in the other direction. Yet bipolar stepper motors are more powerful than unipolar motor given the same weight. Fig. 8-6: winding diagram of unipolar and bipolar stepper motor solarbotics.net/library/pdflib/pdf/motorbas.pdf (3) torque Holding torque of a stepper motor refers to the torque value when one motor winding is energized by the maximum rated current. If the load applied on the motor exceeded its holding torque, the rotor would rotate freely. For a permanent magnet or hybrid motor, detent torque is the residual torque without any power applied to the motor windings. Running torque indicates the maximum torque 47 produced by the motor when it steps slowly. Pull-out torque can be used to describe the maximum friction torque that the motor can overcome when accelerated to a certain high speed before a rotating load loses synchronism with the step frequency. Pull-in torque refers to the maximum frictional torque that the motor could overcome to accelerate a static load to the synchronous speed. 3. stepper motor control Using a two-phase unipolar stepper motor as an example, there are three typical control methods to operate it. (1) wave drive: Fig. 8-7: wave drive control sequence, forward and backward In a wave drive mode, the stator is activated by the sequence or . Only one phase of winding is energized at a time. The resulting conversion of N or S stator poles attracts the opposite polarity on the rotor alternately. And the rotor will rotate one step angle per time. This mode consumes least power yet is rarely used because it has the least torque and is unstable at high speed. 48 Fig. 8-8: stator and rotor under wave drive (Gieras, 1997) (2) full step drive: the phases are energized simultaneously Fig. 8-9: full step drive sequence, forward and backward In this mode, the stator is energized by the sequence or . Two windings are energized simultaneously. And the rotor has an intermediate position compared to the wave form drive mode. This mode has the strongest torque because all windings influence the rotor. 49 Fig. 8-10: stator and rotor under full step drive (Gieras, 1997) (3) half step drive: Fig. 8-11: half step drive sequence, forward and backward In this mode, the stator is energized by the sequence or . One winding 50 and two windings are alternatively energized so that the rotor can rotate at half step. This mode has the highest resolution but less torque than the full step mode. Fig. 8-12: stator and rotor under half step drive (Gieras, 1997) 51 Part III. New Control Method 52 Chapter 9. Hardware 9.1 the new motors After comparing the three basic types of electric motors, stepper motors were chosen as the best replacements for the original DC motors based on two reasons. It was thought that the open-loop control method eliminated the usage of sensors and a complex feedback system, providing the same control precision. The control circuit for stepper motors was relatively simple when interfacing with a personal computer. Yet later developments showed that the stepper motors could not account for mechanical slippage and so the system was not as robust as was first expected. When selecting the new stepper motors, the torque requirement was the major consideration. The torque output of the new motors needed to be equal to or larger than that of the original ones, which, as mentioned in Section 5-3, were 18 in-oz for the sub track motor (Motor 1) and 512 in-oz for the main track motor (Motor 2). Other considerations included the step angle, voltage and current rating, and frame size, etc. 53 Fig. 9-1: picture of sub track motor (Motor 1), wiring diagram www.soc-machines.com SM2006, NEMA23, 125 oz-in stepper motor was chosen for the sub track. Fig. 9-1 showed the picture of the motor and its wiring diagram. It had 6 leads and could be wired in unipolar or bipolar mode, serial connection. Fig. 9-2: picture of main track motor (Motor 2), wiring diagram http://www.anaheimautomation.com/34N_Series_High_Torque_Stepper_Motors.aspx 34N104S-LW8, NEMA34, 512 oz-in stepper motor was chosen for the main track. Fig. 9-2 showed the picture of the motor and its wiring diagram. It had 8 leads and could be wired in unipoar or bipolar mode, serial or parallel connection. 54 Table 9-1showed the main specifications for the sub track motor (Motor 1) and the main track motor (Motor 2). For full description, see Appendix I and II. Table 9-1: main specification of the new motors http://www.anaheimautomation.com/34N_Series_High_Torque_Stepper_Motors.aspx sub track motor main track motor manufacturer SOC Robotics, Inc. Anaheim Automation, Inc. model SM2006 34N104S-LW8 frame size NEMA 23 NEMA 34 step angle 1.8° 1.8° maximum voltage rating 3.6V 7.5V-20V maximum current rating 2A, unipolar 2.8A, bipolar, parallel or 2A, unipolar holding torque 125 oz-in 635 oz-in applicable drive mode unipolar, or bipolar, serial connection unipolar, or bipolar, both serial and parallel connection 9.2 the circuit A typical control circuit of a stepper motor included a pulse generator, logic circuit, power amplifier and power supply, as illustrated in Fig. 9-3. Fig. 9-3: typical stepper motor drive circuit components (Gieras, 1997) 55 The pulse generator generated the drive pulses for the stepper motor, usually of a rectangular waveform. The pulses were distributed to each of the windings of the motor by the logic circuit after being amplified by the amplifier to provide adequate current value to generate the desired torque. 9.2.1 input and output of the circuit The input of the circuit should be compatible with the Universal Serial Bus (USB) port of a personal computer so that the device could be controlled by the program designed. According to the specifications of the new motors, the circuit should provide an output current of about 2A for Motor 1 in unipolar mode and about 2A for Motor 2 in unipolar mode, or 2.8A in bipolar mode, parallel connection, so that the torque requirements could be met. Proper power supplies needed to be selected to power the circuit as well as the motors. 9.2.2 first circuit designed Fig. 9-4 illustrated the first circuit designed for the motors. 56 Fig. 9-4: first circuit diagram 1. pulse generator DLP-USB245M-G USB to FIFO Parallel Module developed by DLP Design was applied as the USB adaptor and as the pulse generator in the circuit. The DLP-USB245M realized bidirectional data transfer between a host, in this case a personal computer, and a peripheral, the circuit. For detail specification and application sheet, see Appendix IV . 57 (1) hardware and pin layout Fig. 9-5: pin layout and hardware of DLP-USB245M-G http://www.dlpdesign.com/usb/dlp-usb245mv15.pdf DLP-USB245M-G had 24 pins. For detail description of all the pins, see Appendix III. (2) self-powered 5V system connection Fig. 9-6: DLP-USB245M-G self-powered 5V connection http://www.dlpdesign.com/usb/dlp-usb245mv15.pdf 58 Fig. 9-6 illustrated the typical self-powered configuration of DLP-USB245M-G. The self-powered system got the power from the external power supply and did not draw current from the USB bus. In this mode, the device was compatible with any USB host and both bus and self-powered USB bus because it was not restricted by the current limit of the USB hub. The name and description of the pins used for this kind of connection was shown in Table 9-2. Table 9-2: pin description, self-powered system, DLP-USB245M-G http://www.dlpdesign.com/usb/dlp-usb245mv15.pdf pin number pin name description 3 BOARD ID (out) Identifies the board as either a DLP-USB245M or DLP-USB232M. High for DLP-USB232M and low for DLP-USB245M. 10 VCC-IO (in) 3.0 volt to +5.25 volt VCC to the UART interface pins 10..12, 14..16 and 18..25. When interfacing with 3.3v external logic, connect VCC-IO to the 3.3v supply of the external logic; otherwise connect to VCC to drive out at 5v CMOS level. This pin must be connected to VCC from the target electronics or EXTVCC. 11 EXTVCC (in) Use for applying main power (4.4 to 5.25 V olts) to the module. Connect to PORTVCC if module is to be powered by the USB port (typical configuration) 12 PORTVCC (out) Power from USB port. Connect to EXTVCC if module is to be powered by the USB port (typical configuration). 500mA maximum current available to USB adapter and target electronics if USB device is configured for high power. 13 RXF# (out) When low, at least 1 byte is present in the FIFO’s 128-byte receive buffer and is ready to be read with RD#. RXF# goes high when the receive buffer is empty. 14 TXE# (out) When high, the FIFO’s 385 byte transmit buffer is full, or busy storing the last byte written. Do not attempt to write data to the transmit buffer when TXE# is high. 59 Table 9-2, Continued pin number pin name description 15 WR (In) When taken from a high to a low state, WR reads the 8 data lines and writes the byte into the FIFO’s transmit buffer. Data written to the transmit buffer is sent to the host PC within the TX buffer timeout value ( default 16mS ) and placed in the RS-232 buffer opened by the application program. Note: The FT245BM allows the TX buffer timeout value to be reprogrammed to a value between 1 and 255mS depending on the application requirement, also the SND pin can be used to send any remaining data in the TX buffer regardless of the timeout value. 16 RD# (In) When pulled low, RD# takes the 8 data lines from a high impedance state to the current byte in the FIFO’s receive buffer. Taking RD# high returns the data pins to a high impedance state and prepares the next byte (if available) in the FIFO to be read. 17-24 I/O Bi-directional Data Bus Bit D7 (pin #17) ~ D0 (pin #24) 60 (3) detail in circuit Fig. 9-7: pulse generator, part of the first circuit designed In the circuit, DLP-USB245M-G (IC1) was configured in the self-powered mode. Pin #20 (Vccio) and pin #11 (EXTVCC) were tied to external 5V power supply (Vcc). Pin #3 was also tied to Vcc because no external device was used to reset the device. D0 and D1 were used as data lines, while D3 and D4 as the clock signals for the sequent chips, two flip-flop logic. 61 2. logic circuit The logic circuit consisted of two flip-flop logic chips sn74ls273, IC2 and IC4, and one hex inverter buffer, sn7416. (1) sn74ls273 Fig. 9-8: pin layout of sn74ls273 http://focus.ti.com/lit/ds/symlink/sn74ls273.pdf The integrated circuit sn74ls273 was an octal d-type, positive-edge-triggered flip-flop. Table 9-3 showed the name and description of each pin, excerpted from Appendix IV . Table 9-3: pin description, sn74ls273 http://focus.ti.com/lit/ds/symlink/sn74ls273.pdf pin number pin name description 1 CLR clear, if enabled, all output are set to 0 2, 5, 6, 9, 12, 15, 16, 19 1Q ~ 8Q outputs 3, 4, 7, 8, 13, 14, 17, 18 1D ~ 8D inputs 10 GND ground 11 CLK clock signal, the D input signals are transferred to the Q outputs on the positive-edge of the CLK pulse 20 VCC supply voltage, 5V normal 62 The function table, Table 9-4, showed the input-output relation for each pair of flip-flop. Table 9-4: function table, sn74ls273 http://focus.ti.com/lit/ds/symlink/sn74ls273.pdf inputs output Q CLR CLK D L X X L H ↑ H H H ↑ L L H L X Q 0 With CLR low, all outputs were pulled low regardless of the inputs. With CLR high, on the positive edge of the CLK signal, the inputs were transferred to the outputs. And this output value was latched until the next incoming positive edge of the CLK signal. (2) sn7416 Fig. 9-9: pin layout of sn7416 http://focus.ti.com/lit/ds/symlink/sn7416.pdf The integrated circuit sn7416 was a hex inverter buffer. Table 9-5 showed the name and description of each pin, excerpted from Appendix V . 63 Table 9-5: pin description, sn7416 http://focus.ti.com/lit/ds/symlink/sn7416.pdf pin number pin name description 1, 3, 5, 9, 11, 13 1A ~ 6A inputs 2, 4, 6, 8, 10, 12 1Y ~ 6Y outputs 7 GND ground 14 VCC power supply, 5V normal The function table, Table 9-6, showed the input-output relation. Table 9-6: function table, sn7416 http://focus.ti.com/lit/ds/symlink/sn7416.pdf input A output Y L H H L 64 (3) detail in circuit Fig. 9-10: logic circuit, part of the first circuit designed In the circuit, the outputs of IC1, D2 and D3, were connected to the CLK inputs of IC2 and IC4, providing the control signals of these two chips, as shown by the blue lines in Fig 9-10. The outputs of IC1, D0 and D1, were connected to the inputs, 1D and 2D, of the 65 two flip-flops (IC2 and IC4). To control Motor 1, D2 changed from low level to high and triggered IC2 while D3 remained low with the status of outputs of IC4 unchanged. The data on D0 and D1 of IC1 were transferred to the output 1Q and 2Q of IC2. Similarly, to control Motor 2, D3 sent out the trigger and D2 remained low. sn7416 was represented by the inverter symbols in the circuit. It inverted the outputs, 1Q and 2Q, of both IC2 and IC4. The final outputs of the logic circuit were two separate sets of control signal for the two motors. Each set had four signals, A, A , B, B . A was the signal inverted from A by sn7416 and B the signal inverted from B. The basic signals to drive a stepper motor were formed. Fig. 9-11: example of the final output pattern of the logic circuit 3. amplifier (1) sn754410 The integrated circuit, sn754410, was used as the amplifiers, IC3, IC5 and IC6. 66 Fig. 9-12: pin layout of sn754410 http://focus.ti.com/lit/ds/symlink/sn754410.pdf sn754410 was a quadruple high-current half-H driver with four output driver, 1A output current capability per driver. It was designed for inductive loads such as stepper motors in high voltage, high current application. Table 9-7 showed the name and description of each pin, excerpted from Appendix VI. Table 9-7: pin description, sn754410 http://focus.ti.com/lit/ds/symlink/sn754410.pdf pin number pin name description 1 1,2 EN enable driver 1 and 2 when high 2, 7 1A, 2A inputs for driver 1 and 2 3, 6 1Y , 2Y outputs for driver 1 and 2 4, 5 HEAT SINK AND GROUND heat sink and ground 8 VCC2 power supply for output circuit, 4.5V ~1 36V 9 3,4 EN enable driver 3 and 4 when high 10, 15 3A, 4A inputs for driver 3 and 4 11, 14 3Y , 4Y outputs for driver 3 and 4 12, 13 HEAT SINK AND GROUD heat sink and ground 16 VCC1 power supply for input logic circuit, 4.5V ~ 5.5V 67 The function table, Table 9-8, showed the input-output relation. Table 9-8: function table, sn754410 http://focus.ti.com/lit/ds/symlink/sn754410.pdf input output Y EN A H H H H L L L X Z With EN low, all outputs were in high impedance state (Z in Table 9-8) regardless of the inputs. With EN high, the associated drivers were enabled and their outputs were active. (2) detail in circuit Fig. 9-13: amplifier IC3, part of the first circuit designed 68 Fig. 9-14: amplifier IC5, IC6, part of the first circuit designed The final outputs of the logic circuit, A, A , B, B , were connected in sequence to the input pins 1A, 2A, 3A, 4A of the amplifiers. The four outputs of one amplifier could be divided into two sets, 1Y, 2Y and 3Y, 4Y. Each set energized one phase of the stepper motor, 1a, 1b and 2a, ab. For Motor 1, only one amplifier was used because its 1A output current was enough to generate the torque required for the sub track motor in its windings, as shown in Fig. 9-13. For Motor 2, two amplifiers were connection in parallel to provide a 2A current for each winding of the main track motor, as showed in Fig. 9-14. . 69 4. stepper motor Fig. 9-15: stepper motor 1, part of the first circuit designed Both motors adopted the unipolar drive mode. For Motor 1, the center taps were connected to the separate power supply, which was also tied to VCC2 on IC3, to convert the current in the windings. For Motor 2, the center taps were connected to VCC2 on IC5 and IC6. 9.2.3 modification for the first circuit Test runs of the motors on tracks showed that the torque of Motor 2 was not high enough to raise the parts. The circuit was then modified to drive Motor 2 in bipolar mode, parallel connection, to increase the torque. 70 Fig. 9-16: bipolar mode, parallel connection for Motor 2, part of the circuit modified 9.2.4 signal flow, as the summary of the circuit part Table 9-9 showed an example signal flow through the circuit, from the output of the USB adaptor, DLP-USB245M-G to the motor windings. 71 Table 9-9: example signal flow DLP-USB245M-G sn74ls273 sn7416 sn754410 M D2 ↑ D0 IC2 1D 1Q 0 0 IC3 1A 1Y 0 1a 1A 1Y 1 2A 2Y 1 1b D1 2D 2Q 1 1 3A 3Y 1 2a 2A 2Y 0 4A 4Y 0 2b other remain previous status D3 ↑ D0 IC4 1D 1Q 1 1 IC5 1A 1Y 1 1a 1A 1Y 0 2A 2Y 0 1b D1 2D 2Q 0 0 3A 3Y 0 2a 1A 1Y 1 4A 4Y 1 2b other remain previous status Table 9-10 showed two sets of basic signals that could be sent by DLP-USB245M-G to rotate the motor forward and backward. One set of the signal could rotate the motor by four step angles, which equaled to 1.8° 4 7.2° for both motors. To make the motor keep rotating in one direction, the according set of signals should be sent in sequence. Table 9-10: signal patterns for forward and backward rotation direction waveform motor windings DLP-USB245M-G forward 1a 1 1 0 0 D0 1 1 0 0 1b 0 0 1 1 2a 0 1 0 1 D1 0 1 0 1 2b 1 0 1 0 D2/ D3 72 Table 9-10, Continued direction waveform motor windings DLP-USB245M-G backward 1a 1 1 0 0 D0 1 1 0 0 1b 0 0 1 1 2a 1 0 0 1 D1 1 0 0 1 2b 0 1 1 0 D2/ D3 73 Chapter 10. Software The software part of this thesis dealt with the development of a host application, a new program, that could control a device, the circuit and the motor as described in Chapter 10. The program and the circuit worked together to realize the new control method for Ralph Knowles Heliodon. Fig. 10-1: user needs and device function mapping According to the principle and function of the heliodon, the device simulated the angle between the beam of sun light at a certain time and the horizontal plane with a latitude of 34°N. To achieve this, the device needed to determine the position of the light source, user TO ILLUSTRATE sun position known latitude hour, minute, day, month device TO CONTROL light source, position on the sub track and its projected position input latitude as 34°N hour, minute, day, month 74 which could be represented by two coordinates in the space, the absolute position on the sub track and the absolute position of its normal projection on the main track. The software calculated these two values and determined the motion of the two motors. The result was transferred via a USB port to the circuit, which controlled the rotation of the two motors to move the light source to the right place. The development tool used to develop the new program was Visual C++, 2005, part of Microsoft Visual Studio. Visual C++ was a powerful programming language for creating applications under Microsoft Windows environment. And it provided an effective way to develop graphical user-interface applications. The development of the program included three major parts, the calculation, the communication between the host application and the device, and the user interface. 10.1 calculation sequence and calculation units The basic input of the program was a certain time, restricted from sunrise to sunset, on a certain day during a year. This basic input could be extended to multiple inputs to meet versatile illustration needs. The final results of the calculation part were designed to be the distances between the previous position and the current position on the sub track and that on the main track, to facilitate the control during a serial of operation. 75 To make the program more efficient, the calculation part was divided into three calculation units, which handled with different calculation and could be called independently during the execution of the program, as illustrated in Fig. 10-2. Fig. 10-2: calculation sequence and calculation units 10.1.1 calculation unit 1 Default: latitude of 34°N Input: hour, minute, day, month Output: solar azimuth and altitude Considering the precision of the hardware itself, the calculation method used for solar azimuth and altitude was the simplified calculation method described in Section 2-5. unit 3 unit 2 unit 1 solar altitude and azimuth INPUT hour minute day month absolute distances on main track and sub track moving distances on main track and sub track 76 Code snip: //get input data //get input data CString str; edtFPHour.GetWindowText(str); //get input data from edit box int hour=atoi(str);//VARIABLE, hour edtFPMinute.GetWindowText(str); int minute=atoi(str);//VARIABLE, minute cboFPMonth.GetWindowText(str); int month=atoi(str);//VARIABLE, month cboFPDay.GetWindowText(str); int day=atoi(str);//VARIABLE, day //calculation //calculation, solar azimuth and altitude int JulianDate=0;//VARIABLE, Julian Date int arrayMonth[13]={0,31, 28, 31, 30,31,30,31,31,30,31,30,31};//define the number of days //in each month while(month!=0) { JulianDate+=arrayMonth[month-1]; month=month-1; } JulianDate+=day;//calculate Julian Date //calculation //calculation, solar declination double D2R=pi/180.0;//convert degree to radian double degree_a; double radian_a; degree_a=(JulianDate+284.0)*360.0/365; radian_a=degree_a*D2R; double degree_DEC=0;//VARIABLE, solar declination in degree double radian_DEC; degree_DEC=23.45*sin(radian_a); radian_DEC=degree_DEC*D2R; //calculate solar declination//convert to radian 77 //calculation //calculation, equation of time double t=0; double EOT=0; //VARIABLE, equation of time t=(279.134+(0.985647*JulianDate))*D2R; EOT=5.0323-100.976*sin(t)+595.275*sin(2*t)+3.6858*sin(3*t) -12.47*sin(4*t)-430.847*cos(t)+12.5024*cos(2*t)+18.25*cos(3*t); // in seconds EOT=EOT/60; // in minute //calculation //calculation, hour angle double HRA=0; //VARIABLE, hour angle double modifiedHour=0; modifiedHour=hour+minute/60.0+EOT/60+(120-118)/15; //using longitude of Los Angeles, //in hour HRA=-15*(12.0-modifiedHour)*D2R; //convert to radian //calculation //calculation, solar altitude double radian_ALT=0; //VARIABLE, solar altitude double degree_ALT=0; double sinALT=0; double sin2ALT=0;//sinALT*sinALT double cos2ALT=0;//cosALT*cosALT sinALT=cos(34*D2R)*cos(radian_DEC)*cos(HRA)+sin(34*D2R)*sin(radian_DEC); sin2ALT=sinALT*sinALT; cos2ALT=1-sin2ALT; radian_ALT=atan(sqrt(sin2ALT)/sqrt(cos2ALT)); //ALT positive, in radian degree_ALT=radian_ALT/D2R;//for display //calculation //calculation, solar azimuth double radian_AZI=0; //VARIABLE, solar azimuth double degree_AZI=0; //measure from true North,0, to South, ±180, east of south positive double cosAZI=0; cosAZI=(cos(34*D2R)*sin(radian_DEC)-cos(radian_DEC)*sin(34*D2R)*cos(HRA))/cos(radian_ALT); //always positive radian_AZI=acos(cosAZI); 78 degree_AZI=radian_AZI/D2R;//for display if(modifiedHour>12) degree_AZI=-degree_AZI; 10.1.2 calculation unit 2 Input: hour, minute, month, day Output: absolute positions on the main track and the sub track To determine the absolute position on the tracks, the calibration process introduced in Section 4.2 was used with a latitude of 34°N. 1. hour Set the main track arc as a axis and the highest point of the track as the original point, which referred to 12:00p.m.. L was coordinate on this axis, morning half positive, afternoon half negative. One hour equaled to 15° on the main track. The radius of the main track, measured from the center of the platform to the rack, was 58.5”. L could be calculated as: L π58.5" 180° 12 hour minute/60 15° 2. azimuth Define vernal equinox Mar. 22, as the starting point of the circuit. To determine the position of a certain day during a year on the circle, first calculate the day number, N, of that day from Mar. 22, which had a day number of 0. The angle between day N and winter solstice, alpha, could be calculated as: 79 alpha N 366 360° Fig. 10-3: azimuth calibration, 1 Define the radius of the circle as R. On the declination chord, the projected point of the equinoxes was defined as the origin, 0, of the chord. The length between this origin and the projected point of any day on the chord was defined as s. The days from vernal equinox to autumn equinox had a positive s value, while the other half of the year a negative value. R and s could be calculated as: R r sin 23.45° , r as the radius of the declination arc, which was 46” sRsinalpha 80 Fig. 10-4: azimuth calibration, 2 Project the points on the declination chord, for example A, onto the declination arc, point P, from the center of the circle, point O’’. The arc length O’P could be calculated as: O Pr π 180 sin s r 81 Fig. 10-5: azimuth calibration, 3 Code snip: double L=0;//VARIABLE, position, arc length on main track, 12:00 as 0 L=(12-(hourC+minuteC/60))*pi*58.5*15/180; int N=0;//day number int arrayMonth[13]={0,31, 29, 31, 30,31,30,31,31,30,31,30,31}; while(monthC!=0) { N+=arrayMonth[monthC-1]; monthC=monthC-1; } N+=dayC;//JulianDate now, Jan. 1 N=1 if(N>81)// adjust N=0 on Mar. 22 N=N-82; else N=N+284;//365-81 double alpha; 82 alpha=N*360*D2R/366;//convert to radian double s; s=46*sin(23.45*D2R)*sin(alpha); double op;//azimuth, arc length, equinox as 0 op=46*asin(s/46); 10.1.3 calculation unit 3 Input: absolute positions on the main track and the sub track Output: moving distance on the main track and the sub track During sequent operations of the device, the light source needed to move from one position to another position. Calculation unit 3 calculated the relative distances from the current position to the next position on the tracks to determine the motion of the motors. Code snip: double recordMain=0; //VARIABLES, global, record the absolute position double recordSub=0; double diffMain;//VARIABLES,calculate the distance between two sequent positions double diffSub; double distance[2]; distance[0]=distanceMain; distance[1]=distanceSub; diffMain=distance[0]-recordMain;//if distance 2 > distance 1, motor rotate direction 1 diffSub=distance[1]-recordSub; recordMain=distance[0];//pass value to RECORD to track the current position recordSub=distance[1]; 10.1.4 application, for calculation A demo application was developed to evaluate and illustrate the calculation part. Fig. 10-6 showed its interface. 83 Fig. 10-6: interface, an application for calculation part There were two sets of inputs, for fixed position, also as the starting position, and for motion, also as the ending position. The calculation part calculated the altitude and azimuth, absolute position on both tracks and the moving distances on both tracks, by calling the three calculation units accordingly, as illustrated in Fig. 10-7. 84 Fig. 10-7: calling calculation units, an application for calculation part FIXED POSITION input month 1, day 1, hour 1, minute 1 MOTION input month 2, day 2, hour 2, minute 2 output altitude 1, azimuth 2 output altitude 1, azimuth 1 calculat ion unit 1 calculat ion unit 2 output absolute position on main and sub MOTION input month 2, day 2, hour 2, minute 2 output altitude 1, azimuth 2 output altitude 1, azimuth 1 calculat ion unit 1 COMP ARE output moving distances on main and sub tracks calculation unit 3 output absolute position on main and sub track FIXED POSITION input month 1, day 1, hour 1, minute 1 calculation unit 2 output absolute position on main and sub track MOTION input month 2, day 2, hour 2, minute 2 output altitude 1, azimuth 2 output altitude 1, azimuth 1 calculation unit 1 85 10.2 communication between the host application and the device 10.2.1 USB communication overview Universal Serial Bus (USB) was a serial bus standard and the physical link. In USB's topology, a personal computer acted as a host device, controlling and scheduling all communication activities, with peripherals such as a USB keyboard. When a peripheral was attached to the USB network, the host assigned an address to the device and read the descriptors from it. Then the host determined and assigned the USB driver required for that device before it configured the device's power requirement, endpoint, etc. An application could access a USB peripheral via a device driver, which translated between the application-level and hardware-specific code. The application communicated with the device driver by functions supported by the operating system. And the hardware-specific code dealt with the protocols accessing the peripheral’s circuits. 10.2.2 FT245 device driver and programming interface The DLP-USB245M-G USB adaptor used the 2 nd generation USB FIFO Integrated Circuit, FT245BL, developed by Future Technology Devices International, LTD. (FTDI). 86 1. D2XX Direct Driver FTDI provided D2XX Direct Driver to allow application software interface with FT245 USB FIFO devices under Windows operation system, using a Dynamic-link Library (DLL). Fig. 10-8: D2XX driver architecture http://www.dlpdesign.com/drivers/D2XXPG21.pdf 87 Fig. 10-8 illustrated the architecture of D2XX direct driver. It consisted of a Windows WDM driver, FTD2XX.SYS, which communicated with the device via the Windows USB Stack, and a DLL, FTD2XX.DLL, which interfaced the application software to the WDM driver. The software could be written in VC++, C++ Builder, Delphi and VB, etc. 2. programming interface The Windows WDM driver, FTD2XX.SYS, provided a programming interface, “classic interface”, which was exposed by the dynamic-link library, FTD2XX.DLL. For full description of the functions, see Appendix III. Main functions: FT_Open: open the device and return a handle which will be used for subsequent accesses FT_STATUS FT_Open ( int iDevice, FT_HANDLE *ftHandle ) FT_Close: close an open device FT_STATUS FT_Close ( FT_HANDLE ftHandle ) FT_Read: read data from the devic FT_STATUS FT_Read ( FT_HANDLE ftHandle, LPVOID lpBuffer, DWORD dwBytesToRead, LPDWORD lpdwBytesReturned ) FT_Write: write data to the device FT_STATUS FT_Write ( FT_HANDLE ftHandle, LPVOID lpBuffer, DWORD dwBytesToWrite, LPDWORD lpdwBytesWritten ) FT_ResetDevice: send a reset command to the device FT_STATUS FT_ResetDevice ( FT_HANDLE ftHandle ) FT_Purge: purge receive and transmit buffers in the device FT_STATUS FT_Purge ( FT_HANDLE ftHandle, DWORD dwMask ) 88 “extended programming interface” was offered for FT245, with extended API functions. Bit bang mode was a special mode in this interface. It changed the 8 data lines on FT245 to an 8 bit bi-directional bus. Each pin could be independently set as either an input or output pin. And the data written to the device were self-locked onto the data pins set as outputs, until new data were transferred. Or the last value written would be hold. A baud rate generator controlled the transfer rate. Main functions: FT_GetBitMode: get the current value of the bit mode FT_STATUS FT_GetBitMode ( FT_HANDLE ftHandle, PUCHAR pucMode ) FT_SetBitMode: set the value of the bit mode FT_STATUS FT_SetBitMode ( FT_HANDLE ftHandle, UCHAR ucMask, UCHAR ucEnable ) FT_SetBitMode function set up each of the bits as an input or an output. FT_GetBitMode function red and sent back the current value of the 8 data lines. 10.2.3 communication between the program and the circuit The following code snip realized the communication between the application and the circuit, using bit bang mode of FT245BL, writing data to the output pins to control the rotate direction and steps of both motors depending on the previous calculation results. Code snip: HMODULE m_hmodule; m_hmodule=LoadLibrary(_T("FTD2XX.dll"));//load the dynamic-link library FT_HANDLE m_ftHandle; FT_STATUS m_ftStatus; m_ftStatus=FT_Open(0,&m_ftHandle); //open the devide and return the device handle m_ftStatus=FT_SetBitMode(m_ftHandle,0xff,0xff); //set Bit Bang Mode, all pins as outputs 89 if(m_ftStatus==FT_OK) //if successful { unsigned char o[4]; DWORD lpdwBytesWritten; o[0]=0x00; o[1]=0x10;//clear the output for main track o[2]=0x00; o[3]=0x20;//clear the output for sub track FT_Write(m_ftHandle,&o,4, &lpdwBytesWritten); //reset the outputs Sleep(1000); unsigned char by[8]; //rotate direction 1, motor 1 by[0]=0x05;by[1]=0x15; by[2]=0x06;by[3]=0x16; by[4]=0x0a;by[5]=0x1a; by[6]=0x09;by[7]=0x19; unsigned char ay[8]; //rotate direction 2, motor 1 ay[0]=0x09;ay[1]=0x19; ay[2]=0x0a;ay[3]=0x1a; ay[4]=0x06;ay[5]=0x16; ay[6]=0x05;ay[7]=0x15; unsigned char dy[8]; //rotate direction 1, motor 2 dy[0]=0x05;dy[1]=0x25; dy[2]=0x06;dy[3]=0x26; dy[4]=0x0a;dy[5]=0x2a; dy[6]=0x09;dy[7]=0x29; unsigned char cy[8]; //rotate direction 2, motor 2 cy[0]=0x09;cy[1]=0x29; cy[2]=0x0a;cy[3]=0x2a; cy[4]=0x06;cy[5]=0x26; cy[6]=0x05;cy[7]=0x25; int i; int j; if(main>0){ //VARIABLE main, as the moving distance on the main track, rotate direction 1 for(j=0;j<number;j++) //VARIABLE number, control the number of steps to rotate { for(i=0;i<8;i++) { FT_Write(m_ftHandle,&by[i],1, &lpdwBytesWritten); //write data to the output pins Sleep(200); 90 } } } else//rotate direction2 { for(j=0;j<10;j++) { for(i=0;i<8;i++) { FT_Write(m_ftHandle,&ay[i],1, &lpdwBytesWritten); Sleep(200); } } } m_ftStatus=FT_Close(m_ftHandle); //close the device 10.3 user interface The final interface was shown in Fig. 10-9. It could be divided into three parts, device, fixed position and motion. 91 Fig. 10-9: interface, final application 10.3.1 device The device part provided four functions, find device, calibrate, manual calibrate and exit, which would be explained in detail in the following paragraphs. 92 1. Find device: After the program started, “find device” button was the only one enabled. Its function detected if the device was attached. If attached, the application opened the device and returned its handle for further operation. The other controls on the interface would be enabled. If not, a message box would pop out to remind the user to check the device, as showed in Fig. 10-10. Fig. 10-10: message box, final application 2. calibrate: This button had not had any function assigned yet. It would be useful if assigned a function to reset the light source to an original position using a sensor feedback system. 3. manual calibrate: The “manual calibrate” button provided a way to manually move the position of the light source on both tracks. User could select either “forward” or “backward” and “main track” or “sub track”, then input the distance to move on that track. 93 4. exit: The “exit” button reset the light source to the origin position, and then closed the device and the application. 10.3.2 fixed position The user could input month, day, hour and minute. By clicking the “go” button, the application calculated solar altitude and azimuth for that particular time and listed the date, time, altitude and azimuth in the list box above. The application then communicated with the circuit, which drove the light source to the right position. This mode was used to illustrate the position of the Sun at a particular time. 10.3.3 motion The motion mode provided two sets of inputs, fixed time or fixed date. In the “fixed time” set, the user could input certain hour and minute, and the starting date as well as the ending date. This set was used to illustrate the seasonal change of the Sun’s position at a certain time. In the “fixed date” set, the user could input certain month and day, and the starting time as well as the ending time. This set was used to illustrate the daily change of the Sun’s position on a certain day. By clicking the “go” button, the application listed the starting and ending time in the list box and communicated with the circuit. The light source was first moved to the start position then to the end position, to illustrate the path of change of the Sun. 94 10.4 flow chart of the application, as summary Fig. 10-11 illustrated the flow chart of the application. Fig. 10-11: flow chart, final application 95 Chapter 11. Conclusion and Future Work 11.1 conclusion The goal of the new control method is designed to provide a user interface and a control circuit for Ralph Knowles Heliodon to improve its function and performance. Users can input a certain time via the interface and the heliodon will illustrate the position of the Sun at that time. Or users can input a starting time and an ending time and the heliodon will illustrate the motion of the Sun between these two time points. These are realized by the circuit which controls the rotation of two new stepper motors. The application can control the rotating steps of the motors via the circuit, according to the calculation result of the input values. But some part of the hardware is distorted so that the gears do not always match the rack. And the motor which moves along the main track cannot provide enough torque at some points on the track. So the device has not been tested for a full illustration yet. 11.2 future work The hardware needs to be adjusted so that the gears contact well with the rack. And the torque of the motor needs to be increased. A calibration feature can be added using sensors for the original positions so that the device can be calibrated at the beginning of an operation. More graphic features can be added in the interface to make it more illustrative, like a sun chart reflecting the current position of the Sun during the operation. 96 Bibliography 34N Series - High Torque Stepper Motors. (2008). Retrieved 2008, from Anaheim Automation: http://www.anaheimautomation.com/34N_Series_High_Torque_Stepper_Motors.aspx AC motor. (2008, 6 23). Retrieved 2008, from Wikipedia, The Free Encyclopedia: http://en.wikipedia.org/wiki/AC_motor altitude. (2008, 6 21). Retrieved 2008, from Wikipedia, The Free Encyclopedia: http://en.wikipedia.org/wiki/Altitude altitude and azimuth. (2008). EncyclopædiaBritannica. Ultimate Reference Suite. Chicago: EncyclopædiaBritannica. Applications Of Monolithic Bridge Drivers. (1995). Retrieved 2008, from STMicroelectronics: http://eu.st.com/stonline/books/pdf/docs/1681.pdf atomic time. (2008). Encyclopædia Britannica. Ultimate Reference Suite . Chicago: Encyclopædia Britannica. automated heliodon. (n.d.). Retrieved 2008, from MIT Daylighting Lab: http://web.mit.edu/daylighting/research_2_concept.html Bickle, R. (2003, 11 7). DC MOTOR CONTROL SYSTEMS. Retrieved 2008, from Dallas Personal Robotics Group: http://www.dprg.org/tutorials/2003-10a/motorcontrol.pdf Brushed DC Motor Fundamentals. (2004). Retrieved 2008, from Microchip: http://ww1.microchip.com/downloads/en/AppNotes/00905a.pdf Brushless DC (BLDC) Motor Fundamentals. (2004). Retrieved 2008, from Microchip: http://ww1.microchip.com/downloads/en/AppNotes/00885a.pdf Brushless DC electric motor. (2008, 6 29). Retrieved 2008, from Wikipedia, The Free Encyclopedia: http://en.wikipedia.org/wiki/Brushless_dc_motor Computer controller for DC motors. (1995, 10). Retrieved 2008, from GKDesign Engineering: http://www.geocities.com/SiliconValley/Lakes/7156/articl2.htm?20089 97 coordinated universal time. (2008, 6 25). Retrieved 2008, from Wikipedia, The Free Encyclopedia: http://en.wikipedia.org/wiki/Coordinated_universal_time coordinated universal time. (2008). Encyclopædia Britannica. Ultimate Reference Suite . Chicago: Encyclopædia Britannica. Creagan, D. (n.d.). A Simple DC Motor Controller. Retrieved 2008, from Seattle Robotics Society: http://www.seattlerobotics.org/encoder/200001/simplemotor.htm D2XX Programmer's Guide. (2007). Retrieved 2008, from Future Technology Devices International Ltd.: http://vast.uccs.edu/personal/qli_files/D2XXPG33.pdf day. (2008). EncyclopædiaBritannica. Ultimate Reference Suite. Chicago: Britannica, Encyclopædia. daylight saving time. (2008). Encyclopædia Britannica. Ultimate Reference Suite . Encyclopædia Britannica. daylight saving time. (2008, 6 29). Retrieved 2008, from Wikipedia, The Free Encyclopedia: http://en.wikipedia.org/wiki/Daylight_saving_time DC Motor Operation. (n.d.). Retrieved 2008, from Department of Physics and Astronomy, Georgia State University: http://hyperphysics.phy-astr.gsu.edu/Hbase/magnetic/motdc.html declination. (2008, 6 19). Retrieved 2008, from Wikipedia, The Free Encyclopedia: http://en.wikipedia.org/wiki/Solar_declination Designing the Hardware. (2004). Retrieved 2008, from MicroMouseInfo: www.micromouseinfo.com/introduction/dcmotors.html DLP-USB245M USB Adapter . (2008). Retrieved 2008, from DLP Design: http://www.dlpdesign.com/usb/usb245.shtml DLP-USB245M-G USB to FIFO Parallel Interface Module. (2002). Retrieved 2008, from DLP Design: http://www.dlpdesign.com/usb/dlp-usb245mv15.pdf Dynamic-link library. (2008, 6 27). Retrieved 2008, from Wikipedia, The Free Encyclopedia: en.wikipedia.org/wiki/Dynamically_linked_library 98 electric motor. (2008). Encyclopædia Britannica. Ultimate Reference Suite . Chicago: Encyclopædia Britannica. equation of time. (2008, 5 27). Retrieved 2008, from Wikipedia, The Free Encyclopedia: http://en.wikipedia.org/wiki/Equation_of_time FT245BL USB FIFO ( USB - Parallel ) I.C. (2005). Retrieved 2--8, from Future Technology Devices International, Ltd.: http://www.ftdichip.com/Documents/DataSheets/DS_FT245BL.pdf FTD2XX Programmer’ s Guide. (2002). Retrieved 2008, from Future Technology Device International, Ltd.: http://www.dlpdesign.com/drivers/D2XXPG21.pdf Fu, T. (2005). Computer Graphic Controller for the Heliodon. gear functions. (2003). Retrieved 2008, from Geocities: http://www.geocities.com/budb3/arts/gear/gfun.html Gieras, J. F., & Wing, M. (1997). Permanent Magnet Motor Technology, Design and Application. New York: Marcel Dekker, Inc. greenwich mean time. (2008). Encyclopædia Britannica. Ultimate Reference Suite . Chicago: Encyclopædia Britannica. greenwich mean time. (2008, 6 17). Retrieved 2008, from Wikipedia, The Free Encyclopedia: http://en.wikipedia.org/wiki/Greenwich_mean_time greenwich meridian. (2008). Encyclopædia Britannica. Ultimate Reference Suite . Chicago: Encyclopædia Britannica. Harrison, A. (2002, 3 23). unipolar stepper motor control circuit. Retrieved 2008, from AT&T Personal Web Pages: http://home.att.net/~theremin1/Circuit_Library/unipolar_stepper_motor.htm heliodon. (2008, 5 27). Retrieved 2008, from Wikipedia, The Free Encyclopedia: http://en.wikipedia.org/wiki/Heliodon high impedance. (2008, 5 23). Retrieved 2008, from Wikipedia, The Free Encyclopedia: http://en.wikipedia.org/wiki/High_impedance 99 How to Select a DC Motor. (2008). Retrieved 2008, from MicroMo Electronics: http://www.faulhaber-group.com/n390290/n.html induction motor. (2008, 6 21). Retrieved 2008, from Wikipedia, The Free Encyclopedia: http://en.wikipedia.org/wiki/Induction_motor Jain, A. (1999, 9 22). Solar Concepts. Retrieved 2998, from VRSolar: http://www.usc.edu/dept/architecture/mbs/tools/vrsolar/Help/solar_concepts.html#JulianDate Jones, D. W. (2008, 2 14). Control of Stepping Motors, A Tutorial. Retrieved 2008, from Computer Science, The University of Iowa: http://www.cs.uiowa.edu/~jones/step/index.html Knowles, R. L. (1967). The Sun, Heat & Light. Los Angeles: Department of Architecture, University of Southern California. Knowles, R. (1999). The Solar Envelope. Retrieved 2008, from Personal Web Pages, USC Research Computing Facility : http://www-rcf.usc.edu/~rknowles/sol_env/sol_env.html Lab 7. Stepper Motor Control Circuit. (n.d.). Retrieved 2008, from Tungnan University: http://study.tnit.edu.tw/teacher/doffa/lab7.htm Lancaster, D. (1997). Don Lancaster's Tech Musing. Retrieved 2008, from Don Lancaster's The Guru's Lair : http://www.tinaja.com/glib/muse117.pdf latitude. (2008, 6 24). Retrieved 2008, from Wikipedia, The Free Encyclopedia: http://en.wikipedia.org/wiki/Latitude latitude and longitude. (2008). EncyclopædiaBritannica. Ultimate Reference Suite. Chicago: Encyclopædia Britannica. Lechner, N. (n.d.). The Sun Enumerator. Retrieved 2008, from College of Architecture, Design and Construction: http://www.cadc.auburn.edu/sun-emulator/mainpage.htm Lecture 8. Stepper Motors. (n.d.). Retrieved 2008, from RPI Plasma Dynamics Laboratory: http://hibp.ecse.rpi.edu/~connor/education/IEE/lectures/Lecture_8_Stepper_motors.pdf Logashanmugam, E., & Suresh, K. (2007, 8 2). Control Multiple Stepper Motors Through A PC's USB Port. Retrieved 2008, from Electronic Design: http://electronicdesign.com/Articles/Index.cfm?AD=1&ArticleID=16125 100 Luminous Room. (n.d.). Retrieved 2008, from Tangible Media Group MIT Media Lab: http://tangible.media.mit.edu/projects/luminousroom/ Microsoft Visual Studio. (2008). Retrieved 2008, from Microsoft: http://msdn.microsoft.com/en-us/vstudio/default.aspx Muneer, T. (1997). Solar Radiation & Daylight Models, for the Energy Efficient Design of Buildings. Oxford: Architectural Press. Oh, P . (n.d.). PC Generated Pulse Width Modulation (PWM) For DC Motor Speed Control . Retrieved 2008, from Boondog Automation: http://www.boondog.com/tutorials/2993pwm/2993pwm.htm PICmicro DC Motor Control Tips 'n Tricks. (2004). Retrieved 2008, from MicroChip: http://ww1.microchip.com/downloads/en/devicedoc/41233A.pdf Pidwirny, M. (2008, 4 16). Chapter 6: Energy and Matter. Retrieved 2 2008, from PhysicalGeography.net: http://www.physicalgeography.net/fundamentals/6h.html portable heliodon. (n.d.). Retrieved 2008, from MIT Daylighting Lab: http://web.mit.edu/daylighting/research_3_development.html Powers, P. (2008, 4 2). Dial Time Corrections. Retrieved 2008, from Our World: http://ourworld.compuserve.com/homepages/Patrick_Powers/EoT.htm Ralph Knowles. (2008). Retrieved 2008, from University of Southern California, School of Architecture: http://arch.usc.edu/People/Faculty/FacultyDirectory/viewPerson.html Ralph Knowles. (2008). Retrieved 2008, from University of Southern California: http://www.usc.edu/dept/architecture/faculty/profs/knowles.html Ralph L. Knowles. (2008). Retrieved 2008, from Personal Web Pages, USC Research Computing Facility : http://www-rcf.usc.edu/~rknowles/index.html Seale, E. (2003, 7 10). DC Motors. Retrieved 2008, from Solarbotics: http://www.solarbotics.net/starting/200111_dcmotor/200111_dcmotor2.html SN5406,SN5416,SN7406,SN7416, Hex Inverter Buffers/Drivers. (2001, 12). Retrieved 2008, from Texas Instruments: http://focus.ti.com/lit/ds/symlink/sn7416.pdf 101 SN54273,SN54LS273,SN74273,SN74LS273, Octal D-Type Flip-flop with Clear. (1988, 3). Retrieved 2008, from Texas Instruments: http://focus.ti.com/lit/ds/symlink/sn74ls273.pdf SN754410,Quadruple Half-H Driver. (1995, 11). Retrieved 2008, from Texas Instrument: http://focus.ti.com/lit/ds/symlink/sn754410.pdf SOC Machines. (2008). Retrieved 2008, from SOC Machines: http://www.soc-machines.com/ solar time. (2008, 4 29). Retrieved 5 2008, from Wikipedia, The Free Encyclopedia: http://en.wikipedia.org/wiki/Solar_day standard time. (2008). Encyclopædia Britannica. Ultimate Reference Suite. Chicago: Encyclopædia Britannica. stepper motor. (2008, 6 15). Retrieved 2008, from Wikipedia, The Free Encyclopedia: http://en.wikipedia.org/wiki/Stepper_motor Stepper Motor Basics. (n.d.). Retrieved 2008, from The BEAM Reference Library: http://library.solarbotics.net/pdflib/pdf/motorbas.pdf Stepper Motor System Basics. (2008, 2 25). Retrieved 2008, from Advanced Micro Systems, Inc.: www.ams2000.com/pdf/step101.html Stepping Motor Fundamentals. (2004). Retrieved 2008, from Microchip: http://ww1.microchip.com/downloads/en/AppNotes/00907a.pdf The Heliodon. (n.d.). Retrieved 2008, from Building Science, UC Berkeley: http://arch.ced.berkeley.edu/resources/bldgsci/bsl/heliodon.html The Prime Meridian of the World. (2007, 1 6). Retrieved 1 2008, from Greenwich2000: http://wwp.greenwichmeridian.com/ time zone. (2008, 6 24). Retrieved 2008, from Wikipedia, The Free Encyclopedia: http://en.wikipedia.org/wiki/Time_zone time zone. (2008). EncyclopædiaBritannica. Ultimate Reference Suite. Chicago: Encyclopædia Britannica. 102 Tutorial: Open Loop Speed Control of a DC Motor via 8255 Controller using TCP/IP Server-Client Application Programmed in Visual Basic. (1998, 6 23). Retrieved 2008, from Drexel University: http://www.pages.drexel.edu/~cy56/8255.html Universal Serial Bus . (n.d.). Retrieved 2008, from Intel: http://www.intel.com/technology/usb/index.htm Universal Serial Bus. (2008, 6 26). Retrieved 2008, from Wikipedia, The Free Encyclopedia: http://en.wikipedia.org/wiki/Usb universal time. (2008, 6 8). Retrieved 2008, from Wikipedia, The Free Encyclopedia: http://en.wikipedia.org/wiki/Universal_time universal time. (2008). Encyclopædia Britannica. Ultimate Reference Suite. Chicago: Encyclopædia Britannica. US Daylight Savings. (2007). Retrieved 2008, from Greenwich2000: http://wwp.greenwichmeantime.com/time-zone/rules/usa.htm USB Overview. (2000). Retrieved 2008, from The Ganssle Group: http://www.ganssle.com/articles/usb.htm USB Products. (2008). Retrieved 2008, from DLP Design: http://www.dlpdesign.com/usb/ 103 Appendices 104 Appendix I: Data Sheet for SM2006, NEMA23, stepper motor 105 106 Appendix II: Data Sheet for 34N104S, stepper motor 107 108 Appendix III: Data Sheet for DLP-USB245M-G 109 110 111 112 113 114 115 116 117 118 119 120 121 Appendix IV: Data Sheet for SN74LS273 122 123 124 125 126 Appendix V: Data Sheet for SN7416 127 128 129 130 Appendix VI: Data Sheet for SN754410 131 132 133 134 135 Appendix VII: Source Code for the Final Application //////////////////////////////////////////////////////////////////////////////////////// ///// //Ralph Knowles Heliodon Control Application //University of Southern California, School of Architecture, Master of Building Science //Copyright 2002 by the University of Southern California and Xing Chen //All right reserved //Contact Author: Xing Chen, xchen.la@gmail.com //////////////////////////////////////////////////////////////////////////////////////// ///// //HELIODONDlg.h #pragma once #include "afxwin.h" #include "FTD2XX.h"//FTDI files #include "afxcmn.h" #pragma comment(lib, "FTD2XX.lib") UINT ThreadProc1(LPVOID param); const int ON = 100; const int OFF = 101; class CHELIODONDlg : public CDialog { // Construction public: CHELIODONDlg(CWnd* pParent = NULL); // standard constructor //my function void CHELIODONDlg::ableButton(int able); void CHELIODONDlg::ableButtonM(int ableM); double* CHELIODONDlg::solarCalc(int,int,int,int); double* CHELIODONDlg::trackCalc(int,int,int,int); void CHELIODONDlg::Control(double, double); void CHELIODONDlg::Calibrate(double,double); FT_STATUS CHELIODONDlg::openDevice(); 136 //HELIODONDlg.cpp #include "stdafx.h" #include "HELIODON.h" #include "HELIODONDlg.h" #include "FTD2XX.h"//FTDI head file #include "math.h" #define pi 3.14156 #ifdef _DEBUG #define new DEBUG_NEW #endif //my globals //my globals int deviceRun; double D2R=pi/180.0;//convert degree to radian double recordMain=0;//VARIABLE, global, record absolute position on main track double recordSub=0;//VARIABLE, global, record absolute position on sub track class CAboutDlg : public CDialog { public: CAboutDlg(); // Dialog Data enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support // Implementation protected: DECLARE_MESSAGE_MAP() }; 137 CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) END_MESSAGE_MAP() CHELIODONDlg::CHELIODONDlg(CWnd* pParent /*=NULL*/) : CDialog(CHELIODONDlg::IDD, pParent) , rad_devMain(0) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); //data initialization } void CHELIODONDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_BTN_devATTACH, btn_devAttach); DDX_Control(pDX, IDC_BTN_devCALIBRATE, btn_devCalibrate); DDX_Control(pDX, IDC_BTN_devMANUAL, btn_devManual); DDX_Control(pDX, IDC_RAD_devFORWARD, rad_devForward); DDX_Control(pDX, IDC_RAD_devBACKWORD, rad_devBackward); DDX_Control(pDX, IDC_EDT_devDISTANCE, edt_devDistance); DDX_Control(pDX, IDC_EDT_devInfo, edt_devInfo); DDX_Control(pDX, IDC_STC_devATTACH, stc_devAttach); DDX_Control(pDX, IDC_STC_devCALIBRATE, stc_devCalibrate);//controls, device part DDX_Control(pDX, IDC_BTN_fpCALC, btn_fpCalc); DDX_Control(pDX, IDC_BTN_fpCLEAR2, btn_fpClear); DDX_Control(pDX, IDC_CBO_fpMONTH, cbo_fpMonth); DDX_Control(pDX, IDC_CBO_fpMINUTE, cbo_fpMinute); DDX_Control(pDX, IDC_EDT_fpDAY, edt_fpDay); DDX_Control(pDX, IDC_EDT_fpHOUR, edt_fpHour); 138 DDX_Control(pDX, IDC_LSB_fpRECORD, lsb_fpRecord); DDX_Control(pDX, IDC_STC_fpALTITUDE, stc_fpAltitude); DDX_Control(pDX, IDC_STC_fpAZIMUTH, stc_fpAzimuth);//controls, fixed position part DDX_Control(pDX, IDC_BTN_mCALC, btn_mCalc); DDX_Control(pDX, IDC_BTN_mCLEAR, btn_mClear); DDX_Control(pDX, IDC_RAD_mFIXEDTIME, rad_mFixTime); DDX_Control(pDX, IDC_RAD_mFIXEDDATE, rad_mFixDate); DDX_Control(pDX, IDC_CBO_mMONTH, cbo_mMonth); DDX_Control(pDX, IDC_CBO_mMINUTE, cbo_mMinute); DDX_Control(pDX, IDC_CBO_mMONTH2, cbo_mMonth2); DDX_Control(pDX, IDC_CBO_mMINUTE2, cbo_mMinute2); DDX_Control(pDX, IDC_EDT_mDAY, edt_mDay); DDX_Control(pDX, IDC_EDT_mHOUR, edt_mHour); DDX_Control(pDX, IDC_EDT_mDAY2, edt_mDay2); DDX_Control(pDX, IDC_EDT_mHOUR2, edt_mHour2); DDX_Control(pDX, IDC_LSB_mRECORD, lsb_mRecord);//controls, motion part } BEGIN_MESSAGE_MAP(CHELIODONDlg, CDialog) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() //add my message map //add my message map //}}AFX_MSG_MAP ON_BN_CLICKED(IDC_BTN_devATTACH, & CHELIODONDlg::OnBnClickedBtndevAttach) ON_BN_CLICKED(IDC_BTN_devCALIBRATE, & CHELIODONDlg::OnBnClickedBtndevCalibrate) ON_BN_CLICKED(IDC_BTN_fpCALC, & CHELIODONDlg::OnBnClickedBtnfpCalc) ON_BN_CLICKED(IDC_BTN_mCALC, & CHELIODONDlg::OnBnClickedBtnmCalc) ON_BN_CLICKED(IDC_RAD_mFIXEDTIME, & CHELIODONDlg::OnBnClickedRadmFixedTime) ON_BN_CLICKED(IDC_RAD_mFIXEDDATE, & CHELIODONDlg::OnBnClickedRadmFixedDate) ON_BN_CLICKED(IDC_BTN_mCALC, & CHELIODONDlg::OnBnClickedBtnmCalc) ON_BN_CLICKED(IDC_BTN_fpCLEAR2, & CHELIODONDlg::OnBnClickedBtnfpClear) ON_BN_CLICKED(IDC_BTN_mCLEAR, & CHELIODONDlg::OnBnClickedBtnmClear) ON_BN_CLICKED(IDC_BTN_devMANUAL, & CHELIODONDlg::OnBnClickedBtndevManual) END_MESSAGE_MAP()//CHELIODONDlg message handlers 139 BOOL CHELIODONDlg::OnInitDialog() { CDialog::OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here // ableButton(OFF);//unable buttons until device is attached deviceRun=0; SetTimer(1, 100,NULL);//check for USB data in the buffer every 100ms stc_devAttach.SetWindowText(_T("Device not found")); stc_devCalibrate.SetWindowTextW(_T("Device not calibrated")); edt_devInfo.SetWindowTextW(_T("For manual calibration: \r\n please select FORWARD or BACKWORD and then input \r\nthe approximate distances for the main and sub track.")); return TRUE; // return TRUE unless you set the focus to a control } void CHELIODONDlg::OnSysCommand(UINT nID, LPARAM lParam) 140 { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialog::OnSysCommand(nID, lParam); } } // If you add a minimize button to your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework. void CHELIODONDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon dc.DrawIcon(x, y, m_hIcon); } else { CDialog::OnPaint(); } 141 } // The system calls this function to obtain the cursor to display while the user drags // the minimized window. HCURSOR CHELIODONDlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } void CHELIODONDlg::ableButton(int able) { if(able==OFF)//unable buttons until device is attached { GetDlgItem(IDC_BTN_devCALIBRATE)->EnableWindow(FALSE); GetDlgItem(IDC_BTN_fpCALC)->EnableWindow(FALSE); GetDlgItem(IDC_BTN_mCALC)->EnableWindow(FALSE); GetDlgItem(IDC_BTN_devMANUAL)->EnableWindow(FALSE); GetDlgItem(IDC_BTN_fpCLEAR2)->EnableWindow(FALSE); GetDlgItem(IDC_BTN_mCLEAR)->EnableWindow(FALSE); GetDlgItem(IDC_CBO_fpMONTH)->EnableWindow(FALSE); GetDlgItem(IDC_CBO_fpMINUTE)->EnableWindow(FALSE); GetDlgItem(IDC_CBO_mMONTH)->EnableWindow(FALSE); GetDlgItem(IDC_CBO_mMONTH2)->EnableWindow(FALSE); GetDlgItem(IDC_CBO_mMINUTE)->EnableWindow(FALSE); GetDlgItem(IDC_CBO_mMINUTE2)->EnableWindow(FALSE); GetDlgItem(IDC_EDT_fpDAY)->EnableWindow(FALSE); GetDlgItem(IDC_EDT_fpHOUR)->EnableWindow(FALSE); GetDlgItem(IDC_EDT_mDAY)->EnableWindow(FALSE); GetDlgItem(IDC_EDT_mDAY2)->EnableWindow(FALSE); GetDlgItem(IDC_EDT_mHOUR)->EnableWindow(FALSE); GetDlgItem(IDC_EDT_mHOUR2)->EnableWindow(FALSE); GetDlgItem(IDC_EDT_devDISTANCE)->EnableWindow(FALSE); GetDlgItem(IDC_RAD_mFIXEDTIME)->EnableWindow(FALSE); GetDlgItem(IDC_RAD_mFIXEDDATE)->EnableWindow(FALSE); GetDlgItem(IDC_RAD_devFORWARD)->EnableWindow(FALSE); GetDlgItem(IDC_RAD_devBACKWORD)->EnableWindow(FALSE); GetDlgItem(IDC_RAD_devMAIN)->EnableWindow(FALSE); GetDlgItem(IDC_RAD_devSUB)->EnableWindow(FALSE); } 142 if(able==ON) { GetDlgItem(IDC_BTN_devCALIBRATE)->EnableWindow(TRUE); GetDlgItem(IDC_BTN_fpCALC)->EnableWindow(TRUE); GetDlgItem(IDC_BTN_mCALC)->EnableWindow(TRUE); GetDlgItem(IDC_BTN_devMANUAL)->EnableWindow(TRUE); GetDlgItem(IDC_BTN_fpCLEAR2)->EnableWindow(TRUE); GetDlgItem(IDC_BTN_mCLEAR)->EnableWindow(TRUE); GetDlgItem(IDC_CBO_fpMONTH)->EnableWindow(TRUE); GetDlgItem(IDC_CBO_fpMINUTE)->EnableWindow(TRUE); GetDlgItem(IDC_CBO_mMONTH)->EnableWindow(TRUE); GetDlgItem(IDC_CBO_mMONTH2)->EnableWindow(TRUE); GetDlgItem(IDC_CBO_mMINUTE)->EnableWindow(TRUE); GetDlgItem(IDC_CBO_mMINUTE2)->EnableWindow(TRUE); GetDlgItem(IDC_EDT_fpDAY)->EnableWindow(TRUE); GetDlgItem(IDC_EDT_fpHOUR)->EnableWindow(TRUE); GetDlgItem(IDC_EDT_mDAY)->EnableWindow(TRUE); GetDlgItem(IDC_EDT_mDAY2)->EnableWindow(TRUE); GetDlgItem(IDC_EDT_mHOUR)->EnableWindow(TRUE); GetDlgItem(IDC_EDT_mHOUR2)->EnableWindow(TRUE); GetDlgItem(IDC_RAD_mFIXEDTIME)->EnableWindow(TRUE); GetDlgItem(IDC_RAD_mFIXEDDATE)->EnableWindow(TRUE); GetDlgItem(IDC_RAD_devFORWARD)->EnableWindow(TRUE); GetDlgItem(IDC_RAD_devBACKWORD)->EnableWindow(TRUE); GetDlgItem(IDC_RAD_devMAIN)->EnableWindow(TRUE); GetDlgItem(IDC_RAD_devSUB)->EnableWindow(TRUE); } } void CHELIODONDlg::ableButtonM(int ableM) { if(ableM==OFF)//unable buttons until device is attached { GetDlgItem(IDC_CBO_mMONTH2)->EnableWindow(TRUE); GetDlgItem(IDC_CBO_mMINUTE2)->EnableWindow(FALSE); GetDlgItem(IDC_EDT_mDAY2)->EnableWindow(TRUE); GetDlgItem(IDC_EDT_mHOUR2)->EnableWindow(FALSE); } 143 if(ableM==ON) { GetDlgItem(IDC_CBO_mMONTH2)->EnableWindow(FALSE); GetDlgItem(IDC_CBO_mMINUTE2)->EnableWindow(TRUE); GetDlgItem(IDC_EDT_mDAY2)->EnableWindow(FALSE); GetDlgItem(IDC_EDT_mHOUR2)->EnableWindow(TRUE); } } void CHELIODONDlg::OnBnClickedBtndevAttach() { // TODO: 在此添加控件通知处理程序代码 //code to detect if the device has been attached properly //UpdateWindow(); //Close(); FT_STATUS status=openDevice(); if(status==FT_OK) { stc_devAttach.SetWindowTextW(_T("Device attached")); deviceRun=1; ableButton(ON); FT_ResetDevice(m_ftHandle); FT_Purge(m_ftHandle,FT_PURGE_RX||FT_PURGE_TX); } else { AfxMessageBox(_T("Error: Device not attached")); deviceRun=0; } } void CHELIODONDlg::OnBnClickedBtndevCalibrate() { //calibrate the original position of the light source using sensors //future development 144 } void CHELIODONDlg::OnBnClickedBtnfpCalc() { //FT_STATUS status=openDevice(); int month=0; int day=0; int hour=0; int minute=0; CString str; int idx; idx=cbo_fpMonth.GetCurSel();//get window input cbo_fpMonth.GetLBText(idx,str); month=_ttoi(str); edt_fpDay.GetWindowTextW(str); day=_ttoi(str); edt_fpHour.GetWindowTextW(str); hour=_ttoi(str); idx=cbo_fpMinute.GetCurSel(); cbo_fpMinute.GetLBText(idx,str); minute=_ttoi(str); //calculate solar altitude and azimuth //calculate solar altitude and azimuth double* p_resultSolar=0; p_resultSolar=solarCalc(month,day,hour,minute); CString temp;//output solar altitude and azimuth double pass[2]; pass[0]=*p_resultSolar; pass[1]=*(p_resultSolar+1); temp.Format(_T("%.2f"), pass[0]);//set the value in the window for altitude and azimuth stc_fpAltitude.SetWindowText(temp); temp.Format(_T("%.2f"), pass[1]); stc_fpAzimuth.SetWindowText(temp); 145 CString str2; str2.Format(_T("%d %35d %20d %15d %25.2f %25.2f"), month,day,hour,minute,pass[0],pass[1]); lsb_fpRecord.AddString(str2);//add result to the listbox //calculate distance on main and sub track, absolute value on track //calculate distance on main and sub track, absolute value on track double* p_resultTrack=0; p_resultTrack=trackCalc(month,day,hour,minute);//calling trackCalc double distance[2]; distance[0]=*p_resultTrack;//gain the value of distance on main track distance[1]=*(p_resultTrack+1);//gain the value of distance on sub track delete []p_resultSolar;//release pointer delete []p_resultTrack; //control //control double diffMain;//calculate the distance between two sequent positions double diffSub; diffMain=distance[0]-recordMain;//if distance 2 > distance 1, motor rotate direction1 diffSub=distance[1]-recordSub; recordMain=distance[0];//pass value to RECORD to track the current position recordSub=distance[1]; Control(diffMain, diffSub);//prior to the listbox output } void CHELIODONDlg::OnBnClickedBtnmCalc() { int month1; int day1; int hour1; int minute1; int month2; int day2; int hour2; int minute2; 146 double* p_resultSolar_1=0; double* p_resultTrack_1=0; double* p_resultSolar_2=0; double* p_resultTrack_2=0; double pass1[2]; double distance1[2]; double pass2[2]; double distance2[2]; CString temp; CString str2; CString str; int idx; switch(GetCheckedRadioButton(IDC_RAD_mFIXEDTIME,IDC_RAD_mFIXEDDATE))//get window input { case IDC_RAD_mFIXEDTIME://fixed time idx=cbo_mMonth.GetCurSel(); cbo_mMonth.GetLBText(idx,str); month1=_ttoi(str); edt_mDay.GetWindowTextW(str); day1=_ttoi(str); edt_mHour.GetWindowTextW(str); hour1=_ttoi(str); idx=cbo_mMinute.GetCurSel(); cbo_fpMinute.GetLBText(idx,str); minute1=_ttoi(str);//start position idx=cbo_mMonth2.GetCurSel(); cbo_mMonth2.GetLBText(idx,str); month2=_ttoi(str); edt_mDay2.GetWindowTextW(str); day2=_ttoi(str);//end position str2.Format(_T("%d %27d %15d %15d %15d %25d xx xx"), month1,day1,hour1,minute1,month2,day2); lsb_mRecord.AddString(str2);//listbox output 147 //calculate solar altitude and azimuth //calculate solar altitude and azimuth p_resultSolar_1=solarCalc(month1,day1,hour1,minute1); pass1[0]=*p_resultSolar_1; pass1[1]=*(p_resultSolar_1+1); //calculate distance on main and sub track //calculate distance on main and sub track p_resultTrack_1=trackCalc(month1,day1,hour1,minute1); distance1[0]=*p_resultTrack_1; distance1[1]=*(p_resultTrack_1+1); //for end position //for end position p_resultSolar_2=solarCalc(month2,day2,hour1,minute1); pass2[0]=*p_resultSolar_2; pass2[1]=*(p_resultSolar_2+1); p_resultTrack_2=trackCalc(month2,day2,hour1,minute1); distance2[0]=*p_resultTrack_2; distance2[1]=*(p_resultTrack_2+1); break; case IDC_RAD_mFIXEDDATE://fixed date idx=cbo_mMonth.GetCurSel(); cbo_mMonth.GetLBText(idx,str); month1=_ttoi(str); edt_mDay.GetWindowTextW(str); day1=_ttoi(str); edt_mHour.GetWindowTextW(str); hour1=_ttoi(str); idx=cbo_mMinute.GetCurSel(); cbo_fpMinute.GetLBText(idx,str); minute1=_ttoi(str); edt_mHour2.GetWindowTextW(str); hour2=_ttoi(str); idx=cbo_mMinute2.GetCurSel(); cbo_mMinute2.GetLBText(idx,str); minute2=_ttoi(str); 148 str2.Format(_T("%d %27d %15d %15d xx xx %12d %10d"); month1,day1,hour1,minute1,hour2,minute2); lsb_mRecord.AddString(str2);//listbox output //calculate solar altitude and azimuth //calculate solar altitude and azimuth p_resultSolar_1=solarCalc(month1,day1,hour1,minute1); pass1[0]=*p_resultSolar_1; pass1[1]=*(p_resultSolar_1+1); //calculate distance on main and sub track //calculate distance on main and sub track p_resultTrack_1=trackCalc(month1,day1,hour1,minute1); distance1[0]=*p_resultTrack_1; distance1[1]=*(p_resultTrack_1+1); //for end position //for end position p_resultSolar_2=solarCalc(month1,day1,hour2,minute2); pass2[0]=*p_resultSolar_2; pass2[1]=*(p_resultSolar_2+1); p_resultTrack_2=trackCalc(month1,day1,hour2,minute2); distance2[0]=*p_resultTrack_2; distance2[1]=*(p_resultTrack_2+1); break; } double diffMain1=0; double diffSub1=0; double diffMain2=0; double diffSub2=0; diffMain1=distance1[0]-recordMain;//for start position, move the motor first to the first //position recordMain=distance1[0]; diffSub1=distance1[1]-recordSub; 149 recordSub=distance1[1]; Control(diffMain1,diffSub1);//move to the first position diffMain2=distance2[0]-recordMain; recordMain=distance2[0]; diffSub2=distance2[1]-recordSub; recordSub=distance2[1]; Control(diffMain2,diffSub2);//move to the second position delete []p_resultSolar_1;//release pointers delete []p_resultSolar_2; delete []p_resultTrack_1; delete []p_resultTrack_2; } void CHELIODONDlg::OnBnClickedBtndevManual() { //manually calibrate the device //manually calibrate the device double MainManualC=0; double SubManualC=0; CString str; int temp; edt_devDistance.GetWindowTextW(str);//get window input temp=_ttoi(str); if(rad_devMain==0) MainManualC=temp;//if calibrate the main track else SubManualC=temp;//if calibrate the sub track if(rad_devForward.GetCheck()==1) { //assuming that forward is from west to east //backward is from east to west //and backward is minus MainManualC=-MainManualC; 150 SubManualC=-SubManualC; } Control(MainManualC,SubManualC);//relative value recordMain=recordMain+MainManualC; recordSub=recordSub+SubManualC; } double* CHELIODONDlg::solarCalc(int month, int day, int hour, int minute) { //calculation for solar altitude and azimuth //calculation for solar altitude and azimuth int JulianDate=0; int arrayMonth[13]={0,31, 28, 31, 30,31,30,31,31,30,31,30,31}; while(month!=0) { JulianDate+=arrayMonth[month-1]; month=month-1; } JulianDate+=day; //using longitude of los angeles, 118W, 34N //time zone, -8,120W standard time meridian //-8 regular, -7 daylight saving //calculation is based on radian //to convert from degrees to radian double degree_a; double radian_a; degree_a=(JulianDate+284.0)*360.0/365; radian_a=degree_a*D2R; double degree_DEC=0; degree_DEC=23.45*sin(radian_a); double radian_DEC; radian_DEC=degree_DEC*D2R; //convert to radian 151 double t=0; double EOT=0; t=(279.134+(0.985647*JulianDate))*D2R; EOT=5.0323-100.976*sin(t)+595.275*sin(2*t)+3.6858*sin(3*t) -12.47*sin(4*t)-430.847*cos(t)+12.5024*cos(2*t)+18.25*cos(3*t); // in seconds EOT=EOT/60; // in minute double HRA=0; double modifiedHour=0; modifiedHour=hour+minute/60.0+EOT/60+(120-118)/15; //using longitude, every 15degree 1Hour HRA=-15*(12.0-modifiedHour)*D2R; //convert to radian double radian_ALT=0; //radian double degree_ALT=0; double sinALT=0; double sin2ALT=0; double cos2ALT=0; sinALT=cos(34*D2R)*cos(radian_DEC)*cos(HRA)+sin(34*D2R)*sin(radian_DEC); sin2ALT=sinALT*sinALT; cos2ALT=1-sin2ALT; radian_ALT=atan(sqrt(sin2ALT)/sqrt(cos2ALT)); //ALT positive, radian degree_ALT=radian_ALT/D2R; double radian_AZI=0; //measure from true North to South, east of south positive double cosAZI=0; // double cos2AZI double degree_AZI=0; cosAZI=(cos(34*D2R)*sin(radian_DEC)-cos(radian_DEC)*sin(34*D2R)*cos(HRA))/cos(radian_ ALT); //positive radian_AZI=acos(cosAZI); degree_AZI=radian_AZI/D2R; if(modifiedHour>12) degree_AZI=-degree_AZI; double cal[2]; cal[0]=degree_ALT; 152 cal[1]=degree_AZI; //memory //memory double* p_calSolarResult; p_calSolarResult=new double[2]; p_calSolarResult[0]=cal[0]; p_calSolarResult[1]=cal[1]; return p_calSolarResult; } double* CHELIODONDlg::trackCalc(int monthC, int dayC, int hourC, int minuteC) { //calculation for tracks //calculation for tracks double L=0;//hour, arc length, 12:00 as 0 L=(12-(hourC+minuteC/60))*pi*58.5*15/180; int N=0;//day number int arrayMonth[13]={0,31, 29, 31, 30,31,30,31,31,30,31,30,31}; while(monthC!=0) { N+=arrayMonth[monthC-1]; monthC=monthC-1; } N+=dayC;//Jan. 1: N=1 now if(N>81)// adjust N=0 on Mar. 22 N=N-82; else N=N+284;//365-81 double alpha; alpha=N*360*D2R/366;//convert to radian double s; s=46*sin(23.45*D2R)*sin(alpha); 153 double op;//azimuth, arc length, equinox as 0 op=46*asin(s/46); double a[2]; a[0]=L; a[1]=op; double* p_calTrackResult=new double[2]; p_calTrackResult[0]=a[0]; p_calTrackResult[1]=a[1]; return p_calTrackResult; } void CHELIODONDlg::Control(double main, double sub) { //m_ftStatus=FT_Open(0,&m_ftHandle); open twice??? // FOR ILLUSTRATION ONLY double unitMain=0;//basic step for the main track, each [8], value needed to be set double unitSub=0;//basic step for the sub track, each [8], value needed to be set int stepSub;//steps for sub track int m=sub/unitSub; stepSub=abs(m); int stepMain;//steps for main track int n=main/unitMain; stepMain=abs(n); m_ftStatus=FT_SetBitMode(m_ftHandle,0xff,0xff);//set bit bang mode for FT245BL if(m_ftStatus==FT_OK) { unsigned char o[4]; DWORD lpdwBytesWritten; o[0]=0x00; o[1]=0x10;//clear the output for main track o[2]=0x00; o[3]=0x20;//clear the output for sub track 154 FT_Write(m_ftHandle,&o,4, &lpdwBytesWritten); Sleep(1000); unsigned char by[8]; //motor main track, direction 1 by[0]=0x05;by[1]=0x15; by[2]=0x06;by[3]=0x16; by[4]=0x0a;by[5]=0x1a; by[6]=0x09;by[7]=0x19; unsigned char ay[8]; //direction 2 ay[0]=0x09;ay[1]=0x19; ay[2]=0x0a;ay[3]=0x1a; ay[4]=0x06;ay[5]=0x16; ay[6]=0x05;ay[7]=0x15; unsigned char dy[8]; //motor sub track, direction 1 dy[0]=0x05;dy[1]=0x25; dy[2]=0x06;dy[3]=0x26; dy[4]=0x0a;dy[5]=0x2a; dy[6]=0x09;dy[7]=0x29; unsigned char cy[8]; //direction 2 cy[0]=0x09;cy[1]=0x29; cy[2]=0x0a;cy[3]=0x2a; cy[4]=0x06;cy[5]=0x26; cy[6]=0x05;cy[7]=0x25; int i;//counters int j; if(main>0){//rotate direction 1, motor main track for(j=0;j<stepMain;j++) { for(i=0;i<8;i++) { FT_Write(m_ftHandle,&by[i],1, &lpdwBytesWritten); Sleep(200); } 155 } } else//rotate direction2 { for(j=0;j<stepMain;j++) { for(i=0;i<8;i++) { FT_Write(m_ftHandle,&ay[i],1, &lpdwBytesWritten); Sleep(200); } } } if(sub>0){//rotate direction 1, motor sub track for(j=0;j<stepSub;j++) { for(i=0;i<8;i++) { FT_Write(m_ftHandle,&dy[i],1, &lpdwBytesWritten); Sleep(200); } } } else//rotate direction2 { for(j=0;j<stepSub;j++) { for(i=0;i<8;i++) { FT_Write(m_ftHandle,&cy[i],1, &lpdwBytesWritten); Sleep(200); } 156 } } } return; } void CHELIODONDlg::OnOK() { deviceRun=0; //Close(); FT_STATUS status; status=FT_Close(m_ftHandle); FreeLibrary(m_hmodule); CDialog::OnOK(); } void CHELIODONDlg::OnBnClickedBtnfpClear() { //clear the listbox fixed position lsb_fpRecord.ResetContent(); } void CHELIODONDlg::OnBnClickedBtnmClear() { //clear the listbox motion lsb_mRecord.ResetContent(); } void CHELIODONDlg::OnBnClickedRadmFixedTime() { ableButtonM(OFF);//enable only the controls for fixed time } void CHELIODONDlg::OnBnClickedRadmFixedDate() { ableButtonM(ON);//enable only the controls for fixed date 157 } void CHELIODONDlg::LoadDLL() { m_hmodule=LoadLibrary(_T("FTD2XX.dll")); if(m_hmodule==NULL) { AfxMessageBox(_T("Error: Can't load FTD2XX.dll")); return; } } FT_STATUS CHELIODONDlg::openDevice() { LoadDLL(); unsigned long x=0; FT_STATUS status; status=FT_Open(0,&m_ftHandle); return status; }
Abstract (if available)
Abstract
This thesis documents the development of a new control method for Ralph Knowles Heliodon, owned by the School of Architecture, University of Southern California. The heliodon has been used to illustrate the solar impact upon architecture by using two manually controlled direct current motors that drive a light source on two tracks to simulate the position of the Sun at a certain time relative to a platform as the ground. In the new method, a Windows application with a user interface is developed to communicate with a circuit that can control a new pair of stepper motors that drive the light source to the target position, which is determined by the user input in the application. The new control method provides a conceptually clear and user-friendly way to operate the device and explores its potential function as an illustration tool.
Linked assets
University of Southern California Dissertations and Theses
Conceptually similar
PDF
A teaching tool for architectural acoustics
PDF
A visual and digital method for predicting discomfort glare
PDF
Defining a sustainable aesthetic: a new paradigm for architecture
PDF
Full scale contour crafting applications
PDF
Qualitative and quantitative natural light in atria and adjacent spaces
PDF
Developing environmental controls using a data-driven approach for enhancing environmental comfort and energy performance
PDF
Comparative evaluation of lighting design software programs for daylighting in buildings
PDF
Effective light shelf and form finding: development of a light shelf design assistant tool using parametric methods
PDF
Solar thermal cooling and heating: a year-round thermal comfort strategy using a hybrid solar absorption chiller and hydronic heating scheme
PDF
Disaster relief transitional emergency shelter: environmental and structural analysis of two prefab modular emergency shelters for three different Californian climate zones
PDF
Integration of mass dampers and external shading fins: exploring synergy in structural and environmental control systems
PDF
Structural glass facades: a unique building technology
PDF
Climatic alignment of architectural design strategies through an analysis of native plants in southern California
PDF
Real-time simulation-based feedback on carbon impacts for user-engaged temperature management
PDF
Kinetic facades as environmental control systems: using kinetic facades to increase energy efficiency and building performance in office buildings
PDF
Using architecture in the fight against global warming: presenting viable energy-saving renovation design strategies to homeowners via an interactive web learning tool
PDF
A proposal for building envelope retrofit on the Bonaventure Hotel: a case study examining energy and carbon
PDF
Visualizing architectural lighting: creating and reviewing workflows based on virtual reality platforms
PDF
A survey and experiments exploring light transmitting concrete
PDF
Energy simulation in existing buildings: calibrating the model for retrofit studies
Asset Metadata
Creator
Chen, Xing
(author)
Core Title
Computerization of Ralph Knowles Heliodon
School
School of Architecture
Degree
Master of Building Science
Degree Program
Building Science
Publication Date
07/31/2008
Defense Date
03/28/2008
Publisher
University of Southern California
(original),
University of Southern California. Libraries
(digital)
Tag
control circuit,heliodon,OAI-PMH Harvest,Ralph Knowles,stepper motor,user interface
Place Name
University of Southern California
(geographic subject)
Language
English
Advisor
Noble, Douglas (
committee chair
), Knowles, Ralph (
committee member
), Schiler, Marc (
committee member
)
Creator Email
xchen.la@gmail.com,xingc@usc.edu
Permanent Link (DOI)
https://doi.org/10.25549/usctheses-m1483
Unique identifier
UC1163495
Identifier
etd-Chen-2314 (filename),usctheses-m40 (legacy collection record id),usctheses-c127-99140 (legacy record id),usctheses-m1483 (legacy record id)
Legacy Identifier
etd-Chen-2314.pdf
Dmrecord
99140
Document Type
Thesis
Rights
Chen, Xing
Type
texts
Source
University of Southern California
(contributing entity),
University of Southern California Dissertations and Theses
(collection)
Repository Name
Libraries, University of Southern California
Repository Location
Los Angeles, California
Repository Email
cisadmin@lib.usc.edu
Tags
control circuit
heliodon
Ralph Knowles
stepper motor
user interface