Reloj de alcance: sensor analógico reloj y temperatura en un osciloscopio (3 / 3 paso)

Paso 3: código

Código

#include < PinChangeInt.h >
#include < PinChangeIntConfig.h >
int PIN = 10;       perno que interrupción se generará (pin conectado al interruptor que cuando presiona voluntad Mostrar temperatura en osciloscopio)

int thermistorpin = A0;    que pin analógico para conectar
int thermistornominal = 150;     resistencia a 25 grados C
int temperaturenominal = 25;   a la temperatura. resistencia nominal (casi siempre 25 C)
int numsamples = 100;   Cuántas muestras a tomar y media, más tarda más
pero es más 'suave'
int bcoefficient = 3950;    El coeficiente beta el termistor (generalmente 3000-4000)
int seriesresistor = 10000;     el valor de la resistencia de 'otro'
int k;
int t1, t2;   2 dígitos de la temperatura
muestras de int [100];   No. de muestras a ser tomadas por A0
int dacx [] = {}
9,8,7,6,5,4,3,2}; //pins donde está conectado el dac 1
int [] dacy = {}
19,18,17,16,15,13,12,11};  pines donde se conecta la 2 º CAD
int segundos = 90;      controles de segunda mano (90 es el ángulo en 12:00)
menta de int = 90;     controla la mano de min
int hora = 120;   manecilla de controles
flotador mincos = 0;  genera el valor para el valor de seno y cos para el punto final de la mano de min
flotador de minsin = 1;
Float hourcos =-0.866;   genera el valor para el valor de seno y cos para el punto final de la aguja de las horas
Float horas = 0,5;
ponits (valores de bit) para ondas seno y cos
unsigned char [] de 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 [] de 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
};
valor de seno y coseno del ángulo en que 12 movimientos de reloj de
Float [] strokeSin =
{
.0000,.5000,.8666,1.000,.8666,.5000,.0000,-.5000,-.8666,-1.000,-.8666,-.5000
};
Float [] strokeCos =
{
1.000,.8666,.5000,.0000,-.5000,-.8666,-1.000,-.8666,-.5000,.0000,.5000,.8666
};
changeTime largo sin firmar; / / guardar el programa en tiempo de ejecución
void setup()
{
pinMode (PIN, entrada);     configurar el pin 10 a la entrada
digitalWrite (PIN, alto); Use la resistencia de pullup interna
PCintPort::attachInterrupt (PIN, swapMode, caer);
para (int i = 0; i < = 7; i ++)
{
pinMode(dacx[i],OUTPUT);  declarar de dac como salida
pinMode(dacy[i],OUTPUT);
}
changeTime=millis();
displayclock();   dispay "Por reloj"

displayName();

}
void loop()
{
minLine(127,127);    función para mostrar la manecilla de los minutos
hourLine(127,127);   función para mostrar la manecilla de las horas
Circle();    función para hacer un círculo
Strokes();  función para agregar 12 líneas de movimiento que representan 12 horas en el reloj
secLine(127,127,sec);
if((Millis()-changeTime) > 114)
{
s--;
if(sec==0) s = 360;  0 o 360 es el ángulo en el número tres en el reloj de
updateMin() de if(SEC==90);  Cuando se completan 60 seg min mano es movida por 1 lugar
changeTime=millis();
}
}

función para calcular y mostrar la temp.
se llama cuando se genera la interrupción
void swapMode()
{

uint8_t.
Float promedio;
tomar N muestras en una fila, con un ligero retraso
para (i = 0; i < numsamples; i ++) {}
muestras [i] = analogRead(thermistorpin);
Delay(10);
}
promedio de todas las muestras
promedio = 0;
para (i = 0; i < numsamples; i ++) {}
muestras promedio += [i];
}
promedio / = numsamples;

convertir el valor a la resistencia
promedio = 1023 / media - 1;
promedio = seriesresistor / media;

steinhart de flotador;
Steinhart = media / thermistornominal;     (R/Ro)
Steinhart = log(steinhart);                  LN(R/RO)
Steinhart = bcoefficient;                   1/B * ln(R/Ro)
Steinhart += 1.0 / (temperaturenominal + 273.15); + (1/a)
Steinhart = 1.0 / steinhart;                 Invertir
Steinhart-= 273.15;                         convertir a C

