Toepassingsgebied klok: analoge klok en temperatuur sensor op een oscilloscoop (3 / 3 stap)

Stap 3: Code

Code

#include < PinChangeInt.h >
#include < PinChangeIntConfig.h >
int PIN = 10;       PIN op welke interrupt is moeten worden gegenereerd (pin verbonden om te schakelen die gedrukt zal Toon temp op oscilloscoop)

int thermistorpin = A0;    welke analoge pin aansluiten
int thermistornominal = 150;     weerstand bij 25 graden C
int temperaturenominal = 25;   Temp. voor nominale weerstand (bijna altijd 25 C)
int numsamples = 100;   hoeveel monsters te nemen en de gemiddelde, meer duurt langer
maar is meer 'glad'
int bcoefficient = 3950;    De coëfficiënt van de bèta van de thermistor (meestal 3000-4000)
int seriesresistor = 10000;     de waarde van de 'andere' weerstand
int k;
int t1, t2;   2 cijfers van temp
int monsters [100];   niet. monsters worden genomen door A0
int dacx [] {} =
9,8,7,6,5,4,3,2}; //pins waar 1ste dac is aangesloten
int dacy [] {} =
19,18,17,16,15,13,12,11};  pins waar 2e dac is aangesloten
int sec = 90;      tweedehands besturingselementen (90 is hoek om 12 uur)
int munt = 90;     besturingselementen min hand
int uur = 120;   besturingselementen uurwijzer
zweven mincos = 0;  de waarde voor sinus en cos waarde voor het eindpunt van min hand genereert
zweven minsin = 1;
float-hourcos =-0.866;   de waarde voor sinus en cos waarde voor het eindpunt van de uurwijzer genereert
zweven hoursin = 0,5;
ponits (bits waarden) voor sinus en cos golven
unsigned char sinx [] =
{
127,130,133,136,139,142,145,148,151,154,157,160,164,166,169,172,175,178,181,184,187,189,192,195, 197,200,202,205,207,210,212,214,217,219,221,223,225,227,229,231,232,234,236,237,239,240,242,
243,244,245,246,247,248,249, 250,251,251,252,252,253,253,253,253,253,254,253,253,253,253,252,252,251, 251,250,249,249,248,247,246,245,243,242,241,239,238,236,235,233,231,230, 228,226,224,222,
220,218, 215,213,211,209,206,204,201,199,196,193,191,188,185,182,180,177,174,171,168,165,162,159,156,153, 150,147,144,141,137,134,131,128,125,122,119,116,112,109,106,103,100,97,94,91,88,85,82,
79,76, 73,71,68,65,62,60,57,54,52,49,47,44,42,40,38,35,33,31,29,27,25,23,22,20,18,17,15,14, 12,11,10,8,7,6,5,4,4,3,2,2,1,1,0,0,0,0,0,0,0,0,0,0,1,1,2,2,3,4,5,6,7,8,9,10,11,13,14,16,17,19,21,22,
24, 26,28,30,32,34,36,39,41,43,46,48,51,53,56,58,61,64,66,69,72,75,78,81,84,87,89,93,96, 99,102,105,108,111,114,117,120,123,127
};
unsigned char cosx [] =
{
254,253,253,253,253,252,252,251, 251,250,249,249,248,247,246,245,243,242,241,239,238,236,235,233,231,230, 228,226,224,222,220,218, 215,213,211,209,206,204,201,199,196,193,191,188,185,182,180,
177,174,171,168,165,162,159,156,153, 150,147,144,141,137,134,131,128,125,122,119,116,112,109,106,103,100,97,94,91,88,85,82,79,76, 73,71,68,65,62,60,57,54,52,49,47,44,42,40,38,35,33,31,29,27,
25,23,22,20,18,17,15,14, 12,11,10,8,7,6,5,4,4,3,2,2,1,1,0,0,0,0,0,0,0,0,0,0,1,1,2,2,3,4,5,6,7,8,9,10,11,13,14,16,17,19,21,22,24, 26,28,30,32,34,36,39,41,43,46,48,51,53,56,58,61,64,66,69,72,75,
78,81,84,87,89,93,96, 99,102,105,108,111,114,117,120,123,127,130,133,136,139,142,145,148,151,154,157,160,164,166,169,172,175,178,181,184,187,189,192,195, 197,200,202,205,207,210,212,214,217,
219,221,223,225,227,229,231,232,234,236,237,239,240,242,243, 244,245,246,247,248,249, 250,251,251,252,252,253,253,253,253,253,254
};
sinus en cosinus waarde van hoek op welke 12 lijnen van klok
zweven [strokeSin] =
{
.0000,.5000,.8666,1.000,.8666,.5000,.0000,-.5000,-.8666,-1.000,-.8666,-.5000
};
zweven [strokeCos] =
{
1.000,.8666,.5000,.0000,-.5000,-.8666,-1.000,-.8666,-.5000,.0000,.5000,.8666
};
unsigned long changeTime; / / programma speelduur winkel
VOID Setup
{
pinMode (PIN, INPUT);     de 10e pincode invoeren instellen
digitalWrite (PIN, hoge); Gebruik de interne pullup weerstand
PCintPort::attachInterrupt (PIN, swapMode, vallen);
for (int i = 0; ik < = 7; i ++)
{
pinMode(dacx[i],OUTPUT);  dac's declareren als uitvoer
pinMode(dacy[i],OUTPUT);
}
changeTime=millis();
displayclock();   dispay "Klok door"

displayName();

}
void loop
{
minLine(127,127);    functie voor het weergeven van de minutenwijzer
hourLine(127,127);   functie voor het weergeven van de kleine wijzer
Circle();    functie om een cirkel te maken
Strokes();  functie voor het toevoegen van 12 lijn lijnen vertegenwoordigen van 12 uur in klok
secLine(127,127,sec);
if((Millis()-changeTime) > 114)
{
SEC--;
if(SEC==0) sec = 360;  0 of 360 is hoek op nummer drie op de klok
if(sec==90) updateMin();  Wanneer 60 sec zijn voltooid wordt min hand door 1 plaats verplaatst
changeTime=millis();
}
}

