Intel 3RM Edison/Seeed/Nexus OmniRover (17 / 18 étapes)

Étape 17 : Logiciel de Test de charge

Maintenant, il faut programmer l’Edison pour contrôler le robot. Je vais vous donner un code de test simple dans cette étape conçue pour vérifier que tout le matériel fonctionne et pour vous permettre de s’assurer que l’encodeur correcte est associé avec les bons canaux de moteurs, mais laissera plus complexe programmation à vous (et pour des missions plus tard...).

Je vais utiliser Node.js pour le rendre plus facile pour se connecter aux services web et d’autres plus tard, mais il est également possible d’utiliser le C/C++, Python, Arduino ou Java si vous voulez. Je vais également utiliser MRAA et UPM, certaines bibliothèques d’interface simple matériel fournis par Intel. Il y a d’autres options de l’interface HW Node.js il trop, comme cylon.js et JohnnyFive, que vous pourriez vouloir regarder plus tard.

Cependant, nous allons configurer choses pour utiliser MRAA et UPM. Tout d’abord, suivez les instructions pour mettre à jour MRAA et UPM pour les dernières versions. Vous pouvez trouver la documentation pour cela sur le site d’Intel mais si vous avez déjà mis à jour le firmware de Edison pour une version assez récente alors ce qui suit devrait saisir les dernières versions depuis le repos en ligne (note : Edison devront avoir accès à internet tout d’abord...). Après la notation dans l’Edison en tant que root, exécutez les commandes suivantes :

opkg mise à jour
opkg mise à niveau libmraa0
opkg mise à niveau upm

Alors, vous voulez mettre le script suivant quelque part sur l’Edison et puis exécutez-le à l’aide de « nœud omnitest.js » dit dans « omnitest.js » dans votre répertoire home. Alternativement, vous pouvez charger ce code à l’aide de la libre XDK Intel (IoT Edition), qui rend le cycle edit/upload/exécuter plus commode, prévoit un débogueur si vous le souhaitez et gère également la résolution NGP module dépendances (Cependant, ce script de test évite intentionnellement à l’aide de modules externes autres que l’UPM et MRAA pour rendre l’installation plus facile). Chargement de code par le XDK configure également il s’exécute automatiquement au démarrage. Je vais montrer comment utiliser qui plus en détail plus tard.

Ce script permet de s’assurer que les codeurs, capteurs, moteurs et les haut-parleurs sont tout le fonctionnement. Fondamentalement, le script tourne le robot en arrière au lieu de courir tous les moteurs en avant, puis vers l’arrière, puis il exécute chaque moteur à son tour. Assurez-vous que tous les trois encodeurs comptent vers le haut et puis vers le bas en avant et en arrière, le premier mouvement. Vérifiez ensuite que lorsque chaque moteur tourne à son tour que le canal de l’encodeur correct ne répond pas. Si non, d’échanger autour des câbles de codeur ou de modifier l’affectation des broches dans le script. Si un des moteurs ne tourne pas vous pouvez avoir inversé les ID pour les deux chauffeurs. Je recommande de changer l’affectation des broches du script, plutôt que de jouer avec le câblage. Vous pouvez également ajuster les constantes mise à l’échelle pour le diviseur de tension (si vous l’utilisez) pour obtenir une lecture plus précise. Regardez fondamentalement la lecture brute, Regardez le vérificateur de tension externe et puis entrez les constantes de droite dans le script pour calculer le rapport de mise à l’échelle.

Une fois ce script de test est en cours d’exécution et de ce qui précède est tout trié, le matériel devrait être prêt pour un codage plus sophistiqué !

------

/ * Omnirover démo.
* Exercices moteurs, lit les données provenant de capteurs et qu’elle déverse sur la console, essais sonores.
*/

/ === TEST SÉLECTION
var test_motors = true ;
var test_batt = true ;
var test_encoders = true ;
var test_sound = true ;

