Hur man gör en hjulet hastighet detektor med hjälp av en ljussensor. (5 / 5 steg)
Steg 5: Mig-Nixie Tube display.
* Namn: Hastighet detektor.
* Författare: Sylvia
* Uppdaterad: Sylvia
* Datum: 3/13/2014
* Beskrivning: Jag använder en Makeblock Me-LightSensor för att göra en hjulet hastighet detektor.
Du kan ansluta denna mig-LightSensor till PORT_3, PORT_6, PORT_7, PORT_8 av mig-bottenplatta.
* Copyright (C) 2013 Maker fungerar Technology Co, Ltd Alla rättigheter reserverade.
* http://www.makeblock.cc/
**************************************************************************/
#include < Makeblock.h >
#include < Arduino.h >
#include < SoftwareSerial.h >
#include < EEPROM.h >
#include < Wire.h >
#include < TimerOne.h >
#include < avr/pgmspace.h >
#include "TM1637.h"
#define på 1
#define av 0
int8_t TimeDisp [] = {0x00, 0x00, 0x00, 0x00};
unsigned char ClockPoint = 1;
unsigned char uppdatering;
unsigned char microsecond_10 = 0;
unsigned char andra;
unsigned char _microsecond_10 = 0;
unsigned char _second;
unsigned int eepromaddr;
booleska Flag_ReadTime;
#define CLK A3 / / stift definitioner för TM1637 och kan ändras till andra portar
#define DIO A2 //Digital tude är ansluten till port 7.
TM1637 tm1637(CLK,DIO);
MeLightSensor lightSensor(PORT_6);
MeDCMotor motor1(M1);
uint8_t motorSpeed = 100;
int värde = 0; en variabel för den lightSensor värde
int count = 0;
int buff [3].
int summa = 0;
int omega.
statisk int matrix [3] = {-1,4, -1};
void setup()
{
initiera seriell kommunikation på 9600 bps
Serial.BEGIN(9600);
tm1637.set (5), //BRIGHT_TYPICAL = 2, BRIGHT_DARKEST = 0, smartaste = 7.
tm1637.init();
Timer1.Initialize (10000); //timing för 10ms
Timer1.attachInterrupt (TimingISR); //declare avbrott serve rutin: TimingISR
lightSensor.lightOn();
}
lång time0 = 0;
void loop()
{
värde = lightSensor.read();
motor1.Run(motorSpeed);
Läs lightSensor värdet:
buff [0] = buff [1].
buff [1] = buff [2].
buff [2] = värde;
summa = matrix [0] * buff [0] + matrix [1] * buff [1] + matrix [2] * buff [2];
Serial.println(Sum); avkommentera raden och kommentera de nästa 15 raderna om du vill se informationen i följetong diagram
IF(Sum >750)
{
greve ++;
lång t=millis();
långa deltaT = t-time0;
IF(deltaT>100)
{
Omega = 360000/deltaT;
Du kan använda Printf fuction om du lägger till "printf" biblioteket Print klass.
mer detaljer på http://playground.arduino.cc/Main/Printf#.UyE3NxSSz9F
IF(Update == on)
{
TimeUpdate(omega);
tm1637.display(TimeDisp);
}
Serial.Print(Omega);
Serial.println("rad/s");
}
time0 = t;
}
Delay(2);
}
//************************************************
void TimingISR()
{
microsecond_10 ++;
Uppdatering = ON;
IF(microsecond_10 == 100) {
andra ++;
IF(Second == 60)
{
för det andra = 0;
}
microsecond_10 = 0;
}
ClockPoint = (~ ClockPoint) & 0x01;
IF(Flag_ReadTime == 0)
{
_microsecond_10 = microsecond_10;
_second = andra.
}
}
void TimeUpdate(int value)
{
om (ClockPoint) tm1637.point (POINT_ON), //POINT_ON = 1, POINT_OFF = 0;
annat tm1637.point(POINT_ON);
TimeDisp [0] = värde/1000;
TimeDisp [1] = värde/100.
TimeDisp [2] = värde/10 - TimeDisp [1] * 10;
TimeDisp [3] = värde % 10.
Uppdatering = OFF;
}
Det är allt. Börja bygga en egen en. Har du någon uppfattning om det, kan du bara skicka det här eller besök vårt forum att diskutera med oss.