functie voor het berekenen en weergeven van de temp.
wordt aangeroepen wanneer interrupt wordt gegenereerd
VOID swapMode()
{

uint8_t i;
float gemiddelde;
N monsters te nemen in een rij, met een kleine vertraging
voor (ik = 0; ik < numsamples; i ++) {}
monsters [i] = analogRead(thermistorpin);
delay(10);
}
het gemiddelde van alle monsters uit
gemiddelde = 0;
voor (ik = 0; ik < numsamples; i ++) {}
gemiddelde += monsters [i];
}
gemiddelde / = numsamples;

de waarde omzetten in weerstand
gemiddelde = 1023 / gemiddelde - 1;
gemiddelde = seriesresistor / gemiddelde;

float steinhart;
Steinhart = gemiddelde / thermistornominal;     (R/Ro)
Steinhart = log(steinhart);                  LN(R/ro)
Steinhart / = bcoefficient;                   1/B * ln(R/Ro)
Steinhart += 1.0 / (temperaturenominal + 273.15); + (1/to)
Steinhart = 1.0 / steinhart;                 Omkeren
Steinhart-= 273.15;                         converteren naar C

Steinhart=Round(Steinhart);                  geeft ons een geheel getal
T1 = steinhart/10;                             getal genereert op tientallen plaatsen
T2 = (int) steinhart % 10;                        getal genereert op zijn plaats
voor (int m = 0; m < = 100; m ++)
{
de temperaturen wat betreft bijvoorbeeld "35 * C" weergeven
Font(T1,50);
Font(T2,100);
Degree(145);
Celcius(160);
}
SEC-= 19;
}
VOID updateMin()
{
munt = munt-6;
if(Mint==0) munt = 360;
mincos=cos(PI*Mint/180);
minsin=Sin(PI*Mint/180);
if(Mint==90) updateHour;   Wanneer 60 min zijn voltooid wordt uurwijzer verplaatst door 1 plaats
}
VOID updateHour()
{
uur = uur-30;
if(hour==0) uur = 360;
hourcos=cos(PI*Hour/180);
hoursin=Sin(PI*Hour/180);
}
void (int x, int y) punt //plot een punt op het xy-vlak van oscilloscoop
{
for (int j = 0; j < = 7; j ++)
{
digitalWrite (dacx [j], ((x & 1 << j) > 0));
}
for (int j = 0; j < = 7; j ++)
{
digitalWrite (dacy [j], ((y & 1 << j) > 0));
}
}
VOID parallel (int, int b, int c) //function te trekken een lijn evenwijdig aan de y-as (een punt constante op x-as en het punt op de y-as varieert van b aan c)
{
voor (k = b; k < c; k = k + 2)
{
Point(a,k);
}
}
VOID parallelx (int d, int e, int f) //function om te tekenen van een lijn evenwijdig aan x axis(d is point constant on y axis and point on x axis varies from e to f)
{
voor (k = e; k < f, k = k + 2)
{
Point(k,d);
}
}
VOID angleline (int x1, int y1, int x2, int y2) //draw een lijn tussen 2 punten op oscilloscoop
{
for (int i = 0; ik < = 200; ik = i + 4)
{
int x = x 1 + i * (x 2-x 1) / 200;
int y = y1 + i (y2-y1) / 200;
Point(x,y);
}
}
ongeldig circle() //function om een cirkel te tekenen
{
voor (int i = 0; ik < 256; i = i + 2) //send sin en cos golven te DAC's
{
Point(sinx[i],cosx[i]);
}
}
VOID strokes()
{
voor (int theta = 0; theta < 12, theta ++)
voor (int r = 100; r < 125; r = r + 2)
{
Point(127+int(r*strokeCos[theta]),127+int(r*strokeSin[theta]));
}
}
VOID secLine (int x, int y, int theta) //function te trekken seconden hand van lengte 'r', in een hoek theta, x en y zijn uitgangspunten
{
voor (int r = 0; r < 127; r = r + 2)
{
Point(x+int(r*cos(PI*theta/180)),y+int(r*Sin(PI*theta/180)));
}
}
VOID minLine (int x, int y) //function tot het opstellen van de minutenwijzer van lengte 'r', op een hoek theta (gegeven door globale variabelen mincos en minsin), x en y zijn uitgangspunten
{
voor (int r = 0; r < 100; r = r + 2)
{
Point(x+int(r*mincos),y+int(r*minsin));
}
}
VOID hourLine (int x, int y) //function tot het opstellen van de uurwijzer van lengte 'r', op een hoek theta (gegeven door globale variabelen hourcos en hoursin), x en y zijn uitgangspunten
{
voor (int r = 0; r < 75; r = r + 2)
{
Point(x+int(r*hourcos),y+int(r*hoursin));
}
}
VOID displayclock() //display woorden "Klok door"
{
voor (int f = 0; f < = 50; f ++)
KLOK
{
parallely(10,135,195);  C
parallelx(135,10,50);
parallelx(195,10,50);
parallely(60,135,195);  L
parallelx(135,60,100);
parallely(110,135,195);  O
parallely(150,135,195);
parallelx(135,110,150);
parallelx(195,110,150);
parallely(160,135,195);  C
parallelx(135,160,200);
parallelx(195,160,200);
parallely(210,135,195);  K
angleline(210,165,245,195);
angleline(210,165,245,135);
DOOR
parallely(80,55,115);  B
angleline(80,115,120,100);
angleline(80,85,120,100);
angleline(80,85,120,70);
angleline(80,55,120,70);
angleline (130,115,155,95); //Y
angleline(145,55,170,115);
}
}
VOID displayName() //display woorden "KSHITIJ en KAPIL"
{
voor (int g = 0; g < = 40; g ++)
{
KSHITIJ
parallely(5,95,155);  K
angleline(5,125,40,155);
angleline(5,125,40,95);
angleline(50,95,95,125);  S
parallelx(125,55,95);
angleline(55,125,90,155);
parallely(105,95,155);   H
parallely(145,95,155);
parallelx(125,105,145);
parallely(155,95,155);   Ik
parallely(185,95,155);   T
parallelx(155,165,205);
parallely(215,95,155);  Ik
parallelx(155,225,252);  J
parallely(239,95,155);
angleline(239,95,225,110);
}
voor (int f = 0; f < = 20; f ++)
{
angleline(65,95,87,155);  A
angleline(110,95,87,155);
parallelx(120,75,100);
parallely(120,95,155);  N
angleline(120,155,165,95);
parallely(165,95,155);
parallely(175,95,155);  D
angleline(175,155,215,125);
angleline(175,95,215,125);
}
voor (int f = 0; f < = 40; f ++)
{
KAPIL
parallely(10,95,155);  K
angleline(10,125,55,155);
angleline(10,125,55,95);
angleline(65,95,87,155);  A
angleline(110,95,87,155);
parallelx(120,75,100);
parallely(120,95,155);  P
angleline(120,155,160,135);
angleline(120,115,160,135);
parallely(180,95,155);  Ik
parallely(200,95,155);  L
parallelx(95,200,245);
}
}
VOID font (int a, int x) //function naar de 2 cijfers van temp weergeven
{
switch(a)
{
Case 0:
parallelx(40,x,x+40);
parallelx(110,x,x+40);
parallely(x,40,110);
parallely(x+40,40,110);
breken;
Case 1:
parallely(x+20,40,110);
breken;
Case 2:
parallelx(110,x,x+40);
parallelx(75,x,x+40);
parallelx(40,x,x+40);
parallely(x+40,75,110);
parallely(x,40,75);
breken;
Case 3:
parallelx(110,x,x+40);
parallelx(75,x,x+40);
parallelx(40,x,x+40);
parallely(x+40,40,110);
breken;
Case 4:
parallely(x,80,110);
parallely(x+40,40,110);
parallelx(80,x,x+40);
breken;
Case 5:
parallelx(110,x,x+40);
parallelx(75,x,x+40);
parallelx(40,x,x+40);
parallely(x,75,110);
parallely(x+40,40,75);
breken;
Case 6:
parallelx(110,x,x+40);
parallelx(75,x,x+40);
parallelx(40,x,x+40);
parallely(x,40,110);
parallely(x+40,40,75);
breken;
Case 7:
parallely(x+40,40,110);
parallelx(110,x,x+40);
breken;
zaak 8:
parallelx(110,x,x+40);
parallelx(75,x,x+40);
parallelx(40,x,x+40);
parallely(x,40,110);
parallely(x+40,40,110);
breken;
Case 9:
parallelx(110,x,x+40);
parallelx(75,x,x+40);
parallelx(40,x,x+40);
parallely(x,75,110);
parallely(x+40,40,110);
breken;
}
}
ongeldig degree(int x) //display cirkel van graad
{
parallelx(110,x,x+10);
parallelx(100,x,x+10);
parallely(x,100,110);
parallely(x+10,100,110);
}
VOID celcius(int x) //display "C"
{
parallelx(110,x,x+40);
parallelx(40,x,x+40);
parallely(x,40,110);
}