=== DÉPENDANCES
var Mraa = require('mraa') ; général I/O HW
var MD = require("jsupm_grovemd"). GroveMD ; Moteur de UPM Grove
var RE = require("jsupm_rotaryencoder"). RotaryEncoder ; Encodeur rotatif de l’UPM

=== CONFIGURATION
pins var = {}
Batterie connectée par le biais de diviseur de tension Grove, sur 3 réglage
Batt: 1, / / analogique d’entrée ; niveau de batterie totale, divisé par 3.

Module de « speaker » Grove (peut également utiliser le module vibreur)
haut-parleur: 6, / / peut être utilisé pour produire des tons différents à l’aide de modulation PWM

Encodeurs en quadrature pour chaque roue (swap autour au besoin pour obtenir des encodeurs corrects sur roues corrects)
encoder_A1: 2, / / 1, une entrée de roue
encoder_B1: 3, / / 1, B entrée de roue
encoder_A2: 8, / / 2, une entrée de roue
encoder_B2: 9, / / 2, B entrée de roue
encoder_A3: 4, / / 3, une entrée de roue
encoder_B3: 5, / / 3, B entrée de roue

Pilotes de moteurs
motor_driver_bus: 0, / / Bus (matériel I2C)
motor_driver_01_id : 15, / / I2C adresse pour moteurs de 0 et 1 (canal 0 n’est pas utilisé)
motor_driver_23_id : 10 / / I2C adresse pour moteurs 2 et 3
};
Console.log("pins:",pins) ;

=== MOTEUR TEST
var motor01 = new MD(pins.motor_driver_bus,pins.motor_driver_01_id) ;
var motor23 = new MD(pins.motor_driver_bus,pins.motor_driver_23_id) ;

Fonction d’assistance pour définir les orientations et les vitesses du moteur plus facilement
function set_speed(m0,m1,m2,m3) {}
var abs_m0 = Math.floor(255*Math.abs(m0)) ;
var abs_m1 = Math.floor(255*Math.abs(m1)) ;
var abs_m2 = Math.floor(255*Math.abs(m2)) ;
var abs_m3 = Math.floor(255*Math.abs(m3)) ;
var dir_m0 = (m0 > 0) ? MD. DIR_CW : MD. DIR_CCW ;
var dir_m1 = (m1 > 0) ? MD. DIR_CW : MD. DIR_CCW ;
var dir_m2 = (m2 > 0) ? MD. DIR_CW : MD. DIR_CCW ;
var dir_m3 = (m3 > 0) ? MD. DIR_CW : MD. DIR_CCW ;
motor01.setMotorSpeeds(0,0) ;
motor01.setMotorDirections(dir_m0,dir_m1) ;
motor01.setMotorSpeeds(abs_m0,abs_m1) ;
motor23.setMotorSpeeds(0,0) ;
motor23.setMotorDirections(dir_m2,dir_m3) ;
motor23.setMotorSpeeds(abs_m2,abs_m3) ;
}

Test moteur
Si {(test_motors)
periodicMotorForward() ;
} else {}
set_speed(0,0,0,0) ;
}

function periodicMotorForward() {}
Console.log ("moteurs : tous vers l’avant") ;
set_speed(0,1,1,1) ;
setTimeout(periodicMotorStop1,10000) ;
}

function periodicMotorStop1() {}
Console.log ("moteurs : arrêt") ;
set_speed(0,0,0,0) ;
setTimeout(periodicMotorBackward,3000) ;
}

function periodicMotorBackward() {}
Console.log ("MOTORS : vers l’arrière") ;
set_speed(0,-1,-1,-1) ;
setTimeout(periodicMotorStop2,10000) ;
}

function periodicMotorStop2() {}
Console.log ("moteurs : arrêt") ;
set_speed(0,0,0,0) ;
setTimeout(periodicMotorForward_1,3000) ;
}

Utiliser les trois fonctions suivantes, en conjonction avec le test de l’encodeur,
pour vous assurer que les encodeurs sont associés avec les moteurs corrects
function periodicMotorForward_1() {}
Console.log ("moteurs : moteur avant 1") ;
set_speed(0,1,0,0) ;
setTimeout(periodicMotorForward_2,10000) ;
}

