OR-BWSENS — различия между версиями

Материал из roboforum.ru Wiki
Перейти к: навигация, поиск
(Пример использования для WinAVR: <source>)
м (Пример использования для BASCOM AVR: <source>)
Строка 62: Строка 62:
 
===Пример использования для BASCOM AVR===
 
===Пример использования для BASCOM AVR===
 
Код для проверки датчика на BASCOM AVR (для контроллера OR-AVR-M32-D, датчик должен быть на линии A0, будет мигать светодиодами на линиях C5 и B3):
 
Код для проверки датчика на BASCOM AVR (для контроллера OR-AVR-M32-D, датчик должен быть на линии A0, будет мигать светодиодами на линиях C5 и B3):
$regfile = "m32def.dat"
+
 
$crystal = 7372800
+
<source lang="vb">
+
$regfile = "m32def.dat"
Config Portc = Output
+
$crystal = 7372800
Config Portb = Output
+
 
+
Config Portc = Output
Dim A As Byte
+
Config Portb = Output
+
 
A = 1
+
Dim A As Byte
+
 
While A > 0
+
A = 1
    Config Porta = Output
+
 
    Set Porta.0
+
While A > 0
    Waitms 3
+
  Config Porta = Output
    Config Porta = Input
+
  Set Porta.0
    Reset Porta.0
+
  Waitms 3
    Waitms 3
+
  Config Porta = Input
    If Pina.0 = 1 Then
+
  Reset Porta.0
      Set Portc.5
+
  Waitms 3
      Set Portb.3
+
  If Pina.0 = 1 Then
    Else
+
      Set Portc.5
      Reset Portc.5
+
      Set Portb.3
      Reset Portb.3
+
  Else
    End If
+
      Reset Portc.5
+
      Reset Portb.3
Wend
+
  End If
+
 
End
+
Wend
 +
 
 +
End
 +
</source>
  
 
===Пример использования для Arduino===
 
===Пример использования для Arduino===

Версия 21:06, 17 апреля 2010


Датчик цвета поверхности OR-BWSENS (черное/белое)

Краткие характеристики

Внешний вид модуля.

Габариты модуля: 10 х 15 х 4 мм (длина*ширина — по печатной плате)

Вес: не более 3г

Распространенность модуля

  • Продано 18 модулей: SkyStorm*2, BERKOF*2, pashteet*6, galex1981*2, space*4, Dimo3000*2
  • Кроме того в использовании 2 модуля: =DeaD=, blindman

Документация

OR-BWSENS-sch.pdf - Схема модуля, номинал R3 - 330 Ом, номинал C2 - 0.01 мкФ

OR-BWSENS — Инструкция по эксплуатации.pdf (пока не готова)

Принцип работы датчика:

  1. Замыкаем на 2.5мс (2500мкс) сигнальную линию датчика на землю, разряжая конденсатор;
  2. Делаем сигнальную линию входом для МК (т.е. перестаём её подтягивать к земле или к питанию) и ждём сколько-то времени, пока через открытый, в зависимости от отражающей способности поверхности в спектре ИК-излучения и расстояния до поверхности, оптодатчик зарядится конденсатор;
  3. Замеряем что на выходе с датчика - 0 или 1.

Контакты:

  • Сигнал - первый никак не обозначенный на плате контакт;
  • Питание - соответственно + и - обозначенные на плате;

Пример использования для WinAVR

Код для проверки датчика на WinAVR (для контроллера OR-AVR-M32-D, датчик должен быть на линии A0, будет мигать светодиодом на линии C5):

<source lang="c">

  1. include "defines.h"
  2. include <avr/interrupt.h>
  3. include <util/delay.h>

int main(void) {

 DDRC=0x20;
 while(1==1){
   DDRA=0xFF;
  PORTA=0xFF;
  _delay_us(2500);
  DDRA=0x00;
  PORTA=0x00;
  _delay_us(2500);
  int x=PINA;
  if(x & 0x01 == 0x01){
     PORTC=0x20;
  }else{
     PORTC=0x00;
  };
  _delay_us(1000);
 };

} </source>

Пример использования для BASCOM AVR

Код для проверки датчика на BASCOM AVR (для контроллера OR-AVR-M32-D, датчик должен быть на линии A0, будет мигать светодиодами на линиях C5 и B3):

<source lang="vb"> $regfile = "m32def.dat" $crystal = 7372800

Config Portc = Output Config Portb = Output

Dim A As Byte

A = 1

While A > 0

  Config Porta = Output
  Set Porta.0
  Waitms 3
  Config Porta = Input
  Reset Porta.0
  Waitms 3
  If Pina.0 = 1 Then
     Set Portc.5
     Set Portb.3
  Else
     Reset Portc.5
     Reset Portb.3
  End If

Wend

End </source>

Пример использования для Arduino

Исходное сообщение на форуме с примером подключения: http://roboforum.ru/viewtopic.php?p=143693#p143693

Программный код для подключения:

#include <PololuQTRSensors.h>

#define LED 13   // LED на pin 13


// создаем объект, датчик подключен на pin 10
PololuQTRSensorsRC qtr((unsigned char[]) {10}, 1);


void setup()  
{  
 pinMode(LED, OUTPUT); //установка LED pin как выход
 digitalWrite(LED, HIGH);     // LED on
 // калибровка датчика  
 int i;  
 for (i = 0; i < 250; i++)  
 {  
   qtr.calibrate();  
   delay(20);  
 }  
 digitalWrite(LED, LOW);     // LED off
 Serial.begin(9600);
}

Форум поддержки

[http://www.roboforum.ru/viewtopic.php?f=69&t=5878]