Gerelateerde Artikelen

Hoe te meten van de temperatuur zeer nauwkeurig met een Arduino en een TSYS01 Temperatuur Sensor Board.

Hoe te meten van de temperatuur zeer nauwkeurig met een Arduino en een TSYS01 Temperatuur Sensor Board.

Tijdens zijn studie in de Universiteit werden we uitgedaagd als onderdeel van een cursus werken in het ontwerpen van een doos met zeer nauwkeurige temperatuurregeling. Mocht het project te doen slagen, moesten meerdere vakken worden gebouwd en gebrui
Raspberry Pi - SI7021-Humidiy & Temperatuur Sensor Python Tutorial

Raspberry Pi - SI7021-Humidiy & Temperatuur Sensor Python Tutorial

SI7021 is een vochtigheid en temperatuursensor die kan worden toegepast op I2C communicatieprotocol. Het heeft een monolithische CMOS IC integratie van vochtigheid en temperatuur sensor elementen, een analoog-digitaalomzetter enz. Opgenomen met zeer
Raspberry Pi - SI7021-Humidiy & Temperatuur Sensor het leerprogramma van Java

Raspberry Pi - SI7021-Humidiy & Temperatuur Sensor het leerprogramma van Java

SI7021 is een vochtigheid en temperatuursensor die kan worden toegepast op I2C communicatieprotocol. Het heeft een monolithische CMOS IC integratie van vochtigheid en temperatuur sensor elementen, een analoog-digitaalomzetter enz. Opgenomen met zeer
Raspberry Pi - SI7006-A20 vochtigheid & Temperatuur Sensor Python Tutorial

