Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Kamera Pengawasan Jarak Jauh Seluler

Komponen dan persediaan

SparkFun Arduino Pro Mini 328 - 5V/16MHz
× 1
Ban + motor DC dengan gearbox + braket
× 1
SparkFun Dual H-Bridge driver motor L298
× 1
Raspberry Pi 3 Model B
× 1
Modul Kamera Raspberry Pi
× 1

Alat dan mesin yang diperlukan

USB ke adaptor FTDI serial FT232RL
Arduino IDE
Bor
Gergaji mata pisau halus
Obeng
Besi solder (generik)
Pemotong kawat

Tentang proyek ini

Proyek yang menarik namun rumit ini akan mencakup berbagai hal mulai dari merancang pembuatan robot, hingga konfigurasi lanjutan di linux (raspberry pi) hingga membangun aplikasi Android dan mengendalikan robot.

Jadi ini dikatakan lebih ambisius daripada proyek rata-rata, tetapi saya pikir Anda harus banyak belajar dengan memeriksa beberapa ide di sini atau bahkan mereplikasi seluruh proyek.

Pertama kita akan membuat robot menggunakan plexiglass, lembaran plastik, motor DC dengan gearbox dan berbagai komponen elektronik. Perangkat akan dapat menggerakkan dua roda depan secara independen dan dapat menggunakan lampu depannya. Kemudian kita akan mengatur raspberry pi yang memberi daya pada robot dan mengonfigurasi proyek dan menginstal berbagai dependensi. Kemudian kita akan membuat dan menginstal aplikasi android dan menggunakannya untuk mengontrol robot dari jarak jauh menggunakan kamera dan koneksi wifi.

Teknologi dan konsep akan dieksplorasi di sini :

Platform pengembangan:Arduino, Raspberry pi, Android

Elektronik:H-bridge, menggunakan transistor untuk menggerakkan beban besar, sensor inframerah

Linux :menggunakan buruh pelabuhan, menulis buruh pelabuhan, mengonfigurasi layanan menggunakan systemctl, streaming video

Pemrograman:Aplikasi Android, python, bahasa arduino, komunikasi serial, MQTT

Langkah 1:Hal yang Diperlukan

Bagian:

1. Lembar kaca plexiglass

2. Lembaran plastik ( Anda juga dapat menggunakan lembaran plexiglass di sini )

3. Lem

4. Ban + Motor DC dengan gearbox + braket. Mur dan baut kecil, spacer logam heksagonal

6. 2 x ban roda arah apa pun

7. Senter LED kecil (akan diubah menjadi lampu depan)

8. Arduino pro mini 328p

9. 2 x sensor penghalang inframerah

10. PCB

11. Transistor NPN (untuk menggerakkan senter)

12. L7805CV 5V regulator

13. L298 H-jembatan

14. Resistor 220 Ohm

15. Konektor usb pria

16. Konektor micro usb pria

17. Berbagai kabel

18. Regulator 3 v (untuk komunikasi antara arduino dan raspberry pi)

19. Konektor PCB pria &wanita

20. Sakelar hidup/mati

21. Konektor LiPo perempuan XT-60

22. Baterai LiPo 2S 1300 mAh dengan konektor XT-60

23. Baterai 5v

24. Raspberry Pi 3

25. Kartu Raspberry Pi

26. Casing Raspberry Pi

27. Kamera Raspberry Pi

Alat: 1. USB to serial FTDI adapter FT232RL untuk memprogram arduino pro mini

2. Arduino IDE

3. Bor

4. Mata gergaji halus

5. Obeng

6. Besi solder

7. Pemotong kawat

Keterampilan:

1. Solder, cek tutorial ini

2. Pemrograman arduino dasar, semoga tutorial ini bermanfaat

3. Konfigurasi layanan Linux, instalasi paket

Langkah 2:Membangun Platform Robot

Robot kita akan membangun akan memiliki spesifikasi berikut :

- Ini akan memiliki traksi di roda depan oleh dua motor DC terpisah

