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

Otto DIY membuat robot Anda sendiri dalam satu jam!

Komponen dan persediaan

Otto DIY Builder Kit
× 1
Otto DIY Arduino NANO Shield I/O
× 1
Arduino Nano Every
× 1
Kabel USB-A ke Mini-USB
× 1
Motor servo mikro SG90
× 4
Buzzer
× 1
Kabel Jumper Wanita/Wanita
× 6
Otto DIY 8x8mm Micro Switch Self lock On/Off
× 1
tempat baterai 4xAA
Baterai Tumpuk 2X 4AA
× 1
Baterai AA
× 1

Alat dan mesin yang diperlukan

Printer 3D (generik)
obeng Phillips Cross

Aplikasi dan layanan online

Arduino IDE
Editor Web Arduino
Ekstensi Kode Microsoft Visual Studio untuk Arduino

Tentang proyek ini

Siapa Otto?

Robot interaktif yang bisa dibuat siapa saja!

Apa yang bisa Otto lakukan?

Otto berjalan, menari, membuat suara, dan menghindari rintangan.

Mengapa Otto istimewa?

Otto sepenuhnya open source, kompatibel dengan Arduino, dapat dicetak 3D, dan dengan misi dampak sosial untuk menciptakan lingkungan yang inklusif bagi anak-anak.

Otto terinspirasi oleh robot lain yang dapat diinstruksikan BoB BiPed dan diprogram menggunakan kode dari robot biped open source lain yang disebut Zowi.

CC-BY-SA

Perbedaan Otto terletak pada ukuran rakitan (11cm x 7cm x12cm), integrasi komponen dan ekspresi yang lebih bersih. Dengan menggunakan rak dan komponen cetak 3D, koneksi elektronik sederhana (hampir tidak diperlukan pengelasan), dan keterampilan pengkodean dasar, Anda akan dapat membangun teman Otto lucu Anda sendiri hanya dalam satu jam! atau bahkan kurang

Otto dirancang menggunakan Autodesk 123D Design, sekarang perangkat lunak ThinkerCAD Anda dapat memodifikasinya untuk penyesuaian atau peningkatan lebih lanjut!

Langkah demi langkah ini berfokus pada cara membuat Otto DIY versi sederhana; ya, ada robot bipdeal yang lebih canggih seperti Otto DIY+ atau Tito

Langkah 1:Pertama kumpulkan semua bagian dan alat

Kumpulkan semua bagian perangkat keras yang Anda perlukan untuk perakitan ini.

papan roti mini adalah alternatif untuk pelindung tetapi lebih banyak kabel dan waktu yang dibutuhkan

Maka Anda hanya perlu mencetak 3D total 6 bagian:

11. Kepala cetak 3D.

12. Badan cetak 3D.

13. Kaki cetak 3D x2.

14. Kaki cetak 3D x2

Opsional:pemotong untuk pembersihan pasca bagian 3D (jika kualitas cetak 3D cukup baik tidak perlu) dan besi solder (jika Anda menginginkannya, daya baterai jika tidak, masih dapat menghubungkannya melalui USB untuk memberi energi)

Itu semua sederhana!; unduh semua file .stl , Jika Anda tidak memiliki printer 3D, Anda selalu dapat mengakses ruang pembuat lokal Anda.

Jika Anda tidak memiliki atau sulit untuk mendapatkan bagian tersebut, Anda dapat membeli kit lengkap kami kunjungi www.ottodiy.com

Setelan cetak 3D

Otto dirancang dengan sangat baik untuk pencetakan 3D, file yang telah Anda unduh berorientasi properti dan terpusat, jadi Anda tidak akan kesulitan jika mengikuti parameter umum ini:

  • Disarankan untuk menggunakan printer 3D FDM dengan bahan PLA.
  • Tidak perlu penyangga atau rakit sama sekali.
  • Resolusi:0,15mm
  • Kepadatan isi 20%

Untuk mengiris dan menghasilkan kode g untuk perangkat lunak pengiris gratis mesin seperti Cura atau dalam kasus kami FlashPrint yang dilengkapi dengan printer FlashForge Finder 3D yang kami gunakan (Jika Anda mengalihdayakan pencetakan, tidak perlu khawatir)

Setelah mencetak, Anda perlu membersihkan sedikit bagian kaki dan kaki yang memperbaiki motor.

Periksa suku cadang Anda