Steinhart=Round(Steinhart);                  nos da un número entero
T1 = steinhart/10;                             genera número a decenas lugar
T2 = (int) steinhart % 10;                        genera número en los lugar
para (int m = 0; m < = 100; m ++)
{
Mostrar a la temperatura en cuanto a por ejemplo "35 * C"
Font(T1,50);
Font(T2,100);
Degree(145);
celcius(160);
}
segundos-= 19;
}
void updateMin()
{
menta = menta-6;
if(Mint==0) menta = 360;
mincos=cos(PI*Mint/180);
minsin=sin(PI*Mint/180);
updateHour de if(Mint==90);   Cuando se completan 60 min hora mano es movida por 1 lugar
}
void updateHour()
{
horas = horas-30;
if(hour==0) horas = 360;
hourcos=cos(PI*hour/180);
hoursIn=sin(PI*hour/180);
}
anular //plot punto (int x, int y) un punto en el plano xy del osciloscopio
{
para (int j = 0; j < = 7; j ++)
{
digitalWrite (dacx [j], ((x & 1 << j) > 0));
}
para (int j = 0; j < = 7; j ++)
{
digitalWrite (dacy [j], ((y & 1 << j) > 0));
}
}
void paralelamente (int a, int b, int c) //function para dibujar una línea paralela al eje y (un punto constante en el eje x y punto sobre el eje de y varía entre b y c)
{
para (k = b; k < c; k = k + 2)
{
Point(a,k);
}
}
void //function parallelx (int d, int e, int f) para trazar una línea paralela a x axis(d is point constant on y axis and point on x axis varies from e to f)
{
para (k = e; k < f; k = k + 2)
{
Point(k,d);
}
}
void angleline (int x1, int y1, int x2, int y2) //draw una línea entre 2 puntos en osciloscopio
{
para (int i = 0; i < = 200; i = i + 4)
{
int x = x 1 + i * (x 2-x 1) / 200;
int y = y1 + i * (y2-y1) / 200;
Point(x,y);
}
}
//function circle() vacío para dibujar un círculo
{
para (int i = 0; i < 256; i = i + 2) //send pecado y cos olas para dacs
{
Point(SiNx[i],cosx[i]);
}
}
void strokes()
{
para (int theta = 0; theta < 12; theta ++)
para (int r = 100; i < 125; r = r + 2)
{
Point(127+int(r*strokeCos[Theta]),127+int(r*strokeSin[Theta]));
}
}
void secLine (int x, int y, int theta) //function dibujar segundos mano de longitud 'r', en un ángulo theta, x e y son puntos de partida
{
para (int i = 0; i < 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 dibujar minutero de longitud 'r', en una theta de ángulo (dado por minsin y variables globales mincos), x e y son puntos de partida
{
para (int i = 0; i < 100; r = r + 2)
{
Point(x+int(r*mincos),y+int(r*minsin));
}
}
void hourLine (int x, int y) //function establecer hora mano de longitud 'r', en una theta de ángulo (dado por horas y hourcos de las variables globales), x e y son puntos de partida
{
para (int i = 0; i < 75; r = r + 2)
{
Point(x+int(r*hourcos),y+int(r*hoursIn));
}
}
void displayclock() //display palabras "Por el reloj"
{
para (int f = 0; f < = 50; f ++)
RELOJ
{
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);
POR
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 palabras "KSHITIJ y KAPIL"
{
para (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);   Me
parallely(185,95,155);   T
parallelx(155,165,205);
parallely(215,95,155);  Me
parallelx(155,225,252);  J
parallely(239,95,155);
angleline(239,95,225,110);
}
para (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);
}
para (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);  Me
parallely(200,95,155);  L
parallelx(95,200,245);
}
}
fuente vacío (int a, int x) //function para mostrar 2 números de la temperatura
{
Switch(a)
{
caso 0:
parallelx(40,x,x+40);
parallelx(110,x,x+40);
parallely(x,40,110);
parallely(x+40,40,110);
rotura;
caso 1:
parallely(x+20,40,110);
rotura;
caso 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);
rotura;
caso 3:
parallelx(110,x,x+40);
parallelx(75,x,x+40);
parallelx(40,x,x+40);
parallely(x+40,40,110);
rotura;
caso 4:
parallely(x,80,110);
parallely(x+40,40,110);
parallelx(80,x,x+40);
rotura;
caso 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);
rotura;
caso 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);
rotura;
caso 7:
parallely(x+40,40,110);
parallelx(110,x,x+40);
rotura;
caso 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);
rotura;
caso 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);
rotura;
}
}
Círculo de //display de vacío degree(int x) de grado
{
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);
}

Artículos Relacionados

ESP8266 ADC - múltiples sensores analógicos

ESP8266 ADC - múltiples sensores analógicos

Aunque el ESP8266 -07 y -12 tienen sólo una patilla de ADC, no significa que se limitan a solamente un sensor análogo por módulo. Usted puede utilizar muchos!Sin embargo, para utilizar varios sensores necesitará múltiplex de los sensores. Multiplexac
ESP8266 ADC - sensores analógicos