- roda belakang harus bisa bergerak 360 derajat ke segala arah

- arah akan dikendalikan dengan memvariasikan kecepatan pada roda depan sehingga tidak diperlukan mekanisme arah secara terpisah, juga robot akan dapat berputar di tempat

- ada lampu di atasnya

- harus memiliki cukup ruang untuk elektronik, baterai, dan kotak raspberry pi dengan kamera

- ground clearance beberapa cm diperlukan untuk mengatasi rintangan kecil

Jangan lupa untuk memeriksa gambar untuk detail penting dan tips membangun.

Kami akan membuat robot dari kaca plexiglass atau plastik keras, saya telah menggunakan keduanya tetapi Anda dapat memilih apa pun yang Anda inginkan.

Pelat dasar akan menjadi 18 x 13 cm pada pelat dasar mesin DC akan dipasang dengan mur dan baut braket logam. H-bridge akan dipasang di tengah pelat yang menghadap ke lantai. Roda belakang akan dipasang menggunakan spacer logam heksagonal 2 cm (satu sisi jantan satu sisi betina)

Sebuah lubang besar di dekat H-bridge diperlukan untuk menghubungkan elektronik di sisi atas.

Bagian atas robot akan terdiri dari dua pelat berbentuk "L" yang satu berukuran 12 x 13 cm dan yang lainnya berukuran 6,5 x 13 cm. Pelat plastik akan direkatkan. Pelat ini akan memberikan penutup untuk elektronik, tempat untuk memasang lampu depan dan dukungan untuk kasing raspberry pi. Bagian atas akan dipasang dari bagian bawah menggunakan spacer logam heksagonal 6 cm )

Langkah 3:Membangun Elektronik

Pinout (arduino):

Senter yang dipimpin:D3

Motor kiri:PWM (D5), EN1, EN2(A4, A5)

Motor kanan:PWM (D6), EN1, EN2(A3, A2)

Sensor inframerah:Depan (A0), Belakang (A1)

Pin komunikasi raspberry pi:Tx:D11, Rx:D10

Membangun PCB, perakitan

1. Pada langkah terakhir kami telah mengakomodasi H-bridge di sisi lantai robot. Kita juga perlu memasang dua sensor inframerah satu di depan dan satu di belakang. Kami akan memasangnya di sasis menggunakan pelat logam kecil. Pelat logam akan menjadi seperti bentuk "L", dan akan memiliki dua lubang. Menggunakan mur dan baut kita akan memasangnya pada sasis. Sensor akan berada di tengah sasis, satu di depan dan satu di belakang.

2. Selanjutnya lampu depan bagian, saya telah menggunakan senter led 5 volt untuk ini. Saya telah memotong lampu depan yang hanya memperlihatkan bagian "kepala" dan menyolder dua kabel untuk menyalakannya. Kemudian saya merekatkan lampu depan di tengah bagian atas robot dan mengebor lubang di dekat lampu, memasukkan kabel melalui lubang dan menyolder konektor dua kabel perempuan kecil ke sana.

3. Merakit casing raspberry pi. Anda memerlukan raspberry pi, kamera pi, kartu memori minimal 4 GB, konektor kamera pi. Masukkan kartu yang sudah terpasang Raspian terbaru, lalu ambil konektor kamera pi masukkan dengan hati-hati pada raspberry pi, lalu masukkan ke dalam kamera, lalu tutup casing.

Jika Anda tidak tahu cara menginstal sistem operasi Raspian, periksa tautan ini.

Untuk informasi lebih lanjut tentang cara memasang kamera dan mengaktifkannya, periksa artikel resmi ini.

4. Membangun PCB dengan komponen elektronik utama. Saya telah melampirkan skema fritzing dalam format fzz dan sebagai gambar. Anda dapat menggunakannya sebagai referensi tentang cara membuat elektronik.

Langkah menyolder:

