Upload
trinhxuyen
View
230
Download
8
Embed Size (px)
Citation preview
uporaba mikrokrmilnikov pri meritvah
poglavje
tehnološke meritve
• laboratorijski dnevnik • osebni računalnik • mikrokontroler
''It's hard to make predictions, especially about the future.''
Niels Bohr.
Meritev je z napredkom tehnologije vedno več, več je tudi podatkov in komunikacije med napravami.
... This appliance also contains a scanner that can read RFID chips which helps in providing information about cooking, times and temperatures and even recipe suggestions. The sleek design of the stainless steel and glass appliance will surely be liked by advanced and gadget friendly audience. ... http://www.tuvie.com/small-kitchen-no-worries-vesta-cooktop-concept-can-handle-it
automaton built in London circa 1800 by a Swiss mechanician, Henri Maillardet.
http://en.wikipedia.org/wiki/Maillardet%27s_automaton
l. 1801
http://en.wikipedia.org/wiki/Jacquard_loom
John von Neumann (1945)
podatki in program so ločeni operacije so podane z ukazi naprava ima ločeni I/O enoti [http://en.wikipedia.org/wiki/Charles_Babbage]
Harvard architecture realizacija ~1944
ENIAC
MARK 1
1971: prvi mikroprocesor Intel 4004 1976: prvi mikrokontroler Intel 8048 1978: Intel 8086, Motorola 68000, Z80,
na osnovi mikroprocesorja delujoč računalnik
[http://www.mikroe.com/chapters/view/64/chapter-1-introduction-to-microcontrollers/]
mikrokontrolerje z EPROM pomnilnikom se programira električno, spomin pa se pobriše optično z UV svetlobo (Erasable Program Memory) ali pa imajo le PROM (Programmable Read-Only Memory) (se ne da izbrisati)
The Tactilus Free Form® sensor system is designed to allow the user to collect pressure, magnitude and distribution data from selected locations across the human body. The Free Form® philosophy is to empower the user to select the precise location where they require data collection rather than the constrained “matrix” inherent in traditional fixed tactile surface sensors. The Data is then assimilated through a powerful yet userfriendly Windwos® based tool kit.
n = 12; a = 1; b = 1.1; rob = 0.03
for i = 1:n
if mod(i,2)==0
x(i) = a;
else
x(i) = b;
end
end
p = zeros(n,1); p(1) = x(1);
disp([x(1),p(1)])
figure(1); clf
plot(1,x(i),'r*'); hold on
plot(1,p(1),'go'); grid on
axis([0 n a-rob b+rob])
for i = 2:length(x)
p(i) = p(i-1) + 1/(i-1)*(x(i)-p(i-1));
disp([x(i),p(i)])
end
plot(1:n,x,'r*');
plot(1:n,p,'g.-') 0 2 4 6 8 10 12
0.98
1
1.02
1.04
1.06
1.08
1.1
1.12
0 20 40 60 80 100 120
0.98
1
1.02
1.04
1.06
1.08
1.1
1.12
/* program: latlogR2.ino info: [email protected] datum: 6.maj.2013 */ #include "Wire.h" #include "SD.h" #define DS1307_I2C_ADDRESS 0x68 String ver = "latlogR2.ino"; // ime programa - verzija // naslednjo vrstico spreminjaj le če si zamenjal baterijo String menjava_baterije = "modulE,2013,4,26"; // leto(0:99) mesec(1:12) dan(1:31) const int chipSelect = 8; // obvezno za SD kartico const int delta = 333; //delta je čas ko hitra zanka povpreči A0 const String d = " , "; // delimiter za tekstovni filet byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; byte secondA, minuteA, hourA, dayOfWeekA, dayOfMonthA, monthA, yearA; byte secondB, minuteB, hourB, dayOfWeekB, dayOfMonthB, monthB, yearB; String vrst; File filet; int j=0, k=0, r; float rms,nrms; float Mn, Mk, Qk; float mrms, Mrms, avg_rms ; boolean A = false; byte af = 0; // af ... activity flag long sek; unsigned long T0; byte ii; float zg_mejni_rms, sp_mejni_rms; void setup(){ byte ii = 0; Wire.begin(); Serial.begin(9600); Serial.println(">"); getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); vrst = "*** Start "+ver+": " +String(year)+"-"+String(month)+"-"+String(dayOfMonth)+" , "+String(hour)+":"+String(minute)+":"+String(second)," *** "; Serial.println(vrst); avg_rms = analogRead(A0); Serial.print("Inicializacija SD kartice ..."); pinMode(10, OUTPUT); // pin 10 mora biti vedno nastavljen kot izhod, tudi če ga ne uporabljamo if (!SD.begin(chipSelect)) { // preveri, če je kartica na voljo in se jo da inicializirati Serial.println("... kartica ni na voljo!"); return; } Serial.println("... kartica inicializirana."); if (!SD.exists("modulE.txt")){ // Ime datoteke s podatki. Črka X mora biti identična oznaki modula. X = A, B, C ... vrst = menjava_baterije; vpis(vrst); } }
void loop () { T0 = millis(); // sprožimo štoparico k = 0; // reset števca zajemov k... Qk = 0; while ((millis() - T0) < delta) { //dokler je pretečeni čas <delta ponavljaj // * r = analogRead(A0); // beri A0 k++; Mn = Mk + (r-Mk)/k; // sumacija vrednosti Qk = Qk + (k-1)*(r-Mk)*(r-Mk)/k; // sumacija kvadratov zajetih vrednosti Mk = Mn; } nrms = sqrt( Qk / (k-1)); // novi_rmsI // to ni povprečni ampak malo poglajeni trenutno povprečni tok avg_rms = (avg_rms + nrms) / 2; zg_mejni_rms = 1.2 * avg_rms; sp_mejni_rms = 0.8 * avg_rms; if (nrms > zg_mejni_rms | A == true){// če zadnji izmerek kaže na aktivnost, prej pa je ni bilo if (A == false) { A = true; // A je true toliko časa dokler traja aktivnost af = 1; // af je 1 le da zapišemo prvo vrstico aktivnosti } // če prej ni bilo aktivnosti, dvigni zastavico za aktivnost */ zapis(round(Mk), round(nrms)); } if (nrms < sp_mejni_rms | A == false){ // recimo, da je do tega trenutka bila aktivnost if (A == true) { A = false; } } }
#include "Wire.h" #define DS1307_I2C_ADDRESS 0x68 byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; int i; String vrst; byte decToBcd(byte val) { return ( (val/10*16) + (val%10) ); } // Convert binary coded decimal to normal decimal numbers byte bcdToDec(byte val) { return ( (val/16*10) + (val%16) ); } void setDateDs1307(byte second, byte minute, byte hour, byte dayOfWeek, byte dayOfMonth, byte month, byte year) { Wire.beginTransmission(DS1307_I2C_ADDRESS); Wire.write(0); Wire.write(decToBcd(second)); // 0 to bit 7 starts the clock Wire.write(decToBcd(minute)); Wire.write(decToBcd(hour)); // If you want 12 hour am/pm you need to set // bit 6 (also need to change readDateDs1307) Wire.write(decToBcd(dayOfWeek)); Wire.write(decToBcd(dayOfMonth)); Wire.write(decToBcd(month)); Wire.write(decToBcd(year)); Wire.endTransmission();} // Gets the date and time from the ds1307 void getDateDs1307(byte *second, byte *minute, byte *hour, byte *dayOfWeek, byte *dayOfMonth, byte *month, byte *year) {Wire.beginTransmission(DS1307_I2C_ADDRESS); //Reset the register pointer Wire.write(0); Wire.endTransmission(); Wire.requestFrom(DS1307_I2C_ADDRESS, 7); // A few of these need masks because certain bits are control bits *second = bcdToDec(Wire.read() & 0x7f); *minute = bcdToDec(Wire.read()); *hour = bcdToDec(Wire.read() & 0x3f); // Need to change this if 12 hour am/pm *dayOfWeek = bcdToDec(Wire.read()); *dayOfMonth = bcdToDec(Wire.read()); *month = bcdToDec(Wire.read()); *year = bcdToDec(Wire.read());}
void setup(){ Serial.println("*** START ***"); Wire.begin(); Serial.begin(9600); // nastavitev časa // nastavimo enkrat, nato zakomentiramo klic (setDateDs1307) second = 0; minute = 29; hour = 11; dayOfWeek = 5; dayOfMonth = 26; month = 4; year = 13; setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year); } void loop () { for (i=0; i<12; i++){ getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); vrst = " " + String(year) + " , " + String(month) + " , " + String(dayOfMonth) + " , "; vrst += String(hour) + " , " + String(minute) + " , " + String(second) + " ; "; Serial.println(vrst); } while(1){ } }
http://www.sensorprod.com/ http://www.circuitstoday.com/basics-of-microcontrollers