OR-LINESENS-KTIRx10 — различия между версиями
=DeaD= (обсуждение | вклад) |
=DeaD= (обсуждение | вклад) (→Распространенность модуля) |
||
(не показано 12 промежуточных версий 2 участников) | |||
Строка 19: | Строка 19: | ||
==Распространенность модуля== | ==Распространенность модуля== | ||
− | * Продано | + | * Продано 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мм: | ||
− | + | <source lang="c"> | |
− | + | #include "defines.h" | |
− | + | ||
− | + | #include <ctype.h> | |
− | + | #include <stdint.h> | |
− | + | #include <stdio.h> | |
− | + | #include <string.h> | |
− | + | ||
− | + | #include <avr/interrupt.h> | |
− | + | ||
− | + | #include <util/delay.h> | |
− | + | ||
− | + | #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"> | ||
+ | #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> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
Текущая версия на 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):
- 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мм:
<source lang="c">
- include "defines.h"
- include <ctype.h>
- include <stdint.h>
- include <stdio.h>
- include <string.h>
- include <avr/interrupt.h>
- include <util/delay.h>
- 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">
- 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 (пока не готова)