a. Potong konektor PCB female, ada dua konektor 12 pin untuk mikrokontroler dan dua konektor 5 pin, ada dua konektor 3 pin untuk sensor IR, konektor enam pin untuk H-bridge dan konektor pin untuk komunikasi raspberry pi (tanah, TX, RX) b. Setelah semua konektor dipotong harus disolder di bagian belakang PCB

c. Solder konektor KF301-2P

d. Solder tranzistor NPN dan resistor yang sesuai ke dasarnya

e. Solder regulator L7805CV 5V

f. Solder regulator 3,3 volt di jalur arduino ke raspeberry pi TX

g. Solder pin male ke arduino pro mini

h. Solder semua kabel tipis merah(+), hitam(-), dan putih(sinyal) sesuai dengan skema fritzig

i. Solder konektor laki-laki ke papan tempat memotong roti untuk senter

5. Konektor

a. Buat konektor dari paket baterai USB 5V ke raspberry pi dan arduino, Anda akan memerlukan konektor USB pria tipe A, konektor micro usb pria kabel hitam dan merah, tabung heat shrink, dan konektor papan tempat memotong roti wanita ke wanita. Pertama potong konektor female to female menjadi dua, bagian ini akan masuk ke pin arduino negatif dan positif male. Konektor USB tipe A akan mengirimkan daya ke arduino dan juga ke raspberry pi menggunakan konektor micro usb. Periksa gambar untuk tips menyolder usb.

b. Bangun konektor ke baterai LiPo ke papan elektronik, Anda akan memerlukan konektor LiPo betina XT-60, kabel merah dan hitam, tabung panas menyusut dan sakelar kecil yang mampu menangani 10 A. Kabel hitam akan terhubung langsung dari XT-60 ke papan elektronik (konektor sekrup colokan KF301-2P), kabel merah akan dihubungkan melalui sakelar kecil

c. Hubungkan dua sensor IR robot ke konektor perempuan yang sesuai pada PCB menggunakan konektor papan tempat memotong roti perempuan - laki-laki

d. Hubungkan H-bridge ke konektor perempuan 6 pin ke PCB menggunakan konektor papan tempat memotong roti laki-laki - perempuan

e. Hubungkan terminal positif dan negatif motor ke jembatan-H

f. Hubungkan catu daya utama H-bridge ke konektor sekrup konektor KF301-2P pada PCB

6. Sebelum menempatkan arduino ke PCB periksa kembali semuanya menggunakan kaca pembesar dan multimeter

Langkah 4:Kode Arduino

Pertama saya harus menjawab pertanyaan penting: Mengapa lapisan arduino perantara harus ada dan tidak langsung menghubungkan Pi ke elektronik?

1. Ini lebih modular, Anda dapat menggunakan kembali robot arduino di proyek lain tanpa PI

2. Demi keamanan, lebih murah mengganti 3$ arduino pro mini daripada mengganti Pi (35$)

3. Sebuah arduino tidak diinterupsi oleh sistem operasi seperti pi, jadi lebih efisien untuk mengimplementasikan kontrol PWM untuk motor, mengumpulkan sensor depan dan belakang beberapa kali per detik

4. Jika kesalahan mungkin terjadi pada skrip python, robot mungkin berjalan selamanya menguras baterai dan mungkin merusaknya atau terbakar jika tidak diawasi, dalam sketsa arduino perlindungan itu lebih dapat diandalkan karena tidak tergantung pada sistem operasi

5. Lebih mudah untuk men-debug sistem yang dipisahkan

Ok, jadi saya sudah membahas bagian Mengapa, saya akan menjelaskan sedikit sketsa arduino. Ini pada dasarnya melakukan dua hal:

1. Itu menerima perintah motor dan ringan dari jalur serial dan kendarai motor atau matikan lampu

Misalnya:

* "L:-25:16; " berarti (-25 kiri), dan (16 daya), itu akan diterjemahkan ke motor kiri 17% dan motor kanan 32%, dan arah maju * "M:44:19; " berarti (44 ke kanan) dan (19 daya) itu akan diterjemahkan ke:motor kiri 38%, motor kanan 5% dan arah maju

