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 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.