Seperti disebutkan pada langkah 2, motor servo mikro dilengkapi dengan 3 sekrup pada gambar sekarang disertakan dan mengatur ulang nomor bagian agar mudah dibaca.

Ingatlah untuk memasang magnet pada obeng mini Anda.

Unduh atau cetak instruksi manual atau cukup ikuti video ini:

Perakitan servo kaki

Letakkan servo mikro di dalam kaki dan kemudian dorong ke dalam, jika terlalu keras mungkin perlu membersihkan lebih banyak area dengan pemotong.

Sangat penting untuk memeriksa bahwa servo dapat berputar setidaknya 90 derajat ke setiap sisi.

Setelah memeriksa gerakannya, gunakan hanya sekrup kecil untuk memperbaikinya.

Proses yang sama untuk kaki lainnya.

Perbaiki Servo ke Tubuh

Ambil 2 servo mikro lainnya, letakkan di lokasi yang ditentukan dalam bodi cetak 3D dan perbaiki hanya dengan sekrup runcing.

Perbaiki Kaki ke Tubuh

Hubungkan kaki ke hub mikro servo, yang penting seperti servo kaki Anda harus memeriksa apakah kaki dapat berputar 90 derajat setiap sisi terhadap tubuh.

Setelah memverifikasi keselarasan, perbaiki menggunakan sekrup kecil ke lubang di dalam kaki.

Perbaiki Kaki ke Kaki

Merawat kabel seperti terlihat pada ilustrasi sebaiknya kabel dimasukkan ke dalam slot body melewati lubang kaki.

Setelah berada di posisi yang tepat, gunakan sekrup runcing untuk memasangnya dari belakang.

Rakitan kepala

Mulai dari sensor ultrasound yang penting untuk mengeluarkan mata hingga batasnya.

Setelah memasang Arduino nano di pelindung, Anda dapat mengelas kabel positif dudukan baterai ke Vin di papan dan negatif ke GND apa pun.

Masukkan secara diagonal kedua papan bersama-sama menghadap ke konektor USB ke lubang di kepala cetak 3D, lalu gunakan 2 sekrup runcing terakhir untuk memperbaikinya.

Langkah 9:Sambungan listrik

Siapkan kabel DuPont, sakelar mikro, dan buzzer.

Kemudian ikuti nomor pin diagram dan pastikan untuk meletakkannya di posisi yang tepat.

Jika Anda tidak memiliki atau menemukan pelindung Arduino Nano, gunakan papan roti dan ikuti diagram sirkuit ini Sirkuit TinkerCAD

Kode dengan Blok

Anda selalu dapat mencoba kode sumber Arduino dari Otto Wikifactory.

Di sini Anda dapat menemukan beberapa tutorial gratis bagi pemula untuk memulai dengan cepat Arduino untuk setiap komponen:

- Tutorial Motor Servo:https://arduinogetstarted.com/tutorials/arduino-servo-motor
- Tutorial Sensor Ultrasonik:https://arduinogetstarted.com/tutorials/arduino-ultrasonic-sensor
- Sentuh Tutorial Sensor:https://arduinogetstarted.com/tutorials/arduino-touch-sensor
- Tutorial Buzzer:https://arduinogetstarted.com/tutorials/arduino-piezo-buzzer

Kunjungi www.ottodiy.com

Versi Otto DIY+ memiliki lebih banyak kemungkinan menggunakan Bluetooth, lebih banyak sensor, dan interaksi.

posting remix dan modifikasi Anda di Wikifactory

Kode

  • Hindari rintangan