* "L:1; " berarti lampu dan "L:0 " matikan

2. Ini mensurvei sensor inframerah dari belakang dan depan robot dan mengirim data tentang jarak melalui jalur serial

Pertama, Anda harus mengunduh dan menginstal perpustakaan ini:

Kode utama terletak di repositori github di sini, atau dari Anda dapat menyalinnya dari bawah.

Unggah kode ke arduino menggunakan adaptor FTDI. Sekarang Anda dapat memberikan perintah robot untuk melihatnya bekerja, untuk ini cukup sambungkan saluran seri kedua dan kirimkan motor atau cahaya melaluinya. Salah satu cara untuk melakukannya adalah dengan menggunakan modul bluetooth seperti HC-05 dan menghubungkannya ke telepon menggunakan aplikasi bluetooth. Kemudian berikan perintah serial seperti "L:1"

// sumber untuk TextMotorCommandsInterpretter:"https://github.com/danionescu0/arduino/tree/master/libraries/TextMotorCommandsInterpretter" #include  #include  const char MOTOR_COMMAND ='M'; const char LIGHT_COMMAND ='L'; /** * berapa lama perintah motor akan berlaku dalam ms * perintah motor yang masuk akan bertahan untuk maxDurationForMottorCommand * jika tidak akan direset oleh perintah motor lain */ const long maxDurationForMottorCommand =300; // sesuaikan nilai ini untuk membatasi kecepatan robot const byte maxPwmValue =230; // Berapa lama antara transmisi jarak yang berurutan dalam ms const long transmissionInterval =500; const int maxObstacleDetection =1000; // pembacaan analog nilai deteksi maks const int minObstacleDetection =500; // analog read min nilai deteksi const byte FLASH_PIN =3; const byte RIGHT_MOTOR_PWM_PIN =5; const byte RIGHT_MOTOR_EN1_PIN =A4; const byte RIGHT_MOTOR_EN2_PIN =A5; byte const LEFT_MOTOR_PWM_PIN =6; byte const LEFT_MOTOR_EN1_PIN =A3; byte const LEFT_MOTOR_EN2_PIN =A2; const byte FRONT_DISTANCE_SENSOR =A0; const byte BACK_DISTANCE_SENSOR =A1; SoftwareSerial masterComm(11, 10); // RX, TX TextMotorCommandsInterpretter motorCommandsInterpretter(-50, 50, -50, 50); String perintah saat ini; waktu terakhir Diperiksa; Waktu Transmisi yang lama; boolean inMotion =salah; void setup() { Serial.begin(9600); masterComm.begin(9600); masterComm.setTimeout(10); pinMode(FLASH_PIN, OUTPUT); pinMode(LEFT_MOTOR_PWM_PIN, OUTPUT); pinMode(LEFT_MOTOR_EN1_PIN, OUTPUT); pinMode(LEFT_MOTOR_EN2_PIN, OUTPUT); pinMode(KANAN_MOTOR_PWM_PIN, OUTPUT); pinMode(RIGHT_MOTOR_EN1_PIN, OUTPUT); pinMode(RIGHT_MOTOR_EN2_PIN, OUTPUT); lastCheckedTime =milis(); lastTransmitTime =milis(); } void loop() { if (masterComm.available()> 0) { currentCommand =masterComm.readString(); prosesPerintah(); } if (inMotion &&milis() - lastCheckedTime> maxDurationForMottorCommand) { stopMotors(); } if (milis() - lastTransmitTime> transmitingInterval) { lastTransmitTime =milis(); masterComm.print(getObstacleData()); Serial.print(analogRead(BACK_DISTANCE_SENSOR));Serial.print("---"); Serial.println(getObstacleData()); } /* UNTUK DEBUG motorCommandsInterpretter.analizeText("M:-14:40;"); Serial.write("Left==");Serial.println(motorCommandsInterpretter.getPercentLeft()); Serial.write("Kanan==");Serial.println(motorCommandsInterpretter.getPercentRight()); delay(10000);*/ } String getObstacleData() { int frontDistance =analogRead(FRONT_DISTANCE_SENSOR); int backDistace =analogRead(BACK_DISTANCE_SENSOR); frontDistance =peta(frontDistance, maxObstacleDetection, minObstacleDetection, 0, 10); backDistace =peta(backDistace, maxObstacleDetection, minObstacleDetection, 0, 10); return String("F=" + String(Jarak Depan) + ":B=" + String(Jarak Belakang) + ";"); } void processCommand() { switch (currentCommand.charAt(0)) { case (MOTOR_COMMAND):steerCar(); merusak; case (LIGHT_COMMAND):toggleLight(currentCommand.charAt(2)); merusak; } } void steerCar() { motorCommandsInterpretter.analizeText(currentCommand); float persenLeftMotor =motorCommandsInterpretter.getPercentLeft(); float persenRightMotor =motorCommandsInterpretter.getPercentRight(); Serial.write("Left=");Serial.println(percentLeftMotor); Serial.write("Kanan=");Serial.println(percentRightMotor); setMotorsDirection(motorCommandsInterpretter.getDirection()); analogWrite(LEFT_MOTOR_PWM_PIN, persenLeftMotor * maxPwmValue); analogWrite(RIGHT_MOTOR_PWM_PIN, persenRightMotor * maxPwmValue); inMotion =benar; lastCheckedTime =milis(); } void setMotorsDirection(boolean forward) { if (forward) { digitalWrite(LEFT_MOTOR_EN1_PIN, HIGH); digitalWrite(LEFT_MOTOR_EN2_PIN, RENDAH); digitalWrite(RIGHT_MOTOR_EN1_PIN, TINGGI); digitalWrite(RIGHT_MOTOR_EN2_PIN, RENDAH); } else { digitalWrite(LEFT_MOTOR_EN1_PIN, RENDAH); digitalWrite(LEFT_MOTOR_EN2_PIN, TINGGI); digitalWrite(RIGHT_MOTOR_EN1_PIN, RENDAH); digitalWrite(RIGHT_MOTOR_EN2_PIN, TINGGI); } } void stopMotors() { Serial.println("Menghentikan motor"); analogWrite(LEFT_MOTOR_PWM_PIN, 0); analogWrite(RIGHT_MOTOR_PWM_PIN, 0); inMotion =salah; } void toggleLight(perintah char) { Serial.println("Toggle light"); if (perintah =='1') { digitalWrite(FLASH_PIN, HIGH); } else { digitalWrite(FLASH_PIN, RENDAH); } }  

