Технический форум по робототехнике.
Alexjustas » 28 май 2013, 23:24
Нужно сделать устройство эмулирующие датчик ширины бумаги в принтере.
датчик-это фотодиод на который когда видит белый цвет бумаги снижает напряжение с 3 вольт примерно до 0.
Самое лучшее было бы чтобы ,одним микроконтроллером считать сигнал.
Записать его во второй , который будет обманкой на самом принтере.
спаяю всё сам
Myp » 29 май 2013, 09:28
странное желание
лучше объясни какого эффекта ты хочешь достичь этим "эмулятором"
Alexjustas » 29 май 2013, 09:39
Хочу сделать планшетный принтер (печать на любых материалах) из epson. у принтера на печатающей голове стоит датчик ширины листа . когда срабатывает датчик бумаги, лист подходит к голове глаз его видит(проходит по листу ,возвращается в начальное положение , двигает лист назад потом вперед снова его видит и печатает ). при этом меняется напряжение на входе микроконтроллера. я хочу сделать устройство которое бы записывало сигнал с например на комп. а потом этот сигнал можно было бы запихать в другой микроконтроллер уже подключенный к принтеру. тут человек сделал похожее.
http://techref.massmind.org/techref/pcb ... 200-vs.htm
Myp » 29 май 2013, 10:24
поставь ардуину.
тебе понадобится 2 стандартных примера которые идут в комплекте
первый пример шлёт нажатие кнопки в компьютер, тока вместо кнопки датчик подключишь.
второй пример мигает светодиодом с нужной длительностью, которую ты только что с помощью прошлого примера определил
в первый раз запускаешь с подключенным датчиком и записываешь эталонные срабатывания датчика, в второй раз датчик отключаешь и воспроизводишь эти нажатия.
Alexjustas » 29 май 2013, 22:15
Спасибо за подсказку, а какую модель мне можно использовать ?
Alexjustas » 03 июн 2013, 09:48
Может тыкните носом в пример. перечитал кучу всего по ардуино у меня UNO , но сложность для меня . Там по умолчанию постоянно висит 1 на датчике. И как мне записать я незнаю. Я смотрел осцилом , думал посчитать время самому. Но очень геморно. Попробывал считать в serial. Читается но вот тут я затупил . Мне как то нужно вычислить длину. Можно же просто постоянно слать единицу и в нужный момент нули. Там есть алгоритм голова проходит по краю листа , двигает его вперед назад. Поэтому думал считать всё в serial порт и потом скормить arduino. Но как....?
Myp » 03 июн 2013, 10:20
стандартный пример DigitalReadSerial
отправляет состояние датчика/кнопки в компьютер. нажал кнопку/сработал датчик и в комп вместо 0 пошла 1
тебе надо лишь в дополнение к Serial.println(buttonState);
добавить кусок кода из
http://arduino.cc/en/Reference/millisSerial.print("; Time: ");
time = millis();
Serial.println(time);
тогда в терминале рядом с изменением состояния, 0 или 1, будет печататься время когда это произошло в миллисекундах с момента запуска ардуины.
сохраняешь то что тебе пришло в эксель удаляешь лишние цифры и высчитываешь задержки.
остаётся написать вторую программу которая будет мигать светодиодом с заданными паузами, вместо светодиода подключишь датчик.
Alexjustas » 03 июн 2013, 11:36
- Код: Выделить всё • Развернуть
/*
DigitalReadSerial
Reads a digital input on pin 2, prints the result to the serial monitor
This example code is in the public domain.
*/
int pushButton = 2;
void setup() {
Serial.begin(9600);
pinMode(pushButton, INPUT);
}
void loop() {
int buttonState = digitalRead(pushButton);
Serial.println(buttonState);
Serial.print("Time: ");
time = millis();
Serial.println(time);
delay(1);
}
Я правильно понимаю ?
Myp » 03 июн 2013, 11:45
во первых используй теги!
и да
тока чтобы вывод в терминал выглядел получше, используй вот такую конструкцию Serial.print("; Time: ");
далее в строке Serial.println(buttonState); убери 2 буквы ln чтобы у тебя время не писалось с новой строки, а шло после цифры и не сливалось.
; перед словом Time нужна чтобы потом в экселе проще было разбить данные на 2 столбика.
ну и delay(1); можно сделать не 1, а побольше. с 1 в терминал у тебя вылезет большущая куча данных.
Alexjustas » 03 июн 2013, 13:39
/*
DigitalReadSerial
Reads a digital input on pin 2, prints the result to the serial monitor
This example code is in the public domain.
*/
// digital pin 2 has a pushbutton attached to it. Give it a name:
int pushButton = 2;
// the setup routine runs once when you press reset:
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
// make the pushbutton's pin an input:
pinMode(pushButton, INPUT);
}
// the loop routine runs over and over again forever:
void loop() {
// read the input pin:
int buttonState = digitalRead(pushButton);
// print out the state of the button:
Serial.print (buttonState);
Serial.print ("; Time: ");
time = millis();
Serial.println(time);
delay(100); // delay in between reads for stability
}
программа выдает ошибку /забить или что то не так ?
'time' was not declared in scope
DigitalReadSerial.ino: In function 'void loop()':
DigitalReadSerial:26: error: 'time' was not declared in this scope
Myp » 03 июн 2013, 14:34
ну да, ошибка, time используем но не декларировали.
надо декларировать.
unsigned long time;
тебе не помощь программиста нужна, тебе надо чтоб вместо тебя всё сделали?
Alexjustas » 03 июн 2013, 17:50
Вам огромное спасибо за помощь,Вы как раз меня и направили куда смотреть. Ошибку я нашел сам, но не успел написать Вам. Хочется сделать самому. Но я вообще полный ноль в программировании, но немножко стал врубаться с Вашей помощью.
Добавлено спустя 3 минуты 57 секунд:
Вообще я сначала хотел чтобы за меня сделали(и готов был за это заплатить),но когда Вы мне сказали про arduino решил сам попробовать. Мне сначала приятель обещал помочь ,но я его не дождался. Тупо задинамил.