1. 程式人生 > >【情人節選帽子】TCS34725顏色感測器和Python圖形介面程式設計(STM32 HAL庫)

【情人節選帽子】TCS34725顏色感測器和Python圖形介面程式設計(STM32 HAL庫)

截圖 

 

描述:

l  STM32 HAL庫程式設計

l  使用模擬IIC通訊,方便程式移植

l  Python介面編寫,蘑菇頭的帽子是什麼顏色

l  STM32 HAL庫串列埠通訊

l  Python介面使用Pygame

 

視訊演示地址:https://www.bilibili.com/video/BV1Sv411a7qq

 

一、 基礎認識

l  工作電壓:3.3~5V

l  檢測距離:3~10mm

l  通訊方式:IIC,可達400kbit/s

l  採集引數:紅色,綠色,藍色(RGB),光照強度

l  可遮蔽中斷,可遮蔽的上下限值中斷

l  低功耗,等待狀態65uA,休眠狀態25uA

l  可程式設計採集等待時間,2.4ms~614ms

l  TCS34725彩色感測器有著廣泛的應用,包括RGB LED背光控制、固態照明、 健康產品、工業過程控制和醫療診斷裝置等;

引腳定義

光譜分佈

 

二、 系統狀態

內部狀態機提供RGBC的系統控制和裝置的電源管理特性。通電時,內部開機復位會初始化裝置,使其處於低功耗睡眠狀態。當在IIC總線上檢測到一個開始訊號時,裝置轉換到空閒狀態,在那裡它檢查啟用暫存器(Ox00) PON位。禁用PON後,裝置會返回休眠狀態以節省電量。否則,裝置將一直處於空閒狀態,直到AEN使能RGBC功能。一旦啟用,裝置將依次執行等待和RGBC狀態,如圖16所示。在完成並返回空閒狀態時,只要PON和AEN保持啟用狀態,裝置將自動開始一個新的WaitRGBC週期。

 

l  Sleep -- 低功耗睡眠狀態

l  IdIe -- 空閒狀態

l  Wait and RGBC -- 工作狀態(等待和RGBC狀態)

 

RGBC操作

 

TCS3472光數字轉換器包含一個3×4光電二極體陣列,整合光電二極體電流、資料暫存器、狀態機和IIC介面的四個模數轉換器(ADC), 3 × 4光電二極體陣列由紅濾光、綠濾光、藍濾光和透明(未濾光)光電二極體組成。此外,光電二極體被塗上ir阻擋濾波器。四個積分adc同時將放大的光電二極體電流轉換為16位數字值。在完成一個轉換週期後,結果被轉移到資料暫存器,資料暫存器是雙緩衝的,以確保資料的完整性。所有的內部定時以及低功耗等待狀態都由狀態機控制。

TCS3472的資料通訊是通過一個快速,高達400khz,兩線PC序列匯流排完成的。工業標準1PC匯流排簡化了與微控制器和嵌入式處理器的直接連線。

除了IIC匯流排, TCS3472提供了一個單獨的中斷訊號輸出。當中斷被啟用,並且超過了使用者定義的閾值時, active-low中斷將被保持,直到控制器將其清除為止。這個中斷特性通過消除對TCS3472的輪詢,簡化並提高了系統軟體的效率。使用者可以定義上中斷閾值和下中斷閾值,並應用中斷持久過濾器。中斷持久過濾器允許使用者在生成中斷之前定義必要的連續超出閾值事件的數量。中斷輸出是開路漏極,因此可以與其他裝置連線。

l  模組包含RGBC增益控制器(AGAIN)和4個整合的RGBC光電二極體數模轉換器(ADC)

l  轉換時間(ATIME)影響RGBC讀取的解析度和靈敏度

l  4個通道整合同時發生,轉換週期完成後,結果將轉移到顏色資料暫存器

l  傳輸採用雙快取,以保證資料在傳輸期間不讀取無效資料,讀取完成資料後才會觸發下一次資料讀取和轉移

l  可遮蔽的高低閾值中斷引腳

三、程式設計準備

(一) 通訊時序

這是一個標準的IIC通訊時序

l  寫命令暫存器時序:開始訊號—寫7位IIC地址—寫1位讀寫標識—等待從機ACK—寫命令暫存器地址—等待從機ACK—寫資料—等待從機ACK--……--停止訊號

l  讀命令暫存器時序:開始訊號—寫7位IIC地址—寫1位讀寫標識—等待從機ACK—寫命令暫存器地址—等待從機ACK—開始訊號—寫7位IIC地址—寫1位讀寫標識—等待從機ACK—等待從機資料—寫應答ACK—等待從機資料—寫應答ACK--……--停止訊號

(二)  晶片的IIC地址

從時序可以看出,這是7位地址,所以有:

寫地址:0x29<<1

讀地址:(0x29<<1)|0x01

(三)   暫存器(命令)傳送

CMD