Langkah 5:Menginstal dan Mengonfigurasi Proyek dan Ketergantungan Raspberry Pi

Bagaimana cara kerjanya:

Anda akan melihat diagram dari apa yang akan saya coba jelaskan di atas pada gambar terlampir.

a. Aplikasi android menunjukkan streaming uv4l di dalam tampilan web. Proses uv4l berjalan pada raspberry pi, menangkap input video dari kamera dan mengalirkannya. Ini adalah alat yang luar biasa dengan banyak fitur

b. Menggunakan kontrol di dalam lampu aplikasi android dan perintah mesin dikeluarkan ke server MQTT

c. Server python di dalam wadah buruh pelabuhan pada raspberry pi mendengarkan perintah MQTT dan meneruskannya menggunakan antarmuka serial ke arduino. Papan arduino mengontrol motor dan lampu.

d. Arduino mendeteksi jarak di depan dan belakang robot dan mengirimkan data melalui antarmuka serial ke server python, python meneruskannya ke MQTT dan diambil oleh antarmuka android dan ditampilkan kepada pengguna

Pertama hal yang Anda perlukan Raspbian yang terinstal dan terkonfigurasi sepenuhnya pada raspberry pi, dan kamera harus terhubung dan dikonfigurasi secara psikis. Juga semua konfigurasi akan dilakukan menggunakan ssh, jadi ada baiknya untuk mengonfigurasinya.

