А сброс (watchdog) не делали в коде? От блока питания это действительно зависит.
У меня была проблема - от внешнего блока питания норм работает, от usb компьютера тоже, а от мини блока после срабатывания реле виснет, даже watchdog не помогает. У меня висят на одной нано - датчики движения, температуры и влажности, реле и NRF24L01. Но в моем случае еще и с разводкой экспериментировал. Перестал намертво зависать, когда подал питание на ножку 5V и GND и с них же питание пошло на датчики и реле. До этого питание пускал на ICSP и с него же на реле, а остальное с 5V ножки. Ну и надо конечно загрузчик перепрошить на поддерживающий watchdog (в NANO кривой по умолчанию загрузчик, не обрабатывает нормально watchdog ) и прописать рестарт при зависании уже в программе.
А на счет радиуса действия, да - маленький, если без внешних антенн. Но это касается только реле. Не знаю почему. Тут загадка. Датчик движения срабатывает, а реле не хочет. Подносишь поближе - реле начинает срабатывать.
upd
Еще зависания могут быть из-за индуктивных помех. Можно проверить так - если убрать устройства подключенные к реле, которые он включает и зависания прекратятся, то надо ставить демпфер.
На счет радиуса действия датчиков, если датчики подключены постоянно к сети, то можно их использовать как ретрансляторы.
gw.begin(NULL, AUTO, true) или gw.begin(incomingMessage, AUTO, true);