Raspberry Pi - SI7006-A20 vochtigheid & Temperatuur Sensor Python Tutorial

SI7006-A20 is een vochtigheid en temperatuursensor die kan worden toegepast op I2C communicatieprotocol. Het heeft een monolithische CMOS IC integratie van vochtigheid en temperatuur sensor elementen, een analoog-digitaalomzetter enz. Opgenomen met z
Raspberry Pi - SI7006-A20 vochtigheid & Temperatuur Sensor het leerprogramma van Java

Raspberry Pi - SI7006-A20 vochtigheid & Temperatuur Sensor het leerprogramma van Java

SI7006-A20 is een vochtigheid en temperatuursensor die kan worden toegepast op I2C communicatieprotocol. Het heeft een monolithische CMOS IC integratie van vochtigheid en temperatuur sensor elementen, een analoog-digitaalomzetter enz. Opgenomen met z
Arduino Nano - SI7006-A20 vochtigheid & Temperatuur Sensor Tutorial

Arduino Nano - SI7006-A20 vochtigheid & Temperatuur Sensor Tutorial

SI7006-A20 is een vochtigheid en temperatuursensor die kan worden toegepast op I2C communicatieprotocol. Het heeft een monolithische CMOS IC integratie van vochtigheid en temperatuur sensor elementen, een analoog-digitaalomzetter enz. Opgenomen met z
Volledige digitale klok met aanwezigheid Sensor (RTC - Alarm - PIR - temperatuur - vochtigheid - dauwpunt)