Kami tidak dapat membahas semua hal dasar di sini, tetapi cobalah tautan ini jika perlu:

Jika Anda tidak tahu cara menginstal sistem operasi Raspbian, periksa tautan ini. Untuk informasi lebih lanjut tentang cara memasang kamera dan mengaktifkannya, periksa artikel resmi ini.

Untuk cara mengkonfigurasi ssh di Raspbian, periksa ini.

Jika Anda ingin mengontrol robot Anda menggunakan aplikasi android dari luar wifi, Anda harus mempertimbangkan penerusan porta pada router wifi Anda, jika tidak, Anda akan dibatasi untuk menggunakan alamat ip lokal di dalam wifi Anda.

Untuk mengetahui alamat ip lokal Anda di raspberry pi gunakan "ifconfig":

ifconfig ......... eth0 Link encap:Ethernet HWaddr b8:27:eb:16:e7:ff inet6 addr:fe80::ff00:f22f:9258:b92b/64 Cakupan:Tautkan BROADCAST MULTICAST MTU:1500 Metrik:1 Paket RX:0 kesalahan:0 jatuh:0 kelebihan:0 bingkai:0 Paket TX:0 kesalahan:0 jatuh:0 kelebihan:0 pembawa:0 tabrakan:0 txqueuelen:1000 RX byte :0 (0.0 B) TX byte:0 (0.0 B) ........ wlan0 Link encap:Ethernet HWaddr 00:c1:41:00:10:f6 inet addr:192.168.0.102 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr:fe80::e1f4:5112:9cb2:3839/64 Cakupan:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Paket RX:1678396 error:0 turun:0 overrun:0 frame:0 TX paket:381859 kesalahan:0 jatuh:0 kelebihan:0 pembawa:0 tabrakan:0 txqueuelen:1000 RX byte:259428527 (247.4 MiB) TX byte:187573084 (178.8 MiB) .....  

Kami tertarik pada wlan0 inet addr, dalam kasus kami "192.168.0.102"

Port yang akan diteruskan (default) adalah:9090 untuk uv4l dan 1883 untuk mosquitto. Anda dapat meneruskan port ini ke port output yang sama jika port tersebut tidak diblokir dari firewall penyedia internet atau beberapa port lain.

Port forwarding adalah sesuatu yang dilakukan secara berbeda di setiap router, berikut beberapa tutorialnya:ini, dan Anda juga dapat mencoba mencari di google "port forwarding your_router_model " untuk melihat hasil yang lebih relevan.

Prasyarat:

a. instal git menggunakan baris perintah

b. kloning proyek github di folder rumah:

Lokasi folder itu penting karena di docker-compose.yml lokasinya dikodekan secara keras seperti:/home/pi/robot-camera-platform:/root/debug Jika Anda perlu mengubah lokasi, silakan ubah nilainya di docker-compose juga

git clone https://github.com/danionescu0/robot-camera-platform.git  

C. nonaktifkan konsol serial pi, jika Anda tidak tahu cara melakukannya, periksa tautan ini

Instal streaming UV4l:

chmod +x uv4l/install.sh chmod +x uv4l/start.sh sh ./uv4l/install.sh  

Jika gagal atau Anda perlu mengetahui detail lebih lanjut tentang uv4l, lihat tutorial ini.

Konfigurasi:

a. dengan mengedit uv4l/start.sh Anda dapat mengonfigurasi aspek streaming video berikut:kata sandi, port, kecepatan bingkai, dengan, tinggi, rotasi, dan beberapa aspek kecil lainnya

b. edit config.py dan ganti sandi dengan kata sandi Anda sendiri yang telah Anda tetapkan di server mosquitto

c. edit docker-container/mosquitto/Dockerfile dan ganti baris ini

Jalankan mosquitto_passwd -b /etc/mosquitto/pwfile pengguna your_password 