function periodicMotorForward_2() {}
Console.log ("moteurs : moteur avant 2") ;
set_speed(0,0,1,0) ;
setTimeout(periodicMotorForward_3,10000) ;
}

function periodicMotorForward_3() {}
Console.log ("moteurs : moteur avant 3") ;
set_speed(0,0,0,1) ;
setTimeout(periodicMotorForward,10000) ;
}

=== TEST DE L’ENCODEUR

Lit tous les encodeurs périodiquement et les imprime sur leur compte courant
Si {(test_encoders)
var encoder1 = new RE(pins.encoder_A1,pins.encoder_B1) ;

var encoder2 = new RE(pins.encoder_A2,pins.encoder_B2) ;
var encoder3 = new RE(pins.encoder_A3,pins.encoder_B3) ;
{setInterval(function()}
Console.log ("encoder1:", encoder1.position()) ;
Console.log ("encoder2:", encoder2.position()) ;
Console.log ("encoder3:", encoder3.position()) ;
}, 1000) ;
}

=== TEST DE DÉTECTEUR DE BATTERIE
batt var = new Mraa.Aio(pins.batt) ;
var batt_scale = 11.93/0.8 ; Diviseur de tension, 3 réglage
function read_batt_sensor() {}
var br = batt.readFloat() ;
var bv = batt_scale * br ;
Console.log ("lecture brute batt: », br) ;
Console.log("BATT:",BV) ;
}

Si {(test_batt)
setInterval(read_batt_sensor,1000) ;
}

=== TEST SONORE
haut-parleur de var = new Mraa.Pwm(pins.speaker) ;

var speaker_duty = 0,5 ;
var speaker_freq = 600 ;
var speaker_on_interval = 1000 ;
var speaker_off_interval = 10000 ;

Si {(test_sound)
Speaker.period(1.0/speaker_freq) ;
Speaker.Write(0.0) ;
Speaker.Enable(true) ;
start_alarm() ;
} else {}
Speaker.Enable(false) ;
}

function start_alarm() {}
Console.log ("alarme sur") ;
Speaker.period(1.0/speaker_freq) ;
Speaker.Write(speaker_duty) ;
setTimeout(stop_alarm,speaker_on_interval) ;
}

function stop_alarm() {}
Console.log ("alarm off") ;
Speaker.Write(1.0) ;
setTimeout(start_alarm,speaker_off_interval) ;
}

Articles Liés

Rappel du calendrier de Google Intel IoT Edison

Rappel du calendrier de Google Intel IoT Edison

Vous n'a jamais manqué de remarquer cet événement tout à fait important de Google Agenda ? Pas plus avec le rappel de Intel IoT Edison Google Agenda !Dans ce instructable nous allons configurer étape par étape une carte Arduino Intel® Edison, afin qu
Intel IoT Edison Sonar Theremin

Intel IoT Edison Sonar Theremin

Intel® Edison est nouvelle merveille minuscule d'Intel, avec notamment un processeur d'Intel® Atom™ dual-core système sur une puce, 1Go de RAM, WiFi, LE Bluetooth qui vous permet d'exécuter un véritable système d'exploitation (linux!) sur elle et fai
Compteur de distance télémètre pour le sonar Intel IoT Edison

Compteur de distance télémètre pour le sonar Intel IoT Edison

J'ai été sur le chat dernièrement avec un ami ingénieur civil des mines, et je lui parlais de mon nouveau télémètre laser, quand il a laissé entendre qu'un télémètre avec fonctionnalités de journalisation serait beaucoup plus intéressant pour lui. Ét
Web Intel IoT Edison contrôlé LED

Web Intel IoT Edison contrôlé LED

Cette instructable montre comment combiner l'IDE Arduino avec node.js, disponible par défaut sous linux de Yocto Edison, afin de contrôler les éléments de l'Arduino à distance, via une interface web. Pour faire simple, vous pouvez appuyer sur un bout
Intel® planche à Edison : Clap activé horloge

