Как использовать фоторезистор?
Я нашел этот проект, и он показался мне простым, но теперь я не знаю. Пожалуйста, помогите. Я попытался изменить код и провода, но ничего не произошло.
int photoSensorPin = A0;
int redLedPin = 3;
int greenLedPin = 5;
int blueLedPin = 6;
int redLedVal = 0;
int greenLedVal = 0;
int blueLedVal = 0;
boolean isLedOn = false;
int brightness = 1023;
int darkThreshold = 50;
int changeColorTime = 900000;
long lastUpdate=0;
void setup()
{
randomSeed(analogRead(1));
}
void loop()
{
getBrightness();
if (brightness < darkThreshold) {
if (!isLedOn) {
LedOn();
isLedOn = true;
lastUpdate = millis();
} else if (millis() > lastUpdate + changeColorTime) {
LedOn();
isLedOn = true;
lastUpdate = millis();
}
} else {
LedOff();
isLedOn = false;
}
delay(1000);
}
int getBrightness()
{
brightness = analogRead(photoSensorPin);
return brightness;
}
void LedOn()
{
redLedVal = random(1,128);
greenLedVal = random(1,128);
blueLedVal = random(1,128);
analogWrite(redLedPin,redLedVal);
analogWrite(greenLedPin,greenLedVal);
analogWrite(blueLedPin,blueLedVal);
}
void LedOff(){
analogWrite(redLedPin,0);
analogWrite(greenLedPin,0);
analogWrite(blueLedPin,0);
}
1 2 3 4
@Ejaris Abu-khdeir, 👍-1
Обсуждение2 ответа
Насколько быстрым должен быть этот проект, чтобы он был полезным? Фоторезистору может потребоваться до секунды, чтобы отреагировать на яркие или темные условия.
Фоторезисторы также демонстрируют определенную степень задержки между воздействием света и последующим уменьшением сопротивления, обычно около 10 миллисекунд. Время задержки при переходе из освещенной среды в темную еще больше, часто оно достигает одной секунды. Это свойство делает их непригодными для обнаружения быстро мигающих огней
Рассмотрите возможность тестирования кода, подключив напряжение от 0 до 5 вольт для имитации яркого состояния. Затем подключите A0 к заземлению, чтобы имитировать темное состояние.
Я не верю, что проблема в коде. Я совершенно уверен, что это проводка. Я даже добавил резистор 2k, но я не уверен, как подключить его к проекту., @Ejaris Abu-khdeir
Приведенный выше ответ не имеет ничего общего с кодом. Фоторезистор может иметь очень длительное время включения и выключения. Как быстро вам нужно обнаружить событие включения-выключения? Вы пытаетесь обнаружить мигающий огонек? Это может не сработать. Вы пытаетесь отличить день от ночи? Вероятно, это сработает., @st2000
@EjarisAbu-khdeir Ваша проводка (как показано на схеме) выглядит так, как будто она должна работать. Если вы отлаживаете код, всегда полезно поместить туда несколько инструкций Serial.print (...)
, чтобы проверить, действительно ли он выполняет то, что вы задумали. Вы пытались вывести значения, поступающие с входного сигнала LDR, чтобы посмотреть, как он реагирует на свет и какое значение должно иметь пороговое значение? Вы также можете распечатать что-то, когда ваш код включает или выключает светодиоды (чтобы увидеть, действительно ли это происходит, когда вы хотите, чтобы это произошло)., @StarCat
Спасибо @StarCat за то, что вы действительно попытались ответить на этот вопрос. Дело не в коде, а в проводке. Здесь я добавлю еще одну картинку., @Ejaris Abu-khdeir
Также @StarCat, я попытался добавить подобный код, но он просто сделал то же самое, ничего. Фоторезистор не подключается к RGB., @Ejaris Abu-khdeir
@EjarisAbu-khdeir, чтобы быть абсолютно ясным, я вообще не комментирую ваш код. Я просто спрашиваю, как быстро вам нужна электроника для работы. Я спрашиваю, потому что фоторезистор не может обнаружить быстрые мигающие огни. Фоторезистор можно использовать только для обнаружения изменений уровня освещенности, которые занимают больше времени, чем около секунды., @st2000
@st2000 Мне нужно, чтобы он функционировал правильно, мне все равно, как быстро он работает., @Ejaris Abu-khdeir
@EjarisAbu-хдейр, я надеюсь, ты не сердишься. И я надеюсь, что ваш проект будет работать так, как вы хотите., @st2000
@st2000 Я не сержусь и благодарю вас, я просто разочарован этим проектом и не понимаю, как заставить его функционировать., @Ejaris Abu-khdeir
@Edgar Bonet как вы меняете порог темноты?, @Ejaris Abu-khdeir
Я думаю, Эдгар Бонет хотел, чтобы вы сначала распечатали значение яркости, которое вы получаете при включенном и выключенном свете. Затем, чтобы изменить эту строку "int darkThreshold = 50;" с 50 на число между значением, которое вы получаете для яркости, когда свет включен, и для яркости, когда свет выключен., @st2000
Вы забыли установить установить контакты в режим вывода. В setup()
добавьте:
pinMode(redLedPin, OUTPUT);
pinMode(greenLedPin, OUTPUT);
pinMode(blueLedPin, OUTPUT);
Если это не сработает, то вам потребуется некоторая отладка. Добавьте также это
в setup()
:
Serial.begin(9600);
и это для loop()
:
Serial.println(brightness);
Посмотрите на напечатанные значения. Существенно ли они меняются при
изменении условий освещения? Если нет, проверьте проводку LDR (в
вашей схеме все в порядке). Опускаются ли они ниже и выше порога Тьмы
? Если нет,
то измените свой порог.
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
Добро пожаловать на сайт. В вашем вопросе есть несколько пунктов, которые необходимо улучшить: скопируйте свой код вместо создания снимков экрана, опишите, чего вы ожидаете от своего кода, и что именно сейчас не работает., @Michel Keijzers
вы пробовали выводить значения analogread через serial для различных ситуаций освещения, чтобы увидеть фактические измеренные значения?, @chrisl
Я исправил твои фотографии. Но вы должны удалить свои изображения кода и ввести фактический код, а затем изменить формат кода с помощью кнопки "формат кода"., @st2000
Спасибо, и я пытался, но я пользуюсь своим телефоном, и это не сработало. Кроме того, на него нужно вставить много кода., @Ejaris Abu-khdeir
Не публикуйте скриншоты кода. Скопируйте код в свой вопрос, затем выберите его и используйте кнопку "{}", чтобы отформатировать его., @Duncan C
Во-первых, вместо скриншотов используйте вставки кода. Кроме того, название вашего вопроса слишком широкое, если у вас есть список проблем, связанных с этим., @DragonflyRobotics
Спасибо @EjarisAbu-khdeir за то, что ввел свой код вместо того, чтобы использовать картинки вашего кода. Это значительно облегчит чтение и поможет вам., @st2000