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

Материал из roboforum.ru Wiki
Перейти к: навигация, поиск
(Распространенность модуля)
 
(не показано 12 промежуточных версий 2 участников)
Строка 19: Строка 19:
  
 
==Распространенность модуля==
 
==Распространенность модуля==
* Продано 5 модулей:  dimchehov, DrunkenMaster, SkyStorm, shel, Vooon
+
* Продано 21 модулей:  dimchehov, DrunkenMaster, SkyStorm, shel, Vooon, tsrodger, feston, vladimirkl1, modernsteel, vl.nesterov, Dimitri, bkzaka, pritmick, kommail76, MaPTbIH, Duhas *6
  
 
* Кроме того в использовании 2 модуля: =DeaD=, blindman
 
* Кроме того в использовании 2 модуля: =DeaD=, blindman
  
 
==Документация==
 
==Документация==
 +
 +
Соединение линий (первая на датчике - от логотипа OR):
 +
# Vcc
 +
# GND
 +
# Sens0
 +
# Sens1
 +
# Sens2
 +
# Sens3
 +
# Sens4
 +
# Sens5
 +
# Sens6
 +
# Sens7
 +
# Sens8
 +
# Sens9
 +
# LED-on
  
 
Код для проверки датчика на WinAVR (для контроллера OR-AVR-M32-D, датчик должен быть на линии A0-7, C7-6, питание от 5В, управляющий сигнал включения подсветки сенсора LED-on - линия C5) откалиброванный под расстояние до поверхности 4-5мм:
 
Код для проверки датчика на WinAVR (для контроллера OR-AVR-M32-D, датчик должен быть на линии A0-7, C7-6, питание от 5В, управляющий сигнал включения подсветки сенсора LED-on - линия C5) откалиброванный под расстояние до поверхности 4-5мм:
  
Соединение линий (первая на датчике - от логотипа OR):
+
<source lang="c">
    01 - Gnd
+
#include "defines.h"
    02 - Vcc
+
 
    03 - Sens0
+
#include <ctype.h>
    04 - Sens1
+
#include <stdint.h>
    05 - Sens2
+
#include <stdio.h>
    06 - Sens3
+
#include <string.h>
    07 - Sens4
+
 
    08 - Sens5
+
#include <avr/interrupt.h>
    09 - Sens6
+
 
    10 - Sens7
+
#include <util/delay.h>
     11 - Sens8
+
 
     12 - Sens9
+
#include "uart.h"
    13 - LED-on
+
 
 +
FILE uart_str = FDEV_SETUP_STREAM(uart_putchar, uart_getchar, _FDEV_SETUP_RW);
 +
 
 +
int main(void)
 +
{
 +
uart_init();
 +
stdout = stdin = &uart_str;
 +
printf("Linesensor-test ready!\n");
 +
 
 +
DDRC = 0x20;
 +
DDRD = 0x30;
 +
 
 +
//PWM, Phase and frequency correct, TOP=ICR1
 +
TCCR1A = 0xA0; //clear on up-counting, set on down-counting
 +
TCCR1B = 0x12; //Clock prescaler 1/8
 +
ICR1 = 9216;  //Set 50Hz frequency
 +
uint16_t baseA = (153*2+1)*23/10;
 +
uint16_t baseB = (156*2+1)*23/10;
 +
OCR1A = baseA;
 +
OCR1B = baseB;
 +
 
 +
while(1==1){
 +
DDRA = 0xFF;
 +
PORTA = 0xFF;
 +
DDRC |= 0xC0;
 +
PORTC |= 0xC0;
 +
_delay_us(3000);
 +
DDRA = 0x00;
 +
PORTA = 0x00;
 +
DDRC &= ~0xC0;
 +
PORTC &= ~0xC0;
 +
PORTC |= 0x20;
 +
_delay_us(500);
 +
int x = PINA;
 +
int y = PINC>>6;
 +
if (y == 1) {
 +
y = 2;
 +
} else if (y == 2) {
 +
y = 1;
 +
}
 +
x = x + (y<<8);
 +
 
 +
for(int i=0; i<10; i++){
 +
int j = x & 0x01;
 +
printf("%d",j);
 +
x = x>>1;
 +
};
 +
printf("\n");
 +
 
 +
_delay_us(30000);
 +
};
 +
}
 +
</source>
 +
 
 +
=== Arduino ===
 +
<source lang="c">
 +
#include <ORBWSens.h>
 +
 
 +
ORBWSens bws((unsigned char[])
 +
  {3, 4, 5, 6, 7, 14, 15, 16, 17 , 18}, 10,
 +
  4000,
 +
  2 /* LED-on pin */);
 +
 
 +
void setup()
 +
{
 +
  Serial.begin(115200);
 +
  for (int i=0; i<100; i++)
 +
  {
 +
     bws.calibrate();
 +
     delay(100);
 +
  }
 +
}
 +
 
 +
unsigned int val[10];
 +
int line;
  
Сам код:
+
void loop()
#include "defines.h"
+
{
+
   line = bws.readLine(val);
#include <ctype.h>
+
   Serial.print("LINE: ");
#include <stdint.h>
+
   Serial.print(line);
#include <stdio.h>
+
   for (int i=0; i<10; i++)
#include <string.h>
+
  {
+
    Serial.print(", ");
#include <avr/interrupt.h>
+
    Serial.print(val[i]);
+
  }
#include <util/delay.h>
+
  Serial.println();
+
 
#include "uart.h"
+
  delay(200);
+
}
FILE uart_str = FDEV_SETUP_STREAM(uart_putchar, uart_getchar, _FDEV_SETUP_RW);
+
</source>
 