dengan pengguna dan kata sandi Anda sendiri untuk mosquitto

d. edit config.py dan ganti port serial dan baud rate dengan Anda sendiri, saya sarankan Anda tetap menggunakan baud rate. Jika ingin merubahnya jangan lupa edit di arduino-sketch juga

Uji penginstalan uv4l. Mulai:

sh ./uv4l/start.sh  

b. Uji di browser di alamat:http://your_ip:9090/stream

c. Hentikan

sudo pkill uv4l  

Instal docker dan docker-compose

Tentang instalasi buruh pelabuhan:https://www.raspberrypi.org/blog/docker-comes-to-...

Tentang instalasi docker-compose:https://www.raspberrypi.org/blog/docker-comes-to-...

Layanan memulai otomatis saat reboot/startup

Dengan membuat layanan mulai otomatis, Anda tidak perlu login secara manual melalui ssh dan kemudian mengaktifkan semua layanan dengan tangan, kami akan melakukannya menggunakan systemctl.

a. Salin file dari folder systemctl di folder systemctl ke /etc/systemd/system/

b. Aktifkan layanan

sudo systemctl aktifkan robot-camera.service sudo systemctl aktifkan robot-camera-video.service  

c. Mulai ulang

d. Opsional, periksa status:

sudo systemctl status robot-camera.service sudo systemctl status robot-camera-video.service  

Step 6:Configuring and Building the Android Application

We're all most done, in this step we're going to install the android application. These are all the prerequisites:

1. Clone the github project:

git clone https://github.com/danionescu0/android-robot-camera  

The next steps involves setting up your environment, i'll just enumerate them and give a link to a specialized tutorial, in case you don't know how to do it.

2. Enable developer options on your android phone. You can find out more here:https://developer.android.com/studio/debug/dev-opt...

3. Download and install Android studio:https://developer.android.com/studio/index.html?ut... and this https://www.javaworld.com/article/3095406/android/...

4. Import project :https://developer.android.com/studio/intro/migrate...

Now we're going to configure the the streaming and MQTT credentials:

5. Edit ./app/src/main/values/passwords.xml and configure MQTT and streaming

The MQTT host should be something like:1883

The streaming host should be something like:

6. Upload and run the application

Step 7:Using the Robot and Debugging

Using the app

The application has only a main screen, in the left of the screen the streamming image is displayed. On the right

there are the controls. The main control is a steering wheel, touch the steering wheel in the direction you wish the robot to move. Below the steering wheel there is a headlight button, touch it to toggle the light.

In the top right corner there is a text like :"- Batt Connected".

* First dash means no obstacles, if there is an obstacle in front or in the back of the robot it will be signaled with a small arrow pointing in front or in the back.

* The "Batt" status is not implemented yet.

* "Connected" means that MQTT server is connected so the robot can be used, the other possible value is "Disconnected"

Debugging can be done on multiple layers:

1. On the arduino layer

- Connect the FTDI adapter to the second serial line to the laptop (RX to pin 11 and TX to pin 10) and issue motor commands and light commands to see if the robot responds to these commands

- Double check the connections, if the motors are moving backwards reverse the both motor wires, if one motor is moving backwards reverse the it's wires

- Check if the arduino is connected properly to the H-bridge, check this link for more information

2. On the rasberry pi layer

- Check docker is running the two containers (mosquitto and python server)

pi@raspberrypi:~ $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 473a56da2230 dockercontainer_python-server "python /root/debu..." 9 months ago Up 4 hours dockercontainer_python-server_1 3e0b1933d310 robot-camera-mosquitto "/usr/bin/entry.sh..." 9 months ago Up 4 hours 0.0.0.0:1883->1883/tcp dockercontainer_mosquitto_1  

- Check the processes are running on specified ports, you should look for 9090 (streamming) and 1883 (mosquitto)