ESP8266 ADC - sensores analógicos

Los módulos de ESP8266 tienen la capacidad para realizar muchas tareas útiles. Pines GPIO pueden manipularse con base en señales digitales para hacer a todo tipo de cosas útiles.Ampliado el firmware como NodeMCU han hecho que estos módulos muy flexib
Sensores analógicos - calcular la no linealidad introducida por una carga o Pull-Down Resistor

Sensores analógicos - calcular la no linealidad introducida por una carga o Pull-Down Resistor

¿Ha tenido alguna vez esa sensación terrible que añadir una resistencia de carga o 'bajar' a su sensor está arruinando todas las lecturas analógicas?Tal vez te estás preguntando ¿por qué queremos echar a perder un circuito perfectamente bueno poniend
Robot de AAA (autónoma analógico Arduino)

Robot de AAA (autónoma analógico Arduino)

la AAA Robot es un robot perfecto para principiantes. Es versátil, fácil de construir y discute muchos de los temas entre deben aprender, incluyendo pero no limitado a interruptores de transistor, motor de sensores analógicos de nad. Este Instructabl
Arduino: Lectura de voltaje analógico

Arduino: Lectura de voltaje analógico

En esta lección usarás dos resistores - una resistencia estática y una resistencia variable - para crear un divisor de tensión que le permite comprender efectivamente la intensidad de luz detectada por el fotoresistor - esencialmente un medidor de lu
Indicador de fase lunar reloj analógico de Steampunk

Indicador de fase lunar reloj analógico de Steampunk

hice un reloj steampunk utilizando una caja de teléfono de madera antiguo, tres indicadores analógicos, switches, una ventana y un mecanismo de cuerda. El reloj muestra las horas, minutos y segundos en los relojes y cuando lo adquieres, muestra el me
Hacer una digital "Miau" de reloj analógico

Hacer una digital "Miau" de reloj analógico

¿Es el reloj analógico no haciendo suficiente? ¿Quieres hacer cosas digitales con un reloj analógico?Este tutorial le mostrará cómo hacer un reloj de Kit Cat jugar un clip de sonido de "Miau", a intervalos de tiempo exactos, usando la Atmega 328
Hablando de resplandor en el oscuro 3D analógico impreso reloj

Hablando de resplandor en el oscuro 3D analógico impreso reloj

El reloj mostrará la hora analógica de 4 metros. He visto este tipo de relojes en varias encarnaciones, pero nunca vi un reloj analógico en este formato que hablaba. Este reloj anuncia la hora a intervalos de media hora y juega un mensaje cada vez qu
Vúmetro analógico y el reloj (Arduino Powered)

Vúmetro analógico y el reloj (Arduino Powered)

este proyecto trae el viejo tiempo Analog VU Meter, con la funcionalidad añadida de un reloj de aspecto aseado! Cuando apagas tu música los metros swing automáticamente en modo de reloj. Detrás de todo está el Arduino popular y fácil de usar.Esta es
Reloj analógico

Reloj analógico

Este proyecto es un puré de mi reloj favorito dos Instructables, un reloj y reloj literario. Quería ver si podía hacer una versión analógica de un reloj (sin la electrónica de lujo) y me pareció apropiado que el reloj se casa en un libro. También tie
Reloj digital y analógico - Arduino + PaperCraft

Reloj digital y analógico - Arduino + PaperCraft

en este instructable nos va ser recreando un reloj inspirado en el diseño original de Alvin Aronson. Primera vez que vi este reloj que me ha impresionado por cómo limpia una elegante el diseño fue que inmediatamente quise recrear este efecto.Diseño o
Reutiliza un disco duro y conviértelo en reloj analógico.

Reutiliza un disco duro y conviértelo en reloj analógico.

En ocasiones tenemos discos duros de ordenadores portátiles dañados y no sabemos hacer con ellos, por lo general y como lo marca la obsolencia parte Terminans en la basura. Por lo tanto decidí crear ONU lejor analógico.Paso 1: Material necesario: -Va
Reloj binario analógico

Reloj binario analógico

he visto muchos de reloj binario de instructables, y un día yo estaba tratando de crear un reloj original basado en esta idea.Así, cuando mi hermano y yo fuimos averiguar nuestros algunas ecuaciones originales, él me dijo "¿por qué no hacerlo en bina
Binario / analógico reloj

Binario / analógico reloj

me inspiré por el reloj digital / analógico para hacer mi propio reloj especial como mi segundo instructable. Explorar la internet y me encontré que relojes servo son raras y binarios son comunes. Así que decidí combinar los dos y esto es lo que hice