Intel® planche à Edison : Clap activé horloge

Ce tutoriel va sur comment créer une horloge clap-on avec en prime d'indiquant la température et en ajustant la luminosité de l'affichage basée sur les niveaux de lumière ambiantes.Nous avons utilisé une carte Intel® Edison avec un capteur de luminos
YOCTO LINUX sur INTEL GALILEO / EDISON

YOCTO LINUX sur INTEL GALILEO / EDISON

Yocto est système d'exploitation que vous pourrez utiliser ini galileon d'intel ou intel edison. dans linux yocto, vous pouvez écrire votre code par utilisation nœud js, python, etc. il y a une raison pour utiliser linux yocto sur votre galileo intel
Alarme de bruit Edison Intel (Intel IoT)

Alarme de bruit Edison Intel (Intel IoT)

IntroductionJ'ai un système d'alarme et d'alarme incendie, mais aucun moyen de savoir si soit retentissent à moins que je suis dans la maison. Plutôt que de les remplacer par des solutions de rechange « intelligentes », j'ai l'intention de construire
Sucette de bébé portable intelligent Intel Edison - partie 2

Sucette de bébé portable intelligent Intel Edison - partie 2

Ce tutoriel est la partie 2 de la soumission de groupe 4BaBi à l'Intel IoT Londres Roadshow 2015. Ici nous vous montrons comment construire une sucette de bébé Smart à l'aide de la Commission Intel Edison, Seeed Grove IoT Starter Kit.Pour les détails
Caméra piège Télécharger Twitter avec Intel Edison

Caméra piège Télécharger Twitter avec Intel Edison

Pièges de caméra sont des caméras spécialement conçus pour capturer des images d'animaux de la faune. Il est destiné à étudier l'écosystème de ces animaux dans la forêt. Cette caméra est armée par le mouvement cencors qui utilisent le censeur pir. S'
Intel IoT EDI - surveillance un environnement confortable et sécuritaire (avec Intel Edison)

Intel IoT EDI - surveillance un environnement confortable et sécuritaire (avec Intel Edison)

Avant pour commencer, je tiens à remercier Intel et Instructables pour cette occasion : J'ai été sélectionné entre autres vainqueur d'un merveilleux Intel IoT Edison & Grove Kit... C'était très surprenant pour moi, et je suis très reconnaissant pour
Intel Edison, proximité activé, en parlant de calendrier

Intel Edison, proximité activé, en parlant de calendrier

(Ci-dessus est une vidéo - mais ne peut pas montrer sur un téléphone mobile. Cliquez ici pour visionner sur youtube. )Ce projet a été préparé comme un Dispositif de technologie d'assistance pour les aidants des personnes atteintes de troubles de la m
Résoudre Sudoku en utilisant Intel Edison

Résoudre Sudoku en utilisant Intel Edison

Objectif• Partir d'une image d'un puzzle de Sudoku, extraire et (facultatif) résoudre l'énigme.Éléments de l'objectif• Extraire le puzzle de l'image (image de remodeler).• Identifier les nombres dans chaque cellule. – Mettre en corrélation les nombre
Moniteur de paramètres environnementaux distance Intel Edison IoT

Moniteur de paramètres environnementaux distance Intel Edison IoT

Il s'agit d'un projet très basique entièrement réalisé en javascript par le biais de l'IDE « Intel XDK IoT edition ». Lorsque vous avez terminé, vous aurez un système de surveillance des paramètres environnementaux (température, lumière et l'air de q
Dispositif d’interruption de Edison IOT d’allumage

Dispositif d’interruption de Edison IOT d’allumage

récemment, j'ai eu la chance de recevoir un de ces kits de développeur Intel IOT Edison génial de la tenue du concours parrainé par Instructables et Intel. Je suis nouveau sur microcontrôleurs. Bien que je suis un technicien automobile avec A.S.E.s e