Ultrasonic gesture based TV remote control

Alice Laiによって

           

Ultrasonic gesture based TV remote control

 

 

This is a fairly simple project that is designed to introduce key components to a new Arduino user. I created this in a few hours of tinkering using existing Arduino libraries and a SainSmart starter kit. Real world applications could include users who have difficulty using remote controls or are in food preparation areas etc.

The IR code is configured for use with a Sony TV, the library is courtesy of http://www.righto.com/2009/08/multi-protocol-infrared-remote-library.html
I also took some IR codes for the TV from here: http://www.openremote.org/pages/viewpage.action?pageId=15532260

Everything else uses the built in Arduino functions and libraries or my own work.

Step 1: Materials

You will need:
1. An Arduino UNO.
2. An HC-SR04 ultrasonic module
3. An Infra-red LED
4. An appropriate resistor for your Infra-red LED (I used 220R but the signal is quite weak!)
5. An RGB LED (and resistors if they aren't built in).
6. A breadboard and wires.

Step 2: The Electronics

The configuration is straight forward.

1. Connect the IR LED to pin 3 via an appropriate resistor, and then connect the cathode to GND.

2. Connect the ultrasonic sensor to 5v and GND where the pins specify. Connect the trigger pin to pin 8 and the echo pin to 7. You can configure these pins in the sketch.

3. Connect the RGB LED to GND and pins 11 (red), 10 (green), 9 (blue). These pins are also configurable.
NOTE: Make sure your LED module has built in resistors or you will damage the LED.

Step 3: The Sketch

The following code should be uploaded to the Arduino.

/* Swipe Remote Control

This sketch uses an ultrasonic rangefinder to determine the user's gesture and outputs an IR signal to a sony TV based on the command given.
- High swipe (> 10in) = Channel Up
- Low swipe = Channel Down
- High hold (> 10in) = Volume Up
- Low hold = Volume Down
- Cover sensor (< 3in) = Turn On / Off

Created by Dan Nicholson.

This example code is in the public domain.

This code uses the IRremote library (https://github.com/shirriff/Arduino-IRremote)

*/
#include <IRremote.h>

// Defines for control functions
#define CONTROL_CH 1 // Channel change
#define CONTROL_VOL 2 // Volume
#define CONTROL_POW 3 // Power

#define CONTROL_UP 1
#define CONTROL_DOWN -1

#define DIST_MAX 20 // Maximum distance in inches, anything above is ignored.
#define DIST_DOWN 10 // Threshold for up/down commands. If higher, command is "up". If lower, "down".
#define DIST_POW 3 // Threshold for power command, lower than = power on/off

// IR PIN
const int irPin = 3; // this is defined in the library, this var is just a reminder. CHANGING THIS WILL NOT CHANGE PIN IN LIBRARY
// 2 Pin Ping Sensor
const int pingPin = 8;
const int echoPin = 7;
// Confirmation LED Pins
const int led = 13; //internal LED for up/down debugging
const int ledR = 11;
const int ledG = 10;
const int ledB = 9;
// LED on timer
unsigned long timer;
// IR transmitter object
IRsend irsend;
// Power confirmation flag (needs two swipes to send signal)
boolean powerConfirmed = false;

void setup() {
  // initialize serial communication and set pins
  Serial.begin(9600);
  pinMode(led, OUTPUT);
  pinMode(ledR, OUTPUT);
  pinMode(ledG, OUTPUT);
  pinMode(ledB, OUTPUT); 
  pinMode(pingPin, OUTPUT);
  pinMode(echoPin, INPUT);
  timer = millis();
}

void loop()
{
 
//  Serial.println(millis());
  long duration, inches;
  int value;

  // Check for a reading
  duration = doPing();
 
  // Timer to confirm actions (currently only power)
  if (timer && timer < (millis() - 5000) && (millis() > 5000))
  {
    Serial.println("timer reset");
    timer = false;
  }

   digitalWrite(led, LOW);
   setColor(0, 0, 0); // off

 
  // convert the time into a distance 
  inches = microsecondsToInches(duration);

  // If less than max inches away, act
  if (inches < DIST_MAX)
  {
    // Debug output
    Serial.print(inches);
    Serial.println("in");
   
    // If very close, it is a "power" signal
    if (inches < DIST_POW)
    {
      Serial.println(timer);
      // on or off
      if (timer)
      {
        doIR(CONTROL_POW, 0);
        timer = false;
        delay(2000); // don't want to be sending this more than once. 2 second delay
      }
      else
      {
        Serial.println("power flag set");
        timer = millis();
        setColor(255,50,50);
        delay(500);
      }
    }
    else // is volume or channel
    {
      // Distance determines control direction
      value = handleDist(inches);
      // wait half a second
      delay(300);
      // check again, has hand disappeared?
      if (microsecondsToInches(doPing()) > DIST_MAX)
      {
        doIR(CONTROL_CH, value); // swipe
      }
      else
      {
        // volume
        int d = 500; // first delay is longer for single volume change
        // repeat until hand is removed
        while (inches < DIST_MAX)
        {
          value = handleDist(inches); // is up or down?
          doIR(CONTROL_VOL, value); // fire off IR signal
          delay(d); // wait
          inches = microsecondsToInches(doPing()); // check for hand again
          d = 100; // delays are shorter for quick multiple volume adjustment
        }
        delay(500); // this stops accidental channel change after volume adjustment
      }
    }
  }
  delay(50); // Short enough to detect all swipes.
}
/*
* If distance is within threshold, mark as 'up' and turn on corresponding LED.
*/
int handleDist(int inches)
{
  if (inches > DIST_DOWN)
  {
    digitalWrite(led, HIGH);
    return CONTROL_UP;
  }
  else
  {
    digitalWrite(led, LOW);
    return CONTROL_DOWN;
  }
}

/*
* Fire off correct IR code
*/
void doIR(int control, int val)
{
  switch(control)
  {
  case CONTROL_POW:
    // power
    Serial.println("power on / off 0xa90");
    for (int i = 0; i < 3; i++)
    {
      setColor(255, 0, 0);
      irsend.sendSony(0xa90, 12); // Sony TV power code
      delay(40);
    }
    break;
  case CONTROL_CH:
    setColor(0, 255, 0);
    // output 'channel up / down' depending on val
    if (val == CONTROL_UP)
    {
      digitalWrite(led, HIGH);
      for (int i = 0; i < 3; i++)
      {
        irsend.sendSony(0x90, 12);
        delay(40);
      }
      Serial.println("channel up 0xD00A");
    }
    else // down
    {
      for (int i = 0; i < 3; i++)
      {
        irsend.sendSony(0x890, 12);
        delay(40);
      }
      Serial.println("channel down 0x3002");
    }
    break;
  case CONTROL_VOL:
    setColor(0, 0, 255);
    // output 'volume up / down' depending on val
    if (val == CONTROL_UP)
    {
      digitalWrite(led, HIGH);
      for (int i = 0; i < 3; i++)
      {
        irsend.sendSony(0x490, 12);
        delay(40);
      }
      Serial.println("volume up 0x490");
    }
    else //down
    {
      for (int i = 0; i < 3; i++)
      {
        irsend.sendSony(0xC90, 12);
        delay(40);
      }
      Serial.println("volume down 0xC90");
    }
    break;
  }
}
void setColor(int red, int green, int blue)
{
  analogWrite(ledR, red);
  analogWrite(ledG, green);
  analogWrite(ledB, blue);
}

long doPing()
{
  digitalWrite(pingPin, LOW);
  delayMicroseconds(2);
  digitalWrite(pingPin, HIGH);
  delayMicroseconds(5);
  digitalWrite(pingPin, LOW);
  return pulseIn(echoPin, HIGH);
}

long microsecondsToInches(long microseconds)
{
  // According to Parallax's datasheet for the PING))), there are
  // 73.746 microseconds per inch (i.e. sound travels at 1130 feet per
  // second).  This gives the distance travelled by the ping, outbound
  // and return, so we divide by 2 to get the distance of the obstacle.
  // See: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
  return microseconds / 74 / 2;
}

long microsecondsToCentimeters(long microseconds)
{
  // The speed of sound is 340 m/s or 29 microseconds per centimeter.
  // The ping travels out and back, so to find the distance of the
  // object we take half of the distance travelled.
  return microseconds / 29 / 2;
}

Step 4: Let it run!


Controls
The controls are explained in the video, and are as follows:

Power
Swiping over the sensor within 3 inches will cause the LED to flash purple. This is the confirmation that a 'turn on / off' signal is ready to be sent. To prevent it accidentally turning the TV off I have made the sketch wait for a second swipe within 5 seconds of the first to confirm. At this point the signal is sent to the TV to turn on or off.

Channel
Swiping within 10 inches of the sensor (but not within 3)  will cause the channel to change down. Swiping between 10 and 20 inches will cause the channel to change up.

Volume
Holding your hand within 10 inches of the sensor (but not within 3)  will cause the volume to change down. Holding between 10 and 20 inches will cause the volume to change up. The volume will continue to change (up or down) until your hand is removed.

$1 日数
$2 時間
$3
$4
{"en":"New","fr":"Nouveau"} {"en":"Best Selling","fr":"Best Selling"} {"en":"Trending","fr":"Tendance"} {"en":"Deal","fr":"Traiter"}
{ "en":{ "general": { "field": { "required": "Required", "actions": "Actions", "top_btn": "Top" }, "accessibility": { "skip_to_content": "Skip to content", "close_modal": "Close (esc)" }, "meta": { "tags": "Tagged \"[[ tags ]]\"", "page": "Page [[ page ]]" }, "404": { "title": "404 Page Not Found", "subtext": "The page you requested does not exist.", "link": "Continue shopping" }, "pagination": { "previous": "Previous", "next": "Next", "current_page": "Page [[ current ]] of [[ total ]]" }, "password_page": { "opening_soon": "Opening Soon", "login_form_heading": "Enter store using password", "login_form_password_label": "Password", "login_form_password_placeholder": "Your password", "login_form_submit": "Enter", "signup_form_email_label": "Email", "signup_form_success": "We will send you an email right before we open!", "password_link": "Enter using password", "powered_by_shopify_html": "This shop will be powered by [[ shopify ]]" }, "social": { "share_on_facebook": "Share", "share_on_twitter": "Tweet", "share_on_pinterest": "Pin it", "alt_text": { "share_on_facebook": "Share on Facebook", "share_on_twitter": "Tweet on Twitter", "share_on_pinterest": "Pin on Pinterest" } }, "search": { "no_results_html": "Your search for \"[[ terms ]]\" did not yield any results.", "results_with_count": { "one": "[[ count ]] result for \"[[ terms ]]\"", "other": "[[ count ]] results for \"[[ terms ]]\"" }, "title": "Search our site", "placeholder": "Search", "submit": "Submit", "close": "Close search" }, "newsletter_form": { "newsletter_email": "Join our mailing list", "email_placeholder": "Email address", "confirmation": "Thanks for subscribing", "submit": "Subscribe", "show_me_text": "Do not show me again" }, "filters": { "show_more": "Show More", "show_less": "Show Less" }, "breadcrumbs": { "home": "Home", "create_account": "Create account", "account": "Account", "addresses": "Addresses" }, "item": { "remove": "Remove Item" } }, "sections": { "header": { "top_header_login": "Login", "top_header_register": "Register", "top_header_wishlist": "Wish list", "register_dropdown": "No account? Create one here", "forgot": "Forgot password", "all_collection": "All Collections", "world_wide_delivery": "Worldwide delivery", "shipping_text": "Free UK Delivery on orders over £ 100", "hot_line": "Hot line" }, "menu": { "mobile_menu_tab": "Menu", "mobile_account_tab": "Account", "mobile_settings_tab": "Settings" }, "slideshow": { "next_slide": "Next slide", "previous_slide": "Previous slide", "pause_slideshow": "Pause slideshow", "play_slideshow": "Play slideshow", "play_video": "Play video", "close_video": "Close video" }, "map": { "get_directions": "Get directions", "address_error": "Error looking up that address", "address_no_results": "No results for that address" } }, "blogs": { "article": { "view_all": "View all", "all_topics": "All topics", "by_author": "by [[ author ]]", "posted_in": "Posted in", "read_more": "Read more", "back_to_blog": "Back to [[ title ]]" }, "comments": { "title": "Leave a comment", "name": "Name", "email": "Email", "message": "Message", "post": "Post comment", "moderated": "Please note, comments must be approved before they are published", "success_moderated": "Your comment was posted successfully. We will publish it in a little while, as our blog is moderated.", "success": "Your comment was posted successfully! Thank you!", "comments_with_count": { "one": "[[ count ]] comment", "other": "[[ count ]] comments" } } }, "cart": { "general": { "title": "Your cart", "note": "Add a note to your order", "remove": "Remove", "subtotal": "Subtotal", "savings": "You're saving", "shipping_at_checkout": "Shipping & taxes calculated at checkout", "update": "Update", "checkout": "Process Check out", "empty": "Your cart is currently empty.", "cookies_required": "Enable cookies to use the shopping cart", "edit": "Edit", "cancel": "Cancel", "continue_shopping": "Continue shopping", "recently_added_item": "Recently added item(s)", "remove_item": "Remove This Item", "view_and_edit_cart": "View and edit cart", "clear": "Clear cart", "empty_page_title": "Shopping Cart is Empty", "here": "here", "empty_continue_html": "Click here to continue shopping.", "processing": "Processing...", "items_count_label" : "[[ count ]] item(s) in your cart", "ok" : "Ok" }, "label": { "product": "Product", "price": "Price", "quantity": "Quantity", "total": "Total", "total_item": "Total item", "sub_total_top": "Cart Subtotal" } }, "collections": { "general": { "view_all": "View all", "clear_all": "Clear All", "no_matches": "Sorry, there are no products in this collection", "items_with_count": { "one": "[[ count ]] product", "other": "[[ count ]] products" }, "load_more": "Load More", "sidebar_btn": "Filter by" }, "sorting": { "title": "Sort by", "manual": "Featured", "best_selling": "Best Selling", "title_ascending": "Alphabetically, A-Z", "title_descending": "Alphabetically, Z-A", "price_ascending": "Price, low to high", "price_descending": "Price, high to low", "created_descending": "Date, new to old", "created_ascending": "Date, old to new" }, "filters": { "title_tags": "Filter", "all_tags": "All products", "categories": "categories", "title": "Filter", "color": "Color", "size": "Size", "brand": "Brand", "price": "Price", "green": "Green", "blue": "Blue", "red": "Red", "pink": "Pink", "black": "Black", "purple": "Purple", "white": "White", "orange": "Orange" }, "product_item": { "quick_shop": "Quick View", "compare": "Compare", "wishlist": "Add to Wishlist" } }, "contact": { "form": { "name": "Name", "email": "Email", "phone": "Phone Number", "message": "Message", "submit": "Submit", "post_success": "Thanks for contacting us. We'll get back to you as soon as possible.", "address": "Address", "telephone": "Telephone", "title": "Write us", "required": "Required" } }, "customer": { "account": { "title": "My Account", "details": "Account Details", "view_addresses": "View Addresses", "return": "Return to Account Details" }, "activate_account": { "title": "Activate Account", "subtext": "Create your password to activate your account.", "password": "Password", "password_confirm": "Confirm Password", "submit": "Activate Account", "cancel": "Decline Invitation" }, "addresses": { "title": "Your Addresses", "default": "Default", "add_new": "Add a New Address", "edit_address": "Edit address", "first_name": "First Name", "last_name": "Last Name", "company": "Company", "address1": "Address1", "address2": "Address2", "city": "City", "country": "Country", "province": "Province", "zip": "Postal\/Zip Code", "phone": "Phone", "set_default": "Set as default address", "add": "Add Address", "update": "Update Address", "cancel": "Cancel", "edit": "Edit", "delete": "Delete", "delete_confirm": "Are you sure you wish to delete this address?" }, "login": { "title": "Login", "desc": "If you have an account, sign in with your email address.", "email": "Email", "password": "Password", "forgot_password": "Forgot your password?", "sign_in": "Sign In", "guest_title": "Continue as a guest", "guest_continue": "Continue" }, "orders": { "title": "Order History", "order_number": "Order", "date": "Date", "payment_status": "Payment Status", "fulfillment_status": "Fulfillment Status", "total": "Total", "none": "You haven't placed any orders yet." }, "order": { "title": "Order [[ name ]]", "date": "Placed on [[ date ]]", "cancelled": "Order Cancelled on [[ date ]]", "cancelled_reason": "Reason: [[ reason ]]", "billing_address": "Billing Address", "payment_status": "Payment Status", "shipping_address": "Shipping Address", "fulfillment_status": "Fulfillment Status", "discount": "Discount", "shipping": "Shipping", "tax": "Tax", "product": "Product", "sku": "SKU", "price": "Price", "quantity": "Quantity", "total": "Total", "fulfilled_at": "Fulfilled [[ date ]]", "subtotal": "Subtotal" }, "recover_password": { "title": "Reset your password", "email": "Email", "submit": "Submit", "cancel": "Cancel", "subtext": "We will send you an email to reset your password.", "success": "We've sent you an email with a link to update your password." }, "reset_password": { "title": "Reset account password", "subtext": "Enter a new password for [[ email ]]", "password": "Password", "password_confirm": "Confirm Password", "submit": "Reset Password" }, "register": { "title": "Create Account", "first_name": "First Name", "last_name": "Last Name", "email": "Email", "password": "Password", "submit": "Create", "desc": "Creating an account is easy. Just fill in the form below." } }, "homepage": { "onboarding": { "product_title": "Your product's name", "product_description": "This area is used to describe your product’s details. Tell customers about the look, feel, and style of your product. Add details on color, materials used, sizing, and where it was made.", "collection_title": "Your collection's name", "blog_title": "Your post's title", "blog_excerpt": "Your store hasn’t published any blog posts yet. A blog can be used to talk about new product launches, tips, or other news you want to share with your customers. You can check out Shopify’s ecommerce blog for inspiration and advice for your own store and blog.", "blog_author": "Author name", "no_content": "This section doesn’t currently include any content. Add content to this section using the sidebar." } }, "layout": { "navigation": { "search": "Search", "toggle": "expand\/collapse", "expand": "expand", "collapse": "collapse", "all_categories": "All Categories" }, "cart": { "title": "Cart", "items_count": { "one": "item", "other": "items" } }, "customer": { "account": "Account", "log_out": "Log out", "logout": "Log out", "log_in": "Log in", "create_account": "Create account", "sign_up": "Sign up", "wishlist": "Wishlist" }, "footer": { "social_platform": "[[ name ]] on [[ platform ]]" }, "list_page": { "grid": "Grid", "list": "List" } }, "products": { "product": { "regular_price": "Regular price", "sold_out": "Sold out", "unavailable": "Unavailable", "on_sale": "Sale", "quantity": "Quantity", "add_to_cart": "Add to cart", "back_to_collection": "Back to [[ title ]]", "related_title": "Related Products", "qty_increase": "Increase", "qty_decrease": "Decrease", "deal_days": "Days", "deal_hours": "Hours", "deal_minutes": "Minutes", "deal_second": "Seconds", "select_option": "Select Option", "add_to_wishlist": "Add to Wishlist", "add_to_review": "Add to review", "compare_success_msg": "[[ product_title ]] has been added to comparing box successful", "compare_exist_msg": "[[ product_title ]] is exist in comparing box", "compare_cart_msg": "[[ product_title ]] has been added to shopping cart", "compare_remove_msg": "[[ product_title ]] has been removed from comparing box", "comparing_box": "Comparing box", "compare_no_items": "There is no items in comparing box", "wishlist_success_msg": "[[ product_title ]] ウィッシュリストに成功しました", "wishlist_exist_msg": "[[ product_title ]] ウィッシュリストに存在する", "wishlist_cart_msg": "[[ product_title ]] has been added to shopping cart", "wishlist_box": "Wishlist", "wishlist_remove_msg": "[[ product_title ]] ウィッシュリストから削除されました", "wislist_no_items": "ウィッシュリストにはアイテムがない", "upsell_cart_msg": "\"[[ product_title ]]\" has been added to shopping cart", "upsell_block_title": "Frequently bought with \"[[ product_title ]]\"", "upsell_cart_qty": "[[ count ]] item(s)", "upsell_product_page_title": "You may also like these products", "upsell_checkout_btn": "Checkout", "share": "Share product", "share_on_facebook": "Share on Facebook", "share_on_twitter": "Share on Twitter", "share_on_pinterest": "Share on Pinterest", "share_on_google": "Share on Google+", "share_on_linkedin": "Share on LinkedIn", "availability": "Availability", "in_stock": "In Stock", "out_of_stock": "Out of stock", "quick_overview": "Quick Overview", "details": "Details", "reviews": "Reviews", "first_review": "Be the first review", "tags": "Product Tags", "size_chart": "Size Chart", "options": "Options", "vendor": "Vendor", "features": "Features", "sale_left_text": "[[ sales ]] SOLD. HURRY! ONLY A FEW LEFT!", "checkout_text": "Secured and trusted checkout with", "quick_view_details": "View details", "open_light_gallery": "Click here to open gallery images" }, "upsell": { "recommend_text": "Someone purchased a", "minute_ago": "minutes ago" } }, "gift_cards": { "issued": { "title_html": "Here's your [[ value ]] gift card for [[ shop ]]!", "subtext": "Your gift card", "disabled": "Disabled", "expired": "Expired on [[ expiry ]]", "active": "Expires on [[ expiry ]]", "redeem_html": "Use this code at checkout to redeem your [[ value ]] gift card", "shop_link": "Start shopping", "print": "Print this gift card", "remaining_html": "[[ balance ]] left", "add_to_apple_wallet": "Add to Apple Wallet" } }, "date_formats": { "month_day_year": "%B %d, %Y" } }, "fr":{ "general": { "field": { "required": "Requis", "actions": "Les actes", "top_btn": "Haut" }, "accessibility": { "skip_to_content": "Passer au contenu", "close_modal": "Fermer (Esc)" }, "meta": { "tags": "Mots clés \"[[ tags ]]\"", "page": "Page [[ page ]]" }, "404": { "title": "404 - Page non trouvée", "subtext": "Cette page n'est pas disponible.", "link": "Retourner au magasinage" }, "pagination": { "previous": "Précédent", "next": "Suivant", "current_page": "Page [[ current ]] sur [[ total ]]" }, "password_page": { "opening_soon": "Bientôt ouvert", "login_form_heading": "Accéder à la boutique à l'aide d'un mot de passe", "login_form_password_label": "Mot de passe", "login_form_password_placeholder": "Votre mot de passe", "login_form_submit": "Entrer", "signup_form_email_label": "Courriel", "signup_form_success": "Nous vous ferons parvenir un courriel juste avant l'ouverture!", "password_link": "Entrer avec un mot de passe", "powered_by_shopify_html": "Cette boutique sera propulsée par [[ shopify ]]" }, "social": { "share_on_facebook": "Partager", "share_on_twitter": "Tweeter", "share_on_pinterest": "Épingler", "alt_text": { "share_on_facebook": "Partager sur Facebook", "share_on_twitter": "Tweeter sur Twitter", "share_on_pinterest": "Épingler sur Pinterest" } }, "search": { "no_results_html": "Votre recherche pour \"[[ terms ]]\" n'a pas généré de résultats.", "results_with_count": { "one": "[[ count ]] résultat pour \"[[ terms ]]\"", "other": "[[ count ]] résultats pour \"[[ terms ]]\"" }, "title": "Effectuez une recherche", "placeholder": "Recherche", "submit": "Recherche", "close": "Fermer (esc)" }, "newsletter_form": { "newsletter_email": "Join our mailing list", "email_placeholder": "Adresse courriel", "confirmation": "Merci pour votre abonnement", "submit": "S'inscrire", "show_me_text": "Ne me montre plus" }, "filters": { "show_more": "Voir plus", "show_less": "Afficher moins" }, "breadcrumbs": { "home": "Accueil", "create_account": "Créer un compte", "account": "Compte", "addresses": "Adresses" }, "item": { "remove": "Retirer l'objet" } }, "sections": { "header": { "top_header_login": "S'identifier", "top_header_register": "Registre", "top_header_wishlist": "Liste de souhaits", "register_dropdown": "Pas de compte? Créer un ici", "forgot": "Mot de passe oublié", "all_collection": "Toutes les collections", "world_wide_delivery": "Livraison à l'échelle mondiale", "shipping_text": "Livraison gratuite au Royaume-Uni sur des commandes de plus de 100 £", "hot_line": "Hot line" }, "menu": { "mobile_menu_tab": "Menu", "mobile_account_tab": "Compte", "mobile_settings_tab": "Paramètres" }, "slideshow": { "next_slide": "Diapositive suivante", "previous_slide": "Diapositive précédente", "pause_slideshow": "Mettre en pause le diaporama", "play_slideshow": "Jouer le diaporama", "play_video": "Lire la vidéo", "close_video": "Fermer la vidéo" }, "map": { "get_directions": "Obtenir des directions", "address_error": "Vous ne trouvez pas cette adresse", "address_no_results": "Aucun résultat pour cette adresse" } }, "blogs": { "article": { "view_all": "Voir toutes", "all_topics": "Tous les sujets", "by_author": "par [[ author ]]", "posted_in": "Publié dans", "read_more": "Plus", "back_to_blog": "Retour à [[ title ]]" }, "comments": { "title": "Laissez un commentaire", "name": "Nom", "email": "Courriel", "message": "Message", "post": "Publier le commentaire", "moderated": "Veuillez noter que les commentaires doivent être approvés avant d'être affichés", "success_moderated": "Votre commentaire a été soumis avec succès. Nous le publierons sous peu, suite à notre processus de modération.", "success": "Votre commentaire a été publié avec succès!", "comments_with_count": { "one": "[[ count ]] commentaire", "other": "[[ count ]] commentaires" } } }, "cart": { "general": { "title": "Panier", "note": "Ajouter une note à votre commande", "remove": "Retirer", "subtotal": "Sous-total", "savings": "Vous économisez", "shipping_at_checkout": "Frais de port et remises calculés à la caisse", "update": "Mettre à jour", "checkout": "Procéder au paiement", "empty": "Votre panier est vide.", "cookies_required": "Activer les cookies pour utiliser le panier", "cancel": "Annuler", "edit": "Éditer", "continue_shopping": "Continuer vos achats", "view_and_edit_cart": "Afficher et modifier le panier", "processing": "En traitement...", "items_count_label" : "[[ count ]] article(s) dans votre panier", "ok" : "D'accord", "empty_page_title": "Le panier d'achat est vide", "empty_continue_html": "Cliquer ici pour poursuivre vos achats.", "clear": "Vider le panier", "recently_added_item": "Article (s) récemment ajouté (s)", "remove_item": "Enlever cet article", "here": "ici" }, "label": { "product": "Produit", "price": "Prix", "quantity": "Quantité", "total": "Total", "total_item": "Total de l'élément", "sub_total_top": "Sous-total du panier" } }, "collections": { "general": { "view_all": "Voir toutes", "clear_all": "Tout Supprimer", "no_matches": "Aucun produit ne correspond à votre recherche.", "items_with_count": { "one": "[[ count ]] item", "other": "[[ count ]] items" }, "load_more": "Charger plus", "sidebar_btn": "Filtrer par" }, "sorting": { "title": "Trier par", "manual": "En vedette", "best_selling": "Meilleurs vendeurs", "title_ascending": "A-Z", "title_descending": "Z-A", "price_ascending": "Prix: faible à élevé", "price_descending": "Prix: élevé à faible", "created_descending": "Date: récent à ancien", "created_ascending": "Date: ancien à récent" }, "filters": { "title_tags": "Filtrer", "all_tags": "Tous les produits", "categories": "Les catégories", "title": "Filtre", "color": "Couleur", "size": "Taille", "brand": "Marque", "price": "Prix", "green": "Vert", "blue": "Bleu", "red": "Rouge", "pink": "Rose", "black": "Noir", "purple": "Violet", "white": "Blanc", "orange": "Orange" }, "product_item": { "quick_shop": "Aperçu rapide", "compare": "Comparer", "wishlist": "Ajouter à la liste de souhaits" } }, "contact": { "form": { "name": "Nom", "email": "Courriel", "phone": "Téléphone", "message": "Message", "submit": "Envoyer", "post_success": "Merci de nous avoir avoir contacté. Nous vous reviendrons le plus rapidement possible.", "address": "Adresse", "telephone": "Téléphone", "title": "Écrivez-nous", "required": "Requis" } }, "customer": { "account": { "title": "Mon compte", "details": "Détails du compte", "view_addresses": "Voir les adresses", "return": "Retour aux détails du compte" }, "activate_account": { "title": "Activer le compte", "subtext": "Créez votre mot de passe pour activer le compte.", "submit": "Activer le compte", "cancel": "Refuser l'invitation", "password": "Mot de passe", "password_confirm": "Confirmer le mot de passe" }, "addresses": { "title": "Votre adresse", "default": "Par défaut", "add_new": "Ajouter une nouvelle adresse", "edit_address": "Éditer l'adresse", "first_name": "Prénom", "last_name": "Nom", "company": "Compagnie", "address1": "Adresse 1", "address2": "Adresse 2", "city": "Ville", "country": "Pays", "province": "Province", "zip": "Code postal", "phone": "Téléphone", "set_default": "Définir comme adresse par défaut", "add": "Ajouter l'adresse", "update": "Mettre à jour l'adresse", "cancel": "Annuler", "edit": "Éditer", "delete": "Supprimer", "delete_confirm": "Êtes-vous certain(e) de vouloir supprimer cette adresse?" }, "login": { "title": "Connexion", "desc": "Si vous avez un compte, connectez-vous avec votre adresse e-mail.", "email": "Courriel", "password": "Mot de passe", "forgot_password": "Mot de passe oublié?", "sign_in": "Se connecter", "guest_title": "Continuer en tant qu'invité", "guest_continue": "Continuer" }, "orders": { "title": "Historique des commandes", "order_number": "Commande", "date": "Date", "payment_status": "Statut du paiement", "fulfillment_status": "Statut du traitement de la commande", "total": "Total", "none": "Vous n'avez pas placé de commande à ce jour." }, "order": { "title": "Commande [[ name ]]", "date": "Placée le [[ date ]]", "cancelled": "Commande annulée le [[ date ]]", "cancelled_reason": "Motif: [[ reason ]]", "billing_address": "Adresse de facturation", "payment_status": "Statut du paiement", "shipping_address": "Adresse de livraison", "fulfillment_status": "Statut du traitement de la commande", "discount": "Rabais appliqué", "shipping": "Livraison", "tax": "Taxes", "product": "Produit", "sku": "SKU", "price": "Prix", "quantity": "Quantité", "total": "Total", "fulfilled_at": "Traitée le [[ date ]]", "subtotal": "Sous-total" }, "recover_password": { "title": "Réinitialiser votre mot de passe", "email": "Courriel", "submit": "Soumettre", "cancel": "Annuler", "subtext": "Nous vous ferons parvenir un courriel pour réinitialiser votre mot de passe.", "success": "Nous vous avons fait parvenir un courriel pour réinitialiser votre mot de passe." }, "reset_password": { "title": "Réinitialiser le mot de passe du compte", "subtext": "Entrez un nouveau mot de passe pour [[ email ]]", "submit": "Réinitialiser le mot de passe", "password": "Mot de passe", "password_confirm": "Confirmer le mot de passe" }, "register": { "title": "Créer un compte", "first_name": "Prénom", "last_name": "Nom", "email": "Courriel", "submit": "Créer", "password": "Mot de passe", "desc": "La création d'un compte est simple. Remplissez le formulaire ci-dessous." } }, "homepage": { "onboarding": { "product_title": "Le nom de votre produit", "product_description": "Cette partie est utilisée pour la fiche du produit. Parlez aux clients de l'allure, du ressenti et du style de votre produit. Ajoutez des détails sur la couleur, les matériaux utilisés, le dimensionnement, et où il a été fabriqué.", "collection_title": "Le nom de votre collection", "blog_title": "Le titre de votre publication", "blog_excerpt": "Votre magasin n'a encore rien bloggué. Un blog peut être utilisé pour parler des lancements de nouveaux produits, d'astuces, ou d'autres nouvelles que vous voulez partager avec vos clients. Vous pouvez regarder le blog d'e-commerce de Shopify pour trouver de l'inspiration et des conseils pour votre propre magasin et blog.", "blog_author": "Nom de l'auteur", "no_content": "Cette section ne contient actuellement aucun contenu. Ajoutez-en en utilisant la barre latérale." } }, "layout": { "navigation": { "search": "Recherche", "toggle": "développer\/réduire", "expand": "révéler", "collapse": "fermer", "all_categories": "toutes catégories" }, "cart": { "title": "Panier", "items_count": { "one": "item", "other": "items" } }, "customer": { "account": "Compte", "log_out": "Se déconnecter", "logout": "Se déconnecter", "log_in": "Se connecter", "create_account": "Créer un compte", "sign_up": "S'inscrire", "wishlist": "Liste de souhaits" }, "footer": { "social_platform": "[[ name ]] sur [[ platform ]]" }, "list_page": { "grid": "La grille", "list": "Liste" } }, "products": { "product": { "regular_price": "Prix régulier", "sold_out": "Épuisé", "unavailable": "Non disponible", "on_sale": "Solde", "quantity": "Quantité", "add_to_cart": "Ajouter au panier", "back_to_collection": "Retour à [[ title ]]", "related_title": "Produits connexes", "qty_increase": "Augmenter", "qty_decrease": "Diminution", "deal_days": "Journées", "deal_hours": "Heures", "deal_minutes": "Minutes", "deal_second": "Seconde", "select_option": "Sélectionner une option", "add_to_wishlist": "Ajouter à la liste de souhaits", "add_to_review": "Ajouter à la critique", "first_review": "Soyez le premier avis", "compare_success_msg": "[[ product_title ]] a ajouté à la boîte de comparaison réussie", "compare_exist_msg": "[[ product_title ]] existe dans la boîte de comparaison", "compare_cart_msg": "[[ product_title ]] a ajouté à la liste de souhaits réussie", "compare_remove_msg": "[[ product_title ]] a été supprimé de la boîte de comparaison", "comparing_box": "Boîte de comparaison", "compare_no_items": "Il n'y a aucun élément dans la boîte de comparaison", "wishlist_success_msg": "[[ product_title ]] a ajouté à la liste de souhaits réussie", "wishlist_exist_msg": "[[ product_title ]] existe dans la liste de souhaits", "wishlist_cart_msg": "[[ product_title ]] a ajouté au panier", "wishlist_box": "Liste de souhaits", "wishlist_remove_msg": "[[ product_title ]] a été retiré de la liste de souhaits", "wislist_no_items": "Il n'y a aucun élément dans la liste de souhaits", "upsell_cart_msg": "\"[[ product_title ]]\" a ajouté à la liste de souhaits réussie", "upsell_block_title": "Souvent acheté avec \"[[ product_title ]]\"", "upsell_cart_qty": "[[ count ]] article", "upsell_product_page_title": "Vous aimerez peut-être aussi ces produits", "upsell_checkout_btn": "Caisse", "share": "Partager le produit", "share_on_facebook": "Partager sur Facebook", "share_on_twitter": "Partager sur Twitter", "share_on_pinterest": "Partager sur Pinterest", "share_on_google": "Partager sur Google+", "share_on_linkedin": "Partager sur LinkedIn", "availability": "Disponibilité", "in_stock": "En stock", "out_of_stock": "En rupture de stock", "quick_overview": "Rapide vue d'ensemble", "details": "Détails", "reviews": "Avis", "tags": "Tags du produit", "options": "Les options", "vendor": "Vendeur", "features": "Les traits", "size_chart": "Tableau des tailles", "sale_left_text":"[[ sales ]] VENDU. SE DÉPÊCHER! SEULEMENT QUELQUES GAUCHE!", "checkout_text": "Paiement sécurisé et approuvé avec", "quick_view_details": "Voir les détails", "open_light_gallery": "Cliquez ici pour ouvrir les images de la galerie" }, "upsell": { "recommend_text": "Quelqu'un a acheté un", "minute_ago": "il y a quelques minutes" } }, "gift_cards": { "issued": { "title_html": "Votre carte-cadeau [[ shop ]] d'une valeur de [[ value ]]!", "subtext": "Voici votre carte-cadeau!", "disabled": "Désactivée", "expired": "Expirée le [[ expiry ]]", "active": "Expire le [[ expiry ]]", "redeem_html": "Entrez ce code lors du paiement pour utiliser votre [[ value ]] carte-cadeau", "shop_link": "Boutique", "print": "Imprimer ce bon d'achat", "remaining_html": "[[ balance ]] restant", "add_to_apple_wallet": "Ajouter à Apple Wallet" } }, "date_formats": { "month_day_year": "%d %B, %Y" } }, "jp":{} }