- PVSM.RU - https://www.pvsm.ru -
Многие наверняка знают, что подать питание на Arduino от Raspberry Pi не трудно, для этого просто нужен USB шнур. Обратная задача выглядит сложнее, так как у большинства контроллеров Arduino нет USB выхода (Due — исключение). Тем не менее, это возможно сделать с помощью пинов GPIO, и я хочу рассказать о конкретном примере для Arduino Nano V3.0 и Raspberry Pi B rev.2. Помимо самой подачи питания, также расскажу как можно контроллировать это питание используя кнопку и MOSFET транзистор.
Большинство Arduino-совместимых контроллеров изпользуют 5V пины. Исключение составляет разве что Arduino Due и 3.3V выход из Arduino, но сейчас не об этом. Также известно, что один из способов подать питание на Raspberry Pi — это использование 5V и GND пинов на 26-ти контактном разъеме P1:

Казалось бы, что решение очевидно — надо подсоединить Raspberry Pi к любому из пинов Arduino, и все заработает. Моя попытка сделать это привела к тому, что Raspberry Pi засветил светодиодом PWR, но светодиод ACT так и не зажегся. Причина — очень маленькая сила тока от пинов Arduino (порядка 40-50 мА). Но у Arduino есть отдельный пин 5V, который (согласно ссылке [1]) может выдавать около 400-500 мА. Теперь необходимо проверить, хватит ли такого тока для питания Raspberry.
Для нормального питания Raspberry Pi с двумя подключенными USB устройствами необходимо порядка 700 мА. Каждое USB устройство может потреблять до 140 мА (источник [2]). Малина может потреблять еще больше тока, если она разогнана (моя — нет). Таким образом, если использовать неразогнанную RPi без USB устройств, то силы тока от Arduino 5V пина должно вполне хватить.
Для того чтобы контроллировать подачу питания, необходимо еще несколько ингредиентов: кнопка питания и что-то, способное управлять большими токами. Я для этих целей использовал MOSFET транзистор. Перейдем непосредственно к использованным частям.
Я использовал следующие «железные» части:
Для прошивки Arduino понадобится IDE, я использовал версию 1.5.8 BETA, но стабильная 1.0.6 тоже подойдет. Также понадобится моя маленькая библиотека для PowerButton (ссылка в конце статьи в разделе про утилиты).
Схема подключения выглядит так:

Принципиальная схема так:

Пояснения к схемам:
Cоединение c D2 пином не случайно: библиотека для кнопки использует прерывания, а у Arduino Nano только пины D2/D3 предназначены для этих целей (проверить какие пины на вашей Arduino поддерживают прерывания можно тут [3]).
#include <PowerButton.h>
#define POWER_PIN_SIG 2
#define POWER_PIN_VCC 4
#define POWER_FET_GATE 5
#define POWER_PIN_INT 0
PowerButtonSwitch pbs;
void onPowerOn(){
Serial.println("Power On");
digitalWrite(POWER_FET_GATE, 1); // Открываем затвор (gate)
}
void onPowerOff(){
Serial.println("Power Off");
digitalWrite(POWER_FET_GATE, 0); // Закрываем затвор (gate)
}
void setup() {
Serial.begin(9600);
// Вывод сигнала от Arduino к затвору MOSFET (gate)
pinMode(POWER_FET_GATE, OUTPUT);
digitalWrite(POWER_FET_GATE, 0);
// Начальная настройка кнопки питания
pbs.setupPowerButton(POWER_PIN_SIG, POWER_PIN_VCC, POWER_PIN_INT);
// Считываем текущее значение
// Если есть сигнал от кнопки,
// включаем Raspberry Pi
int st = pbs.getSwitchStatus();
if (st == POWER_ON) {
onPowerOn();
}
// Добавляем обработчики событий
pbs.onPowerOn(onPowerOn);
pbs.onPowerOff(onPowerOff);
}
void loop() {
// Пустой цикл
delay(1000);
Serial.println("No actions");
}
Большинство действий на себя берет библиотека, так что код очень прост.
Короткое видео с тестированием:
Как видно, визуально все работает. Но все-таки надо проверить напряжение между пинами TP1/TP2 (методика тут [4]). У меня получилось значение ~4.6V, рекомендуемое значение больше 4.75V.
Несмотря на то, что все работает, все-таки есть подозрение что при подключении периферии тока от 5V пина Arduino будет недостаточно. MOSFET и кнопка работают отлично в паре, такая связка может пригодится для дальнейших проектов.
Утилиты и библиотеки, использованные для написания:
Так как это мой первый пост, отзывы и комментарии будут очень полезны.
Автор: fossid
Источник [7]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/raspberry-pi/73965
Ссылки в тексте:
[1] ссылке: http://forum.arduino.cc/index.php?topic=3192.0
[2] источник: http://www.raspberrypi.org/forums/viewtopic.php?t=14153&p=158827
[3] тут: http://arduino.cc/en/Reference/attachInterrupt
[4] тут: http://elinux.org/RPi_Hardware
[5] тут: http://fritzing.org/home/
[6] тут: https://github.com/fossid/Arduino/tree/master/PowerButton
[7] Источник: http://habrahabr.ru/post/242739/
Нажмите здесь для печати.