В практикуме программирования Arduino/CraftDuino уже рассматривали работу с фоторезистором.
А вот что можно сделать если использовать сразу 4 фоторезистора, светодиод и простой отражатель из белого картона:

Теперь, если поднести к датчику руку, то от неё будет отражаться свет светодиода и фиксироваться фоторезисторами. Фоторезисторы подключаются к аналоговым входам Arduino/CraftDuino и их показания можно использовать для управления курсором, вместо обычной компьютерной мышки.
код скетча для Arduino/CraftDuino:
int ledPin = 0;                  // Led Output pin
int inPins[] = {0,1,2,3};        // Analog Input pins for the 4 photoresistors
int bufferPast[] = {0,0,0,0};    // Motion detector buffer. Not used.
int bufferPresent[] = {0,0,0,0}; // Motion detector buffer. Not used.
int calibated[] = {0,0};         // Store the X and Y bias. => Ambiant light noise. used to remove the light noise in the reading.
int is_calibrated = 0;           // 0 = Not calibrated yet. 1 = calibrated. Set to 1 by the calibrate() function.
void setup()   {
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}
void loop() {
  if (is_calibrated == 0) {
    blinkIt(5,200);                       // Blink the led 5 time slowly to let the user know the calibration is going to start
    Serial.println("---------------");
    Serial.println("Calibrating...");
    digitalWrite(ledPin, HIGH);           // light the LED
    calibrate();                          // Calibrate the sensor. The X and Y bias are stored in calibated[]
    Serial.println("Calibration Done!");
    Serial.print("x bias:");
    Serial.print(calibated[0]);
    Serial.print("\t");
    Serial.print("y bias:");
    Serial.print(calibated[1]);
    Serial.println("");
    Serial.println("---------------");
    blinkIt(10,100);                      // Blink 10 time fast to let the user know the calibration is done
  } else {
    digitalWrite(ledPin, HIGH);           // Light the LED
    Serial.print(x_vector_motion());
    Serial.print(";");
    Serial.print(y_vector_motion());
    Serial.println("");
    Mouse.move(x_vector_motion()/10, y_vector_motion()/10);  // Move the mouse according to the sensor's reading. Values divided by 10 to reduce the speed.
    delay(20);
  }
}
// Blink n times with a delay of d ms
void blinkIt(int n, int d) {
  for (int i=0;i
 
0 комментариев на «“Датчик на базе светодиода и черырёх фоторезисторов”»
не могли бы выложить схему этого устр-ва.