int main(void)
 
{
 
   uart_init();
 
   stdout = stdin = &uart_str;
 
  printf("Linesensor-test ready!\n");
 
 
  DDRC=0x20;
 
  DDRD=0x30;
 
 
  //PWM, Phase and frequency correct, TOP=ICR1
 
  TCCR1A=0xA0; //clear on up-counting, set on down-counting
 
  TCCR1B=0x12; //Clock prescaler 1/8
 
  ICR1=9216;  //Set 50Hz frequency
 
  uint16_t baseA=(153*2+1)*23/10;
 
   uint16_t baseB=(156*2+1)*23/10;
 
  OCR1A=baseA;
 
   OCR1B=baseB;
 
  while(1==1){
 
    DDRA=0xFF;
 
    PORTA=0xFF;
 
    DDRC|=0xC0;
 
    PORTC|=0xC0;
 
    _delay_us(3000);
 
    DDRA=0x00;
 
    PORTA=0x00;
 
    DDRC&=~0xC0;
 
    PORTC&=~0xC0;
 
    PORTC|=0x20;
 
    _delay_us(500);
 
    int x=PINA;
 
    int y=PINC>>6;
 
    if(y==1){ y=2; }else if (y==2){y=1;};
 
    x=x+(y<<8);
 
 
    for(int i=0; i<10; i++){
 
      int j=x&0x01;
 
      printf("%d",j);
 
      x=x>>1;
 
    };
 
    printf("\n");
 
 
    _delay_us(30000);
 
  };
 
}
 
  
  

Текущая версия на 04:29, 15 июня 2011


Датчик линии OR-LINESENS-KTIRx10

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

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

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

Количество оптопар: 10шт

Шаг оптопар: 10мм

Тип оптопар: KTIR0721ds

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

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

  • Продано 21 модулей: dimchehov, DrunkenMaster, SkyStorm, shel, Vooon, tsrodger, feston, vladimirkl1, modernsteel, vl.nesterov, Dimitri, bkzaka, pritmick, kommail76, MaPTbIH, Duhas *6
  • Кроме того в использовании 2 модуля: =DeaD=, blindman

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

Соединение линий (первая на датчике - от логотипа OR):

  1. Vcc
  2. GND
  3. Sens0
  4. Sens1
  5. Sens2
  6. Sens3
  7. Sens4
  8. Sens5
  9. Sens6
  10. Sens7
  11. Sens8
  12. Sens9
  13. LED-on

Код для проверки датчика на WinAVR (для контроллера OR-AVR-M32-D, датчик должен быть на линии A0-7, C7-6, питание от 5В, управляющий сигнал включения подсветки сенсора LED-on - линия C5) откалиброванный под расстояние до поверхности 4-5мм:

<source lang="c">

  1. include "defines.h"
  1. include <ctype.h>
  2. include <stdint.h>
  3. include <stdio.h>
  4. include <string.h>
  1. include <avr/interrupt.h>
  1. include <util/delay.h>
  1. include "uart.h"

FILE uart_str = FDEV_SETUP_STREAM(uart_putchar, uart_getchar, _FDEV_SETUP_RW);

int main(void) { uart_init(); stdout = stdin = &uart_str; printf("Linesensor-test ready!\n");

DDRC = 0x20; DDRD = 0x30;

//PWM, Phase and frequency correct, TOP=ICR1 TCCR1A = 0xA0; //clear on up-counting, set on down-counting TCCR1B = 0x12; //Clock prescaler 1/8 ICR1 = 9216; //Set 50Hz frequency uint16_t baseA = (153*2+1)*23/10; uint16_t baseB = (156*2+1)*23/10; OCR1A = baseA; OCR1B = baseB;

while(1==1){ DDRA = 0xFF; PORTA = 0xFF; DDRC |= 0xC0; PORTC |= 0xC0; _delay_us(3000); DDRA = 0x00; PORTA = 0x00; DDRC &= ~0xC0; PORTC &= ~0xC0; PORTC |= 0x20; _delay_us(500); int x = PINA; int y = PINC>>6; if (y == 1) { y = 2; } else if (y == 2) { y = 1; } x = x + (y<<8);

for(int i=0; i<10; i++){ int j = x & 0x01; printf("%d",j); x = x>>1; }; printf("\n");

_delay_us(30000); }; } </source>

Arduino

<source lang="c">

  1. include <ORBWSens.h>

ORBWSens bws((unsigned char[])

 {3, 4, 5, 6, 7, 14, 15, 16, 17 , 18}, 10, 
 4000,
 2 /* LED-on pin */);

void setup() {

 Serial.begin(115200);
 for (int i=0; i<100; i++)
 {
   bws.calibrate();
   delay(100);
 }

}

unsigned int val[10]; int line;

void loop() {

 line = bws.readLine(val);
 Serial.print("LINE: ");
 Serial.print(line);
 for (int i=0; i<10; i++)
 {
   Serial.print(", ");
   Serial.print(val[i]);
 }
 Serial.println();
 
 delay(200);

} </source>


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

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

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