Hindari rintanganArduino
Otto akan berjalan tanpa henti sampai melihat rintangan dalam jangkauan, akan terkejut, kembali berbelok dan kemudian melanjutkan berjalan
//---------------------- ------------------------------------------//-- Zowi basic firmware v2 disesuaikan dengan Otto//-- (c) BQ. Dirilis di bawah lisensi GPL//-- 04 Desember 2015//-- Penulis:Anita de Prado:[email protected]//-- Jose Alberca:[email protected]//-- Javier Isabel:[email protected]//-- Juan Gonzalez (obijuan):[email protected]//-- Irene Sanz :[email protected]//---------- -------------------------------------------------- --//-- Bereksperimenlah dengan semua fitur yang dimiliki Otto berkat Zowi!//--------------------------- --------------------------------------#include  #include #include #include #include #include #include  #include OttoSerialCommand SCmd; //Objek SerialCommand//-- Otto Library#include Otto Otto; //Ini Otto!//------------------------------------------ ---------------//-- Langkah pertama:Konfigurasikan pin tempat servo terpasang/* --------------- | O O | |---------------|YR 3==> | | <==YL 2 --------------- || || || ||RR 5==> ----- ------ <==RL 4 |----- ------|*/ #define PIN_YL 2 //servo[0] #define PIN_YR 3 //servo[1] #define PIN_RL 4 //servo[2] #define PIN_RR 5 //servo[3]//---Otto Buttons#define PIN_SecondButton 6#define PIN_ThirdButton 7/////// ////////////////////////////////////////////////////////////////// ////////////-- Variabel Global ---------------------------------- ---------////////////////////////////////////////////////////////// ////////////////////////////const char programID[]="Otto_todo"; //Setiap program akan memiliki IDconst char name_fac='$'; //Nama pabrikconst char name_fir='#'; //Nama depan//-- Parameter gerakanint T=1000; //Durasi awal pergerakanint moveId=0; //Jumlah gerakanint moveSize=15; //Terkait dengan ketinggian beberapa gerakan//-------------------------------------------------- ------------------//-- Otto memiliki 5 mode://-- * MODE =0:Otto sedang menunggu //-- * MODE =1:Mode Dancing ! //-- * MODE =2:Mode pendeteksi rintangan //-- * MODE =3:Mode pendeteksi kebisingan //-- * MODE =4:OttoPAD atau mode Teleoperasi apa pun (mendengarkan SerialPort). //------------------------------------------------ --------- volatil int MODE=0; //State of Otto di mesin state utama. volatil bool buttonPushed=false; //Variabel untuk diingat ketika tombol telah ditekan volatil bool buttonAPushed=false; //Variabel untuk diingat ketika tombol A telah ditekan volatil bool buttonBPushed=false; //Variabel untuk diingat ketika tombol B telah ditekan lama sebelumnyaMillis=0;int randomDance=0;int randomSteps=0;bool obstacleDetected =false;////////////////// ////////////////////////////////////////////////////////////////// -- Mempersiapkan ----------------------------------------------- -------/////////////////////////////////////////////////////////// //////////////////////////void setup(){ //Inisialisasi komunikasi serial Serial.begin(115200); pinMode(PIN_SecondButton,INPUT); pinMode(PIN_ThirdButton,INPUT); //Mengatur pin servo Otto.init(PIN_YL,PIN_YR,PIN_RL,PIN_RR,true); //Batalkan komentar ini untuk menyetel trim servo secara manual dan menyimpan di EEPROM //Otto.setTrims(TRIM_YL, TRIM_YR, TRIM_RL, TRIM_RR); //Otto.saveTrimsOnEEPROM(); //Batalkan komentar ini hanya untuk satu unggahan ketika Anda akhirnya mengatur trim. //Menetapkan benih acak randomSeed(analogRead(A6)); //Interrumptions enableInterrupt(PIN_SecondButton, secondButtonPushed, RISING); aktifkanInterrupt(PIN_ThirdButton, thirdButtonPushed, RISING); //Setup callback untuk perintah SerialCommand SCmd.addCommand("S", acceptStop); // sendAck &sendFinalAck SCmd.addCommand("L", menerimaLED); // sendAck &sendFinalAck SCmd.addCommand("T", recieveBuzzer); // sendAck &sendFinalAck SCmd.addCommand("M", acceptMovement); // sendAck &sendFinalAck SCmd.addCommand("H", menerimaGesture); // sendAck &sendFinalAck SCmd.addCommand("K", acceptSing); // sendAck &sendFinalAck SCmd.addCommand("C", acceptTrims); // sendAck &sendFinalAck SCmd.addCommand("G", menerimaServo); // sendAck &sendFinalAck SCmd.addCommand("D", requestDistance); SCmd.addCommand("N", requestNoise); SCmd.addCommand("B", requestBaterai); SCmd.addCommand("Saya", requestProgramId); SCmd.addDefaultHandler(receiveStop); //Otto bangun! Otto.sing(S_koneksi); Otto.rumah(); penundaan (50); // Animasi Uuuuuh - Sedikit kejutan awal //----- for(int i=0; i<2; i++){ for (int i=0;i<8;i++){ if(buttonPushed) {break;} Otto.putAnimationMouth(sedikitUuh,i); penundaan(150); } } //----- //Tersenyumlah untuk Otto yang bahagia :) if(!buttonPushed){ Otto.putMouth(smile); Otto.sing(S_bahagia); penundaan (200); } //Jika nama Otto '#' berarti Otto belum dibaptis //Dalam hal ini Otto melakukan salam yang lebih panjang //5 =Alamat EEPROM yang berisi karakter nama depan if (EEPROM.read(5)==nama_fir){ if(!tombolDitekan){ Otto.jump(1.700); penundaan (200); } if(!buttonDitekan){ Otto.shakeLeg(1,T,1); } if(!tombolDitekan){ Otto.putMouth(Kejutan kecil); Otto.swing(2,800,20); Otto.rumah(); } } if(!buttonDidorong){ Otto.putMouth(senangTerbuka); } sebelumnyaMillis =milis();}///////////////////////////////////////////////////////// //////////////////////////-- Loop Utama ------------------- --------------------------//////////////////////////////////// ///////////////////////////////////////////void loop() { //-- MODE 2 - Mode pendeteksi rintangan if(obstacleDetected){ Otto.sing(S_surprise); Otto.playGesture(OttoFretful); Otto.sing(S_fart3); Otto.walk(2.1300,-1); Otto.turn(2,1000,-1); penundaan (50); pendeteksi rintangan(); } else{ Otto.walk(1,1000,1); pendeteksi rintangan(); } } //////////////////////////////////////////////////////////////// /////////////////////-- Fungsi -------------------------- ------------------------////////////////////////////////////// ///////////////////////////////////////////-- Fungsi dijalankan ketika tombol kedua didorongvoid secondButtonPushed(){ buttonAPushed=true; if(!buttonPushed){ buttonPushed=true; Otto.putMouth(Kejutan kecil); } }//-- Fungsi dijalankan saat tombol ketiga ditekanvoid thirdButtonPushed(){ buttonBPushed=true; if(!buttonPushed){ buttonPushed=true; Otto.putMouth(Kejutan kecil); }}//-- Berfungsi untuk membaca sensor jarak &untuk mengaktualisasikan variabel yang terdeteksi variabelvoid obstacleDetector(){ int distance =Otto.getDistance(); if(jarak<15){ rintangan Terdeteksi =benar; }else{ rintangan Terdeteksi =salah; }}//-- Berfungsi untuk menerima perintah Stop.void acceptStop(){ sendAck(); Otto.rumah(); sendFinalAck();}//-- Berfungsi untuk menerima perintah LEDvoid acceptLED(){ //sendAck &berhenti jika perlu sendAck(); Otto.rumah(); //Contoh menerima perintah Bluetooth LED //L 000000001000010100100011000000000 //L 001111111111111111111111111111111 (untuk los LED encendidos) unsigned long int matrix; karakter *arg; karakter *endstr; arg=SCmd.berikutnya(); //Serial.println (arg); if (arg !=NULL) { matriks=strtoul(arg,&endstr,2); // Mengonversi string karakter menjadi bilangan bulat panjang yang tidak ditandatangani Otto.putMouth(matrix,false); }else{ Otto.putMouth(xMouth); penundaan(2000); Otto.clearMouth(); } sendFinalAck();}//-- Berfungsi untuk menerima perintah buzzervoid recieveBuzzer(){ //sendAck &berhenti jika perlu sendAck(); Otto.rumah(); kesalahan bool =salah; int frek; int durasi; karakter *arg; arg =SCmd.berikutnya(); if (arg !=NULL) { frec=atoi(arg); } // Mengonversi string char menjadi integer else {error=true;} arg =SCmd.next(); if (arg !=NULL) { durasi=atoi(arg); } // Mengonversi string char menjadi integer else {error=true;} if(error==true){ Otto.putMouth(xMouth); penundaan(2000); Otto.clearMouth(); }else{ Otto._tone(frec, durasi, 1); } sendFinalAck();}//-- Berfungsi untuk menerima perintah TRimsvoid acceptTrims(){ //sendAck &berhenti jika perlu sendAck(); Otto.rumah(); int trim_YL,trim_YR,trim_RL,trim_RR; //Definisi perintah Servo Bluetooth //C trim_YL trim_YR trim_RL trim_RR //Contoh perintah ReceiveTrims Bluetooth //C 20 0 -8 3 bool error =false; karakter *arg; arg=SCmd.berikutnya(); if (arg !=NULL) { trim_YL=atoi(arg); } // Mengonversi string char menjadi integer else {error=true;} arg =SCmd.next(); if (arg !=NULL) { trim_YR=atoi(arg); } // Mengonversi string char menjadi integer else {error=true;} arg =SCmd.next(); if (arg !=NULL) { trim_RL=atoi(arg); } // Mengonversi string char menjadi integer else {error=true;} arg =SCmd.next(); if (arg !=NULL) { trim_RR=atoi(arg); } // Mengonversi string char menjadi integer else {error=true;} if(error==true){ Otto.putMouth(xMouth); penundaan(2000); Otto.clearMouth(); }else{ //Simpan di EEPROM Otto.setTrims(trim_YL, trim_YR, trim_RL, trim_RR); Otto.saveTrimsOnEEPROM(); //Batalkan komentar ini hanya untuk satu unggahan ketika Anda akhirnya mengatur trim. } sendFinalAck();}//-- Berfungsi untuk menerima perintah Servovoid acceptServo(){ sendAck(); pindahId =30; //Definisi perintah Servo Bluetooth //G servo_YL servo_YR servo_RL servo_RR //Contoh perintah ReceiveServo Bluetooth //G 90 85 96 78 bool error =false; karakter *arg; int servo_YL,servo_YR,servo_RL,servo_RR; arg=SCmd.berikutnya(); if (arg !=NULL) { servo_YL=atoi(arg); } // Mengonversi string char menjadi integer else {error=true;} arg =SCmd.next(); if (arg !=NULL) { servo_YR=atoi(arg); } // Mengonversi string char menjadi integer else {error=true;} arg =SCmd.next(); if (arg !=NULL) { servo_RL=atoi(arg); } // Mengonversi string char menjadi integer else {error=true;} arg =SCmd.next(); if (arg !=NULL) { servo_RR=atoi(arg); } // Mengonversi string char menjadi integer else {error=true;} if(error==true){ Otto.putMouth(xMouth); penundaan(2000); Otto.clearMouth(); }else{ //Perbarui Servo:int servoPos[4]={servo_YL, servo_YR, servo_RL, servo_RR}; Otto._moveServos(200, servoPos); //Move 200ms } sendFinalAck();}//-- Berfungsi untuk menerima perintah gerakanvoid acceptMovement(){ sendAck(); if (Otto.getRestState()==true){ Otto.setRestState(false); } //Definisi Gerakan Perintah Bluetooth //M MoveID T MoveSize char *arg; arg =SCmd.berikutnya(); if (arg !=NULL) {moveId=atoi(arg);} else{ Otto.putMouth(xMouth); penundaan(2000); Otto.clearMouth(); pindahId=0; //stop } arg =SCmd.next(); if (arg !=NULL) {T=atoi(arg);} else{ T=1000; } arg =SCmd.next(); if (arg !=NULL) {moveSize=atoi(arg);} else{ moveSize =15; }}//-- Berfungsi untuk melakukan gerakan yang benar sesuai perintah gerakan yang diterima.void move(int moveId){ bool manualMode =false; switch (moveId) { kasus 0:Otto.home(); merusak; kasus 1://M 1 1000 Otto.walk(1,T,1); merusak; kasus 2://M 2 1000 Otto.walk(1,T,-1); merusak; case 3://M 3 1000 Otto.turn(1,T,1); merusak; kasus 4://M 4 1000 Otto.turn(1,T,-1); merusak; kasus 5://M 5 1000 30 Otto.updown(1,T,moveSize); merusak; case 6://M 6 1000 30 Otto.moonwalker(1,T,moveSize,1); merusak; kasus 7://M 7 1000 30 Otto.moonwalker(1,T,moveSize,-1); merusak; kasus 8://M 8 1000 30 Otto.swing(1,T,moveSize); merusak; kasus 9://M 9 1000 30 Otto.crsaito(1,T,moveSize,1); merusak; kasus 10://M 10 1000 30 Otto.crsaito(1,T,moveSize,-1); merusak; kasus 11://M 11 1000 Otto.jump(1,T); merusak; kasus 12://M 12 1000 30 Otto.flapping(1,T,moveSize,1); merusak; kasus 13://M 13 1000 30 Otto.flapping(1,T,moveSize,-1); merusak; case 14://M 14 1000 20 Otto.tiptoeSwing(1,T,moveSize); merusak; kasus 15://M 15 500 Otto.bend(1,T,1); merusak; kasus 16://M 16 500 Otto.bend(1,T,-1); merusak; kasus 17://M 17 500 Otto.shakeLeg(1,T,1); merusak; kasus 18://M 18 500 Otto.shakeLeg(1,T,-1); merusak; kasus 19://M 19 500 20 Otto.jitter(1,T,moveSize); merusak; kasus 20://M 20 500 15 Otto.ascendingTurn(1,T,moveSize); merusak; default:manualMode =benar; merusak; } if(!manualMode){ sendFinalAck(); } }//-- Berfungsi untuk menerima perintah isyaratvoid acceptGesture(){ //sendAck &berhenti jika perlu sendAck(); Otto.rumah(); //Definisi perintah Gesture Bluetooth //H GestureID int gesture =0; karakter *arg; arg =SCmd.berikutnya(); if (arg !=NULL) {gestur=atoi(arg);} else { Otto.putMouth(xMouth); penundaan(2000); Otto.clearMouth(); } switch (gesture) { case 1://H 1 Otto.playGesture(OttoHappy); merusak; kasus 2://H 2 Otto.playGesture(OttoSuperHappy); merusak; kasus 3://H 3 Otto.playGesture(OttoSad); merusak; kasus 4://H 4 Otto.playGesture(OttoSleeping); merusak; kasus 5://H 5 Otto.playGesture(OttoFart); merusak; kasus 6://H 6 Otto.playGesture(OttoConfused); merusak; kasus 7://H 7 Otto.playGesture(OttoLove); merusak; kasus 8://H 8 Otto.playGesture(OttoAngry); merusak; kasus 9://H 9 Otto.playGesture(OttoFretful); merusak; kasus 10://H 10 Otto.playGesture(OttoMagic); merusak; kasus 11://H 11 Otto.playGesture(OttoWave); merusak; kasus 12://H 12 Otto.playGesture(OttoVictory); merusak; kasus 13://H 13 Otto.playGesture(OttoFail); merusak; default:istirahat; } sendFinalAck();}//-- Berfungsi untuk menerima perintah singvoid acceptSing(){ //sendAck &stop jika perlu sendAck(); Otto.rumah(); //Definisi perintah Sing Bluetooth //K SingID int sing =0; karakter *arg; arg =SCmd.berikutnya(); if (arg !=NULL) {sing=atoi(arg);} else { Otto.putMouth(xMouth); penundaan(2000); Otto.clearMouth(); } switch (sing) { case 1://K 1 Otto.sing(S_connection); merusak; kasus 2://K 2 Otto.sing(S_disconnection); merusak; kasus 3://K 3 Otto.sing(S_surprise); merusak; kasus 4://K 4 Otto.sing(S_OhOoh); merusak; kasus 5://K 5 Otto.sing(S_OhOoh2); merusak; kasus 6://K 6 Otto.sing(S_cuddly); merusak; kasus 7://K 7 Otto.sing(S_sleeping); merusak; kasus 8://K 8 Otto.sing(S_happy); merusak; kasus 9://K 9 Otto.sing(S_superHappy); merusak; kasus 10://K 10 Otto.sing(S_happy_short); merusak; kasus 11://K 11 Otto.sing(S_sad); merusak; kasus 12://K 12 Otto.sing(S_confused); merusak; kasus 13://K 13 Otto.sing(S_fart1); merusak; kasus 14://K 14 Otto.sing(S_fart2); merusak; kasus 15://K 15 Otto.sing(S_fart3); merusak; kasus 16://K 16 Otto.sing(S_mode1); merusak; kasus 17://K 17 Otto.sing(S_mode2); merusak; kasus 18://K 18 Otto.sing(S_mode3); merusak; kasus 19://K 19 Otto.sing(S_buttonPushed); merusak; default:istirahat; } sendFinalAck();}//-- Berfungsi untuk mengirimkan ukuran sensor ultrasonik (jarak dalam "cm")void requestDistance(){ Otto.home(); //berhenti jika perlu int distance =Otto.getDistance(); Serial.print(F("&&")); Serial.print(F("D")); Serial.print(jarak); Serial.println(F("%%")); Serial.flush();}//-- Berfungsi untuk mengirim ukuran sensor noisevoid requestNoise(){ Otto.home(); //hentikan jika perlu int microphone=Otto.getNoise(); //analogRead(PIN_NoiseSensor); Serial.print(F("&&")); Serial.print(F("N")); Serial.print(mikrofon); Serial.println(F("%%")); Serial.flush();}//-- Berfungsi untuk mengirim persen voltase baterai, batalkan permintaanBattery(){ Otto.home(); //stop jika perlu //Baterai yang pertama kali dibaca seringkali salah, jadi kita akan membuang nilai ini. double batteryLevel =Otto.getBatteryLevel(); Serial.print(F("&&")); Serial.print(F("B")); Serial.print(Level baterai); Serial.println(F("%%")); Serial.flush();}//-- Berfungsi untuk mengirim ID program, batalkan requestProgramId(){ Otto.home(); //berhenti jika perlu Serial.print(F("&&")); Serial.print(F("Saya")); Serial.print(ID program); Serial.println(F("%%")); Serial.flush();}//-- Berfungsi untuk mengirim perintah Ack (A)void sendAck(){ delay(30); Serial.print(F("&&")); Serial.print(F("A")); Serial.println(F("%%")); Serial.flush();}//-- Berfungsi untuk mengirim perintah Ack terakhir (F)void sendFinalAck(){ delay(30); Serial.print(F("&&")); Serial.print(F("F")); Serial.println(F("%%")); Serial.flush();}//-- Fungsi dengan animatics//---------------------------------- ---------------------- void OttoLowBatteryAlarm(){ double batteryLevel =Otto.getBatteryLevel(); if(Level baterai<45){ while(!tombolDidorong){ Otto.putMouth(guntur); Otto.bendTones (880, 2000, 1.04, 8, 3); //A5 =880 penundaan(30); Otto.bendTones (2000, 880, 1.02, 8, 3); //A5 =880 Otto.clearMouth(); penundaan (500); } }}void OttoSleeping_withInterrupts(){ int bedPos_0[4]={100, 80, 60, 120}; if(!buttonDidorong){ Otto._moveServos(700, bedPos_0); } for(int i=0; i<4;i++){ if(buttonPushed){break;} Otto.putAnimationMouth(dreamMouth,0); Otto.bendTones (100, 200, 1.04, 10, 10); if(buttonDidorong){break;} Otto.putAnimationMouth(dreamMouth,1); Otto.bendTones (200, 300, 1.04, 10, 10); if(tombolDidorong){break;} Otto.putAnimationMouth(dreamMouth,2); Otto.bendTones (300, 500, 1.04, 10, 10); penundaan (500); if(buttonDidorong){break;} Otto.putAnimationMouth(dreamMouth,1); Otto.bendTones (400, 250, 1.04, 10, 1); if(tombolDidorong){break;} Otto.putAnimationMouth(dreamMouth,0); Otto.bendTones (250, 100, 1.04, 10, 1); penundaan (500); } if(!buttonDidorong){ Otto.putMouth(lineMouth); Otto.sing(S_cuddly); } Otto.rumah(); if(!buttonPushed){Otto.putMouth(happyOpen);} }
Sumber Arduino
Instal dulu Libraries inihttps://github.com/OttoDIY/DIY

Suku cadang dan penutup khusus

File cetak 3D Thingiverse .STL
Komponen cetak 3D untuk digunakan dalam proses pembuatan file Otto.CAD di thingiverse.com

Skema

Servo, sensor ultrasound, bel dan koneksi baterai, ikuti kabelnya. menggunakan kabel DuPont.

Proses manufaktur

  1. Membuat Termocam DIY
  2. Meretas Lego EV3:Bangun Sensor Objek Anda Sendiri "Mata"
  3. Buat Google Voice HAT Anda
  4. Buat Robot Streaming Video Terkendali Internet Anda dengan Arduino dan Raspberry Pi
  5. Bangun Sistem Pemulihan Parasut Balistik untuk Drone Anda
  6. Bagaimana Pembelajaran Penguatan Suatu Hari Dapat Mengubah Operasi Robot Industri Anda
  7. Cara Membangun Sauron Penguasa Robot
  8. Membangun Lengan Robot Anda Sendiri:Haruskah Anda Mengambil Risiko?
  9. Cara Terbaik untuk Membangun Prototipe IoT Anda
  10. Kompresor Udara Teratas:Alasan Memilikinya