Ви не увійшли.
Сторінки 1
Для начала в базу надо поставить резистор. Без этого всё остальное не имеет смысла
Я і не казав, що в цій схемі є сенс. Питання ж було в іншому.
Ic = Ib * Beta
P = Ibc * Vbc
Так а звідки береться Ib?
Вивчаю зараз тему транзисторів і не до кінця розумію, які формули використовувати для їхнього розрахунку.
Ось, наприклад, я зібрав просту схему в симуляторі. Джерело живлення на 5В, резистор на 10 кОМ і транзистор з hFE = 100.
Я ніяк не можу зрозуміти звідки беруться цифри розраховані симулятором (Ic, Ib,Uce,Ube). Яким чином вони розраховуються? Я розумію, що практичного сенсу в такій схемі мабуть, що немає, але суть не в тому. Я хочу розуміти як розраховуються такі цифри?
Зарання вибачаюсь, якщо звернувся не по адресі.
Честно говоря я разочарован.
Казалось бы форумы созданы для того, чтобы помогать людям. Здесь же вместо попробовать реально помочь чем-то или свысока отвечают или бросают какие-то толстые книги, типа RTFM.
Надеюсь это просто так карантин влияет на людей. Все злые и хотят, чтобы это уже наконец закончилось.
Ну ладно, это было лирическое отступление.
Пишу я не по поводу того, чтобы пожаловаться, а по поводу того, что все же нашел решение и хочу им поделиться. Вдруг кому-то тоже будет полезно.
Если коротко, то вместо считывать HIGH сигнал я решил воспользоваться INPUT_PULLUP и соответственно во время зарядки конденсатора считывать LOW. То есть если конденсатор присутствует, и нет разрывов цепи, то на входе получим LOW сигнал. В противном случае это будет сигнализировать о разрыве. После этой проверки нужно разрядить конденсатор. Это сделать нетрудно переведя оба пина в OUTPUT подав на них LOW, то есть запрем оба на землю тем самым дав конденсатору возможность разрядиться.
Привожу новую схему и скетч. В схему добавил DIP переключатель для симулирования разрыва цепи. Конденсатор может быть в пределах от 1нФ до 1 мкФ (по крайней мере я тестировал в этих пределах). Понимаю, что для использования в продуктиве нужно еще будет допилять напильником код, но в целом как прототип подходит. По крайней мере в симуляторе работает на 5+.
Скетч
const int PIN_S1 = 7;
const int PIN_S2 = 8;
void setup()
{
Serial.begin(9600);
pinMode(13, OUTPUT);
pinMode(PIN_S1, OUTPUT);
pinMode(PIN_S2, OUTPUT);
dischargeCapacitor();
Serial.println("Let's start!");
}
void loop()
{
if (checkAlarm())
Serial.println("ALARM!");
dischargeCapacitor();
//
if (checkButton())
digitalWrite(13, HIGH);
else
digitalWrite(13, LOW);
//
dischargeCapacitor();
delay(500);
}
void dischargeCapacitor()
{
pinMode(PIN_S2, INPUT);
pinMode(PIN_S1, OUTPUT);
//
digitalWrite(PIN_S1, HIGH);
delay(1);
digitalWrite(PIN_S1, LOW);
pinMode(PIN_S2, OUTPUT);
digitalWrite(PIN_S2, LOW);
delay(1);
}
bool checkAlarm()
{
pinMode(PIN_S1, OUTPUT);
digitalWrite(PIN_S1, LOW);
delay(1);
pinMode(PIN_S2, INPUT_PULLUP);
int val = digitalRead(PIN_S2);
if (val != LOW)
return true;
return false;
}
bool checkButton()
{
pinMode(PIN_S1, OUTPUT);
digitalWrite(PIN_S1, LOW);
delay(1);
pinMode(PIN_S2, INPUT_PULLUP);
int val = digitalRead(PIN_S2);
if (val == LOW)
{
delay(300);
val = digitalRead(PIN_S2);
if (val == LOW)
return true;
}
return false;
}
Я хорошо разбираюсь в программировании, а вот радиоэлектронику знаю поверхностно. Это хорошо, что вы знаете как сделать это по-другому. И я вам благодарен за это. Попробую разобраться.
Но меня больше интересует почему я получаю тот результат, который получаю. Исходя из моих знаний для меня он нелогичен. Был бы признателен если бы кто-нибудь объяснил почему происходит именно так. Может я неправильно понимаю как Ардуино определяет сигнал на входном пине? Я раньше думал, что входной пин это что-то типа делителя напряжения. Так я прочитал в каком-то блоге:
https://blog.stratifylabs.co/device/201 … ller-GPIO/
Но теперь я понимаю, что не все так просто. И хочу понимать принцип по которому работает микроконтроллер Ардуино. А именно определяет сигнал. Мне понадобится в будущем.
Есть вот такая схемка.
В целом идея такова: если зажать кнопку то происходит определенное действие. Конденсатор было добавлено с целью периодической проверки целостности проводов.
С моим дилетантским знанием радиоелетроники я думал, что, если подать напряжение на конденсатор, то сразу же после этого я на входном пине увижу это напряжение, и буквально через несколько миллисекунд это напряжение упадет до нуля (ведь сопротивление конденсатора станет бесконечно большим). Таким образом я думал, что если подать напряжение и сразу же его считать и через некоторое время оно пропадет, то это значит, что разрывов нет. Если же мы подали напряжение и через некоторое время оно все же не пропало, то это значит, что пользователь зажал кнопку и должно исполниться определенное действие.
Но, к сожалению почему-то получается, что если подать напряжение на конденсатор, то на входном пине будет считываться HIGH сигнал вплоть пока не подать LOW сигнал с выходного пина.
Скетч:
const int PIN_OUT = 7;
const int PIN_IN = 8;
void setup()
{
Serial.begin(9600);
pinMode(PIN_IN, INPUT);
pinMode(PIN_OUT, OUTPUT);
pinMode(13, OUTPUT);
}
void loop()
{
char userCmd = Serial.read();
if (userCmd == '+')
{
digitalWrite(PIN_OUT, HIGH);
}
else if (userCmd == '-')
{
digitalWrite(PIN_OUT, LOW);
}
int val = digitalRead(PIN_IN);
digitalWrite(13, val);
Serial.println(val);
delay(700);
}
Сторінки 1