傳送命令最高位必須為1

TYPE:

傳送型別:

00,重複位元組協議,也就是讀取資料時將一直讀取當前暫存器的資料

01,自動遞增協議,讀取資料時會自動遞增暫存器

10,不使用,保留

11,與SF同時使用

ADDR:

暫存器(命令)地址

暫存器地址描述

 

通常命令暫存器的頭部為:0x80

所以暫存器地址應該是:0x80|Address

(四)暫存器資料分析

0x00啟動暫存器

 

 

東提示:我們不使用中斷,所以不用配置中斷相關暫存器,PON寫1後要等待至少2.4ms再開啟AEN。PON是振盪器開啟,AEN是RGBC轉換開啟

0x01 RGBC轉換時間

RGBC Count = (256 − ATIME) × 1024

0x0f 增益控制

控制暫存器為模擬塊提供8位雜項控制。這些位通常控制增益設定和/或二極體選擇等功能。

 

0x12 裝置ID

ID暫存器提供零件號的值。ID暫存器是隻讀暫存器。

東提示:通常讀取ID用來判斷與晶片是否通訊成功

0x13 狀態暫存器

狀態暫存器提供裝置的內部狀態。

這個暫存器是隻讀的。

東提示:通常讀取AVALID的值,如果是1的話表示RGBC轉換完成,就可以讀取RGBC的資料

0x14 - 0x1B RGBC通道資料暫存器

Clear、red、green、blue為16位資料。為了確保資料被正確讀取,一個兩位元組的read IIC事務應該在命令暫存器中設定一個讀字協議位。通過這個操作,當讀低位位元組暫存器時,高位8位被儲存到陰影暫存器中,然後再讀高位位元組。高位暫存器將讀取正確的值,即使是額外的值ADC集成周期結束於讀取低位暫存器和高位暫存器之間。

四、 程式實現

(一) 硬體介紹

模組原理圖

IIC的兩條通訊線一定要做上拉,所以初始化配置IO為:

SCL:上拉,推輓輸出

SDA:上拉輸入

接線:

(二)  CubeMX配置

IO配置

串列埠配置

(三)  Python介面程式設計

參考:

Python 遊戲之旅(Pygame)

https://www.cnblogs.com/dongxiaodong/p/10015451.html

 

程式設計思路:

  1. 介面初始化
  2. 串列埠收到資料
  3. RGB三色資料提取
  4. 顏色更改與顯示

 


 

 

演示視訊:https://www.bilibili.com/video/BV1Sv411a7qq

 

原文地址:https://www.cnblogs.com/dongxiaodong/p/14402521.html

 

 


 

五、 我的微信

相關推薦

情人節選帽子TCS34725顏色感測器Python圖形介面程式設計STM32 HAL

截圖    描述: l  STM32 HAL庫程式設計 l  使用模擬IIC通訊,方便程式移植 l  Python介面編寫,蘑菇頭的帽子是什麼顏色 l  STM32 HAL庫串列埠通訊 l  Python介面使用Pygame  

Katalon學習十三Katalon Studio 專案之 API/Web Service Project5.8以上

Katalon Studio 5.8引入了新的API/Web Service測試專案。這個顯著改進的特性允許您將API/Web Service測試過程從Web UI和移動測試中分離出來——減少專案的混亂。您還可以在Katalon Studio上執行更多的API/Web Service自動化任務,例如

springboot 入門篇第1篇 第一個spring-boot程式多種搭建方式

學習一個新技術,先別管他的原理啊,流程啊,怎麼組織程式碼啊什麼的。直接從官網或者部落格抄一個小demo,自己親自跑一遍,然後再去看那一堆讓人頭皮發麻的講解,就能相對容易的看懂了。 初學者的態度應該是:不要問我為什麼,反正我就是可以這樣執行! 1. 建立一個spring boot專案可以使用

矩陣快速冪HDU 4549 : M斐波那契數列矩陣巢狀

【題目大意】 M斐波那契數列F[n]是一種整數數列,它的定義如下: F[0] = a F[1] = b F[n] = F[n-1] * F[n-2] ( n > 1 ) 現在給出a,

ACM暑假培訓遞迴演算法3:跳棋的挑戰八皇后問題

3、Checker Challenge 跳棋的挑戰 譯 by Jeru 檢查一個如下的6 x 6的跳棋棋盤,有六個棋子被放置在棋盤上,使得每行,每列,每條對角線(包括兩條主對角線的所有對角線)上都至多有一個棋子。列號上面的佈局可以用序列2 4 6 1 3 5來描述,第i個數

資料結構05紅-黑樹基礎----二叉搜尋樹Binary Search Tree

目錄 1、二分法引言 2、二叉搜尋樹定義 3、二叉搜尋樹的CRUD 4、二叉搜尋樹的兩種極端情況 5、二叉搜尋樹總結 前言 在【演算法04】樹與二叉樹中,已經介紹