pi@raspberrypi:~ $ netstat -nltp (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:9090 0.0.0.0:* LISTEN - tcp 0 0 0.0.0.0:5900 0.0.0.0:* LISTEN - tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN - tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN - tcp6 0 0 :::1883 :::* LISTEN - tcp6 0 0 :::5900 :::* LISTEN - tcp6 0 0 :::22 :::* LISTEN -  

- Check the serial port exists (it's the correct one) and it's specified in the project config.py

pi@raspberrypi:~ $ ls -l /dev/ttyS0 crw-rw---- 1 root dialout 4, 64 Jan 14 19:59 /dev/ttyS0  

- Stop the docker process and manually connect to serial using picocom

Then issue motor and light commands directly to see if the robot responds

sudo systemctl start robot-camera.service picocom -b 9600 /dev/ttyS0 # now issue motor and light commands to test the robot  

- Check if the serial console is deactivated on the raspberry pi

- Check the streaming and MQTT are accessible outside the raspberry pi suing a mosquitto client (for MQTT) and checking the streaming in a web browser)

3. Android application layer

- Check all the necessary steps to enable the phone into debugging mode (check this out)

- Make sure you've set up the passwords and endpoints correctly in the passwords.xml

- Check the streaming and MQTT are accessible outside the raspberry pi suing a mosquitto client (for MQTT) and checking the streaming in a web browser)

- See the top right corner of the app and check for "Connected"

- Use the android debugger to check for errors

Step 8:Other Use Cases, Extending the Code

Another use case is a object following robot .The robot will follow an object of a specific color and size threshold

Check above for the video.

Because this is out of scope of this tutorial i'll just give you some hints:

First install dependencies using pip, the installation process will be quite slow

sudo pip3 install -r /home/pi/robot-camera-platform/navigation/requirements.txt 

- make sure python 3.x is installed though

- In navigation/config_navigation.py you'll find:

 hsv_bounds =( (24, 86, 6), (77, 255, 255) ) object_size_threshold =(10, 100)  

HSV means hue saturation value, and for our color object detection to work it has a lower and an upper bound, our object color will have to be in this range to be detected. Here you can find a visual HSV object threshold detector.

Object size threshold means the smallest and the highest object radius size (in percents from width) which will be considered a detection.

- install and configure VNC (more information of how to install VNC here)

- Run the object tracking script in VNC graphical interface in a terminal. This will enable you to view the video, with a circle drawn over it. The circle means that the object has been detected.

python3 object_tracking.py colored-object --show-video  

OR Run the object tracking script with no video output:

python3 object_tracking.py colored-object 

I think the main advantage of this platform is versatility , it can be adapted easily to other interesting usages, some of my ideas:

- Following a person by face recognition

- Patrolling and reporting movement

- Replace the wifi with a 3G modem and the robot can be controlled outside, maybe exploring dangerous zones

This being a very complex project i assume that there will be errors, i will appreciate if you ask me anything in the comments area.

If you like my project please my youtube channel for more interesting stuff.

Kode

Android application
https://github.com/danionescu0/android-robot-camera
Main repository for arduino, python code
https://github.com/danionescu0/robot-camera-platform

Skema

sketch_nWf7cZeUWL.fzz
Main repository for arduino, python code
The main repositoryhttps://github.com/danionescu0/robot-camera-platform
Android application
https://github.com/danionescu0/android-robot-camera

Proses manufaktur

  1. Kamera
  2. Lensa Kamera
  3. MrRobot – Robotika yang diaktifkan dengan aplikasi Seluler Ubuntu (termasuk Raspberry Pi dan arduino)
  4. Roomberry Pengawasan Robot:Roomba + Pi Zero + Kamera
  5. Penggeser Kamera Bermotor yang Dikendalikan Bluetooth Arduino
  6. Giroskop Menyenangkan dengan NeoPixel Ring
  7. Kontrol Jarak Jauh Universal menggunakan Arduino, 1Sheeld, dan Android
  8. Pengontrol Game Arduino
  9. Pixie:Jam Tangan NeoPixel Berbasis Arduino
  10. Pengenalan dan Sintesis Ucapan dengan Arduino