Feroz FernandoAndre S. Manurung
Published © GPL3+

Covid Travel Pack

A travel pack that contains most of the tools for daily usage outside house.

IntermediateShowcase (no instructions)6 hours1,209

Things used in this project

Hardware components

Arduino MKR WiFi 1010
Arduino MKR WiFi 1010
Optocoupler, Transistor Output
Optocoupler, Transistor Output
Tactile Switch, Top Actuated
Tactile Switch, Top Actuated
BOOSTXL-ULN2003 ULN2003A Dual Stepper Motor BoosterPack
Texas Instruments BOOSTXL-ULN2003 ULN2003A Dual Stepper Motor BoosterPack
Stepper Motor
Digilent Stepper Motor
Step-Up Voltage Regulator - 5V
SparkFun Step-Up Voltage Regulator - 5V
Rechargeable Battery, 3.7 V
Rechargeable Battery, 3.7 V
Submersible Mini 5V Pump
Jumper wires (generic)
Jumper wires (generic)

Software apps and online services

Arduino IDE
Arduino IDE
Google Firebase
Android Studio
Android Studio
Fusion 360
Autodesk Fusion 360

Hand tools and fabrication machines

Soldering iron (generic)
Soldering iron (generic)
Drill / Driver, Cordless
Drill / Driver, Cordless
3D Printer (generic)
3D Printer (generic)


Read more

Custom parts and enclosures

3D Printed Parts

All files are .STL format and ready to be printed. Recommended setup is 20% infill and 0.2-0.3 mm layer height.



Schematics for the inside electronics. The arrangement is not strictly have to be the same.

EasyEDA Schematics

Open this using EasyEDA software

Mobile Application

The sample apk used for the projects. If you want to modify you can check the github page


Main Arduino Code

Firmware Code
#include "Firebase_Arduino_WiFiNINA.h"
#include "ArduinoLowPower.h"
#include "Stepper.h"

#define FIREBASE_HOST "XXX"  //your-database.firebaseio.com
#define FIREBASE_AUTH "XXX"  //Firebase Secret Key
#define WIFI_SSID "XXX" //Wi-Fi SSID
#define WIFI_PASSWORD "XXX" //Wi-Fi Password

#define sw1 0
#define sw2 6
#define sw3 7
#define sw4 8
#define EN 1
#define IN1 2
#define IN2 3
#define IN3 4
#define IN4 5
#define battPin A1
#define pump1 9
#define pump2 10
#define STEPS 2048

FirebaseData firebaseData;
Stepper stepper(STEPS, IN4, IN2, IN3, IN1);

bool chamber_start = 0;
int process, batt, hand_cap, chamber_cap;

void setup() {
  Serial.print("Connecting to Wi-Fi");
  int status = WL_IDLE_STATUS;
  //Connect to Wi-Fi
  while (status != WL_CONNECTED && millis() > 10000)
    status = WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  //Provide the authentication data

  pinMode (sw1, INPUT_PULLUP);
  pinMode (sw2, INPUT_PULLUP);
  pinMode (sw3, INPUT_PULLUP);
  pinMode (sw4, INPUT_PULLUP);
  pinMode (battPin, INPUT);
  pinMode (pump1, OUTPUT);
  pinMode (pump2, OUTPUT);
  pinMode (EN, OUTPUT); //Motor power

  //Wake Up Functions
  LowPower.attachInterruptWakeup(sw1, closeGripper, LOW); //Trigger while button is pressed
  LowPower.attachInterruptWakeup(sw2, openGripper, LOW);
  LowPower.attachInterruptWakeup(sw3, sanit_hand, FALLING); //Trigger once every button press
  LowPower.attachInterruptWakeup(sw4, sanit_chamber, FALLING);

void loop() {
  //For battery readings, we use 2:3 voltage divider
  //Battery's max voltage = 4.2 V, scaled down to 2.8 V for Readings
  //Battery's min voltage = 3.7 V, scaled down to 2.46 V for Readings
  //Battery's max voltage translate to : 860 for 10 bits (2.8/3.3 * 1023)
  //Battery's min voltage translate to : 768 for 10 bits (2.46/3.3 * 1023)
  batt = map( analogRead (battPin), 768, 860, 0, 100 );
  if (chamber_start){
    process += 1;
    if (process >= 100){
      process = 0;
      chamber_start = 0;
  digitalWrite (EN,LOW); //Turn off motor if not used
  task();  //Comment this part if no app is used

void closeGripper(){
  digitalWrite (EN,HIGH); //Turn on motor

void openGripper(){
  digitalWrite (EN,HIGH); //Turn on motor

void sanit_hand(){
  //Dispense for 2 seconds
  digitalWrite (pump1, HIGH);
  delay (2000);
  hand_cap -= 10;

void sanit_chamber(){
  //Dispense for 5 seconds
  chamber_start = 1;
  digitalWrite (pump2, HIGH);
  delay (5000);
  chamber_cap -= 30;

//Data upload function
void task(){
  String path[4] = {"/batt", "/sanitizer1", "/sanitizer2", "/process"};
  int data[4] = {batt, hand_cap, chamber_cap, process};
  for (uint8_t i = 0; i < 4; i++){
    if (Firebase.setInt(firebaseData, path[i] , data[i]))
      Serial.println("----------Set result-----------");
      Serial.println("PATH: " + firebaseData.dataPath());
      Serial.println("TYPE: " + firebaseData.dataType());
      Serial.print("VALUE: ");
      Serial.println("----------Can't set data--------");
      Serial.println("REASON: " + firebaseData.errorReason());

Mobile Application Source Code

Compile the code using Android Studio and generate an APK. Configure the Firebase credentials according to your database credentials.


Feroz Fernando

Feroz Fernando

3 projects • 2 followers
Electrical engineering student
Andre S. Manurung

Andre S. Manurung

1 project • 1 follower


Add projectSign up / Login