Mi proyecto consiste en hacer mi propia electrónica de un patinete eléctrico que se controla con un sensor de efecto hall que está en el puño derecho y controla las luces y temperaturas.
Componentes del patinete :
- Un sensor de efecto hall esta puesto en el puño derecho.
- Una conmutada para los intermitentes .
- Un interruptor del faro
- Intermitentes izquido y derecho delanteros y traseros.
- El faro delantero y trasero.
- Motor de 10A Y 240 W.
- Bateria de 20Ah.
- 3 sensores de temperatura NTC.
- Lcd nokia 5110.
Componentes de placa :
- atmega 328.
- 4 Mosfet irf 1404.
- 4 Transistores 2N2222.
- Crysta de 16Mhz.
- 2 condensadores 22 pf.
- 2 condensadores de 100nf.
- 1 consador de 330nf y 1 de 200 uf.
- 8 resistencias de 10k y 3 de 1k.
- resistencias smd 4 de 30 y 1 de 330.
- 1 regukador de 7805.
- regulador conmutado lm2596.
- led smd.
Gant :
Diseño de placa :
ARES
Fabricacion de placa :
El proceso que hemos seguido para hacer la placa mediante el proceso photografico y vamos a hacer una placa de doble cara con smd .
Negativos de la placa
Las placas con serigrafia
Placa final
Funcionamiento :
- Control del Motor :
Mediante un sensor de efecto hall que esta en el puño derecho del patinete que esta conectado con una placa del pic que lee el sensor y manda el valor por el puerto serie al atmega328 para controlar la salida 3 que esta conectada con un transistor 2n2222 y el transistor que funciona en modo amplificacion y varia la potencia que pasa por los mosfet depende de la tension de las puertas del mosfet .
2.Iluminación :
Mediante una conmutada controlamos los intermitentes derecho y izquirdo y delanteros y traseros
y el faro se controla mediante un interruptor.
3.Temperatura :
Mediante tres sensores de temperatura ntc uno para temperatura externa , interna y del motor y la temperatura se sale un lcd de nokia 5110.
Programación :
- En el pic :
#include <programa de pic.h>
void main()
{
int valor;
setup_adc_ports(ALL_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
setup_counters(RTCC_INTERNAL,RTCC_DIV_1);
set_adc_channel(0);
output_low(LED);
delay_ms(DELAY);
output_high(LED);
delay_ms(DELAY);
while(true){
valor=read_adc();
putc(valor);
delay_ms(10);
}}
void main()
{
int valor;
setup_adc_ports(ALL_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
setup_counters(RTCC_INTERNAL,RTCC_DIV_1);
set_adc_channel(0);
output_low(LED);
delay_ms(DELAY);
output_high(LED);
delay_ms(DELAY);
while(true){
valor=read_adc();
putc(valor);
delay_ms(10);
}}
- En el arduino :
// CLK - Pin 8
// DIN - Pin 9
// DC - Pin 10
// RST - Pin 11
// CE - Pin 12
//
#include <stdio.h>
#include <math.h>
#include <LCD5110_Basic.h>
LCD5110 myGLCD(8,9,10,11,12);
extern unsigned char SmallFont[];
extern unsigned char MediumNumbers[];
//
int estado,estado1,estado2;
int ledState = LOW,ledState1=LOW;
long previousMillis = 0;
long interval = 200;
//
float Vin=5.0; // [V] Supply voltage in the Voltage-Divider
float Raux=10000; // [ohm] Secondary resistor in the Voltage-Divider
float R0=10000; // [ohm] NTC nominal value at 25ºC
float T0=298.15; // [K] (25ºC)
float Vout=0.0; // [V] Voltage given by the Voltage-Divider
float Rout=0.0; // [ohm] Current NTC resistance
float beta=4100; // [K] Beta parameter
float Rinf=0.0; // [ohm] Rinf parameter
float TempK=0.0; // [K] Temperature output in Kelvin
float TempC=0.0; // [ºC] Temperature output in Celsius
float TempK1=0.0; // [K] Temperature output in Kelvin
float TempC1=0.0; // [ºC] Temperature output in Celsius
float TempK2=0.0; // [K] Temperature output in Kelvin
float TempC2=0.0; // [ºC] Temperature output in Celsius
void setup()
{
myGLCD.InitLCD();
myGLCD.setFont(SmallFont);
pinMode(5,OUTPUT);
pinMode(13,OUTPUT);
pinMode(6,OUTPUT);
pinMode(3,OUTPUT);
pinMode(7, OUTPUT);
Rinf=R0*exp(-beta/T0);
Serial.begin(9600);
}
void loop()
{
//TEMPERATURA Y COMUNICACION
int valor=0,valor1=0;
if(Serial.available()>0){
valor=Serial.read();
Serial.println(valor);
valor1=255-valor;
if(valor1<=100)valor1=0;
analogWrite(3,valor1);
}
digitalWrite(13,HIGH);
Vout=Vin*((float)(analogRead(A0))/1024.0);
Rout=(Raux*Vout/(Vin-Vout));
TempK=(beta/log(Rout/Rinf));
TempC=TempK-273.15;
Vout=Vin*((float)(analogRead(A1))/1024.0);
Rout=(Raux*Vout/(Vin-Vout));
TempK1=(beta/log(Rout/Rinf));
TempC1=TempK-273.15;
Vout=Vin*((float)(analogRead(A2))/1024.0);
Rout=(Raux*Vout/(Vin-Vout));
TempK2=(beta/log(Rout/Rinf));
TempC2=TempK-273.15;
//INTERMITENTES Y FARO
estado=digitalRead(A3);//DERECHA
estado1=digitalRead(A5);//LUZ
estado2=digitalRead(A4);//IZQUIRDA
//LA LUZ
digitalWrite(5,estado1);
//IZQUIRDA
unsigned long currentMillis = millis();
if (currentMillis - previousMillis > interval){
previousMillis = currentMillis;
if (ledState1 == HIGH && estado2==LOW)
ledState1 = LOW;
else
ledState1 = HIGH;
digitalWrite(6, !ledState1);
//DERECHA
if (ledState == HIGH && estado==LOW)
ledState = LOW;
else
ledState = HIGH;
digitalWrite(7, !ledState);
}
// LCD NOKIA
myGLCD.clrScr();
myGLCD.setFont(MediumNumbers);
myGLCD.printNumI(TempC,LEFT, 0);
myGLCD.printNumI(TempC1,LEFT, 16);
myGLCD.printNumI(TempC2,LEFT, 32);
myGLCD.setFont(SmallFont);
myGLCD.print("INTER C",RIGHT, 4);
myGLCD.print("EXTER C",RIGHT, 20);
myGLCD.print("MOTOR C",RIGHT, 36);
delay(30);
}
pruebas :
placa del pic
lcd nokia 5110+comunicacion
pruebas sobre el motor del patinete
presupuesto :
Nombre de componente
|
cantidad
|
Precio de una unidad
|
precio
|
Mosfet Irf1404
|
4
|
0.5
|
2
|
Transistor 2N2222
|
4
|
0.2
|
0.8
|
Cristal 16Mhz
|
2
|
0.5
|
1
|
Condensador 22pf
|
4
|
0.1
|
0.4
|
condensadores 100nf
|
3
|
0.1
|
0.3
|
Condesador 330nf
|
1
|
0.2
|
0.2
|
Condensador de 200uf
|
2
|
0.2
|
0.4
|
Resistencias 10k
|
8
|
0.1
|
0.8
|
Resistencia 1k
|
3
|
0.1
|
0.3
|
Resistencisas smd 30
|
4
|
0.5
|
2
|
Resistencia smd 330
|
1
|
0.5
|
0.5
|
Regulador 7805
|
1
|
0.6
|
0.6
|
Regulador conmutadolm2596
|
1
|
1.50
|
1.5
|
Total sin IVA
|
10.8
|
Total con IVA
|
13.06
|
No hay comentarios:
Publicar un comentario