Volledige digitale klok met aanwezigheid Sensor (RTC - Alarm - PIR - temperatuur - vochtigheid - dauwpunt)

HoiIk heb al enkele digitale klokken projecten gedaan met Arduino met inbegrip van LED en LCD schermen, maar deze is specialer omdat ik hebben een nieuwe functie ingevoerd met een bewegingssensor (PIR).Zie VIDEOBelangrijkste kenmerkenPIR (aanwezighei
ATTiny84 + LCD + LM35 temperatuur sensor

ATTiny84 + LCD + LM35 temperatuur sensor

Dit is een eenvoudige temperatuursensor gebouwd met een ATtiny84, LM35 en een LCD 16 x 1 karakter. Het is gemaakt op 3 AA batterijen of 4,5 volt uit te voeren. Ik heb het als een project om te leren hoe naar de haven van Arduino projecten in kleinere
LCD klok met Hebreeuwse kalenderdatum en een Thermometer

LCD klok met Hebreeuwse kalenderdatum en een Thermometer

Dit project is een klok die de tijd, datum en temperatuur kunt weergeven. De belangrijkste uniek kenmerk van deze klok is de mogelijkheid om de datum in Hebreeuws (joodse) agenda-indeling weergeven. Sommige andere speciale functies zijn:U kunt instel
Temperatuur Sensor Tutorial!

Temperatuur Sensor Tutorial!

Wat is een temperatuursensor?Een analoge temperatuursensor is vrij eenvoudig uit te leggen, het is een chip die u vertelt wat de omgevingstemperatuur is!Deze sensoren gebruiken een solid-state techniek om te bepalen van de temperatuur. Dat wil zeggen
Arduino AMS5812_0050-D-B Druk & temperatuur Sensor Tutorial

Arduino AMS5812_0050-D-B Druk & temperatuur Sensor Tutorial

AMS5812 is versterkt druk met analoge en digitale uitgangen een hoge precisie sensor met een spanning van de analoge uitvoer en digitale I2C-interface. Het combineert een piºzoresistieve sensing element met een signaal conditioning element voor de we
Thermistor Temperatuur Sensor Alarm Circuit

Thermistor Temperatuur Sensor Alarm Circuit

dit is een circuit dat een alarm roept wanneer de temperatuur bepaald niveau kruist. Temperatuurbewaking is een regelmatig gebruikte toepassing in de industrie en in vele andere plaatsen waar de temperatuur onder een maximale toegestane niveau moet w
Raspberry Pi - TMP100 Temperatuur Sensor het leerprogramma van Java

Raspberry Pi - TMP100 Temperatuur Sensor het leerprogramma van Java

TMP100 hoog-nauwkeurigheid, Low-Power, digitale temperatuur Sensor I2C MINI module. De TMP100 is ideaal voor uitgebreide temperatuurmeting. Dit apparaat biedt een nauwkeurigheid van ± 1 ° C zonder kalibratie of externe component signaal conditioning.
Raspberry Pi SHT25 vochtigheid & Temperatuur Sensor Python Tutorial

Raspberry Pi SHT25 vochtigheid & Temperatuur Sensor Python Tutorial

SHT25 I2C vochtigheid en temperatuursensor ±1.8%RH ±0.2 ° C I2C Mini Module. De SHT25 hoog-nauwkeurigheid vochtigheid en temperatuur sensor is uitgegroeid tot een industriestandaard in termen van vormfactor en intelligentie, die gekalibreerd, gelinea