Вывод TX остается горящим после снятия регулятора напряжения
Чтобы сэкономить электроэнергию, я снял линейный регулятор со своего клона Arduino Nano и запитал его через контакт 5 В от регулируемого источника (перезаряжаемого USB-зарядного устройства для телефона). Однако я заметил, что удаление линейного регулятора приводит к тому, что вывод TX остается включенным все время, что приводит к тому, что мой телефон не может взаимодействовать с модулем Bluetooth HC05, хотя он подключается нормально. Я проверил, что вывод TX не вызван Serial.print
, и заметил такое же поведение на всех Nano, из которых я удалил линейные регуляторы. Nano, которые я тестировал с линейным регулятором, работают нормально, хотя они потребляют больше энергии, чем мне хотелось бы. Я пытался сбросить настройки устройства, но проблема не устранена.
Мне интересно, что является причиной этого? Разве питание через вывод 5 В не предполагает обхода регулятора? Итак, что может привести к тому, что отсутствующий регулятор повлияет на вывод TX? К сожалению, у меня недостаточно опыта, чтобы соединить точки с помощью схемы, поэтому я надеялся, что кто-нибудь сможет мне помочь.
Хотя я не уверен, поможет ли это, я включил свой скетч ниже. По сути, я использую ультразвуковой датчик для связи расстояния с моим телефоном по Bluetooth. Он также воспроизводит музыку, когда обнаруживает движение (с помощью датчика PIR). Поскольку приложение предназначено для использования на открытом воздухе, я питаюсь от аккумулятора и стараюсь свести к минимуму потребление энергии. Я снизил его до ~ 4 мА, сняв линейный регулятор.
#include <avr/sleep.h>
#define bluetoothIntPin 2
#define pirInterruptPin 3
volatile int state = 0;
int bt_pin = 9;
int pirPin = 8;
int stateData = 0;
int ultraPin = 10;
int trigPin = 11; // Триггер
int echoPin = 12; // Echo
int piezoPin = 5;
long duration, cm;
unsigned char inches;
unsigned long timer;
volatile bool signalReceived = false;
volatile bool pirSignalReceived = false;
bool toggle_pir = false;
int incomingByte = 0;
bool song_in_progress = false;
int song_type = 69;
int nokia_melody[] = {
// Рингтон для Nokia
// Оценка доступна по адресу https://musescore.com/user/29944637/scores/5266155
NOTE_E5, 8, NOTE_D5, 8, NOTE_FS4, 4, NOTE_GS4, 4,
NOTE_CS5, 8, NOTE_B4, 8, NOTE_D4, 4, NOTE_E4, 4,
NOTE_B4, 8, NOTE_A4, 8, NOTE_CS4, 4, NOTE_E4, 4,
NOTE_A4, 2,
};
void setup() {
pinMode(13, OUTPUT); //установить вывод 13 в качестве выходного
pinMode(ultraPin, OUTPUT);
pinMode(trigPin, OUTPUT);
pinMode(pirPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(bt_pin, HIGH);
digitalWrite(bluetoothIntPin, HIGH);
digitalWrite(pirInterruptPin, HIGH);
digitalWrite(ultraPin, LOW);
digitalWrite(pirPin, LOW);
Serial.begin(9600); // Скорость связи по умолчанию модуля Bluetooth
attachInterrupt(digitalPinToInterrupt(bluetoothIntPin), bluetooth_interrupt, CHANGE);
attachInterrupt(digitalPinToInterrupt(pirInterruptPin), pir_interrupt, CHANGE);
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_enable();
sleep_cpu();
}
void pir_interrupt(){
// воспроизведение звукового эффекта
digitalWrite(LED_BUILTIN, HIGH);
delay(5000);
digitalWrite(LED_BUILTIN, LOW);
pirSignalReceived = true;
}
void bluetooth_interrupt(){
state = !state;
signalReceived = true;
}
void play_song(int melody[], int notes){
// sizeof задает количество байтов, каждое значение int состоит из двух байтов (16 бит).
// для каждой ноты существует два значения (высота тона и длительность), поэтому для каждой ноты имеется четыре байта
// при этом вычисляется длительность целой ноты в мс
song_in_progress = true;
int wholenote = (60000 * 4) / tempo;
int divider = 0, noteDuration = 0;
for (int thisNote = 0; thisNote < notes * 2; thisNote = thisNote + 2) {
// вычисляет длительность каждой ноты
divider = melody[thisNote + 1];
if (divider > 0) {
// обычное примечание, просто продолжайте
noteDuration = (wholenote) / divider;
} else if (divider < 0) {
// пунктирные ноты представлены с отрицательной длительностью!!
noteDuration = (wholenote) / abs(divider);
noteDuration *= 1.5; // увеличивает длительность в два раза для точечных заметок
}
// мы воспроизводим ноту только 90% длительности, оставляя 10% в качестве паузы
tone(piezoPin, melody[thisNote], noteDuration * 0.9);
// Дождитесь заданной продолжительности, прежде чем играть следующую ноту.
delay(noteDuration);
// остановите генерацию сигнала перед следующей нотой.
noTone(piezoPin);
}
song_in_progress = false;
}
void play_tone_once(){
if (!song_in_progress){
if (song_type==69){
int notes = sizeof(nokia_melody) / sizeof(nokia_melody[0]) / 2;
play_song(nokia_melody, notes);
}
if (song_type==79){
int notes = sizeof(starwars_melody) / sizeof(starwars_melody[0]) / 2;
play_song(starwars_melody, notes);
}
}
}
void loop() {
if (signalReceived){
sleep_disable();
Serial.write(50);
delay(500);
timer = millis();
digitalWrite(ultraPin, HIGH);
digitalWrite(pirPin, HIGH);
while (true){
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
pinMode(echoPin, INPUT);
duration = pulseIn(echoPin, HIGH);
cm = (duration / 2) / 29.1; // Разделить на 29,1 или умножить на 0,0343
inches = (duration / 2) / 74; // Разделить на 74 или умножить на 0,0135
Serial.write(inches);
delay(50);
incomingByte = Serial.read();
if (pirSignalReceived){
play_tone_once();
pirSignalReceived = false;
}
else if (incomingByte == 69){ // автоматический pir
song_type = 69; //nokia
}
else if (incomingByte == 79){
song_type = 79; // звездные войны
}
else if (incomingByte == 89){
toggle_pir = !toggle_pir;
if (toggle_pir){
digitalWrite(pirPin, HIGH); // автоматизировать тон
} else {
digitalWrite(pirPin, LOW);
}
}
else if (incomingByte == 99){
digitalWrite(pirPin, LOW);
play_tone_once();
}
if (incomingByte != 49 && incomingByte!=69 && incomingByte != 79 && incomingByte != 89 && incomingByte != 99){
// получение от android
unsigned long timeElapse = millis() - timer;
if (timeElapse > 7000) {
break; // выход и СОН
}
}
else {
// сброс таймера
timer = millis();
}
}
digitalWrite(pirPin, LOW);
digitalWrite(ultraPin, LOW);
digitalWrite(LED_BUILTIN, LOW);
signalReceived = false;
sleep_enable();
sleep_cpu();
}
}
@I Like, 👍0
Обсуждение1 ответ
Лучший ответ:
Мой Нано-клон, похоже, той же марки, что и ваш. Конечно, его нижняя сторона выглядит идентично. На моем клоне, и я полагаю, на вашем, светодиод TX подключен следующим образом
5V -- RESISTOR -- LED -- TXD/D1
Узел 5V - это просто вывод 5V, на который подается напряжение шины USB через диод или с выхода регулятора напряжения AMS1117. Последовательный сигнал TX уровня TTL работает на холостом ходу на высоком уровне и пропускает ток через светодиод при передаче начального бита и младших битов данных. Кстати, светодиод RX подключен таким же образом. В отличие от этого, официальный Nano использует FTDI с выделенными светодиодными выводами.
Вполне вероятно, что вы соединили что-то с припоем, который удерживал AMS1117 на плате в процессе его удаления. Я хотел бы отметить, что регулятор установлен непосредственно под светодиодами и их токоограничивающими резисторами, и в этой части платы имеется по крайней мере три переходных отверстия.
Можно ли обойти регулятор, соединив входные и выходные контакты регулятора напряжения вместо того, чтобы полностью распаять его?, @I Like
Это своего рода новый вопрос, но я просто скажу вот что: если смысл в том, чтобы регулятор не использовал какой-либо ток, я не думаю, что это поможет. Возьмем, к примеру, все, что он использует внутри для определения опорного напряжения. Это каким-то образом связано с входом (и в сценарии, который вы также описали, с выходом) и gnd. Если вы можете найти схему платы, я бы добавил ее к вашему вопросу, как упоминал jsotola., @timemage
Спасибо. вы правы в том, что я, вероятно, перепутал схему. Я распаял только ножки регулятора (исключая радиатор) и избежал скрытых следов., @I Like
Я так понимаю, вы говорите это для того, чтобы показать, что таким образом добились определенного успеха., @timemage
в основном для подтверждения вашего ответа, но да, я действительно обошел регулятор, @I Like
- Блок питания для Seeeduino Xiao
- Аккумуляторное решение Nano 33 IoT
- Измерение напряжения литий-ионного элемента, используемого для питания Arduino через повышающий модуль
- Две батареи делят землю?
- Как выбрать аккумулятор для питания проекта Arduino Nano?
- Arduino Nano и SIM800L при питании от батареи
- Как подключить arduino nano
- Питание компонентов Arduino с помощью AA параллельно и последовательно
вы внесли аппаратные изменения в плату ... пожалуйста, предоставьте принципиальную схему платы, а не список программ, @jsotola