STM32F429 使用 TCS34725 顏色感測器的驅動程式

用到了 TCS34725 顏色感測器,網上百度一圈都沒有發現驅動程式,自己照著 Arduino 的程式和資料手冊寫了下,記錄一下 (~ ̄▽ ̄)~ 第一步,先來看看資料手冊,瞭解到 TCS34725 是 I²C 器件,那就好辦了,根據以前寫的 I²C 驅動改一改就好啦 b( ̄▽ ̄)d(具體程式碼貼

2018.12.30國家集訓隊洛谷P1903顏色 / 維護佇列帶修莫隊

傳送門 解析: 這道題好像以前在BZOJ上做過。 但是因為BZOJ資料較水,所以被我複雜度不對的程式碼搞過去了。。 真正的排序策略應該是這樣的: 塊大小設定成 n

LeetCode 中等題39-顏色分類

題目描述:給定一個包含紅色、白色和藍色,一共 n 個元素的陣列,原地對它們進行排序,使得相同顏色的元素相鄰,並按照紅色、白色、藍色順序排列。此題中,我們使用整數 0、 1 和 2 分別表示紅色、白色和藍色。 注意: 不能使用程式碼庫中的排序函式來解決這道題。

國家集訓隊2011顏色 莫隊

題面 Description 墨墨購買了一套N支彩色畫筆(其中有些顏色可能相同),擺成一排,你需要回答墨墨的提問。墨墨會像你釋出如下指令: 1、 Q L R代表詢問你從第L支畫筆到第R支畫筆中共有幾種不同顏色的畫筆。 2、 R P Col 把第P支畫

洛谷P1903顏色

lse 進行 push_back name sin 方式 int nod 執行 題目大意:給定一個長度為 N 的序列,每個點有一個顏色。現給出 M 個操作,支持單點修改顏色和詢問區間顏色數兩個操作。 題解:學會了序列帶修改的莫隊。 莫隊本身是不支持修改的。帶修該莫隊的本質也

省選水題集Day1一起來AK水題吧! 題目更新到A

不同的 運算 得到 只有一個 參加 .html color spa 大於 題解:http://www.cnblogs.com/ljc20020730/p/6937954.html 水題A: [AHOI2001]質數和分解 題目網址: https://www.luogu.o

省選水題集Day1一起來AK水題吧! 題解更新到A

簡單dp log write .cn var 滾動 最優 har 復雜度 題目:http://www.cnblogs.com/ljc20020730/p/6937936.html 水題A:[AHOI2001]質數和分解 安徽省選OI原題!簡單Dp。 一看就是完全背包求方案

51NOD-01089 最長回文子串 V2Manacher算法

lose 最長回文子串 gif () none print struct hide pac 【算法】回文樹 #include<cstdio> #include<algorithm> #include<cstring> using na

墻裂推薦讀入優化輸出優化

return getchar() ret style getchar 決定 推薦 int div 讀入優化: 1 inline int read() 2 { 3 int X=0,w=1; char ch=0; 4 while(ch<‘0‘ || ch

第三篇ASP.NET MVC快速入門之安全策略MVC5+EF6

對象 code word 單身 script ticket bsp 金額 class 【第一篇】ASP.NET MVC快速入門之數據庫操作(MVC5+EF6) 【第二篇】ASP.NET MVC快速入門之數據註解(MVC5+EF6) 【第三篇】ASP.NET MVC快速入門之

摘錄自MDN對事件冒泡捕捉的解釋

情況 dev 默認 https code demo pen click 情況下 當一個事件觸發了一個有父元素的元素(例如我們的<video>時),現代瀏覽器運行兩個不同的階段 - 捕獲階段和冒泡階段。 在捕獲階段: 瀏覽器檢查元素的最外層祖先(&

Java TCP/IP Socket基於線程池的TCP服務器含代碼

init 成對 之前 .get font ack 字符串 fonts exceptio 了解線程池 在http://blog.csdn.net/ns_code/article/details/14105457(讀書筆記一:TCP Socket)這篇博文中,服務器

騰訊雲CVM的功能優勢學習總結

騰訊雲 騰訊雲的功能 騰訊雲的特點 騰訊雲的功能與優勢具有以下幾個方面:提供全面的服務彈性的雲端CVM的管理平臺可靠CVM極速的CVM性能多種解決方案來保證CVM和數據的安全簡單易用多種計費模式,降低IT投入成本騰訊雲CVM提供了全方面的服務內容,具體為以下幾類:實現了多region多zone覆蓋

js 基礎 源碼學習 柯裏化箭頭函數

新的 執行 pos inner 自己的 文件中 柯裏化 clas 而已 最近在看 redux 的源碼,代碼結構很簡單,主要就是6個文件,其中 index.js 負責將剩余5個文件中定義的方法 export 出來,其他5個文件各自負責一個方法的實現。 大部分代碼比較簡單,很